Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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:
- RetrieveAllEntitiesRequest
- RetrieveAllOptionSetsRequest
- RetrieveAttributeRequest
- RetrieveEntityRequest
- RetrieveOptionSetRequest
- RetrieveRelationshipRequest
- RetrieveEntityKeyRequest
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