martes, 16 de febrero de 2010

Como recoger todas las entidades del CRM

Al trabajar con CRM, muchas veces nos desarrollamos nuestras propias herramientas para hacer las tareas rutinarias mas sencillas, o para ofrecer a los usuarios la posibilidad de hacer cosas que el CRM de forma estandar no recoge.
Para esto puede ser que necesitemos a veces conocer todas las entidades que hay en el CRM, como por ejemplo para rellenear una lista o un desplegable.
Aquí les dejo un pequeño código en donde se recogen todas las entidades del CRM y se devuelven en un ArrayList:

public ArrayList GetEntidades(string servidor, string empresa, string usuario, string password, string dominio)
{
ArrayList arrEntidades = new ArrayList();

MetadataService metadataService = ConectaMetadata(servidor, empresa, usuario, password, dominio);

RetrieveAllEntitiesRequest allEntitiesRequest = new RetrieveAllEntitiesRequest();
allEntitiesRequest.RetrieveAsIfPublished = false;
allEntitiesRequest.MetadataItems = MetadataItems.EntitiesOnly;

RetrieveAllEntitiesResponse allEntitiesResponse = (RetrieveAllEntitiesResponse)metadataService.Execute(allEntitiesRequest);

foreach (EntityMetadata entity in allEntitiesResponse.CrmMetadata)
{
arrEntidades.Add(entity.SchemaName);
}
arrEntidades.Sort();
return arrEntidades;
}

MetadataService ConectaMetadata(string servidor, string empresa, string usuario, string password, string dominio)
{
//1) Recojo los datos de la entidad original
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.OrganizationName = empresa;
token.AuthenticationType = 0;

MetadataService metadataService = new MetadataService();
metadataService.Url = "http://" + servidor + "/MSCRMServices/2007/MetadataService.asmx";
metadataService.CrmAuthenticationTokenValue = token;
if (usuario != "")
{
metadataService.Credentials = new System.Net.NetworkCredential(usuario, password, dominio);
}
else
{
metadataService.Credentials = System.Net.CredentialCache.DefaultCredentials;
}
metadataService.PreAuthenticate = true;
return metadataService;
}

A la funcion "GetEntidades" hay que pasarle todos los datos de conexión y de autenticación, y dicha funcion devolverá el listado de todas las entidades del CRM.
La función "ConectaMetadata" conecta con el web service de metadatos, si el usuario es "vacío", se conectará con las credenciales por defecto (DefaultCredentials).

Un saludo!

No hay comentarios:

Publicar un comentario