2013-03-26 8 views
6

W jaki sposób można ustalić, w której wtyczce synchronicznej zmieniono pola?
Wtyczka jest rejestrowana podczas aktualizacji.
Coś jak isDirty() w JavaScript:Dodatek do aktualizacji CRM 2011: Jakie zmieniono pola?

// TODO: Implement your custom Plug-in business logic. 
IOrganizationService service = localContext.OrganizationService; 
Entity account = (Entity)localContext.PluginExecutionContext.InputParameters["Target"]; 
if (account.GetAttributeValue<String>("address1_latitude").isDirty()) 
{ 
    service.Create(new Lead { FirstName = "LOCATION CHANGED" }); // this is a stub 
} 

Odpowiedz

13

atrybuty rzeczywiście obecny w docelowej są te, które uległy zmianie. Niezmienione atrybuty nie pojawiają się tam.

+0

W jaki sposób atrybuty, które nie zostały zmienione, są dostępne? – Bvrce

+8

Używanie pre- lub post-obrazu (http://msdn.microsoft.com/en-us/library/gg309673.aspx#bkmk_preandpost) –

+0

Chciałem użyć IOrganization.Retrieve, ponieważ identyfikator jest dostępny, ale sposób wygląda bardziej efektywnie. – Bvrce

11

Zamierzam nieco rozszerzyć odpowiedź GCATNM. Cel zawiera wszystkie wartości, które będą aktualizowane, niekoniecznie wszystkie wartości, które uległy zmianie.

Jeśli nie wykonasz wyjątkowo "hackowatego" javascriptu w formularzu, jednostka docelowa aktualizacji/tworzy z interfejsu WWW CRM będzie zawsze zawierała tylko te wartości, które uległy zmianie, ponieważ javascript w interfejsie CRM będzie tylko wysyłać w wartościach, które się zmieniły.

Ale jeśli aktualizujesz dane za pomocą innej metody (odata call, C# update za pomocą SDK) i wartości są uwzględniane w żądaniu aktualizacji, które nie uległy zmianie, pojawią się w Target of the podłącz. Na przykład, jeśli masz proces C#, który pobiera wszystkie atrybuty dla konkretnej jednostki, a następnie aktualizuje pojedynczy atrybut, wszystkie atrybuty jednostki pojawią się w miejscu docelowym.

Tak naprawdę cel nie jest tym, co się zmieniło, ale czym będzie istota po zakończeniu wtyczki. Musisz dołączyć atrybuty w obrazie wstępnym, które chcesz sprawdzić pod kątem zmian, aby móc stwierdzić, czy naprawdę zmieniła się wartość.

+0

Twoja odpowiedź jest bardzo trafna. Aktualizuję koordynację GPS przez Resco Mobile CRM; wtyczka jest uruchamiana, gdy łata lub długa zmiana, i udowodni, że przedstawiciel handlowy był na miejscu. Wygląda na to, że w tym przypadku wszystkie wartości pól zostaną znalezione w localContext.PluginExecutionContext.InputParameters ["Target"], więc porównaję wartości obrazu przedobrazowego z wartościami ["Target"], aby upewnić się, czy uległy zmianie. – Bvrce

+0

+1 za użycie obrazu wstępnego :) – glosrob

Powiązane problemy