多くの属性の1つがSOAPV2 WS-Iで更新されないのはなぜですか?
-
16-10-2019 - |
質問
Magento CE 1.7.0.2をSOAPV2およびWS-Iで使用しています。製品を更新しようとしています catalogProductUpdate
-方法。
以下のコードの例の説明は更新されますが、メーカーとアトリブ(= select)は更新されません。結果として catalogProductUpdate
は bool(true)
.
私はいくつかを試しました(あまり良くありませんが、私は必死です;-))。
- 整数値777を割り当てます
$manufacturer->value
値を設定します - Additional_Attributesフィールド内/なしで製品IDを設定します(ただし、additional_attributes内で設定する必要があると確信しています)
- メーカーの名前をASに設定します
$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
解決
私はついに問題の理由と解決策を見つけました:
問題:ws-iを備えたsoapv2は使用しません single_data
と multi_data
属性。したがって、チェックイン /app/code/core/Mage/Catalog/Model/Product/Api/V2.php
の _prepareDataForSave
失敗します。メソッド _prepareDataForSave
チェック single_data
と multi_data
SOAPV2のWS-Iを使用したWSDLによると、どちらもSOAP-Callの一部ではありません。
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は、キー/バリューのペアを含むタイプの関連性のあるものです。 soapv2 withous ws-iで、 catalogProductAdditionalAttributesEntity
使用されています(これは、単一_DATAおよび/またはMulti_Data値で構成され、再びキー/値のペアが含まれます)。
これは、wsdlのsoapv2 ws-i部分であり、adthide_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>
追加のaTtributesのチェック /app/code/core/Mage/Catalog/Model/Product/Api/V2.php
罰金を科されますが、single_dataまたはmulti_dataのチェックは常に虚偽を返しました。
ソリューション:
別の石鹸の問題を見つけました ここ 最後の答えは私の問題の解決策でした: https://stackoverflow.com/a/9502311/865443)。だから私はこのブロックを私のコードに入れました _prepareDataForSave
Addation_Attributes値を設定する問題は解決しました。
if (gettype($productData->additional_attributes) == 'array') {
foreach ($productData->additional_attributes as $k => $v) {
$_attrCode = $k;
$productData->$_attrCode = $v;
}
}
これが他の誰かが同じ問題に遭遇するのを助けることを願っています。また、SOAPV2とSOAPV2 WS-Iの間のこの違いや、この問題を解決した他の方法の説明にも感謝します。