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 目录管理器中可见)并指的是您给的名称您的 CommerceServer 站点

  2. 属性名称:您在此处使用的此属性名称将对应于您正在更新的实体的类类型。单击此处了解有关各种类类型的更多信息http://msdn.microsoft.com/en-us/library/ee784608(v=cs.20).aspx。要了解哪些属性映射到哪些实体,您可以查看 Commerce Server Catalog 和 Inventory Schema Manager。在这里,您将找到所有属性定义、产品定义、类别定义和目录定义。

示例搜索子句,用于更新 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));

显然,如果属性名称中有空格,则需要使用 [] 作为分隔符,如“[My Custom Column]”。

最好的办法是首先熟悉存储产品目录的 SQL 数据库表,然后使用 Commerce Server Catalog 和 Inventory Manager 以及 Commerce Server Catalog Manager 来检查您当前数据实例的当前数据配置。

您可能想考虑微软,然后是 Cactus,然后是 Ascentium,现在拥有该产品的 Smith 多年来一直表示这些基于 ASMX 的 Web 服务将消失,因此您可能只想编写自己的使用 API 的服务。我建议您更好地控制更新。如果您对 SQL 更熟悉,我建议您深入了解我上面提到的产品目录数据库,它的结构非常简单,并且非常容易编写 SSIS 或其他批量复制操作。

于 2013-02-23T07:33:13.553 回答