0

私はマイクロソフト コマース サーバーを使用していますが、最近 xml Web サービスの使用方法を学びました。「updateitems」メソッドを使用して一部の製品を更新する必要があります。

SOAP エンベロープは次のようになります。

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
<UpdateItems xmlns="http://schemas.microsoft.com/CommerceServer/2006/06/CatalogWebService">
  <catalogName>string</catalogName>
  <searchClause>string</searchClause>
  <propertyName>string</propertyName>
  <replacementValue />
  <classTypes>None or CategoryClass or ProductVariantClass or ProductClass or ProductFamilyClass or ProductFamilyForVariantsClass or ProductVariantsForFamilyClass or AllClassTypesClass</classTypes>
  <language>string</language>
</UpdateItems>
</soap:Body>
</soap:Envelope>

nuSoap を使用した私のリクエストは次のようになります。

$client = new nusoap_client($wsdl, TRUE);
$client->setCredentials('', '', 'ntlm');
$client->setUseCurl(true);
$client->useHTTPPersistentConnection();
$client->setCurlOption(CURLOPT_USERPWD, *);

$m = array(
'catalogName' => 'cat',
'propertyName => 'itemdesc',
'replacementValue' => 'somevalue'
);
$resp = ($client->call('UpdateItems', $m));

私が理解していないのはsearchClauseです。テーブルまたは列の名前がわかりません。機密データを扱っているため、試行錯誤でテストしたくありません。検索句で「ProductID = 159999」のようなことをしたいのですが、それがありません。

4

1 に答える 1

0

ガイダンスのいくつかのポイント:

  1. SearchClauseプロパティ:searchclauseを使用すると、_ProductCatalogデータベース内の_CatalogProductsテーブルのプロパティに基づいてwhere句を作成できます。この句は、カタログの名前(Commerce Server Catalog Managerで表示可能)を参照し、指定した名前を参照します。あなたCommerceServerサイト

  2. プロパティ名:ここで使用するこのプロパティ名は、更新するエンティティのclassTypeに対応します。さまざまなクラスタイプの詳細については、ここをクリックしてくださいhttp://msdn.microsoft.com/en-us/library/ee784608(v=cs.20).aspx。どのプロパティがどのエンティティにマップされているかを確認するには、CommerceServerCatalogおよびInventorySchemaManagerを参照してください。ここには、すべてのプロパティ定義、製品定義、カテゴリ定義、およびカタログ定義があります。

productidがABC123でバリアントID(靴の赤いバリアントカラーの場合はABC123-REDです。nuSoapに精通していませんが、に基づいています)のテニスシューズの赤い製品バリアントの定価を更新する検索句の例上記の例では、コードは次のようになっていると思います。また、以下のsearchClauseの単一引用符を適切にエスケープする必要があります。

$client = new nusoap_client($wsdl, TRUE);
$client->setCredentials('', '', 'ntlm');
$client->setUseCurl(true);
$client->useHTTPPersistentConnection();
$client->setCurlOption(CURLOPT_USERPWD, *);

$m = array(
'catalogName' => 'YourCatalogName',
'searchClause' => '(ProductId = ''ABC123'' AND VariantId = ''ABC123-RED'')',
'propertyName => 'Description',
'replacementValue' => 'Red is the new color for fall, check out these kicks!'
);
$resp = ($client->call('UpdateItems', $m));

明らかに、プロパティ名にスペースがある場合は、「[マイカスタム列]」のように、区切り文字として[]を使用することをお勧めします。

最善の方法は、最初に製品カタログが格納されているSQLデータベーステーブルに精通し、次に現在のデータインスタンスに対してCommerceServerCatalogとInventoryManagerおよびCommerceServerCatalogManagerを使用して現在のデータ構成を確認することです。

Microsoft、Cactus、Ascentium、そして製品を所有するSmithが、これらのASMXベースのWebサービスは廃止されると長年言ってきたので、APIを使用する独自のサービスを作成することをお勧めします。アップデートをより細かく制御することをお勧めします。SQLに慣れている場合は、前述の製品カタログデータベースを詳しく調べることをお勧めします。このデータベースは非常に単純な構造であり、SSISやその他の一括コピー操作を非常に簡単に記述できます。

于 2013-02-23T07:33:13.553 に答える