多くの属性の1つが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->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では更新されます。したがって、これらの新しく作成された属性は、メーカー属性として動作します。
  • additional_attributes内のテキストフィールドの値を設定しようとしても機能しません。

これに関するアイデア、リンク、提案はありますか?

リンク:http : //www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.update.html

回答:


14

私はついに問題の理由と解決策を見つけました:

問題:WS-Iを使用するSOAPv2では、single_dataおよびmulti_data属性を使用しません。したがって、チェックイン/app/code/core/Mage/Catalog/Model/Product/Api/V2.php_prepareDataForSave失敗します。メソッド_prepareDataForSaveをチェックsingle_dataし、multi_data WS-IとSOAPv2のWSDLによれば、SOAPコールの両方の一部ではありません。

SOAPv2(WSDL)-catalogProductCreateEntity:

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

WS-Iを使用したSOAPv2(WSDL)-catalogProductCreateEntity:

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

associativeArrayは、キー/値のペアを含むassociativeEntity型です。SOAP-v2 withous WS-Iでは、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常に返さ偽のチェック。

ソリューション:

ここで最後の答えが私の問題の解決策である別のSOAP問題を見つけました:https : //stackoverflow.com/a/9502311/865443)。したがって_prepareDataForSave、additional_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.