SOAPv2 WS-I के साथ कई विशेषताओं में से एक को अपडेट क्यों नहीं किया जाता है?


18

मैं SOAPv2 और WS-I के साथ Magento CE 1.7.0.2 का उपयोग कर रहा हूं। मैं catalogProductUpdate-Method के साथ उत्पादों को अपडेट करने की कोशिश कर रहा हूं ।

नीचे दिए गए कोड उदाहरण में विवरण अपडेट किया गया है, लेकिन निर्माता-विशेषता (= चयन) नहीं करता है। का परिणाम catalogProductUpdateहै bool(true)

मैंने कुछ की कोशिश की (बहुत अच्छा नहीं है, लेकिन मैं हताश हूं;;)) विविधताएं जैसे:

  1. मान $manufacturer->valueसेट करने के लिए पूर्णांक मान 777 निर्दिष्ट करें
  2. भीतर / extra_attributes फ़ील्ड के बिना उत्पाद आईडी सेट करें (लेकिन मुझे यकीन है कि इसे extra_attributes के भीतर सेट करने की आवश्यकता है)
  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'
    ));

संपादित करें:

  • मैंने इसे WS-I के बिना SOAPv2 के साथ परीक्षण किया - ठीक काम करता है।
  • मैंने एक ही सेटिंग (ड्रॉपडाउन, स्कोप, ...) के साथ परीक्षण के लिए एक और विशेषता भी बनाई है जो SOAPv2 WS-I के साथ अद्यतन नहीं करता है, लेकिन SOAPv2 के साथ करता है। तो ये नए बनाए गए गुण निर्माता-विशेषता के रूप में व्यवहार करते हैं।
  • Extra_attributes के भीतर पाठ-फ़ील्ड के मान को सेट करने की कोशिश करना या तो काम नहीं करता है।

इस पर कोई विचार, लिंक, सुझाव?

लिंक: http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.upcate.html

जवाबों:


14

मैंने आखिरकार समस्या और समाधान का कारण पाया:

समस्या: WS-I के साथ SOAPv2 विशेषताओं single_dataऔर multi_dataविशेषताओं का उपयोग नहीं करता है । इसलिए चेक /app/code/core/Mage/Catalog/Model/Product/Api/V2.phpमें _prepareDataForSaveविफल रहता है। WS-I के साथ SOAPv2 के लिए WSDL के अनुसार, विधि _prepareDataForSaveजाँच करती है single_dataऔर multi_dataजो SOAP-Call का हिस्सा नहीं है।

SOAPv2 (WSDL) - कैटलॉगउत्पादक्रीडा:

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

WS-I (WSDL) के साथ SOAPv2 - कैटलॉगउत्पादक्रीड़ा

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

संबद्धताप्रक्रिया एक प्रकार की साहचर्य है जिसमें कुंजी / मान जोड़े शामिल हैं। SOAPv2 withous WS-I में, catalogProductAdditionalAttributesEntityका उपयोग किया जाता है (जिसमें एकल_डेटा और / या मल्टी_डेटा मान शामिल होते हैं जिनमें फिर से कुंजी / मान जोड़े शामिल होते हैं)।

यह डब्लूएसडीएल का SOAPv2 WS-I हिस्सा है जो extra_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>

Additional_attributes के लिए चेक /app/code/core/Mage/Catalog/Model/Product/Api/V2.phpशब्दों में ठीक है, लेकिन single_data या हमेशा वापस आ multi_data झूठा के लिए चेक।

समाधान:

मुझे यहां एक और SOAP प्रॉब्लम मिली, जहां आखिरी उत्तर मेरी समस्या का हल था: /programming//a/9502311/865443 )। इसलिए मैंने इस ब्लॉक को अपने कोड में डाल दिया _prepareDataForSaveजिसमें extra_attributes मान सेट करने की समस्या हल हो गई:

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

मुझे उम्मीद है कि यह किसी और को उसी समस्या का सामना करने में मदद करता है। मैं SOAPv2 और SOAPv2 WS-I और / या इस समस्या को हल करने वाले अन्य तरीकों के बीच इस अंतर के लिए स्पष्टीकरण की भी सराहना करूंगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.