Neden birçok özellikten biri SOAPv2 WS-I ile güncellenmiyor?


18

SOAPv2 ve WS-I ile Magento CE 1.7.0.2 kullanıyorum. catalogProductUpdate-Method ile ürünleri güncellemeye çalışıyorum .

Aşağıdaki kod örneğindeki açıklama güncellenir, ancak üretici özelliği (= select) değişmez. Sonucu catalogProductUpdateDİR bool(true).

Gibi bazı (çok iyi değil, ama umutsuz ;-)) varyasyonları denedim:

  1. değeri $manufacturer->valueayarlamak için 777 tam sayı değerini atayın
  2. extra_attributes alanı içinde / olmadan ürün kimliğini ayarlayın (ancak ek_attributes içinde ayarlanması gerektiğinden eminim)
  3. üretici adını $manufacturer->value777 değeri yerine ayarlayın

Kod:

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

Düzenle:

  • WS-I olmadan SOAPv2 ile test ettim - iyi çalışıyor.
  • Ayrıca SOAPv2 WS-I ile güncellenmeyen ancak SOAPv2 ile aynı ayarlarla (Açılır, Kapsam, ...) test etmek için başka bir özellik oluşturdum. Bu nedenle, bu yeni oluşturulan öznitelikler üretici özniteliği gibi davranır.
  • Additional_attributes içindeki bir metin alanının değerini ayarlamaya çalışmak da işe yaramaz.

Bu konuda herhangi bir fikir, bağlantı, öneri?

Bağlantı: http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.update.html

Yanıtlar:


14

Sonunda sorunun ve çözümün nedenini buldum:

Sorun: WS-I ile SOAPv2 single_datave multi_dataözniteliklerini kullanmaz . Bu nedenle check- /app/code/core/Mage/Catalog/Model/Product/Api/V2.phpin _prepareDataForSavebaşarısız olur. Usul _prepareDataForSaveolup olmadığını kontrol eder single_datave multi_dataWS-I ile SOAPv2 WSDL göre, sabun ve Ara her iki parçası değildir.

SOAPv2 (WSDL) - katalogÜrünCreateEntity:

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

WS-I (WSDL) özellikli SOAPv2 - catalogProductCreateEntity:

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

associativeArray, anahtar / değer çiftlerini içeren associativeEntity türündedir. SOAPv2'de WS-I catalogProductAdditionalAttributesEntityile birlikte kullanılır (yine anahtar / değer çiftlerini içeren single_data ve / veya multi_data değerlerinden oluşur).

Bu, WSDL'nin ek_özniteliklerin biçimini açıklayan SOAPv2 WS-I kısmıdır:

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

Additional_attributes onay /app/code/core/Mage/Catalog/Model/Product/Api/V2.phpcezası ifadeli fakat single_data ya da her zaman iade multi_data yanlışın onay.

Çözüm:

Başka SABUN Sorun bulundu burada : Geçen cevabı benim sorunun çözümü nerede /programming//a/9502311/865443 ). Benim kodunda bu bloğu koymak Yani içinde _prepareDataForSavehangi additional_attributes değerler ayarlayarak sorunu çözüldü:

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

Umarım bu başka biriyle aynı problemle karşılaşır. Ayrıca SOAPv2 ve SOAPv2 WS-I ve / veya bu sorunu çözen diğer yollar arasındaki bu fark için bir açıklama takdir ediyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.