Pregunta

Estoy usando Magento CE 1.7.0.2 con SOAPv2 y WS-I. Estoy tratando de actualizar los productos con el catalogProductUpdate-Método.

La descripción en el ejemplo de código siguiente se actualiza, pero el fabricante de atributos (= seleccionar) no lo hace. El resultado de catalogProductUpdate es bool(true).

He intentado algunas (no demasiado bueno, pero estoy desesperada ;-)) variaciones tales como:

  1. asignar el valor entero 777 a $manufacturer->value establecer el valor
  2. dentro / fuera del campo de la additional_attributes configurar el identificador del producto (pero estoy seguro de que la necesidad de que se creará dentro de additional_attributes)
  3. establece el fabricante y nombre que $manufacturer->value en lugar del valor 777

Código:

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

Editar:

  • Lo he comprobado con SOAPv2 sin WS-I -. Bien funciona
  • también creé otro atributo para el ensayo con la misma configuración (desplegable, Alcance, ...) que también no se actualizan con SOAPv2 WS-I, pero lo hace con SOAPv2. Por lo que estos atributos recién creados comportarse como el fabricante-atributo.
  • Tratar de establecer el valor de un campo de texto dentro de los additional_attributes no funciona bien.

Todas las ideas, enlaces, sugerencias sobre esto?

Enlace: http://www.magentocommerce.com/api/soap/ catálogo / catalogProduct / catalog_product.update.html

¿Fue útil?

Solución

Finalmente encontré la razón del problema y la solución:

El problema: SOAPv2 con WS-I no utiliza los atributos single_data y multi_data. Por lo tanto el proceso de registro en /app/code/core/Mage/Catalog/Model/Product/Api/V2.php _prepareDataForSave falla. Los controles método _prepareDataForSave para single_data y multi_data que son tanto no forma parte de la de SOAP-Call, de acuerdo con el WSDL para 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>

vector asociativo es de associativeEntity tipo que incluye pares de valores clave /. En SOAPv2 withous WS-I, se utiliza el catalogProductAdditionalAttributesEntity (que consiste en single_data y / o valores multi_data que a su vez incluyen pares de valores clave /).

Esta es la parte SOAPv2 WS-I del WSDL que describe el formato 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>

El cheque por additional_attributes /app/code/core/Mage/Catalog/Model/Product/Api/V2.php redactado bien, pero el cheque por falsa single_data o multi_data siempre regresaba.

La solución:

he encontrado otra de SOAP Problema aquí donde la última respuesta era la solución a mi problema: https://stackoverflow.com/a/ 9502311/865443 ). Así que puse este bloque en mi código en _prepareDataForSave que resolvió el problema de la fijación de los valores additional_attributes:

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

espero que esto ayude a alguien más encontrarse con el mismo problema. También apreciaría una explicación para este differencde entre SOAPv2 y SOAPv2 WS-I y / o de otras maneras que resuelven este problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top