많은 속성 중 하나가 SOAPv2 WS-I로 업데이트되지 않는 이유는 무엇입니까?


18

SOAPv2 및 WS-I와 함께 Magento CE 1.7.0.2를 사용하고 있습니다. catalogProductUpdate-Method로 제품을 업데이트하려고합니다 .

아래 코드 예제의 설명은 업데이트되지만 제조업체 속성 (= select)은 업데이트되지 않습니다. 의 결과는 catalogProductUpdate입니다 bool(true).

나는 (너무 좋지는 않지만 필사적이다 ;-))와 같은 변형을 시도했다.

  1. 정수 값 777을 $manufacturer->value지정하여 값 을 설정하십시오.
  2. additional_attributes 필드 내 / 포함없이 제품 ID를 설정합니다 (하지만 additional_attributes 내에서 설정해야합니다)
  3. $manufacturer->value777 대신 제조업체 이름을 설정하십시오.

암호:

$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로 동일한 설정 (드롭 다운, 범위 등)으로 테스트 할 다른 속성을 만들었습니다. 따라서 새로 작성된 이러한 속성은 제조업체 속성으로 동작합니다.
  • additional_attributes 내에서 텍스트 필드의 값을 설정하려고 시도해도 작동하지 않습니다.

이것에 대한 아이디어, 링크, 제안?

링크 : http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.update.html

답변:


14

마침내 문제의 원인과 해결책을 찾았습니다.

문제점 : WS-I가있는 SOAPv2는 single_datamulti_data속성을 사용하지 않습니다 . 따라서에서 체크 /app/code/core/Mage/Catalog/Model/Product/Api/V2.php인은 _prepareDataForSave실패합니다. 상기 방법에 _prepareDataForSave대한 검사 single_datamulti_dataWS-I와 SOAPv2 대한 WSDL에 따라 SOAP 콜 모두없는 부분이다.

SOAPv2 (WSDL)-catalogProductCreateEntity :

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

WS-I (WSDL)가있는 SOAPv2-catalogProductCreateEntity :

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

associativeArray는 키 / 값 쌍을 포함하는 associativeEntity 유형입니다. WS-I가없는 SOAPv2에서는가 catalogProductAdditionalAttributesEntity사용됩니다 (키 / 값 쌍을 다시 포함하는 single_data 및 / 또는 multi_data 값으로 구성됨).

이것은 additional_attributes의 형식을 설명하는 WSDL의 SOAPv2 WS-I 부분입니다.

<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에 대한 검사는 항상 false를 반환했습니다.

해결책:

나는 또 다른 SOAP 문제를 발견 여기에 : 마지막 대답은 내 문제에 대한 해결책 어디 /programming//a/9502311/865443 ). 그래서이 블록을 코드에 넣었습니다. 그러면 _prepareDataForSaveadditional_attributes 값을 설정하는 문제가 해결되었습니다.

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

이것이 동일한 문제가 발생하는 다른 사람에게 도움이되기를 바랍니다. SOAPv2와 SOAPv2 WS-I의 차이점 및 / 또는이 문제를 해결 한 다른 방법에 대해서도 설명하겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.