首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Microsoft
EN

Stack Overflow用户
提问于 2013-02-13 08:19:12
回答 1查看 132关注 0票数 0

我使用的是微软商务服务器,最近我学会了如何使用xml服务。我需要使用“updateitem”方法更新一些产品。

SOAP信封如下所示:

代码语言:javascript
运行
复制
<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的请求如下所示:

代码语言:javascript
运行
复制
$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‘的操作,但它没有这样做。

EN

回答 1

Stack Overflow用户

发布于 2013-02-23 15:33:14

几个指导点:

  1. SearchClause属性:搜索子句允许您基于_ProductCatalog数据库内_CatalogProducts表中的属性构建where子句,其中指的是您的目录名称(在商务服务器目录管理器中可见),并指您为您提供的名称CommerceServer Site
  2. 属性名称:此处使用的此属性名称将与您正在更新的实体的classType相对应。单击此处了解有关各种类类型http://msdn.microsoft.com/en-us/library/ee784608(v=cs.20).aspx的更多信息。要了解哪些属性映射到哪些实体,可以查看Commerce Server Catalog和Inventory Schema Manager。您将在此处找到所有属性定义、产品定义、类别定义和目录定义。

示例搜索子句,用于更新其productid为ABC123且变体id为ABC123的网球鞋的红色产品变体的标价(对于鞋子的红色变体颜色,为ABC123-RED。我对nuSoap并不熟悉,但是根据上面的例子,我认为你的代码应该是这样的。此外,您还需要正确转义下面searchClause中的单引号

代码语言:javascript
运行
复制
$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查看当前数据实例的当前数据配置。

您可能会考虑Microsoft,然后是Cactus,然后是Ascentium,现在是拥有该产品的Smith,他们多年来一直在说,这些基于ASMX的web服务正在消失,所以您可能只想编写自己的使用API的服务。我建议这样做是为了更好地控制更新。如果您对SQL更熟悉,我建议您深入研究我上面提到的产品目录数据库,它是一个非常简单的结构,很容易为其编写SSIS或其他批量复制操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14844365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档