クライアント アプリケーションは、複数の Dataverse 環境に接続できます。 グローバル探索サービスを使用して、アプリケーションのユーザーがアクセスできる環境を見つけます。
Power Appsでは、使用可能な環境の一覧から選択できます。 グローバル探索サービスは、そのデータのソースです。 ユーザーが使用する環境を選択可能にする場合は、独自のアプリで選択コントロールを提供します。 選択によって、アプリが接続する必要がある環境が決まります。
Dataverse では、データセンターの管理と負荷分散の一環として、サーバーと組織の割り当てが変更される可能性があります。 そのためグローバル探索サービスには、ある特定の時点でインスタンスを処理しているサーバーを検出する方法が用意されています。
詳細情報:
Global Discovery サービス
グローバル探索サービス (GDS とも呼ばれます) は、5 つの異なるクラウドで使用できる一連の OData v4.0 エンドポイントです。
注記
Dataverse Web API と Global Discovery サービスはどちらも OData v4.0 エンドポイントですが、動作が異なる個別のエンドポイントです。
次のテーブルは、それぞれのクラウドに対する GDS の場所を示します。
| クラウド | URL と説明 |
|---|---|
| 商用 | https://globaldisco.crm.dynamics.com民間企業が使用します。 このクラウドは、最も一般的に使用されるクラウドです。 |
| GCC | https://globaldisco.crm9.dynamics.comGovernment Community Cloud。 米国の公的部門の従業員と請負業者が使用します。 |
| USG | https://globaldisco.crm.microsoftdynamics.us米国連邦政府の従業員および請負業者が使用します。 GCC High とも呼ばれます。 |
| DOD | https://globaldisco.crm.appsplatform.us米国国防総省の職員および請負業者が使用します。 |
| 中国 | https://globaldisco.crm.dynamics.cn規制要件に準拠するために中国の企業が使用します。 |
詳細情報:
制限
グローバル探索サービスは、次の場合に情報を返しません。
- ユーザーのアカウントが無効である。
- インスタンス セキュリティ グループは、ユーザーを除外します。
- ユーザーは、委任された管理者であることによってアクセス権を取得します。
呼び出し元のユーザーがインスタンスにアクセスできない場合、応答は空のリストを返します。
認証
呼び出し元のユーザーは、Microsoft Entra IDから OAuth 2.0 トークンを取得し、API 呼び出しの Authorization ヘッダーにそのトークンを追加する必要があります。 詳細については、「Microsoft Dataverseでの OAuth 認証の使用」を参照してください。
CORS サポート
検出サービスはクロスオリジン アクセスの CORS 標準に対応しています。 CORS サポートの詳細については、「 クロスオリジン リソース共有で OAuth を使用して Single-Page アプリケーションを接続する」を参照してください。
Insomnia を使用してグローバル探索サービスに接続する
Dataverse Web API での不眠症の使用に関するページの Dataverse Web API で説明されているのと同じ方法を使用します。 この記事で説明されている環境変数の代わりに、次の変数を使用して商用クラウドにアクセスします。
{
"cloudUrl": "https://globaldisco.crm.dynamics.com",
"globalDiscoUrl": "{{cloudUrl}}/api/discovery/v2.0/",
"redirecturl": "https://localhost",
"authurl": "https://login.microsoftonline.com/common/oauth2/authorize?resource={{cloudUrl}}",
"clientid": "51f81489-12ee-4a9e-aaae-a2591f45987d"
}
[ 承認 ] タブで、[ OAuth 2 ] を選択し、次の値を設定または確認します。
| フィールド | 価値 |
|---|---|
| 付与の種類 | 暗黙 |
| 認証 URI | _.authurl |
| CLIENTID | _.clientid |
| リダイレクト URL | _.redirecturl |
GET _.globalDiscoUrl を 要求 URL として使用して 送信を選択します。
Insomnia を使用して、Global Discovery Service にクエリを実行できるようになりました。
サービス ドキュメント
各クラウドのグローバル探索サービスにアクセスするには、URL に /api/discovery/v2.0/ を追加します。 この URL に対して GET 要求を実行して、1 つの EntitySet: Instancesのみを含むサービス ドキュメントを表示します。
$metadata をクラウドの URL に付加して GET リクエストを送信し、CSDL (共通スキーマ定義言語) のサービス ドキュメントを表示します。 この XML ドキュメントは、Instance エンティティと、それに対して定義された代替キーの詳細を提供します。
インスタンス エンティティ セット
次のテーブルでは、$metadata CDSL サービス ドキュメントが含む Instance エンティティのプロパティについて説明します。
| プロパティ | タイプ | 説明 |
|---|---|---|
ApiUrl |
文字列 | クライアント アプリケーションが使用する Web サービスの場所。 |
DatacenterId |
文字列 | インスタンスが配置されたデータセンターの ID。 |
DatacenterName |
文字列 | インスタンスが配置されたデータセンターの名前。 通常、この値は null です。 |
EnvironmentId |
文字列 | インスタンスの環境 ID。 |
FriendlyName |
文字列 | インスタンスの名前。powerapps.com と、インスタンスを選択できるその他のクライアント アプリケーションに表示します。 |
Id |
Guid | 環境の組織 ID。 |
IsUserSysAdmin |
ブール値 | 環境のシステム管理者ロールを呼び出し元のユーザーが持っているかどうか。 |
LastUpdated |
DateTimeOffset | 環境を最後に更新した日時。 |
OrganizationType |
Int32 | 組織の種類。 OrganizationType EnumType に対応する値 |
Purpose |
文字列 | 環境の作成時に提供した目的の情報。 |
Region |
文字列 | 環境が配置された地域を表す 2 ~ 3 文字のコード。 |
SchemaType |
文字列 | 内部でのみ使用します。 |
State |
Int32 | 組織が有効 (0) か無効 (1) であるか。 |
StatusMessage |
Int32 | 次のいずれかの値:0:InstanceLocked1:PendingServiceInstanceMove2:InstanceFailed3:Provisioning 4:InActiveOrganizationStatus5:NewInstance6:InstancePickerReady |
TenantId |
Guid | インスタンスに関連付けられたテナントの ID |
TrialExpirationDate |
DateTimeOffset | インスタンスの試用期間が終了する日付。 |
UniqueName |
文字列 | インスタンスを表す一意の名前。 |
UrlName |
文字列 | URL に使用する名前。 |
Version |
文字列 | 環境の現在のバージョン。 |
Url |
文字列 | 環境のアプリケーション URL。 |
これらのプロパティ名を OData $select クエリ パラメータで使用して、必要なデータだけを取得できます。 ほとんどの場合、FriendlyName と ApiUrl プロパティのみが必要です。 例:
要求:
GET https://globaldisco.crm.dynamics.com/api/discovery/v2.0/Instances?$select=ApiUrl,FriendlyName HTTP/1.1
Authorization: Bearer <truncated for brevity>
応答:
HTTP/1.1 200 OK
Content-Length: 625
Content-Type: application/json; odata.metadata=minimal
odata-version: 4.0
{
"@odata.context":"https://10.0.1.76:20193/api/discovery/v2.0/$metadata#Instances(ApiUrl,FriendlyName)",
"value":[
{
"ApiUrl":"https://yourorganization.api.crm.dynamics.com",
"FriendlyName":"Your Organization"
}
]
}
ユーザーが環境の名前を認識できるように、アプリケーション UI に FriendlyName プロパティを使用します。
ApiUrl を使用して Dataverse に接続します。
残りのプロパティは主にフィルターに使用します。
フィルター
返されるインスタンスは、次の 2 つの方法でフィルター処理できます。
- キー値を使用する
- OData
$filterクエリ オプションを使用する
キー値を使用する
IdまたはUniqueName値を使用してリストをフィルター処理し、指定したインスタンスのみを返します。
注記
Dataverse Web API とは異なり、Global Discovery Service では、Idまたはそれに対して定義されている代替キーを使用した特定のInstanceの取得はサポートされていません。 GDS は常に値の配列を返します。
次のどちらのクエリでも、1 つの項目を含む配列が返されます。
GET https://globaldisco.crm.dynamics.com/Instances(6bcbf6bf-1f2a-4ab9-9901-2605b314d72d)?$select=ApiUrl,FriendlyName,Id,UniqueName
GET https://globaldisco.crm.dynamics.com/Instances(UniqueName='unq6bcbf6bf1f2a4ab999012605b314d')?$select=ApiUrl,FriendlyName,Id,UniqueName
また、次のいずれかの代替キー値を使用して、特定の値 ( Region、 State、 Version) をフィルター処理することもできます。 たとえば、次のクエリを使用して、リージョンが北米を表 NA インスタンスのみを返します。
GET https://globaldisco.crm.dynamics.com/Instances(Region='NA')?$select=FriendlyName,Region,State,Version,ApiUrl
OData $filter クエリ オプションを使用する
OData $filter クエリ オプションは、代替キー のプロパティを含め、適用される任意のプロパティと共に使用できます。
次の比較演算子、論理演算子、およびグループ化演算子を使用できます。
| 演算子 | 説明 | 例 |
|---|---|---|
| 比較演算子 | ||
eq |
等しい | $filter=IsUserSysAdmin eq true |
ne |
等しくない | $filter=IsUserSysAdmin ne true |
gt |
より大きい | $filter=TrialExpirationDate gt 2022-07-14T00:00:00Z |
ge |
以上(≧) | $filter=TrialExpirationDate ge 2022-07-14T00:00:00Z |
lt |
未満 | $filter=TrialExpirationDate lt 2022-07-14T00:00:00Z |
le |
以下 | $filter=TrialExpirationDate le 2022-07-14T00:00:00Z |
| 論理演算子 | ||
and |
論理積 | $filter=TrialExpirationDate gt 2022-07-14T00:00:00Z and IsUserSysAdmin eq true |
or |
論理和 | $filter=TrialExpirationDate gt 2022-07-14T00:00:00Z or IsUserSysAdmin eq true |
not |
論理否定 | $filter=not contains(Purpose,'test') |
| グループ化演算子 | ||
( ) |
優先順位のグループ化 | (contains(Purpose,'sample') or contains(Purpose,'test')) and TrialExpirationDate gt 2022-07-14T00:00:00Z |
次の文字列クエリ関数を使用できます:
| 機能 | 例 |
|---|---|
contains |
$filter=contains(Purpose,'test') |
endswith |
$filter=endswith(FriendlyName,'Inc.') |
startswith |
$filter=startswith(FriendlyName,'A') |
注記
Dataverse Web API とは異なり、グローバル探索サービスの検索文字列は大文字と小文字を区別します。
Dataverse ServiceClient を使用する
.NET アプリケーションの場合は、Dataverse.Client.ServiceClient を使用します。グローバル探索サービスを呼び出す DiscoverOnlineOrganizationsAsync メソッド。
// Set up user credentials
var creds = new System.ServiceModel.Description.ClientCredentials();
creds.UserName.UserName = userName;
creds.UserName.Password = password;
//Call DiscoverOnlineOrganizationsAsync
DiscoverOrganizationsResult organizationsResult = await ServiceClient.DiscoverOnlineOrganizationsAsync(
discoveryServiceUri: new Uri($"{cloudRegionUrl}/api/discovery/v2.0/Instances"),
clientCredentials: creds,
clientId: clientId,
redirectUri: new Uri(redirectUrl),
isOnPrem: false,
authority: "https://login.microsoftonline.com/organizations/",
promptBehavior: PromptBehavior.Auto);
return organizationsResult;
DiscoverOnlineOrganizationsAsync メソッドは同じ OData エンドポイントを使用し、discoveryServiceUri パラメーターで渡すことができますが、インスタンスの形でデータを返しません。 これは、OrganizationDetail クラス インスタンスのコレクションを含む OrganizationDetailCollection プロパティを含む DiscoverOrganizationsResult クラスとしてデータを返します。 このクラスは、OData サービスによって返される Instance タイプと同じ情報を含みます。
注記
DiscoverOnlineOrganizationsAsync.discoveryServiceUri パラメーターはグローバル探索サービスへの URL を受け取りますが、$selectまたは$filterのクエリ オプションは無視されます。
DiscoverOnlineOrganizationsAsync.discoveryServiceUri パラメーターは省略可能です。 指定しない場合、このメソッドは既定で商用クラウドに設定されます。
CrmServiceClient を使用する
.NET Framework アプリケーションの場合は、引き続き CrmServiceClient.DiscoverGlobalOrganizations メソッドを使用してグローバル探索サービスを呼び出します。
// Set up user credentials
var creds = new System.ServiceModel.Description.ClientCredentials();
creds.UserName.UserName = userName;
creds.UserName.Password = password;
// Call to get organizations from global discovery
var organizations = CrmServiceClient.DiscoverGlobalOrganizations(
discoveryServiceUri:new Uri($"{cloudRegionUrl}/api/discovery/v2.0/Instances"),
clientCredentials: creds,
user: null,
clientId: clientId,
redirectUri: new Uri(redirectUrl),
tokenCachePath: "",
isOnPrem: false,
authority: string.Empty,
promptBehavior: PromptBehavior.Auto);
return organizations.ToList();
ServiceClient.DiscoverOnlineOrganizationsAsync メソッドと同様に、CrmServiceClient.DiscoverGlobalOrganizations メソッドもインスタンスとしてデータを返しません。
これは、OrganizationDetail クラス インスタンスのコレクションを含む OrganizationDetailCollection を返します。 このコレクションには、OData サービスによって返される Instance 型と同じ情報が含まれています。
関連情報
サンプル: グローバル探索サービス (C#)
サンプル: CrmServiceClient を使用して探索サービスにアクセスする
サンプル: グローバル検索を利用した Blazor WebAssembly