選択肢の列
カスタマイザーは、複数オプションを選択できる列を定義できます。 MultiSelectPicklistAttributeMetadata クラスは、EnumAttributeMetadata クラスから継承される列の種類を定義します。 PicklistAttributeMetadata クラスのように、この列には、その列の有効なオプションを含む OptionSetMetadata.Options プロパティが含まれます。 違いは、取得または設定する値は、選択したオプションを表す整数の配列を含む OptionSetValueCollection 型であることです。 この列の書式設定された値は、選択したオプションのラベルを含むセミコロンで区切られた文字列です。
注意
マネージド ソリューションの発行者のみが、グローバル オプション セットからオプションを削除する変更をインポートできます。 これには、標準のグローバル オプション セットなど、Microsoft が公開しているソリューションが含まれます。 オプション セットに変更を加えるには、オプション セットを追加したソリューションにアップグレードする必要があります。 詳細については、ソリューションのアップグレードまたは更新をご参照ください。 ソリューションの変更や、ソリューション発行者への連絡ができない場合、ユーザーは環境内のオプションを手動で削除できますが、これはすべての環境で手動で行う必要があります。
Web API では、この列は MultiSelectPicklistAttributeMetadata EntityType を使用して定義されます。
選択肢列と同様、定義できるオプションの数に技術的な上限はありません。 使いやすさに関する考慮事項を限定要因として適用する必要があります。 ただし、単一列に対して 150 のオプションしか選択できません。 また、既定値は設定できません。
選択肢の値を設定する
次の例は、contact
テーブルに追加された sample_outdooractivities
という名前の列に選択肢の値を設定する方法を示しています。
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(0c67748a-b78d-e711-811c-000d3a75bdf1)
選択肢からデータをクエリする
選択肢の値のクエリをサポートするために、次の 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 |
次の例は、contact
テーブル上の sample_outdooractivities
という名前の選択肢列にある次のデータ セットに対して ContainValues
と DoesNotContainValues
演算子を使用する方法を示しています。
選択肢 sample_outdooractivities
の値
値 | Label |
---|---|
1 | 水泳 |
2 | ハイキング |
3 | 登山 |
4 | 釣り |
5 | 狩猟 |
6 | 実行中 |
7 | ボート |
8 | スキー |
9 | キャンプ |
取引先担当者テーブル値
fullname |
'sample_outdooractivities' |
---|---|
Wayne Yarborough | 1,9 |
Monte Orton | 2 |
Randal Maple | 4 |
Hiram Mundy | 2,3,8,9 |
Barbara Weber | 1,4,7 |
Georgette Sullivan | 4,5,9 |
Verna Kennedy | 2,4,9 |
Marvin Bracken | 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 および .NET 用 SDK で FetchXml を使用する方法を示しています。
この例は、Web API を使用して、次のFetchXml
クエリで not-contain-values
演算子を使用する方法を示しています。
<fetch distinct='false' no-lock='false' mapping='logical'>
<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"
}]
}
コードで選択肢を作成する
選択肢を作成する最も簡単な方法は、カスタマイズ ツールの列エディターを使用することです。 詳細: 列を作成および編集する方法
ただし、この種類の列の作成を自動化する必要がある場合は、選択肢を作成する .NET 用 SDK で、次のように 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 を使用した遅延バインドと事前バインドのプログラミング
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。