Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 :
- RetrieveAllEntitiesRequest
- RetrieveAllOptionSetsRequest
- RetrieveAttributeRequest
- RetrieveEntityRequest
- RetrieveOptionSetRequest
- RetrieveRelationshipRequest
- RetrieveEntityKeyRequest
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