Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Seu aplicativo cliente pode se conectar a vários ambientes do Dataverse. Use o Serviço de Descoberta Global para localizar quais ambientes o usuário do aplicativo pode acessar.
Em Power Apps, você pode selecionar em uma lista de ambientes disponíveis para você. O Serviço de Descoberta Global é a fonte desses dados. Em seu próprio aplicativo, você pode fornecer um controle seleto para permitir que os usuários escolham qual ambiente eles desejam usar. A escolha deles determina a qual ambiente seu aplicativo deve se conectar.
Com o Dataverse, a alocação de servidor e organização pode ser alterada como parte do gerenciamento de datacenter e do balanceamento de carga. Portanto, o Serviço de Descoberta Global fornece uma maneira de descobrir qual servidor está atendendo uma instância em um determinado momento.
Mais informações:
Serviço de Descoberta Global
O serviço de Descoberta Global, às vezes chamado de GDS, é um conjunto de pontos de conexão OData v4.0 disponíveis em cinco nuvens diferentes.
Note
Embora a API Web do Dataverse e o serviço de Descoberta Global sejam pontos de extremidade OData v4.0, eles são pontos de extremidade separados com comportamentos diferentes.
A tabela a seguir fornece o local do GDS para cada nuvem.
| Nuvem | URL e Descrição |
|---|---|
| Comercial | https://globaldisco.crm.dynamics.comUsado por empresas do setor privado. Essa nuvem é a nuvem mais usada. |
| GCC | https://globaldisco.crm9.dynamics.comNuvem comunitária governamental. Usado por funcionários do setor público e empreiteiros no Estados Unidos. |
| USG | https://globaldisco.crm.microsoftdynamics.usUsado por funcionários e contratados do governo federal dos Estados Unidos. Também conhecido como GCC High. |
| Departamento de Defesa | https://globaldisco.crm.appsplatform.usUsado por funcionários e empreiteiros do Departamento de Defesa do Estados Unidos. |
| China | https://globaldisco.crm.dynamics.cnUsado por empresas na China para cumprir os requisitos regulatórios. |
Mais informações:
- Dynamics 365 Governo dos Estados Unidos
- Aplicativos do Power Platform e Dynamics 365 - operados pela 21Vianet na China
Limitações
O Serviço de Descoberta Global não retorna informações quando:
- A conta do usuário está desabilitada.
- Um grupo de segurança de instância filtra o usuário.
- O usuário obtém acesso sendo um administrador delegado.
Se o usuário de chamada não puder acessar nenhuma instância, a resposta retornará uma lista vazia.
Authentication
O usuário de chamada deve obter um token OAuth 2.0 de Microsoft Entra ID e adicionar esse token no cabeçalho autorização das chamadas à API. Para obter mais informações, consulte Usar a autenticação OAuth com Microsoft Dataverse.
Suporte a CORS
O Serviço de Descoberta dá suporte ao padrão CORS para acesso entre origens. Para obter mais informações sobre o suporte ao CORS, consulte Usar o OAuth com o compartilhamento de recursos entre origens para conectar um aplicativo Single-Page.
Use o Insomnia para se conectar ao Serviço de Descoberta Global
Use a abordagem descrita para a API Web do Dataverse em Usar o Insomnia com a API Web do Dataverse. Em vez das variáveis de ambiente descritas nesse artigo, use as variáveis a seguir para acessar a nuvem comercial.
{
"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"
}
Na guia Autorização , escolha OAuth 2 e defina ou verifique os seguintes valores:
| Field | Value |
|---|---|
| TIPO DE GRANT | Implícito |
| URL DE AUTORIZAÇÃO | _.authurl |
| CLIENTID | _.clientid |
| URL DE REDIRECIONAMENTO | _.redirecturl |
Use GET _.globalDiscoUrl como a URL de Solicitação e selecione Enviar.
Agora você pode fazer consultas ao Global Discovery Service usando o Insomnia.
Serviço de serviço
Para acessar o Serviço de Descoberta Global para cada nuvem, acrescente /api/discovery/v2.0/ à URL. Execute uma GET solicitação nesta URL para exibir o documento de serviço, que contém apenas um único EntitySet: Instances.
Acrescente $metadata à URL da nuvem e envie uma GET solicitação para exibir o documento do serviço CSDL (Common Schema Definition Language). Este documento XML fornece detalhes sobre a Instance entidade e as chaves alternativas definidas para ela.
EntitySet da instância
A tabela a seguir descreve as propriedades da entidade Instance do documento de serviço CDSL $metadata.
| Property | Tipo | Descrição |
|---|---|---|
ApiUrl |
String | A localização que os aplicativos cliente de serviços web devem usar. |
DatacenterId |
String | A ID do data center em que a instância está localizada. |
DatacenterName |
String | O nome do data center em que a instância está localizada. Esse valor normalmente é nulo. |
EnvironmentId |
String | A EnvironmentId para a instância. |
FriendlyName |
String | Um nome para a instância exibida em powerapps.com e outros aplicativos cliente que permitem a seleção de instâncias. |
Id |
Guid | A OrganizationId para o ambiente. |
IsUserSysAdmin |
booleano | Se o usuário de chamada tem a função de administrador do sistema para o ambiente. |
LastUpdated |
DateTimeOffset | Quando o ambiente foi atualizado pela última vez. |
OrganizationType |
Int32 | O tipo da organização. Os valores correspondem ao OrganizationType EnumType |
Purpose |
String | Informações para a finalidade fornecidas quando o ambiente foi criado. |
Region |
String | Um código de 2 a 3 letras para a região em que o ambiente está localizado. |
SchemaType |
String | Somente para uso interno. |
State |
Int32 | Se a organização está 0:habilitada ou 1:desabilitada. |
StatusMessage |
Int32 | Um dos seguintes valores: 0:InstanceLocked1:PendingServiceInstanceMove2:InstanceFailed3:Provisioning 4:InActiveOrganizationStatus5:NewInstance6:InstancePickerReady |
TenantId |
Guid | A ID do locatário associado à instância |
TrialExpirationDate |
DateTimeOffset | Data em que o período de teste da instância expira. |
UniqueName |
String | O nome único da instância. |
UrlName |
String | O nome usado para a URL. |
Version |
String | A versão atual do ambiente. |
Url |
String | A URL do aplicativo do ambiente. |
Você pode usar esses nomes de propriedade com o parâmetro de consulta OData $select para recuperar apenas os dados necessários. Na maioria dos casos, tudo o que você precisará são as propriedades ApiUrl e FriendlyName. Por exemplo:
Solicitação:
GET https://globaldisco.crm.dynamics.com/api/discovery/v2.0/Instances?$select=ApiUrl,FriendlyName HTTP/1.1
Authorization: Bearer <truncated for brevity>
Resposta:
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"
}
]
}
Use a FriendlyName propriedade da interface do usuário do aplicativo para que o usuário reconheça o nome do ambiente. Use o ApiUrl para se conectar ao Dataverse.
O restante das propriedades são principalmente para filtragem.
Filtragem
Você pode filtrar as instâncias retornadas de duas maneiras:
- Usar valores-chave
- Usar opções de consulta OData
$filter
Usar valores-chave
Use o valor UniqueName ou Id para filtrar a lista e retornar somente a instância especificada.
Note
Ao contrário da API Web do Dataverse, o Serviço de Descoberta Global não oferece suporte para recuperar um(a) Instance específico(a) usando Id ou qualquer uma das chaves alternativas definidas para ele. O GDS sempre retorna uma matriz de valores.
Ambas as consultas a seguir retornam uma matriz com um único item:
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
Você também pode usar qualquer um dos seguintes valores de chave alternativa para filtrar valores específicos: Region, , StateVersion. Por exemplo, use a consulta a seguir para retornar somente as instâncias em que a Região representa NA a América do Norte.
GET https://globaldisco.crm.dynamics.com/Instances(Region='NA')?$select=FriendlyName,Region,State,Version,ApiUrl
Usar opções de consulta do OData $filter
Você pode usar opções de consulta OData $filter com qualquer uma das propriedades que se aplicam, incluindo as propriedades de chave alternativa.
Você pode usar os seguintes operadores de comparação, lógica e agrupamento:
| Operador | Descrição | Exemplo |
|---|---|---|
| Operadores de comparação | ||
eq |
Igual | $filter=IsUserSysAdmin eq true |
ne |
Não Igual | $filter=IsUserSysAdmin ne true |
gt |
Maior que | $filter=TrialExpirationDate gt 2022-07-14T00:00:00Z |
ge |
Maior ou igual | $filter=TrialExpirationDate ge 2022-07-14T00:00:00Z |
lt |
Menor que | $filter=TrialExpirationDate lt 2022-07-14T00:00:00Z |
le |
Inferior ou igual | $filter=TrialExpirationDate le 2022-07-14T00:00:00Z |
| Operadores lógicos | ||
and |
E lógico | $filter=TrialExpirationDate gt 2022-07-14T00:00:00Z and IsUserSysAdmin eq true |
or |
OU lógico | $filter=TrialExpirationDate gt 2022-07-14T00:00:00Z or IsUserSysAdmin eq true |
not |
Negação lógica | $filter=not contains(Purpose,'test') |
| Operadores de agrupamento | ||
( ) |
Agrupamento de precedência | (contains(Purpose,'sample') or contains(Purpose,'test')) and TrialExpirationDate gt 2022-07-14T00:00:00Z |
Você pode usar as seguintes funções de consulta de cadeia de caracteres:
| Função | Exemplo |
|---|---|
contains |
$filter=contains(Purpose,'test') |
endswith |
$filter=endswith(FriendlyName,'Inc.') |
startswith |
$filter=startswith(FriendlyName,'A') |
Note
Ao contrário da API Web do Dataverse, as cadeias de pesquisa do Serviço de Descoberta Global fazem distinção entre maiúsculas e minúsculas.
Usando o Dataverse ServiceClient
Para aplicativos .NET, use Dataverse.Client.ServiceClient.Método DiscoverOnlineOrganizationsAsync para chamar os Serviços de Descoberta Global.
// 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;
Embora o método DiscoverOnlineOrganizationsAsync use o mesmo endpoint OData e permita que seja passado como parâmetro em discoveryServiceUri, ele não retorna dados na forma de uma Instância. Ele retorna dados como uma classe DiscoverOrganizationsResult que inclui uma propriedade OrganizationDetailCollection que contém uma coleção de instâncias de classe OrganizationDetail . Essa classe contém as mesmas informações que os Instance tipos retornados pelo serviço OData.
Note
Embora o parâmetro DiscoverOnlineOrganizationsAsync.discoveryServiceUri aceite uma URL para o Serviço de Descoberta Global, o método ignora quaisquer opções de consulta $filter ou $select. O DiscoverOnlineOrganizationsAsync.discoveryServiceUri parâmetro é opcional. Se você não o fornecer, o método usará a nuvem comercial por padrão.
Use CrmServiceClient
Para aplicativos .NET Framework, continue usando o método CrmServiceClient.DiscoverGlobalOrganizations para chamar o Serviço de Descoberta Global.
// 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();
Assim como o ServiceClient.DiscoverOnlineOrganizationsAsync método, o CrmServiceClient.DiscoverGlobalOrganizations método também não retorna dados como uma Instância. Ele retorna um OrganizationDetailCollection que contém uma coleção de instâncias da Classe OrganizationDetail . Essa coleção contém as mesmas informações que os Instance tipos retornados pelo serviço OData.
Consulte Também
Exemplo: Exemplo do Serviço de Descoberta Global (C#)
Exemplo: acessar o serviço de descoberta usando CrmServiceClient
Exemplo: Blazor WebAssembly com Descoberta Global