Leer metadatos del MS Dynamics…

Para leer los metadatos de Ms Daynamics CRM, se puede utilizar la misma api que provee, el siguiente código lo use para extraer los tipos de casos definidos.

try
 {
 List tipos = new List();
 OrganizationServiceProxy servicio = ConectarCrm.CreateOrganization();
 RetrieveEntityRequest retriveEntity = new RetrieveEntityRequest()
 {
 EntityFilters = EntityFilters.Attributes | EntityFilters.Entity | EntityFilters.Relationships
 ,
 LogicalName = Incident.EntityLogicalName
 };
 RetrieveEntityResponse entityResponse = servicio.Execute(retriveEntity) as RetrieveEntityResponse;
 EntityMetadata entity = entityResponse.EntityMetadata;
 foreach (AttributeMetadata atr in entity.Attributes)
 {
 if ((atr is Microsoft.Xrm.Sdk.Metadata.PicklistAttributeMetadata) && (atr.LogicalName.Equals("casetypecode")))
 {
 OptionSetMetadata op = (atr as Microsoft.Xrm.Sdk.Metadata.PicklistAttributeMetadata).OptionSet;
 foreach (OptionMetadata valor in op.Options)
 {
 TipoCasoDto tipo = new TipoCasoDto();
 tipo.IdOpcion = valor.Value.Value;
 tipo.Opcion = valor.Label.UserLocalizedLabel.Label;
 tipos.Add(tipo);
 }
 }
 }
 servicio.Dispose();
 return tipos;
 }
 catch (Exception ex)
 {
 throw new UdlaException(ex);
 }

Mis aventuras con el CRM de microsoft

Ahora que estoy de lleno metido en el mundo del CRM y me han salido varias cosas que hacer, mejor las ordeno para el futuro lejano..

Lo primero son los plugin del CRM… existen 2 tipos (hasta el momento que me ha tocado hacer) plugin aplicados a entidades y plugins que corren sobre los workflow como actividades. Entiendo que el CRM ocupa Workflow Foundation, para sus workflow, por lo que si saben algo de eso por ahi pueden empezar.

Para hacer un plugin de entidad… bueno deben bajar el SDk del CRM y utilizar las siguientes referencias

using Microsoft.Xrm.Sdk;

using Microsoft.Xrm.Sdk.Workflow;

using Microsoft.Xrm.Sdk.Query;

using Microsoft.Xrm.Sdk.Client;

y heredar la interfaz IPlugin…

public class PluginCotizacion : IPlugin

para el caso de los plugin que se ejecutan en el workflow se debe heredar de la clase abstracta

CodeActivity

public class CalcularDias : CodeActivity

Para utilizar el contexto de ejecución del plugin se requiere lo siguiente.

en ambos caso hay que implementar el método

 public void Execute(IServiceProvider serviceProvider)

para el caso del plugin de Entidades y para el caso de un plugin de workflow

 protected override void Execute(CodeActivityContext executionContext)

como notarán se implementa de forma distinta

Para acceder al WebService del CRM mediante el contexto se puede hacer de la siguiente forma.

 IPluginExecutionContext context =

(IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

IOrganizationServiceFactory serviceFactory =

(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService servicio = serviceFactory.CreateOrganizationService(context.UserId);

y para el caso de un plugin de workflow de la siguiente forma

 IOrganizationServiceFactory factory = executionContext.GetExtension<IOrganizationServiceFactory>();

IOrganizationService service = factory.CreateOrganizationService(null);

Con esto ya tenemos acceso al WebService del CRM y podemos hacer CRUD de las entidades del CRM.

Cómo  registrar el plugin y cómo obtener las clases que representan las entidades, lo dejo para otra entrada, pero básicamente se hace con el plugin registration tool del SDK del Crm y con el crmcvcutil.exe…

ambos están en la carpeta bin del SDK…

suerte.