Compartir a través de


Recuperar metadatos publicados

Categoría: rendimiento, uso

Potencial de impacto: alto

Síntomas

La recuperación de metadatos no publicados puede provocar lo siguiente:

  • Rendimiento más lento
  • Confusión para los usuarios

Instrucciones

Es poco habitual recuperar personalizaciones no publicadas y rara vez es necesario recuperar esas personalizaciones.

Es posible que tenga que recuperar personalizaciones no publicadas si desea crear una aplicación para editar metadatos personalizables. Por ejemplo, si crea un editor de metadatos personalizado, debe recuperar las definiciones no publicadas de esos elementos. Si un desarrollador define algunos cambios pero no los publica, la aplicación debe poder recuperarlos para asegurarse de que el programador está recuperando las personalizaciones desarrolladas más recientemente. Si no se lleva a cabo, podría dar lugar a la pérdida de personalizaciones sin publicar.

Sin embargo, si no va a crear un editor o no tiene una necesidad explícita de recuperar definiciones no publicadas, solo se recuperan las definiciones publicadas. Los ejemplos siguientes muestran cómo recuperar personalizaciones publicadas:

Comportamiento predeterminado

De forma predeterminada, la recuperación de metadatos solo obtendrá personalizaciones publicadas.

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

    return service.Execute(request) as RetrieveAllEntitiesAttributesResponse;
}

Controlar el comportamiento explícitamente

Establezca explícitamente la RetrieveAsIfPublished propiedad para recuperar solo las personalizaciones publicadas.

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

    return service.Execute(request) as RetrieveAllEntitiesAttributesResponse;
}

Patrones problemáticos

Las siguientes operaciones pueden recuperar metadatos no publicados mediante el RetrieveAsIfPublished parámetro :

En los ejemplos siguientes se muestra cómo recuperar personalizaciones no publicadas:

Advertencia

Evite estos escenarios.

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;
}

Funciones de la API web

Esta guía también se aplica a las siguientes funciones de API web:

Información adicional

El servicio Dynamics 365 permite la recuperación de determinados metadatos publicados o no publicados. Desde Dynamics CRM 2011, la caché de metadatos en memoria de la aplicación devuelve metadatos publicados de forma predeterminada, a menos que establezca explícitamente la propiedad RetrieveAsIfPublished en true.

La recuperación de metadatos no publicados agrega sobrecarga al procesamiento de la solicitud, por lo que se realiza más lentamente. También puede devolver metadatos que el solicitante no espera. Por ejemplo, la recuperación de metadatos del conjunto de opciones no publicados puede devolver un valor de etiqueta que no está visible en la interfaz de usuario, lo que provoca confusión para el usuario final.

Consulte también

RetrieveEntityRequest.RetrieveAsIfPublished (propiedad)
Trabaje con metadatos utilizando el SDK para .NET
Usar la API web con metadatos
Publicar personalizaciones