選択肢列を使用して複数のオプションを格納する

カスタマイザーは、複数のオプションを選択できる選択肢列を定義できます。 この記事では、Web API と SDK for .NETを使用して、選択肢列を設定、クエリ、作成する方法について説明します。 MultiSelectPicklistAttributeMetadata クラスは、EnumAttributeMetadata クラスから継承する列型を定義します。 PicklistAttributeMetadata クラスと同様に、この列には、列の有効なオプションを含む OptionSetMetadata.Options プロパティが含まれています。 違いは、取得または設定する値が、選択したオプションを表す整数の配列を含む OptionSetValueCollection 型であるという点です。 この列の書式設定された値は、選択したオプションのラベルを含むセミコロンで区切られた文字列です。

Web API では、 MultiSelectPicklistAttributeMetadata エンティティ型を使用してこの列を定義します。

選択肢の列と同様に、定義できるオプションの数に技術的に上限はありません。 ユーザビリティに関する考慮事項を制約条件として適用します。 ただし、1 つの列に対して選択できるオプションは 150 個のみです。 また、既定値を設定することはできません。

選択肢の列の値を設定する

次の例では、sample_outdooractivities テーブルに追加するcontactという名前の列の選択肢の値を設定する方法を示します。

Web API を使用して、コンマ区切りの数値を含む文字列を渡して値を設定します。

要求:

POST [organization uri]/api/data/v9.2/contacts HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
    "@odata.type": "Microsoft.Dynamics.CRM.contact",
    "firstname": "Wayne",
    "lastname": "Yarborough",
    "sample_outdooractivities": "1, 9"
}

