Tag Archives: audit log

Der Überwachungsverlauf zeigt Updates auch auf nicht veränderten Properties

Folgendes Szenario: Ich hole mir einen Account (allen seinen Feldern), verändere dessen Namen und speichere diese Änderung.
Das könnte z.B. mit folgendem Code gemacht werden.

var account = OrganizationService.RetrieveMultiple(
    new QueryExpression("account") { ColumnSet = new ColumnSet(true) })
    .Entities.First();

OrganizationService.Update(account);

Ohne Frage, es funktioniert. Es gibt jedoch ein Problem. Das CRM ist nicht intelligent genug um wirklich nur die veränderten Felder zu verändern. Ein Blick in den Audit Log verrät, dass alle Felder verändert werden.

Update_1

Es gibt drei Gründe weshalb das nicht gewünscht sein könnte.
1. Performance
2. Unübersichtlicher Audit Log
3. Workflow/Plug-Ins welche auf dem Field Change getriggert werden

Was ist die Lösung? Am einfachsten ist es jeweils eine neue Instanz einer “Entity” zu erstellen. Dabei wird die Id des Records gesetzt, welcher updated werden soll. Danach wird nur das Feld gesetzt, dass den geänderten Wert enthält.

var account = OrganizationService.RetrieveMultiple(
    new QueryExpression("account") { ColumnSet = new ColumnSet(true) })
    .Entities.First();

var updateAccount = new Entity("account") { Id = account.Id };
updateAccount["name"] = "Neuer Name2";

OrganizationService.Update(updateAccount);

Ein erneuter Blick in den Audit Log zeigt, dass diese Lösung wie gewünscht funktioniert.

Update_2