Почему один из многих атрибутов не обновляется с помощью SOAPV2 WS-I?

magento.stackexchange https://magento.stackexchange.com/questions/1308

Вопрос

Я использую Magento CE 1.7.0.2 с SOAPV2 и WS-I. Я пытаюсь обновить продукты с catalogProductUpdate-Метод.

Описание в примере кода ниже обновляется, но производитель-атрибут (= SELECT) не. Результат catalogProductUpdate является bool(true).

Я попробовал некоторые (не слишком хороши, но я отчаянно нуждаюсь ;-)), такие как:

  1. назначить целочисленное значение 777 $manufacturer->value Установите значение
  2. Внутри/без поля дополнительной_аттрибуты установите идентификатор продукта (но я уверен, что ему нужно быть установлено в дополнительной_аттрибутах)
  3. установить имени производителя как $manufacturer->value вместо значения 777

Код:

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

Редактировать:

  • Я проверил его с SOAPV2 без WS -I - отлично работает.
  • Я также создал еще один атрибут для тестирования с теми же настройками (раскрывающийся список, сфера действия, ...), который также не обновляется с помощью SOAPV2 WS-I, но с SOAPV2. Таким образом, эти недавно созданные атрибуты ведут себя как производитель атрибут.
  • Попытка установить значение текстового поля в дополнительной_аттрибутах также не работает.

Есть идеи, ссылки, предложения по этому поводу?

Ссылка на сайт:http://www.magentocommerce.com/api/soap/catalog/catalogproduct/catalog_product.update.html

Это было полезно?

Решение

Я наконец нашел причину проблемы и решения:

Проблема: SOAPV2 с WS-I не использует single_data а также multi_data атрибуты. Поэтому регистрация /app/code/core/Mage/Catalog/Model/Product/Api/V2.php в _prepareDataForSave терпит неудачу. Метод _prepareDataForSave проверяет на single_data а также multi_data которые оба не являются частью мыла, согласно WSDL для SOAPV2 с WS-I.

SOAPV2 (WSDL) - CatalogProductCreateEentity:

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

SOAPV2 с WS -I (WSDL) - CatalogProductCreateEntity:

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

AssociativeArray имеет тип Associativeentity, которая включает в себя пары ключей/значения. В SOAPV2 утолкну catalogProductAdditionalAttributesEntity используется (который состоит из значений single_data и/или multi_data, которые снова включают пары ключей/значения).

Это часть WS-I SOAPV2, которая описывает формат дополнительной_аттрибуты:

<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>

Проверка на дополнительную_аттрибуты /app/code/core/Mage/Catalog/Model/Product/Api/V2.php Сформулировано штраф, но проверка на single_data или multi_data всегда возвращалась false.

Решение:

Я нашел еще одну проблему с мылом здесь Где последний ответ был решением моей проблемы: https://stackoverflow.com/a/9502311/865443) Итак, я поместил этот блок в свой код в _prepareDataForSave которая решила проблему установления значений дополнительной_аттрибуты:

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

Я надеюсь, что это поможет кому -то еще столкнуться с той же проблемой. Я также был бы признателен объяснение этого различия между SOAPV2 и SOAPV2 WS-I и/или другими способами, которые решили эту проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top