Inicio > .NET, C#, CRM 2011, Visual Studio 2010 > CRM 2011 Linq (Join) Early Binding

CRM 2011 Linq (Join) Early Binding

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }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

OrganizationServiceContext

Este 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))
{

var Query = (from own in osc.CreateQuery<SystemUser>()

join cli in osc.CreateQuery<Account>() 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 }
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: