Para realizar un Join de entidades del CRM se deben tener previamente la clase compilada que representa a sus entidades (futuro post como generarla)
Lo primero que se necesita es tener el proxy con la interface IOrganizationService
public IOrganizationService getService()
{
IOrganizationService _serv;
Uri OrgUri = new Uri(string.Format(ConfigurationManager.AppSettings["UrlCrm"].ToString()));
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = ConfigurationManager.AppSettings["UId"].ToString();
credentials.UserName.Password = ConfigurationManager.AppSettings["PId"].ToString();
OrganizationServiceProxy _srvproxy = new OrganizationServiceProxy(OrgUri, null, credentials, null);
_srvproxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
_serv = (IOrganizationService)_srvproxy;
return _serv;
}
Este método es indispensable para cualquier comunicación con el CRM.
Ahora bien vamos a acceder al CRM con Linq mediante vinculación temprana, para hacerlo se necesita crear un contexto de ejecucion con la clase
OrganizationServiceContextEste tiene un metodo llamado CreateQuery. que tiene 2 implementaciones; la primera se le pasa entre paréntesis el nombre de la entidad que se quiere mapear, pero esto es Late Binding, y la otra pasarle el nombre de la clase como genérico con <> Esto es Early Bound
CreateQuery<SystemUser>
Finalmente tenemos la siguiente implementación donde se consultan 2 entidades del CRM, es muy importante que si se usan filtros, se debe poner un WHERE por entidad, ya que si no se hace bolas y confunde los campos de las entidades, aunque están escritos explícitamente.
_srv = getService();
using (OrganizationServiceContext osc = new OrganizationServiceContext(_srv))
{join cli in osc.CreateQuery<Account>()var Query = (from own in osc.CreateQuery<SystemUser>()
on own.Field2.Id equals cli.Dield2.Id
where (own.SystemUserId.Value == OwnerId)
where (cli.AccountId.Value == ClienteId)
select new
{
sucursal = own.Field1.Id
});
// Utilizar la variable Query
}
No hay comentarios:
Publicar un comentario