Zuordnen und Aufheben der Zuordnung von Tabellenzeilen über das SDK für .NET

Tabellenzeilen werden einander mithilfe von Nachschlagespalten in der zugehörigen Tabellenzeile zugeordnet. Die einfachste Möglichkeit, zwei Zeilen in einer 1:n-Beziehung einander zuzuordnen, ist die Verwendung einer EntityReference, um den Wert einer Nachschlagespalte in der zugehörigen Zeile festzulegen.

Die einfachste Möglichkeit, die Zuordnung von zwei Zeilen in einer 1:n-Beziehung aufzuheben, ist, den Wert der Nachschlagespalte auf NULL festzulegen.

Beziehungen mit einer N:N-Beziehung sind auch von Nachschlagespalten für die überschneidende Entität abhängig, die die N:N-Beziehung unterstützt. Diese Beziehungen werden durch das Vorhandensein von Zeilen in dieser überschneidenden Entität definiert. Wenn Sie mit der überschneidendem Entität direkt interagieren können, ist es viel einfacher, die API dafür zu verwenden.

Nutzen Sie die Zuordnungsmethode doder AssociateRequest

Der Hauptwert während der Verwendung von IOrganizationServiceAssociate Methode oder der AssociateRequest mit dem IOrganizationServiceExecute Methode liegt darin, dass Sie können:

  • Zuordnen mehrerer Zeilen zu einem Vorgang
  • Ordnen Sie Zeilen ganz einfach mithilfe einer N:N-Beziehung zu, ohne sich über die überschneidende Entität Gedanken machen zu müssen.

Um Tabellenzeilen diesen APIs zuzuordnen, benötigen Sie drei Dinge:

  • Eine Entitätsreferenz auf die Zeile, die Sie zuordnen möchten.
  • Der Name der Beziehung
  • Eine oder mehrere Referenzen, denen Sie die Tabellenzeile zuordnen möchten.

Ob die Beziehung eine 1: n- oder n: n-Beziehung ist, ist nicht von Bedeutung. Die Parameter oder die Eigenschaften sind gleich.

Sie können die Namen von Beziehungen finden, indem die die Benutzeroberfläche oder die Metadaten mithilfe des Browsers für Metadaten nutzen.

Weitere Informationen:

Im folgenden Beispiel wird ein bestimmter Kontakt (jimGlynn) als primärer Kontakt für alle Konten in Redmond festgelegt.


// 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);

Obwohl es keinen bestimmten Vorteil auf diese Weise gibt, wenn Sie AssociateRequest verwenden möchten, können Sie die letzten Zeile mit diesem ersetzen:

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

svc.Execute(request);

Dieser Vorgang ist identisch mit drei separaten Aktualisierungsvorgängen für die Nachschlagespalte Konto.PrimaryContactId. Sie verwendet jedoch die Beziehung account_primary_contact, bei der es sich um eine n:1-Entitätsbeziehung für das Konto und eine 1:n-Entitätsbeziehung für den Kontakt handelt.

Wenn Sie die Eigenschaften der Beziehungsspalten untersuchen, werden Sie feststellen, dass ReferencingEntity auf den Wert account festgelegt ist und ReferencingAttribute auf den Wert primarycontactid.

Nutzen Sie die Trennungsmethode oder DissassociateRequest

Im IOrganizationService.Disassociate Methode oder der DisassociateRequest mit dem IOrganizationServiceExecute Methode ist genau das Gegenteil der Art und Weise, wie Sie Tabellenzeilen zuordnen.

Der folgende Code kehrt die Zuordnungen um, die im Beispiel oben gemacht werden.

// 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);

Obwohl es keinen bestimmten Vorteil auf diese Weise gibt, wenn Sie DisassociateRequest verwenden möchten, können Sie die letzten Zeile mit diesem ersetzen:

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

svc.Execute(request);

Siehe auch

Tabellenzeilen mit dem SDK für .NET erstellen
Abrufen einer Tabellenzeile über die SDK für .NET
Aktualisieren und Löschen von Tabellenzeilen über die SDK für .NET

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).