Compartir a través de


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 manera 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 admite la relación de varios a varios. Las 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 sencillo de usar la API para que haga esta tarea automáticamente.

Usar el método Associate o AssociateRequest

El principal valor de usar el método IOrganizationService.Associate o 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:

En el ejemplo siguiente se crea una relación y se asocia una entidad principal a una colección de entidades relacionadas.

/// <summary>
/// Associate a primary entity with one or more other entities,
/// then remove the association.
/// </summary>
/// <param name="service">Authenticated web service connection.</param>
/// <param name="primaryEntity">Primary entity for the association.</param>
/// <param name="relationship">Type of relationship between the entities.</param>
/// <param name="relatedEntities">Related entities to associate with the primary entity.</param>
/// <returns>True if successful; otherwise false.</returns>
static public bool AssociateDisassociate(IOrganizationService service,
    EntityReference primaryEntity, string relationship,
    EntityReferenceCollection relatedEntities
    )
{
    // Define the type of relationship between the entities.
    var relation = new Relationship(relationship);

    try
    {
        // Associate the primary entity with the related entities.
        service.Associate(primaryEntity.LogicalName, primaryEntity.Id,
                    relation, relatedEntities);

        Console.WriteLine(
            $"AssociateDisassociate(): The entities have been associated.");

        // Disassociate the primary entity with the related entities.
        service.Disassociate(primaryEntity.LogicalName, primaryEntity.Id,
            relation, relatedEntities);

        Console.WriteLine(
            $"AssociateDisassociate(): The entities have been disassociated.");
        return true;
    }
    catch (Exception ex)
    {
        Console.WriteLine(
            $"AssociateDisassociate(): {ex.Message}");
        return false;
    }
}

Ejemplo de código completo: AssociateDisassociate

Si quisieras usar el AssociateRequest, usarías el siguiente código. Una ventaja de usar la solicitud en lugar del método de cliente de servicio es que la solicitud admite el uso de parámetros opcionales.

AssociateRequest request = new AssociateRequest()
{
RelatedEntities = relatedEntities,
Relationship = relation,
Target = primaryEntity
};

service.Execute(request);

Supongamos que asociamos una entidad principal (un contacto) con tres entidades relacionadas (cuentas). Esta única operación de asociación que se muestra arriba es lo mismo que tres operaciones de actualización independientes donde se establece la columna de búsqueda Cuenta.PrimaryContactId. En su lugar, el método de cliente de servicio o la llamada de solicitud más simples usan la relación de account_primary_contact que establece una relación de entidad de varios a uno en cada cuenta relacionada 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

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

Puede ver un ejemplo de Disassociate llamada al método en el ejemplo de código mostrado anteriormente. Si quisieras usar el DisassociateRequest, el código se vería así:

DisassociateRequest request = new DisassociateRequest()
{
RelatedEntities = relatedEntities,
Relationship = relation,
Target = primaryEntity
};

service.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