カスタマイザーは、複数のオプションを選択できる列を定義できます。 MultiSelectPicklistAttributeMetadata クラスは、EnumAttributeMetadata クラスから継承する列型を定義します。 PicklistAttributeMetadata クラスと同様に、この列には、列の有効なオプションを含む OptionSetMetadata.Options プロパティが含まれています。 違いは、取得または設定する値が、選択したオプションを表す整数の配列を含む OptionSetValueCollection 型であるという点です。 この列の書式設定された値は、選択したオプションのラベルを含むセミコロンで区切られた文字列です。
注
マネージド ソリューションの発行者のみが、グローバル オプション セットからオプションを削除する変更をインポートできます。 この動作には、既定のグローバル オプション セットなどの Microsoft が公開したソリューションが含まれます。 オプション セットを変更するには、オプション セットを追加したソリューションにアップグレードする必要があります。 ソリューションのアップグレードまたは更新について説明します。 ユーザーは、ソリューションを変更できない場合やソリューションパブリッシャーに連絡できない場合は、環境内のオプションを手動で削除できますが、これはすべての環境で手動で行う必要があります。
Web API では、この列は MultiSelectPicklistAttributeMetadata EntityType を使用して定義されます。
選択肢の列と同様に、定義できるオプションの数に技術的に上限はありません。 ユーザビリティに関する考慮事項は、制限要因として適用する必要があります。 ただし、1 つの列に対して選択できるオプションは 150 個のみです。 また、既定値を設定することはできません。
選択肢の値の設定
次の例では、sample_outdooractivities テーブルに追加contactという名前の列の選択肢の値を設定する方法を示します。
Web API では、コンマ区切りの数値を含む文字列を渡して値を設定します。
要求:
POST [organization uri]/api/data/v9.0/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.0/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 |
サンプルアウトドアアクティビティ |
|---|---|
| ウェイン・ヤーバラ | 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.0/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.0/$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.0/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.0/$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"
}]
}
コードを使用して選択肢を作成する
選択を作成する最も簡単な方法は、カスタマイズ ツールで列エディターを使用することです。 列を作成および編集する方法について説明します
この種の列の作成を自動化する必要がある場合は、SDK for .NET で次の C# コードを使用して、 contact テーブルに対する屋外アクティビティの選択を許可する選択肢を作成できます。
列の作成の詳細
private const int _languageCode = 1033; //English
MultiSelectPicklistAttributeMetadata outDoorActivitiesAttribute = new MultiSelectPicklistAttributeMetadata()
{
SchemaName = "sample_OutdoorActivities",
LogicalName = "sample_outdooractivities",
DisplayName = new Label("Outdoor activities", _languageCode),
RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
Description = new Label("Outdoor activities that the contact likes.", _languageCode),
OptionSet = new OptionSetMetadata()
{
IsGlobal = false,
OptionSetType = OptionSetType.Picklist,
Options = {
new OptionMetadata(new Label("Swimming",_languageCode),1),
new OptionMetadata(new Label("Hiking",_languageCode),2),
new OptionMetadata(new Label("Mountain Climbing",_languageCode),3),
new OptionMetadata(new Label("Fishing",_languageCode),4),
new OptionMetadata(new Label("Hunting",_languageCode),5),
new OptionMetadata(new Label("Running",_languageCode),6),
new OptionMetadata(new Label("Boating",_languageCode),7),
new OptionMetadata(new Label("Skiing",_languageCode),8),
new OptionMetadata(new Label("Camping",_languageCode),9)}
}
};
CreateAttributeRequest createAttributeRequest = new CreateAttributeRequest
{
EntityName = "contact",
Attribute = outDoorActivitiesAttribute
};
var response = (CreateAttributeResponse)service.Execute(createAttributeRequest);
こちらも参照ください
列の定義
Web API を使用してテーブル行を作成する
Web API を使用してデータのクエリを実行する
列定義を操作する
サンプル: 列の定義を操作する
.NET 用 SDK を使用した遅延バインドと早期バインドのプログラミング