応答:

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [organization uri]/api/data/v9.2/contacts(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

選択肢列からデータをクエリする

2 つの条件演算子は、選択肢の値のクエリをサポートします。

Web API FetchXML ConditionOperator
ContainValues contain-values ContainValues
DoesNotContainValues not-contain-values DoesNotContainValues

注

これらの演算子は、複数の値を格納するデータベース テーブルに適用されるフルテキスト インデックス作成に依存します。 新しいレコードが作成され、フルテキスト インデックスが有効になった後に待機時間が発生します。 これらの演算子を使用してフィルターを使用して値を評価するには、新しいレコードが作成されてから数秒待つ必要がある場合があります。

この種類の列で使用できる他の既存の条件演算子には、次のものがあります。

Web API FetchXML ConditionOperator
eq eq Equal
ne neq NotEqual
not null not-null NotNull
eq null null Null
In in In
NotIn not-in NotIn

次の例では、ContainValues テーブルのDoesNotContainValuesという名前の選択肢列で、次のデータ セットに対してsample_outdooractivities演算子とcontact演算子を使用する方法を示します。

選択肢 sample_outdooractivities 値

価値 ラベル
1 水泳
2 ハイキング
3 山登り
4 釣り
5 Hunting
6 Running
7 舟遊び
八 スキー
9 キャンピング

この列を作成するサンプル コードについては、コードで選択肢列を作成する を参照してください。

連絡先テーブルの値

fullname sample_outdooractivities
ウェイン・ヤーバラ 1,9
モンテ オートン 2
ランダル メイプル 4
ヒラム マンディ 2,3,8,9
バーバラ・ウェバー 1,4,7
Georgette Sullivan 4,5,9
ヴェルナ・ケネディ 2,4,9
Marvin ブラッケン 1,2,8,9

この例では、 ContainValues クエリ関数を使用して、ハイキングが好きなすべての連絡先を返す方法を示します。 応答には、odata.include-annotations="OData.Community.Display.V1.FormattedValue" の設定が適用されているため、オプションのテキストが注釈として含まれます。

要求:

GET [organization uri]/api/data/v9.2/contacts?$select=fullname,sample_outdooractivities&$filter=Microsoft.Dynamics.CRM.ContainValues(PropertyName='sample_outdooractivities',PropertyValues=%5B'2'%5D) HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"

応答:

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Content-Length: 1092

{
    "@odata.context": "[organization uri]/api/data/v9.2/$metadata#contacts(fullname,sample_outdooractivities)",
    "value": [{
        "@odata.etag": "W/\"529811\"",
        "fullname": "Monte Orton",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking",
        "sample_outdooractivities": "2",
        "contactid": "cdbcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529823\"",
        "fullname": "Hiram Mundy",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking; Mountain Climbing; Skiing; Camping",
        "sample_outdooractivities": "2,3,8,9",
        "contactid": "d7bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529838\"",
        "fullname": "Verna Kennedy",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Hiking; Fishing; Camping",
        "sample_outdooractivities": "2,4,9",
        "contactid": "e6bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529843\"",
        "fullname": "Marvin Bracken",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Hiking; Skiing; Camping",
        "sample_outdooractivities": "1,2,8,9",
        "contactid": "ebbcc48e-0b8d-e711-811c-000d3a75bdf1"
    }]
}

FetchXml を使用したコード例

次のコードは、Web API と SDK for .NET での FetchXml の使用を示しています。

この例では、Web API を使用して、次のnot-contain-values クエリでのFetchXml演算子の使用を示します。

<fetch>
    <entity name='contact'>
        <attribute name='fullname' />
        <attribute name='sample_outdooractivities' />
            <filter type='and'>
                <condition attribute='sample_outdooractivities' operator='not-contain-values'>
                    <value>2</value>
                </condition>
            </filter>
    </entity>
</fetch>

要求:

GET [organization uri]/api/data/v9.2/contacts?fetchXml=%253Cfetch%2520distinct%253D'false'%2520no-lock%253D'false'%2520mapping%253D'logical'%253E%253Centity%2520name%253D'contact'%253E%253Cattribute%2520name%253D'fullname'%2520%252F%253E%253Cattribute%2520name%253D'sample_outdooractivities'%2520%252F%253E%253Cfilter%2520type%253D'and'%253E%253Ccondition%2520attribute%253D'sample_outdooractivities'%2520operator%253D'not-contain-values'%253E%253Cvalue%253E2%253C%252Fvalue%253E%253C%252Fcondition%253E%253C%252Ffilter%253E%253C%252Fentity%253E%253C%252Ffetch%253E HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"

応答:

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"

{
    "@odata.context": "[organization uri]/api/data/v9.2/$metadata#contacts(fullname,sample_outdooractivities,contactid)",
    "value": [{
        "@odata.etag": "W/\"529806\"",
        "fullname": "Wayne Yarborough",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Camping",
        "sample_outdooractivities": "1,9",
        "contactid": "c8bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529816\"",
        "fullname": "Randal Maple",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Fishing",
        "sample_outdooractivities": "4",
        "contactid": "d2bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529828\"",
        "fullname": "Barbara Weber",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Swimming; Fishing; Boating",
        "sample_outdooractivities": "1,4,7",
        "contactid": "dcbcc48e-0b8d-e711-811c-000d3a75bdf1"
    }, {
        "@odata.etag": "W/\"529833\"",
        "fullname": "Georgette Sullivan",
        "sample_outdooractivities@OData.Community.Display.V1.FormattedValue": "Fishing; Hunting; Camping",
        "sample_outdooractivities": "4,5,9",
        "contactid": "e1bcc48e-0b8d-e711-811c-000d3a75bdf1"
    }]
}

コードを使用して選択肢列を作成する

選択を作成する最も簡単な方法は、カスタマイズ ツールで列エディターを使用することです。 列を作成および編集する方法を学ぶ

この種の列の作成を自動化する必要がある場合は、Web API または SDK for .NET で次の例を使用してください。 どちらの例も、 contact テーブルに屋外アクティビティの選択肢列を作成します。 列の作成について詳しくは、こちらをご覧ください。

POSTペイロードを含む要求を/Attributesテーブルのcontactコレクションに送信し、一意の名前mySampleSolutionUniqueNameを持つソリューションの一部として列を作成します。 ソリューション コンポーネントをソリューションに関連付ける方法について説明します

要求:

POST [organization uri]/api/data/v9.2/EntityDefinitions(LogicalName='contact')/Attributes HTTP/1.1
Accept: application/json
MSCRM.SolutionUniqueName: mySampleSolutionUniqueName
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0

{
    "@odata.type": "Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata",
    "SchemaName": "sample_OutdoorActivities",
    "DisplayName": {
        "LocalizedLabels": [
            {
                "Label": "Outdoor activities",
                "LanguageCode": 1033
            }
        ]
    },
    "RequiredLevel": {
        "Value": "None"
    },
    "Description": {
        "LocalizedLabels": [
            {
                "Label": "Outdoor activities that the contact likes.",
                "LanguageCode": 1033
            }
        ]
    },
    "OptionSet": {
        "IsGlobal": false,
        "OptionSetType": "Picklist",
        "Options": [
            {
                "Value": 1,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Swimming", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 2,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Hiking", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 3,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Mountain Climbing", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 4,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Fishing", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 5,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Hunting", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 6,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Running", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 7,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Boating", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 8,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Skiing", "LanguageCode": 1033 }
                    ]
                }
            },
            {
                "Value": 9,
                "Label": {
                    "LocalizedLabels": [
                        { "Label": "Camping", "LanguageCode": 1033 }
                    ]
                }
            }
        ]
    }
}

応答:

HTTP/1.1 204 No Content
OData-Version: 4.0
OData-EntityId: [organization uri]/api/data/v9.2/EntityDefinitions(LogicalName='contact')/Attributes(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)

こちらも参照ください

列の定義
Web API を使用してテーブル行を作成する
Web API を使用してデータのクエリを実行する
列定義を操作する
サンプル: 列の定義を操作する