Microsoft Dataverse はメタデータ駆動型アプリケーションであるため、開発者は、組織の構成方法に適応するために、実行時にシステム定義のクエリを実行する必要がある場合があります。 この機能は RESTful クエリ スタイルを使用します。
注意
EntityQueryExpression ComplexType と RetrieveMetadataChanges 関数を使用して、オブジェクトベースのスタイルを使用してクエリを作成することもできます。 この関数は、2 つの期間の間のテーブル定義への変更をキャプチャし、指定したクエリによって記述された限られた定義セットを返します。 詳細については、「 クエリ スキーマ定義」を参照してください。
EntityMetadata エンティティ型のクエリを実行する
EntityMetadata に対してクエリを実行するときは、 Web API を使用したデータのクエリ に関するページで説明されているのと同じ手法を使用します。いくつかのバリエーションがあります。
EntityDefinitions エンティティ セット パスを使用して、EntityMetadata EntityType に関する情報を取得します。 EntityMetadata エンティティには大量のデータが含まれているため、必要なデータのみを取得します。 次の例では、DisplayName エンティティの定義の IsKnowledgeManagementEnabled、EntitySetName、および Account プロパティだけに対して返されるデータを表示します。
MetadataId プロパティ値は常に返されます。
要求:
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')?$select=DisplayName,IsKnowledgeManagementEnabled,EntitySetName HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
応答:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#EntityDefinitions(DisplayName,IsKnowledgeManagementEnabled,EntitySetName)",
"value": [
{
"DisplayName": {
"LocalizedLabels": [
{
"Label": "Account",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "2a4901bf-2241-db11-898a-0007e9e17ebd",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Account",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "2a4901bf-2241-db11-898a-0007e9e17ebd",
"HasChanged": null
}
},
"IsKnowledgeManagementEnabled": false,
"EntitySetName": "accounts",
"MetadataId": "70816501-edb9-4740-a16c-6a5efbc05d84"
}
]
}
EntityMetadataシステム クエリ オプションでは、任意の$selectプロパティを使用できます。 プリミティブ値または列挙値を使用する任意のプロパティで $filter を使用できます。
クエリが返すメタデータ エンティティの数に制限はありません。 ページ区切りはありません。 最初の応答は、一致するすべてのリソースを返します。
返される言語を制限する
環境に多くの言語がプロビジョニングされている場合、返されるデータの量が増大する可能性があります。 最適なパフォーマンスを得るために、返す言語の LCID 値と共に LabelLanguages パラメーターを使用して、返される言語ラベルを制限します。
言語コードは 4 桁または 5 桁のロケール ID です。 有効なロケール ID 値は、ロケール ID (LCID) の一覧で確認できます。
たとえば、次の値を追加すると、ローカライズされた言語ラベルが英語に制限されます: &LabelLanguages=1033。
$filter 操作で enum 型の使用
列挙体を使用するプロパティの値に基づいてメタデータ エンティティをフィルター処理する必要がある場合は、文字列値の前に列挙の名前空間を含めます。 Enum 型は、エンティティ メタデータおよび複合型のみのプロパティ値として使用されます。 たとえば、OwnershipType を使用する プロパティに基づいてエンティティをフィルター処理する必要がある場合は、次の$filterを使用して、UserOwnedされているエンティティのみを返します。
GET [Organization URI]/api/data/v9.2/EntityDefinitions?$select=LogicalName&$filter=OwnershipType eq Microsoft.Dynamics.CRM.OwnershipTypes'UserOwned'
$filter 操作で複合型の使用
複合型を使用するプロパティの値に基づいてメタデータ エンティティをフィルター処理する必要がある場合は、基になるプリミティブ型へのパスを含めます。 複合型は、エンティティ メタデータのみのプロパティ値として使用されます。 たとえば、CanCreateAttributes を使用する プロパティに基づいてエンティティをフィルター処理する必要がある場合は、次の$filterを使用して、Valueのtrueを持つエンティティのみを返します。
GET [Organization URI]/api/data/v9.2/EntityDefinitions?$select=LogicalName&$filter=CanCreateAttributes/Value eq true
このパターンは、チェックの対象のプリミティブ値は 1 レベル深いので、BooleanManagedProperty ComplexType に対して機能します。 ただし、このパターンは Label ComplexType のプロパティでは機能しません。
EntityMetadata 属性のクエリ
Attributesコレクション値ナビゲーション プロパティを展開することで、エンティティのコンテキストでエンティティ属性のクエリを実行できます。 この方法には、すべての属性が共有する AttributeMetadata EntityType で使用できる共通プロパティのみが含まれます。 たとえば、次のクエリでは、エンティティのLogicalNameと、AttributeTypeの AttributeTypeCode EnumType 値と等しいPicklist値を持つすべての展開された属性が返されます。
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')?$select=LogicalName&$expand=Attributes($select=LogicalName;$filter=AttributeType eq Microsoft.Dynamics.CRM.AttributeTypeCode'Picklist')
OptionSet または GlobalOptionSet のコレクション値のナビゲーション プロパティを、PicklistAttributeMetadata EntityType 属性が持つ $select フィルターの範囲内に含めることはできません。
特定の種類の属性のプロパティを取得するには、 Attributes コレクション値ナビゲーション プロパティを目的の型にキャストします。 次のクエリでは、 PicklistAttributeMetadata EntityType 属性のみが返されます。
LogicalNameが含まれており、OptionSetとGlobalOptionSetのコレクション値のナビゲーションプロパティを展開します。
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet,GlobalOptionSet
注意
OptionSetおよびGlobalOptionSetコレクション値ナビゲーション プロパティは EnumAttributeMetadata EntityType 内で定義されていますが、この型に属性をキャストすることはできません。 この制限は、これらのプロパティを継承する他の型をフィルター処理するために、個別のクエリを実行する必要があることを意味します。 詳細については、「 EnumAttributeMetadata から継承するエンティティ型」を参照してください。
この制限のもう 1 つの例は、Precision 属性で使用できる プロパティにアクセスすることです。 このプロパティにアクセスするには、属性コレクションを MoneyAttributeMetadata EntityType または DecimalAttributeMetadata EntityType のいずれかにキャストする必要があります。
MoneyAttributeMetadata へのキャストを示す例を以下に示します。
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes/Microsoft.Dynamics.CRM.MoneyAttributeMetadata?$select=LogicalName,Precision
必要なレベルでフィルター処理する
AttributeMetadata EntityType プロパティは、特殊な AttributeRequiredLevelManagedProperty ComplexType を使用します。このとき、Value プロパティは AttributeRequiredLevel EnumType です。 この一意のプロパティでフィルター処理するには、「$filter操作で複合型を使用する」および「$filter操作で列挙型を使用する」にあるパターンを組み合わせます。 次のクエリでは、ApplicationRequired であるアカウント エンティティの属性をフィルター処理します。
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes?$select=SchemaName&$filter=RequiredLevel/Value eq Microsoft.Dynamics.CRM.AttributeRequiredLevel'ApplicationRequired'
属性を取得する
MetadataIdとEntityMetadataの両方のAttributeMetadata、またはいずれかのLogicalName値がわかっている場合は、次の例のようなクエリを使用して、個々の属性を取得し、プロパティ値にアクセスできます。 このクエリは、属性の LogicalName プロパティを取得し、コレクション値ナビゲーション プロパティ OptionSet 展開します。
Microsoft.Dynamics.CRM.PicklistAttributeMetadata として属性をキャストし、OptionSet コレクション値ナビゲーション プロパティにアクセスする必要があります。
要求:
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes(5967e7cc-afbb-4c10-bf7e-e7ef430c52be)/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=LogicalName&$expand=OptionSet HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
応答:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#EntityDefinitions(70816501-edb9-4740-a16c-6a5efbc05d84)/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata(LogicalName,OptionSet)/$entity",
"LogicalName": "preferredappointmentdaycode",
"MetadataId": "5967e7cc-afbb-4c10-bf7e-e7ef430c52be",
"OptionSet@odata.context": "[Organization URI]/api/data/v9.2/$metadata#EntityDefinitions(70816501-edb9-4740-a16c-6a5efbc05d84)/Attributes(5967e7cc-afbb-4c10-bf7e-e7ef430c52be)/Microsoft.Dynamics.CRM.PicklistAttributeMetadata/OptionSet/$entity",
"OptionSet": {
"Options": [
{
"Value": 0,
"Label": {
"LocalizedLabels": [
{
"Label": "Sunday",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "21d6a218-2341-db11-898a-0007e9e17ebd",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Sunday",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "21d6a218-2341-db11-898a-0007e9e17ebd",
"HasChanged": null
}
},
"Description": {
"LocalizedLabels": [],
"UserLocalizedLabel": null
},
"Color": null,
"IsManaged": true,
"MetadataId": null,
"HasChanged": null
}
Additional options removed for brevity
],
"Description": {
"LocalizedLabels": [
{
"Label": "Day of the week that the account prefers for scheduling service activities.",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "1b67144d-ece0-4e83-a38b-b4d48e3f35d5",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Day of the week that the account prefers for scheduling service activities.",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "1b67144d-ece0-4e83-a38b-b4d48e3f35d5",
"HasChanged": null
}
},
"DisplayName": {
"LocalizedLabels": [
{
"Label": "Preferred Day",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "ebb7e979-f9e3-40cd-a86d-50b479b1c5a4",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Preferred Day",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "ebb7e979-f9e3-40cd-a86d-50b479b1c5a4",
"HasChanged": null
}
},
"IsCustomOptionSet": false,
"IsGlobal": false,
"IsManaged": true,
"IsCustomizable": {
"Value": true,
"CanBeChanged": false,
"ManagedPropertyLogicalName": "iscustomizable"
},
"Name": "account_preferredappointmentdaycode",
"OptionSetType": "Picklist",
"IntroducedVersion": null,
"MetadataId": "53f9933c-18a0-40a6-b4a5-b9610a101735",
"HasChanged": null
}
}
属性のプロパティが不要で、 OptionSetなどのコレクション値ナビゲーション プロパティの値のみが必要な場合は、そのプロパティを URL に含め、 $select システム クエリ オプションを使用してプロパティを制限して、より効率的なクエリを実行します。 次の例では、OptionsのOptionSet プロパティのみが含まれています。
要求:
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/Attributes(5967e7cc-afbb-4c10-bf7e-e7ef430c52be)/Microsoft.Dynamics.CRM.PicklistAttributeMetadata/OptionSet?$select=Options HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
応答:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#EntityDefinitions('account')/Attributes(5967e7cc-afbb-4c10-bf7e-e7ef430c52be)/Microsoft.Dynamics.CRM.PicklistAttributeMetadata/OptionSet(Options)/$entity",
"Options": [{
"Value": 0,
"Label": {
"LocalizedLabels": [{
"Label": "Sunday",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "21d6a218-2341-db11-898a-0007e9e17ebd",
"HasChanged": null
}],
"UserLocalizedLabel": {
"Label": "Sunday",
"LanguageCode": 1033,
"IsManaged": true,
"MetadataId": "21d6a218-2341-db11-898a-0007e9e17ebd",
"HasChanged": null
}
},
"Description": {
"LocalizedLabels": [],
"UserLocalizedLabel": null
},
"Color": null,
"IsManaged": true,
"MetadataId": null,
"HasChanged": null
}
Additional options removed for brevity
],
"MetadataId": "53f9933c-18a0-40a6-b4a5-b9610a101735"
}
リレーションシップ メタデータのクエリ
属性のクエリ方法と同様に、特定のエンティティのコンテキストでリレーションシップ メタデータを取得できます。
ManyToManyRelationships、ManyToOneRelationships、および OneToManyRelationships のコレクション値ナビゲーション プロパティは、Attributes のコレクション値ナビゲーション プロパティと同様にクエリできます。 詳細については、「 QueryEntityMetadata 属性」を参照してください。
ただし、 RelationshipDefinitions エンティティ セットを使用してエンティティリレーションシップにクエリを実行することもできます。 すべてのリレーションシップの SchemaName プロパティを取得するには、次の例のようなクエリを使用します。
GET [Organization URI]/api/data/v9.2/RelationshipDefinitions?$select=SchemaName
このプロパティはこのエンティティ セットをクエリしたときに使用可能になり、その使用は RelationshipMetadataBase EntityType のプロパティに限定されます。
RelationshipMetadataBaseから継承されたエンティティ型のプロパティにアクセスするには、次の例のようにクエリ内でキャストを使用して、OneToManyRelationshipMetadata EntityType のみを返します。
GET [Organization URI]/api/data/v9.2/RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata?$select=SchemaName
返されるエンティティは OneToManyRelationshipMetadataとして型指定されるため、 ReferencedEntity などのプロパティをフィルター処理して、次のクエリに示すアカウント エンティティなど、特定のエンティティの一対多エンティティリレーションシップのみを返すクエリを作成できます。
GET [Organization URI]/api/data/v9.2/RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata?$select=SchemaName&$filter=ReferencedEntity eq 'account'
このクエリは、基本的に次のクエリと同じ結果を返します。これは、アカウント エンティティのコレクション値ナビゲーション プロパティ EntityMetadataOneToManyRelationships 含まれているためにフィルター処理されます。 その違いは、前のクエリの場合は、取引先企業エンティティの MetadataId を知る必要がないということです。
GET [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='account')/OneToManyRelationships?$select=SchemaName
クエリ グローバル オプション セット
GlobalOptionSetDefinitions エンティティ セット パスを使用してグローバル オプション セットに関する情報を取得できますが、このパスは、$filter システム クエリ オプションの使用をサポートしていません。 したがって、単一のグローバル オプション セットは、MetadataId または一意の名前でのみ入手できます。
例: MetadataId を使用する
次の例は、 MetadataIdを使用してグローバル オプション セットを取得する方法を示しています。
GET [Organization URI]/api/data/v9.2/GlobalOptionSetDefinitions(08fa2cb2-e3fe-497a-9b5d-ee887f5cc3cd)
名前による例
次の例は、名前で設定されたグローバル オプションを取得する方法を示しています。
GET [Organization URI]/api/data/v9.2/GlobalOptionSetDefinitions(Name='incident_caseorigincode')
グローバル オプション セットを使用する属性の GlobalOptionSet の単一値のナビゲーション プロパティ内から、グローバル オプション セットの定義にアクセスすることもできます。 このプロパティは、すべての EnumAttributeMetadata EntityType 派生型で使用できます。 詳細については、「属性の 取得」を参照してください。
関連項目
Dataverse メタデータで Web API を使用する
名前または MetadataId でのメタデータの取得
Web API を使用したメタデータのエンティティおよび属性
Web API を使用したメタデータエンティティの関係
Web API テーブル スキーマ操作サンプル
Web API テーブル スキーマ操作サンプル (C#)