Compartir por


Asociar y anular la asociación de filas de tabla mediante la SDK para .NET

Las filas de la tabla se asocian entre sí mediante columnas de búsqueda en la fila de la tabla relacionada. La forma más sencilla de asociar dos filas en una relación de uno a varios es utilizar EntityReference para establecer el valor de una columna de búsqueda en la fila relacionada.

La forma más sencilla de desasociar dos filas en una relación de uno a varios es establecer el valor de la columna de búsqueda en null.

Relaciones el uso de una relación de varios a varios también depende de las columnas de búsqueda en la entidad de intersección que apoya la relación de varios a varios. Estas relaciones se definen por la existencia de filas en esa entidad de intersección. Mientras pueda interactuar con la entidad de intersección directamente, es mucho más fácil de usar la API para que lo haga automáticamente.

Usar el método Associate o AssociateRequest

El valor principal al usar el método IOrganizationService.Associate o el AssociateRequest con el método IOrganizationService.Execute es que puede:

  • Asociar varias filas en una sola operación
  • Asocie fácilmente filas utilizando una relación de varios a varios sin preocuparse por la entidad de intersección.

Para asociar filas de tabla con estas API, necesita tres cosas:

  • Una referencia de entidad a la fila que desea asociar
  • El nombre de la relación
  • Una o más referencias a las que desea asociar la fila de la tabla

Si la relación es de uno a varios o de varios a varios no importará. Los parámetros o las propiedades son equivalentes.

Puede detectar los nombres de las relaciones viendo la interfaz de usuario de personalización o en los metadatos mediante el Explorador de metadatos.

Más información:

El siguiente ejemplo establecerá un contacto específico (jimGlynn) como contacto principal para todas las cuentas que se encuentran en Redmond.


// Retrieve the accounts
var query = new QueryByAttribute("account")
{
ColumnSet = new ColumnSet("name")
};
query.AddAttributeValue("address1_city", "Redmond");

EntityCollection accounts = svc.RetrieveMultiple(query);

//Convert the EntityCollection to a EntityReferenceCollection
var accountReferences = new EntityReferenceCollection();

accounts.Entities.ToList().ForEach(x => {
accountReferences.Add(x.ToEntityReference());
});

// The contact to associate to the accounts
var jimGlynn = new EntityReference("contact", 
new Guid("cf76763a-ba1c-e811-a954-000d3af451d6"));

// The relationship to use
var relationship = new Relationship("account_primary_contact");

// Use the Associate method
svc.Associate(jimGlynn.LogicalName, jimGlynn.Id, relationship, accountReferences);

Aunque no haya una ventaja específica en hacerlo así, si se desea usar AssociateRequest, puede reemplazar la última línea con esto:

// Use AssociateRequest
AssociateRequest request = new AssociateRequest()
{
RelatedEntities = accountReferences,
Relationship = relationship,
Target = jimGlynn
};

svc.Execute(request);

Esta operación es igual a tres operaciones de actualización independientes de la columna de búsqueda Account.PrimaryContactId, pero está utilizando la relación account_primary_contact, que es una relación de entidad de varios a uno en la cuenta y una relación de entidad de uno a varios en el contacto.

Si examina las propiedades de las columnas de relación, puede ver que el valor de ReferencingEntity es account y el valor de ReferencingAttribute es primarycontactid.

Usar el método Disassociate o DisassociateRequest

La propiedad IOrganizationService.Disassociate o el DisassociateRequest con el método IOrganizationService.Execute El método es el reverso de la forma en que se asocian las filas de la tabla.

El siguiente código invierte las asociaciones creadas en el ejemplo anterior.

// Retrieve the accounts
var query = new QueryByAttribute("account")
{
ColumnSet = new ColumnSet("name")
};
query.AddAttributeValue("address1_city", "Redmond");

EntityCollection accounts = svc.RetrieveMultiple(query);

//Convert the EntityCollection to a EntityReferenceCollection
var accountReferences = new EntityReferenceCollection();

accounts.Entities.ToList().ForEach(x => {
accountReferences.Add(x.ToEntityReference());
});

// The contact to associate to the accounts
var jimGlynn = new EntityReference("contact", 
new Guid("cf76763a-ba1c-e811-a954-000d3af451d6"));

// The relationship to use
var relationship = new Relationship("account_primary_contact");

// Use the Disassociate method
svc.Disassociate(jimGlynn.LogicalName, jimGlynn.Id, relationship, accountReferences);

Aunque no haya una ventaja específica en hacerlo así, si se desea usar DisassociateRequest, puede reemplazar la última línea con esto:

// Use DisassociateRequest
DisassociateRequest request = new DisassociateRequest()
{
RelatedEntities = accountReferences,
Relationship = relationship,
Target = jimGlynn
};

svc.Execute(request);

Consulte también

Crear filas de tabla con SDK para .NET
Recuperar una fila de tabla usando SDK para .NET
Actualizar y eliminar filas de tablas usando SDK para .NET

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).