Dynamics CRM Zusammenführen von Zwei Kontakte mit C# - code, modifiziert Beispiel aus dem SDK
Ich habe versucht, das Merge-Beispiel in Dynamics CRM 2011 SDK zu arbeiten.
http://msdn.microsoft.com/en-us/library/hh547408.aspx
Ich habe Sie ein bisschen verändert. Ich habe zwei Kontakte statt-Konten (obwohl einige Namen der Variablen im code-sonst schlagen könnte. Zum Beispiel _account1Id ist in der Tat eine GUID für contact1.)
Den ersten Kontakt-Datensatz mit name, Vorname und Telefon-Felder gefüllt.
Der zweite Kontakt-Datensatz mit name, Vorname und E-Mail-Felder gefüllt.
Dem Teil, wo der merge erfolgt ist unten. Der ursprüngliche code kann Biene gesehen aus dem link oben.
Wenn ich das Beispiel mit den folgenden änderungen, die e-mail-Adresse nicht erhalten, eingebunden in die neuen Kontakt-Datensatz. Was ich bekomme ist eine zusammengeführte Kontakt mit den Werten aus einem der Datensätze mit Adressdaten Hinzugefügt, aber keine e-mail. Ich dachte, dies sollte füllen die leeren Felder der primär-Datensatz mit dem nicht-leeren Felder aus dem zweiten Datensatz.
Sehr neue Ms Dynamics CRM, konnte ich nicht den Grund verstehen, nach viel googlen und Debuggen. Ich werde froh sein, wenn jemand kann mir ein feedback über das, was das problem sein könnte.
Vielen Dank im Voraus.
_serviceProxy.EnableProxyTypes();
CreateRequiredRecords(); //created two contacts with same name, surname. first record has telephone1 filled, second record has emailaddress filled.
EntityReference target = new EntityReference();
target.Id = _account1Id;
target.LogicalName = Contact.EntityLogicalName;
MergeRequest merge = new MergeRequest();
merge.SubordinateId = _account2Id;
merge.Target = target;
merge.PerformParentingChecks = false;
Contact updateContent = new Contact();
updateContent.Address1_Line1 = "test";
merge.UpdateContent = updateContent;
MergeResponse merged = (MergeResponse)_serviceProxy.Execute(merge);
Contact mergeeAccount =
(Contact)_serviceProxy.Retrieve(Contact.EntityLogicalName,
_account2Id, new ColumnSet(allColumns: true));
if (mergeeAccount.Merged == true)
{
Contact mergedAccount =
(Contact)_serviceProxy.Retrieve(Contact.EntityLogicalName,
_account1Id, new ColumnSet(allColumns: true));
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verhalten würde wie erwartet - die Verschmelzung Umstieg Kind-Aufzeichnungen für Sie aus dem untergeordneten der master (also potentiell Chancen, Adressen, etc.) aber versuchen Sie nicht, zu trainieren, die Felder, die Sie kopieren möchten, über. Die Argumentation (würde ich vermuten) ist das Potenzial von business Logik, die Auswirkungen sind endlos - tun Sie kopieren möchten über E-Mails? was ist, wenn alle E-Mail-Felder sind gefüllt? was über benutzerdefinierte Felder? Und viele andere Fälle, ich bin mir sicher jeder denken.
Bearbeitet:
Zu umgehen, gibt es eine Eigenschaft, auf die
MergeRequest
Klasse namensUpdateContent
. Wenn Sie die Felder aktualisieren, die auf diese Eigenschaft, die Werte werden zusammengeführt, die in den übergeordneten Datensatz.Können Sie tatsächlich sehen, dieses in den link, den Sie gepostet hat: