Cómo obtener el campo principal (nombre) de cualquier tabla de Dataverse
En cuanto haces código genérico, como un plugin que sirve para varias tablas o una herramienta, necesitas saber cuál es el campo principal de cada una. En cuentas es name, en contactos fullname, en casos title. En vez de ponerlo a mano, yo se lo pido a los metadatos.
En C# basta con un RetrieveEntityRequest:
public static string GetPrimaryNameAttribute(IOrganizationService service, string logicalName)
{
var response = (RetrieveEntityResponse)service.Execute(new RetrieveEntityRequest
{
LogicalName = logicalName,
EntityFilters = EntityFilters.Entity, // solo la tabla, sin columnas: mucho más rápido
});
return response.EntityMetadata.PrimaryNameAttribute; // PrimaryIdAttribute para el id
}Y con la Web API es una sola petición:
GET /api/data/v9.2/EntityDefinitions(LogicalName='account')?$select=PrimaryNameAttribute,PrimaryIdAttributeComo los metadatos casi nunca cambian, no tiene sentido pedirlos dentro de un bucle. Si lo vas a usar mucho, guarda el resultado en una variable estática o en una caché.