Einrichtung
Ich füge einen Termin zu einer benutzerdefinierten Entität in einem CRM 2011 vor Ort hinzu.
- Ich klicke auf die Schaltfläche "Neue Aktivität" in der Multifunktionsleiste, wähle "Termin" und dann "OK".
- In dem neuen Fenster, das sich öffnet, öffne ich mit F12 den IE-Debugger, wähle die Registerkarte Script, setze einen Haltepunkt sowohl in meiner onLoad-Funktion als auch im crmForm_window_onload_handler der Datei FormScript.js.aspx und klicke auf die Schaltfläche Debugging starten.
- Ich lade dann das Terminfenster neu.
Ausgabe
Der Haltepunkt in crmForm_window_onload_handler trifft, aber wenn ich in das, was sollte die onLoad-Funktion meiner benutzerdefinierten js-Web-Ressource-Datei (appointment.js), anstatt Schritt in die onLoad-Funktion meiner appointment.js-Datei, es Schritte in die onLoad eine exakte Kopie meiner Datei, nur es Name ist Skriptblock (einige zufällige Zahl von 0-99) dh script block(23)
. Warum werden diese Skriptblöcke erstellt? In der On-Save-Anwendung führe ich auch diesen Code aus:
Xrm.Page.getAttribute('new_issyncreqd').setValue(true);
Xrm.Page.getAttribute('new_issyncreqd').setSubmitMode("always");
Aber es wird nicht wirklich gespeichert und ich vermute, dass es mit den Skriptblöcken zusammenhängt...
U
Ich habe herausgefunden, warum der Code, der das IsSyncReqrdField aktualisiert, nicht funktioniert. Dies ist für Site CRM 2011 Version V 5.0.9690.1992 (Rollup 6). Offenbar gibt es einen Fehler für die Entität Appointment, bei dem die Entität zuerst gespeichert und dann der benutzerdefinierte onSave-Code ausgeführt wird. Dies ist, wie es derzeit aussieht:
function crmForm_onsave_handler(eventObj,eventArgs)
{
try
{
var eContext=Mscrm.FormUtility.constructExecutionObject(eventObj,0,eventArgs,null);
eContext = Mscrm.FormUtility.constructExecutionObject(eventObj,0,eventArgs,eContext)
Mscrm.Form_onsave();
eContext=Mscrm.FormUtility.constructExecutionObject(eventObj,1,eventArgs,eContext)
NEW.Appointment.onSave(eContext); // <-- My custom OnSave Handler
}
catch(e)
{
displayError('crmForm', 'onsave', e.description);
}
}
Der Fehler besteht darin, dass die Mscrm.Form_onsave();
Zeile speichert den Datensatz tatsächlich in der Datenbank. Wenn der benutzerdefinierte Ereignishandler ausgeführt wird, wurde der Datensatz bereits gespeichert, und alle Aktualisierungen, die im benutzerdefinierten Ereignishandler vorgenommen werden, werden den Datensatz nicht aktualisieren.
Die Lösung für diesen Fehler besteht darin, die bSaveInProgress = true;
i bSaveInProgress = !isValid; event.returnValue = isValid; in der onSave-Anweisung. Die bSaveInProgress = true;
wird beibehalten Mscrm.Form_onsave();
von der tatsächlichen Speicherung der recrod und die event.returnValue wird tatsächlich dazu führen, dass es erstellt werden. Es funktioniert und ist ein Hack, aber es ist die einzige Sache, die ich mit kommen, um diesen Fehler zu umgehen ...
Das Problem bleibt bestehen
Warum werden Skriptblöcke erstellt und ausgeführt, anstatt die bereits vorhandene Datei zu verwenden?