2017-11-02 3 views
2

Wenn ich eine OnChange Funktion auf ein Feld zu registrieren, wird es gebrannt, wenn das Feld auf ein Plugin auf der Serverseite (On Dynamics CRM 2015)Prevent Abfeuern von OnChange Funktion nach Feld auf Server-Seite aktualisiert wird

aktualisiert Kann dieses Verhalten verhindert werden (auf unterstützte Weise)?

Beispielcode:

1. Client-Seite:

Xrm.Page.getAttribute("org_myfield").addOnChange(function() { alert("org_myfield was changed") }); 

2. Server-Seite:

internal void OnPreUpdateRequest(org_myentity target, org_myentity preImage) 
{ 
    target.org_myfield = "some value"; 
} 

3. Ergebnis (nach dem Speichern zeichne ein d Plugin beendet seinen Lauf):

"org_myfield was changed" 

Erforderliche Ergebnis: Der Alarm nicht ausgelöst werden sollte.

+1

warten, was? Das ist unmöglich :) Wie erreichen Sie das in der Tat? –

+1

Das obige ist genau das, was ich getan habe. Wie ich verstehe, ist dies ein erwartetes Verhalten per [MSDN] (https://msdn.microsoft.com/en-us/library/gg334481.aspx): "Dieses Ereignis [OnChange] tritt auch auf, wenn sich Datenänderungen auf dem Server befinden abgerufen, um ein Feld zu aktualisieren, wenn das Formular aktualisiert wird, z. B. nachdem ein Datensatz gespeichert wurde. " – HeyJude

+0

auf Formularlast oh ja, ich dachte im Leerlauf :) –

Antwort

1

Ich glaube, das ist, was Sie versuchen zu bekommen:
1. Wenn Benutzer Änderungen an diesem Feld vornehmen, rufen Sie die JavaScript-Funktion zum Ändern auf;
2. Wenn der Datensatz gespeichert wird, kann ein Plugin auch den Wert des Feldes ändern;
3. Wenn der Feldwert vom Plugin geändert wird, überspringen Sie die JavaScript-Funktion.

Wenn dies richtig ist, würde ich auf diese Weise versuchen:
Entfernen Sie die onChange Ereignis aus dem Feld, überprüfen stattdessen den Feldstatus in onSave Ereignis des Formulars.
Verwenden Sie Xrm.Page.getAttribute("org_myfield").getIsDirty(), um festzustellen, ob der Benutzer Änderungen am Feld vornimmt. Es prüft nur die Änderungen auf der Client-Seite, so dass es vom Plugin nicht beeinflusst wird.

Verwandte Themen