2017-04-03 17 views
1

Ich habe eine benutzerdefinierte Schaltfläche im Formular einer benutzerdefinierten Entität hinzugefügt, die beim Klicken den Datensatz dupliziert und den neu erstellten Datensatz in einem neuen Fenster öffnet. Die FormType des neu erstellten Datensatzes ist update.CRM2015: Validieren Sie ein Feld beim erstmaligen Aktualisieren eines Formulars

In diesem geöffneten Fenster muss ich wissen, ob die Schaltfläche zum Speichern geklickt wurde. Solange noch nicht geklickt wurde, sollten einige Felder zur Bearbeitung geöffnet sein; Nach dem Anklicken müssen diese Felder deaktiviert werden.

Derzeit habe ich ein (verstecktes) Bitfeld, das angibt, ob der Datensatz ein Duplikat ist, und sein Anfangswert wird auf "True" gesetzt. Auf den ersten Klick auf die Schaltfläche zum Speichern, in meiner onSave Funktion, setze ich es auf falsch. Zusätzlich habe ich eine onLoad Funktion, die dieses Feld auf "wahr" prüft (kann nur vorkommen, wenn ein Datensatz einmal dupliziert wurde) oder auf "falsch".

Mein Problem ist ein logischer: Um dieses Feld beim ersten Speichern auf false zu setzen, muss ich bei jedem Klick auf die Schaltfläche save eine Validierung durchführen (und auch auf nicht duplizierte Datensätze).

Ich dachte, vielleicht kann jemand eine andere, logisch korrekte Art anbieten, die Validierung eines Speichervorgangs nur einmal durchzuführen.

Hier ist der relevante Auszug:

function OnLoad() 
{ 
    // some code... 
    if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true) 
    { 
     // open for edit relevant fields 
    } 
    else 
    { 
     // close for edit relevant fields 
    } 
    // some code... 
} 

function OnSave() 
{ 
    // some code... 
    if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true) 
    { 
     Xrm.Page.getAttribute("sln_isduplicate").setValue(false); 
    } 
    // some code... 
} 

Antwort

1

Ganz einfach anrufen:

Xrm.Page.getAttribute("sln_isduplicate").setValue(false); 

in Ihrer OnLoad-Funktion, nachdem Sie alle Form Modifikationen haben, so:

function OnLoad() 
{ 
    // some code... 
    if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true) 
    { 
     // open for edit relevant fields 
    } 
    else 
    { 
     // close for edit relevant fields 
    } 

    Xrm.Page.getAttribute("sln_isduplicate").setValue(false); 
} 

Es spielt keine Rolle, ob es sich um ein Duplikat handelt oder nicht - Sie möchten, dass der Benutzer dieses Flag auf false setzt, wenn er den Datensatz speichert.

Die andere Möglichkeit wäre, ein Onsave-Ereignis dynamisch hinzuzufügen (weil ich annehme, dass Sie es auf der Formularebene hinzugefügt haben). Im Grunde würde es so aussehen:

if (Xrm.Page.getAttribute("sln_isduplicate").getValue() == true) 
{ 
    // open for edit relevant fields 
    Xrm.Page.data.entity.addOnSave(OnSave); 
} 
else 
{ 
    // close for edit relevant fields 
} 

Dieser Ansatz würde Ihre OnSave Funktion nur für Datensatz hinzufügen, die Duplikate sind.

Aber andererseits würde ich kein benutzerdefiniertes Feld dafür verwenden, sondern einen Abfrageparameter übergeben, um anzuzeigen, dass es sich um ein Duplikat handelt. Sie sind wahrscheinlich die neu erstellte Datensatz wie das Öffnen:

Xrm.Utility.openEntityForm("entityname","A85C0252-DF8B-E111-997C-00155D8A8410"); 

Aber wenn Sie die documentation für diese Funktion zu überprüfen, werden Sie sehen, dass es nützliche Optionen für Dich hat:

Xrm.Utility.openEntityForm(name,id,parameters,windowOptions) 

wo Parameter können Standard-IDs oder einige vollständig benutzerdefinierte Werte (aber Sie müssen configure that)

So natürlich wäre die offensichtliche Lösung: Öffnen Sie Ihren doppelten Datensatz mit einigen benutzerdefinierten Abfrage Zeichenfolge Parameter in Onload-Funktion c heck für diesen Parameter und wenn es da ist, tun Sie einfach Ihre spezifische Logik

+0

Lösungen 2 & 3 sind genau das, was ich gesucht habe, danke! – HeyJude

Verwandte Themen