Warum wird eines von vielen Attributen nicht mit SOAPV2 WS-I aktualisiert?
-
16-10-2019 - |
Frage
Ich verwende Magento CE 1.7.0.2 mit SOAPV2 und WS-I. Ich versuche Produkte mit dem zu aktualisieren catalogProductUpdate
-Methode.
Die Beschreibung im folgenden Codebeispiel wird aktualisiert, der Hersteller-Attribute (= Select) nicht. Das Ergebnis von catalogProductUpdate
ist bool(true)
.
Ich habe einige (nicht zu gut, aber ich bin verzweifelt ;-)) Variationen wie:
- Weisen Sie den Ganzzahlwert 777 zu
$manufacturer->value
Setzen Sie den Wert - In/Ohne das Feld CULTUR_ATTRIBUTES Setzen Sie die Produkt -ID (aber ich bin sicher, dass es in zusätzlichen_attributes festgelegt werden muss)
- Setzen Sie den Herstellernamen als
$manufacturer->value
anstelle des Wertes 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'
));
Bearbeiten:
- Ich habe es mit SOAPV2 ohne WS -I getestet - funktioniert gut.
- Ich habe auch ein weiteres Attribut zum Testen mit denselben Einstellungen (Dropdown, Scope, ...) erstellt, das auch nicht mit SOAPV2 WS-I aktualisiert wird, sondern mit SOAPV2. Diese neu erstellten Attribute verhalten sich also als Hersteller-Attribute.
- Der Versuch, den Wert eines Textfeldes in den zusätzlichen_Ttributes festzulegen, funktioniert auch nicht.
Irgendwelche Ideen, Links, Vorschläge dazu?
Verknüpfung:http://www.magentocommerce.com/api/soap/catalog/catalogproduct/catalog_product.update.html
Lösung
Ich fand schließlich den Grund für das Problem und die Lösung:
Das Problem: SOAPV2 mit WS-I verwendet das nicht single_data
und multi_data
Attribute. Daher der Check -ins /app/code/core/Mage/Catalog/Model/Product/Api/V2.php
in _prepareDataForSave
scheitert. Die Methode _prepareDataForSave
Überprüfungen für single_data
und multi_data
die beide nicht Teil des Soap-Anlaufs sind, laut der WSDL für SOAPV2 mit WS-I.
SOAPV2 (WSDL) - CATALOGPRODUCTCREATEETITY:
<element name="additional_attributes" type="typens:catalogProductAdditionalAttributesEntity" minOccurs="0"/>
SOAPV2 mit WS -I (WSDL) - KatalogproduktcreateEntity:
<xsd:element name="additional_attributes" type="typens:associativeArray" minOccurs="0">
</xsd:element>
AssociativeArray ist vom Typ Assoziativität, der Schlüssel-/Wertpaare enthält. In Soapv2 withous ws-i, die catalogProductAdditionalAttributesEntity
wird verwendet (die aus Single_data- und/oder multi_data -Werten besteht, die erneut Schlüssel-/Wertpaare enthalten).
Dies ist der SOAPV2 WS-I-Teil des WSDL, der das Format von zusätzlichem_Tributes beschreibt:
<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>
Die Prüfung für zusätzliche_attributes /app/code/core/Mage/Catalog/Model/Product/Api/V2.php
Gut formuliert, aber die Prüfung für Single_Data oder Multi_Data hat immer falsch zurückgegeben.
Die Lösung:
Ich fand ein weiteres Seifenproblem hier Wo die letzte Antwort die Lösung für mein Problem war: https://stackoverflow.com/a/9502311/865443). Also stecke ich diesen Block in meinen Code ein _prepareDataForSave
Dies löste das Problem der Einstellung der zusätzlichen Werte für die Einstellung:
if (gettype($productData->additional_attributes) == 'array') {
foreach ($productData->additional_attributes as $k => $v) {
$_attrCode = $k;
$productData->$_attrCode = $v;
}
}
Ich hoffe, dass dies jemand anderem hilft, auf dasselbe Problem zu stoßen. Ich würde mich auch über eine Erklärung für diesen Unterschied zwischen SOAPV2 und SOAPV2 WS-I und/oder anderen Möglichkeiten freuen, die dieses Problem lösten.