Pourquoi l'un des nombreux attributs ne sont pas mis à jour avec SOAPv2 WS-I?
-
16-10-2019 - |
Question
J'utilise Magento CE 1.7.0.2 avec SOAPv2 et WS-I.
Je suis en train de mettre à jour les produits avec la catalogProductUpdate
-Méthode.
La description dans l'exemple de code ci-dessous est mis à jour, mais le fabricant attribut (= select) ne fonctionne pas.
Le résultat de catalogProductUpdate
est bool(true)
.
J'ai essayé un peu (pas trop bon, mais je suis désespérée ;-)) des variantes telles que:
- affecter la valeur entière 777 à
$manufacturer->value
définir la valeur - dedans / dehors le champ additional_attributes définir l'ID de produit (mais je suis sûr qu'il besoin de être envisagés dans additional_attributes)
- définir le fabricant nom
$manufacturer->value
au lieu de la valeur 777
Code:
$newProductData = new stdClass();
$additionalAttrs = array();
$manufacturer = new stdClass();
$manufacturer->key = "manufacturer";
$manufacturer->value = "777";
$additionalAttrs['single_data'][] = $manufacturer;
$newProductData->description = "Description Test1";
$newProductData->additional_attributes = $additionalAttrs;
$result = $client->catalogProductUpdate((object)array('sessionId' => $sessionId,
'productId' => "2110000010058 ",
'productData' => (object)$newProductData,
NULL,
'sku'
));
Edit:
- Je l'ai testé avec SOAPv2 sans WS-I -. Fonctionne très bien
- J'ai aussi créé un autre attribut pour tester avec les mêmes paramètres (Dropdown, Champ d'application, ...) qui se ne pas non plus mis à jour avec SOAPv2 WS-I, mais le fait avec SOAPv2. Ainsi, ces attributs nouvellement créés se comportent comme le fabricant attribut.
- Essayer de définir la valeur d'un champ de texte dans les additional_attributes ne fonctionne pas non plus.
Des idées, des liens, des suggestions à ce sujet?
Lien: http://www.magentocommerce.com/api/soap/ catalogue / catalogProduct / catalog_product.update.html
La solution
J'ai finalement trouvé la raison du problème et la solution:
Le problème: SOAPv2 avec WS-I ne pas utiliser les attributs de single_data
et multi_data
. Par conséquent, le contrôle de /app/code/core/Mage/Catalog/Model/Product/Api/V2.php
dans _prepareDataForSave
échoue.
Les contrôles de _prepareDataForSave
méthode pour single_data
et multi_data
qui sont tous les deux pas partie de l'SOAP-Call, selon le WSDL pour SOAPv2 avec WS-I.
SOAPv2 (WSDL) - catalogProductCreateEntity:
<element name="additional_attributes" type="typens:catalogProductAdditionalAttributesEntity" minOccurs="0"/>
SOAPv2 avec WS-I (WSDL) - catalogProductCreateEntity:
<xsd:element name="additional_attributes" type="typens:associativeArray" minOccurs="0">
</xsd:element>
est de type tableau associatif associativeEntity qui comprend des paires de clés de la valeur de /. Dans SOAPv2 withous WS-I, la catalogProductAdditionalAttributesEntity
est utilisée (qui se compose de single_data et / ou des valeurs multi_data qui comprennent à nouveau des paires de clés de valeur /).
Ceci est la partie SOAPv2 WS-I du WSDL qui décrit le format de additional_attributes:
<xsd:complexType name="associativeEntity">
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="value" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="associativeArray">
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:associativeEntity"/>
</xsd:sequence>
</xsd:complexType>
Le chèque additional_attributes /app/code/core/Mage/Catalog/Model/Product/Api/V2.php
rédigé bien, mais le chèque de single_data ou multi_data toujours retourné faux.
La solution:
J'ai trouvé un autre problème SOAP ici où la dernière réponse est la solution à mon problème: https://stackoverflow.com/a/ 9502311/865443 ).
Donc, je mets ce bloc dans mon code _prepareDataForSave
qui a résolu le problème de la définition des valeurs additional_attributes:
if (gettype($productData->additional_attributes) == 'array') {
foreach ($productData->additional_attributes as $k => $v) {
$_attrCode = $k;
$productData->$_attrCode = $v;
}
}
J'espère que cela aide quelqu'un d'autre rencontre le même problème. Je voudrais également apprécier une explication pour cette differencde entre SOAPv2 et SOAPv2 WS-I et / ou d'autres moyens qui a résolu ce problème.