Partilhar via


Recuperar metadados publicados

Categoria: Desempenho, Uso

Potencial de impacto: Alto

Symptoms

A recuperação de metadados não publicados pode causar:

  • Desempenho mais lento
  • Confusão do usuário

Orientações

É incomum recuperar personalizações não publicadas e você raramente precisa recuperar essas personalizações.

Talvez seja necessário recuperar personalizações não publicadas se quiser criar um aplicativo para editar metadados personalizáveis. Por exemplo, se você criar um editor de metadados personalizado, deverá recuperar quaisquer definições não publicadas desses itens. Se um desenvolvedor definir algumas alterações, mas não as publicar, seu aplicativo deverá ser capaz de recuperá-las para garantir que o desenvolvedor esteja recuperando as personalizações mais recentes desenvolvidas. A falha ao fazer isso pode resultar na perda de personalizações não publicadas.

No entanto, se você não estiver criando um editor ou não tiver uma necessidade explícita de recuperar definições não publicadas, recupere apenas as definições publicadas. Os exemplos a seguir mostram como recuperar personalizações publicadas:

Comportamento padrão

Por padrão, ao recuperar metadados, apenas personalizações publicadas são obtidas.

public RetrieveAllEntitiesAttributesResponse GetAllEntitiesImplicit(IOrganizationService service)
{
    var request = new RetrieveAllEntitiesRequest();
    request.EntityFilters = EntityFilters.Attributes;

    return service.Execute(request) as RetrieveAllEntitiesAttributesResponse;
}

Controlando explicitamente o comportamento

Defina explicitamente a RetrieveAsIfPublished propriedade para recuperar somente personalizações publicadas.

public RetrieveAllEntitiesAttributesResponse GetAllEntitiesExplicit(IOrganizationService service)
{
    var request = new RetrieveAllEntitiesRequest()
    {
        RetrieveAsIfPublished = false
        EntityFilters = EntityFilters.Attributes
    };

    return service.Execute(request) as RetrieveAllEntitiesAttributesResponse;
}

Padrões problemáticos

As operações a seguir podem recuperar metadados não publicados por meio do RetrieveAsIfPublished parâmetro:

Os exemplos a seguir mostram como recuperar personalizações não publicadas:

Aviso

Evite esses cenários.

public RetrieveEntityKeyResponse GetEntityKey(IOrganizationService service, string entityName, string keyName)
{
    var request = new RetrieveEntityKeyRequest()
    {
        EntityLogicalName = entityName,
        LogicalName = keyName,
        RetrieveAsIfPublished = true
    };

    return service.Execute(request) as RetrieveEntityKeyResponse;
}

public RetrieveRelationshipResponse GetRelationship(IOrganizationService service, Guid id)
{
    var request = new RetrieveRelationshipRequest()
    {
        MetadataId = id,
        RetrieveAsIfPublished = true
    };

    return service.Execute(request) as RetrieveRelationshipResponse;
}

public RetrieveEntityAttributesResponse GetEntity(IOrganizationService service, Guid id)
{
    var request = new RetrieveEntityRequest()
    {
        MetadataId = id,
        RetrieveAsIfPublished = true,
        EntityFilters = EntityFilters.Attributes
    };

    return service.Execute(request) as RetrieveEntityAttributesResponse;
}

Funções de API Web

Essa orientação também se aplica às seguintes funções de API Web:

Informações adicionais

O serviço Dynamics 365 permite a recuperação de determinados metadados publicados ou não publicados. Desde Dynamics CRM 2011, o cache de metadados na memória do aplicativo retorna metadados publicados por padrão, a menos que você defina explicitamente a propriedade RetrieveAsIfPublished como true.

A recuperação de metadados não publicados adiciona sobrecarga ao processamento da solicitação, para que ela seja executada mais lentamente. Ele também pode retornar metadados que o solicitante não espera. Por exemplo, recuperar metadados de conjunto de opções não publicados pode retornar um valor de rótulo que não está visível na interface do usuário, causando confusão para o usuário final.

Consulte também

Propriedade RetrieveEntityRequest.RetrieveAsIfPublished
Trabalho com metadados usando o SDK para .NET
Usar a API Web com metadados
Publicar personalizações