CRM具有一些自定义选项集,例如,为Contact实体定义了Salutation选项集。我需要在创建或更新联系人时获取此选项的值。我尝试使用RetrieveOptionSet
请求获取选项设置值,如下所示:
要使用http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute
SOAP请求正文
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<request i:type="a:RetrieveOptionSetRequest" xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">
<a:Parameters xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
<a:KeyValuePairOfstringanyType>
<b:key>MetadataId</b:key>
<b:value i:type="c:guid" xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/">00000000-0000-0000-0000-000000000000</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>RetrieveAsIfPublished</b:key>
<b:value i:type="c:boolean" xmlns:c="http://www.w3.org/2001/XMLSchema">true</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>Name</b:key>
<b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">my_type</b:value>
</a:KeyValuePairOfstringanyType>
</a:Parameters>
<a:RequestId i:nil="true" />
<a:RequestName>RetrieveOptionSet</a:RequestName>
</request>
</Execute>
</s:Body>
</s:Envelope>
问题是我只能使用此请求来获取全局选项集,但对于自定义选项集,此请求只返回未找到的错误。
有谁知道如何获得自定义选项设置值?
编辑:我正在使用Java客户端访问Dynamics CRM Web服务。这是我用来成功获取选项集值的最终SOAP请求体。
<s:Envelope>
<s:Body>
<Execute>
<request i:type="a:RetrieveAttributeRequest">
<a:Parameters>
<a:KeyValuePairOfstringanyType>
<b:key>MetadataId</b:key>
<b:value i:type="c:guid">00000000-0000-0000-0000-000000000000</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>RetrieveAsIfPublished</b:key>
<b:value i:type="c:boolean">true</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>EntityLogicalName</b:key>
<b:value i:type="c:string">contact</b:value>
</a:KeyValuePairOfstringanyType>
<a:KeyValuePairOfstringanyType>
<b:key>LogicalName</b:key>
<b:value i:type="c:string">my_type</b:value>
</a:KeyValuePairOfstringanyType>
</a:Parameters>
<a:RequestId i:nil="true"/>
<a:RequestName>RetrieveAttribute</a:RequestName>
</request>
</Execute>
</s:Body>
</s:Envelope>
this page中的示例代码为我提供了有用的信息。
答案 0 :(得分:2)
您需要使用RetrieveAttributeRequest,而不是RetrieveOptionSetRequest。
非全局(本地)选项集的元数据被定义为实体本身属性的一部分,而不是完全不同的结构。即。如果从实体中删除本地optionset属性,则会丢失所有整个选项集定义。但如果它是一个全局选项集,删除实体上的属性,引用不会导致选项集的任何数据丢失
答案 1 :(得分:1)
我认为您的问题在几个月前已在此链接中得到解答:
Dynamics CRM - Accessing Custom Product Option Value
如果不一样,请告诉我,我们会尝试寻找另一种方式;)
但是再考虑一下你的要求,如果我理解它,这个选项集的变化频率是多少?为什么不直接从SDK中使用crmsvcutil.exe检索选项集?
干杯,
马里奥