Domanda

sto usando Magento CE 1.7.0.2 con SOAPv2 e WS-I. Sto cercando di aggiornare i prodotti con il catalogProductUpdate-Metodo.

La descrizione nell'esempio di codice riportato di seguito viene aggiornato, ma il produttore-attributo (= Seleziona) non lo fa. Il risultato di catalogProductUpdate è bool(true).

ho provato un po '(non troppo bene, ma sono disperato ;-)) varianti come:

  1. assegnare il valore intero 777 $manufacturer->value impostare il valore
  2. all'interno di / senza il campo additional_attributes impostare l'ID prodotto (ma sono sicuro che il bisogno di di essere impostato entro additional_attributes)
  3. impostare il produttore-nome come $manufacturer->value invece del valore di 777

Codice:

$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'
    ));

Modifica:

  • L'ho provato con SOAPv2 senza WS-I -. Funziona bene
  • Ho anche creato un altro attributo per il test con le stesse impostazioni (discesa, Scope, ...), che, inoltre, non si aggiorna con SOAPv2 WS-I, ma fa con SOAPv2. Quindi, questi attributi appena creati comportarsi come il produttore-attributo.
  • Il tentativo di impostare il valore di un campo di testo all'interno delle additional_attributes non funziona neanche.

Tutte le idee, i collegamenti, suggerimenti su questo?

Link: http://www.magentocommerce.com/api/soap/ catalogare / catalogProduct / catalog_product.update.html

È stato utile?

Soluzione

Ho finalmente trovato il motivo per il problema e la soluzione:

Il problema: SOAPv2 con WS-I non usa gli attributi single_data e multi_data. Pertanto, il check-in in /app/code/core/Mage/Catalog/Model/Product/Api/V2.php _prepareDataForSave fallisce. I controlli metodo _prepareDataForSave per single_data e multi_data che sono entrambi non fa parte del SOAP-Call, secondo il WSDL per SOAPv2 con WS-I.

SOAPv2 (WSDL) - catalogProductCreateEntity:

<element name="additional_attributes" type="typens:catalogProductAdditionalAttributesEntity" minOccurs="0"/>

SOAPv2 con WS-I (WSDL) - catalogProductCreateEntity:

<xsd:element name="additional_attributes" type="typens:associativeArray" minOccurs="0">
</xsd:element>

array associativo è di tipo associativeEntity comprendente coppie di valori / chiavi. In SOAPv2 withous WS-I, il catalogProductAdditionalAttributesEntity viene utilizzato (che consiste di single_data e / o valori multi_data che include nuovamente coppie di valori / chiavi).

Questa è la parte SOAPv2 WS-I del WSDL che descrive il formato di 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>

Il controllo per additional_attributes /app/code/core/Mage/Catalog/Model/Product/Api/V2.php formulata bene, ma il controllo per falso single_data o multi_data sempre restituito.

La soluzione:

Ho trovato un altro SOAP Problema qui dove l'ultima risposta è stata la soluzione al mio problema: https://stackoverflow.com/a/ 9502311/865443 ). Così ho messo questo blocco nel mio codice in _prepareDataForSave che ha risolto il problema di impostare i valori additional_attributes:

if (gettype($productData->additional_attributes) == 'array') {
            foreach ($productData->additional_attributes as $k => $v) {
                    $_attrCode = $k;
                    $productData->$_attrCode = $v;
            }
  }

Spero che questo aiuti qualcun altro incontrando lo stesso problema. Vorrei anche apprezzare una spiegazione per questo differencde tra SOAPv2 e SOAPv2 WS-I e / o di altri modi che ha risolto questo problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top