1

CRM にはいくつかのカスタマイズされたオプション セットがあります。たとえば、Salutation オプション セットは Contact エンティティに対して定義されています。連絡先を作成または更新するときに、このオプション セットの値を取得する必要があります。requestを使用RetrieveOptionSetして、以下のようにオプション セットの値を取得しようとしました。

使用する SOAP アクション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>

このページのサンプル コードは、役立つ情報を提供してくれました。

4

2 に答える 2

2

RetrieveOptionSetRequest ではなく、RetrieveAttributeRequest を使用する必要があります。

非グローバル (ローカル) オプションセットのメタデータは、まったく異なる構造としてではなく、エンティティ自体の属性の一部として定義されます。すなわち。エンティティからローカル オプションセット属性を削除すると、オプション セット定義全体がすべて失われます。しかし、それがグローバル オプション セットの場合、参照のエンティティの属性を削除しても、オプション セットのデータが失われることはありません。

于 2013-06-28T13:07:45.947 に答える