石鹸を使用してフィルターと複雑なフィルターを使用して、magentoから注文のリストを取得しようとしています。次のxml-snippetは、パラメータがまだ設定されていない標準リクエストの構造を示しています。
ApacheCXFを使用したMagento1.7SOAPクライアントデータベースにアイテムがあります...
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:Magento">
<soapenv:Header/>
<soapenv:Body>
<urn:salesOrderListRequestParam>
<sessionId>?</sessionId>
<filters>
<!--Optional:-->
<filter>
<!--Zero or more repetitions:-->
<complexObjectArray>
<key>?</key>
<value>?</value>
</complexObjectArray>
</filter>
<!--Optional:-->
<complex_filter>
<!--Zero or more repetitions:-->
<complexObjectArray>
<key>?</key>
<value>
<key>?</key>
<value>?</value>
</value>
</complexObjectArray>
</complex_filter>
</filters>
</urn:salesOrderListRequestParam>
</soapenv:Body>
</soapenv:Envelope>
このリクエストと1つのフィルターを使用して、次のようにAPIを呼び出そうとしました。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:Magento">
<soapenv:Header/>
<soapenv:Body>
<urn:salesOrderListRequestParam>
<sessionId>02ec011a4deef70a55104d8b229e0d41</sessionId>
<filters>
<!--Optional:-->
<filter>
<!--Zero or more repetitions:-->
<complexObjectArray>
<key>customer_lastname</key>
<value>cook</value>
</complexObjectArray>
</filter>
<!--Optional:-->
<complex_filter>
<!--Zero or more repetitions:-->
</complex_filter>
</filters>
</urn:salesOrderListRequestParam>
</soapenv:Body>
</soapenv:Envelope>
応答には、クック氏からの注文のリストである、希望どおりのデータが含まれています。ここまでは順調ですね。
この大成功を楽しんだ後(;-))私は次のレベルに到達しようとしました。この場合、目的のデータを集約してデータベースから取得するために、より多くの基準を送信しようとしました。
そのため、特定の日付までに作成されたすべての注文を検索しようとしました。次のxmlは、このタイプのリクエストを示しています。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:salesOrderListRequestParam
xmlns:ns2="urn:Magento">
<sessionId>2b15208c5153189ed7477750c177716c</sessionId>
<filters>
<complex_filter>
<complexObjectArray>
<key>created_at</key>
<value>
<key>from</key>
<value>2012-07-06 12:55:51</value>
</value>
</complexObjectArray>
</complex_filter>
</filters>
</ns2:salesOrderListRequestParam>
</soap:Body>
</soap:Envelope>
実際、このリクエストはデータベースにエラーを作成します。magentoによって作成されたステートメントは次のとおりです。
SELECT `main_table`.*, `billing_o_a`.`firstname`, `billing_o_a`.`lastname`, `billing_o_a`.`telephone`, `billing_o_a`.`postcode`, `shipping_o_a`.`firstname`, `shipping_o_a`.`lastname`, `shipping_o_a`.`telephone`, `shipping_o_a`.`postcode`, `billing_o_a`.`firstname` AS `billing_firstname`, `billing_o_a`.`lastname` AS `billing_lastname`, `shipping_o_a`.`firstname` AS `shipping_firstname`, `shipping_o_a`.`lastname` AS `shipping_lastname`, CONCAT(billing_o_a.firstname, ' ', billing_o_a.lastname) AS `billing_name`, CONCAT(shipping_o_a.firstname, " ", shipping_o_a.lastname) AS `shipping_name` FROM `mage_sales_flat_order` AS `main_table`
LEFT JOIN `mage_sales_flat_order_address` AS `billing_o_a` ON (main_table.entity_id = billing_o_a.parent_id AND billing_o_a.address_type = 'billing')
LEFT JOIN `mage_sales_flat_order_address` AS `shipping_o_a` ON (main_table.entity_id = shipping_o_a.parent_id AND shipping_o_a.address_type = 'shipping') WHERE (((from = '')))
明らかにこれは意味がありません..「from」列はなく、送信日はどこに隠れていますか、そしてその理由
... WHERE(((from ='')))
<complexObjectArray>
<key>created_at</key>
<value>
<key>from</key>
<value>2012-07-06 12:55:51</value>
</value>
<complexObjectArray>
例外'Zend_Db_Statement_Exception'とメッセージ'SQLSTATE[42000]:構文エラーまたはアクセス違反:1064SQL構文にエラーがあります。/home/.../public_dev/lib/Zend/Db/Statement/Pdoの3行目の'from='')))'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。 php:234
さて、ここで何かがひどく間違っています...
magentoページのスニペットの例を次に示します。
<item xsi:type="ns1:complexFilter">
<key xsi:type="xsd:string">protect_code</key>
<value xsi:type="ns1:associativeEntity">
<key xsi:type="xsd:string">in</key>
<value xsi:type="xsd:string">a4ffa8</value>
</value>
</item>
多分誰かがこの問題を解決する手がかりを持っています!?
前もって感謝します...