Feld "read-only" Attribut wird ignoriert bei Laden des Formulars
-
Tuesday, 15 May, 2012 6:34 AM
Guten Morgen,
nachdem gestern mein Problem mit der Kalkulation des estimated bookings souverän gelöst werden konnte, stehe ich nach der Implementierung vor einem interessanten Herausforderung. Das Feld "estimated booking" ist als Read-only gesetzt im Form "Opportunity". Bei Laden einer Opportunity wird das Feld auch den Bruchteil einer Sekunde als read-only gesetzt und dann normal angezeigt. Ich verwende bezüglich dieses (und anderer Felder) folgendes Skript:
function calculatebooking() { var val1 = Xrm.Page.getAttribute("new_softwarerevenue").getValue(); if (val1==null) { val1 = 0; Xrm.Page.getAttribute("new_softwarerevenue").setValue(0); } var val2 = Xrm.Page.getAttribute("new_supportrevenue").getValue(); if (val2==null) { val2 = 0; Xrm.Page.getAttribute("new_supportrevenue").setValue(0); } var val3 = Xrm.Page.getAttribute("new_servicesrevenue").getValue(); if (val3==null) { val3 = 0; Xrm.Page.getAttribute("new_servicesrevenue").setValue(0); } var val4 = Xrm.Page.getAttribute("new_3rdpartysellpricerevenue").getValue(); if (val4==null) { val4 = 0; Xrm.Page.getAttribute("new_3rdpartysellpricerevenue").setValue(0); } var result = val1+ val2 + val3 + val4; Xrm.Page.getAttribute("estimatedvalue").setValue(result); crmForm.all.estimatedvalue.Disabled = true; } function setreadonly() { crmForm.all.estimatedvalue.Disabled = true; }
Nach einer Änderung der Werte eines der Berechnungsfelder wird, wie gewünscht, das estimated booking Feld "read-only" gesetzt. Jetzt war mein Gedankenansatz mittels der letzten Funktion "setreadonly" diese einfach dem Formular beim "onload" zu übergeben. Funktioniert leider aber nicht, wie gedacht. Das Feld ist weiterhin zu bearbeiten und erst im Anschluss read-only. Könnte sich jemand im Entferntesten vorstellen, was dieses Verhalten verursacht oder wie ich es abstellen kann? Das Ziel ist ja klar verständlich. Das Feld "estimated booking" soll nicht für Personen zu bearbeiten sein, sondern immer nur ein Ergebnis einer Kalkulation darstellen.
All Replies
-
Tuesday, 15 May, 2012 6:43 AMModerator
Hallo,
du verwendest zum schreibschützen des Feldes noch crmForm, das noch von CRM 4.0 kommt, der Befehl für CRM 2011 lautet:
Xrm.Page.getControl('estimatedvalue').setDisabled(true);
Wenn das Feld immer schreibgeschützt werden soll, und nur durch dein JavaSCript geändert wird, kannst du es auch gleich in der Formulardefinition schreibschützen, dann benötigst du dafür kein extra Script.
Wenn du ein Feld auf dem Formular schreibgeschützt darstellst, musst du dafür sorgen, das es auch in der DB gespeichert wird, im Standard werden schreibgeschützte Felder nicht in der DB gespeichert.
Xrm.Page.getAttribute('estimatedvalue').setSubmitMode('always');
Siehe auch: http://michaelsulz.wordpress.com/2012/02/02/crm-2011-hilfreiche-javascript-codeschnippsel-version-3/
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
Blog
Website XING LinkedIn Facebook Twitter- Marked As Answer by Maximilian Förster Tuesday, 15 May, 2012 7:05 AM
-
Tuesday, 15 May, 2012 7:05 AM
Interessanterweise funktioniert aber auch der andere JScript-Befehl perfekt, aber ich werde ihn jetzt durch Deinen aktuellen ersetzen, danke hierfür. Auch für den submitmode, das hatte ich natürlich nicht bedacht und auch gerade erst im Live-Test festgestellt.
Bezüglich des im Formular schützen. Genau das ist ja das Problem, ich habe das Feld im Formular direkt über Field Properties ->Display als "Field Behavior" Specify field-level behavior als "Field is read-only" gesetzt. Und den Bruchteil einer Sekunde ist es das auch beim Laden des Formulars, dann nicht mehr. Deshalb bin ich ja verwirrt, weil ich nicht was, woher dieses Verhalten rührt und wie ich es ändern kann.
-
Tuesday, 15 May, 2012 7:09 AM
Hallo Maximilian!
Sie dir mal diesen Thread an.
http://social.msdn.microsoft.com/Forums/de-DE/crmgerman/thread/c0454e8d-5838-40dd-bf3f-5b3e5b704d39Im Letzen Beitrag von Michael steht:
der Befehl zum Schreibschützen eines Feldes lautet:
Xrm.Page.getControl('Feldname').setDisabled(true);
Ich hoffe das bringt weiter. Andreas(a)Donaubauer.com www.crmfaq.de
- Proposed As Answer by Andreas DonaubauerMicrosoft Community Contributor Tuesday, 15 May, 2012 8:20 AM
- Marked As Answer by Maximilian Förster Tuesday, 15 May, 2012 8:29 AM
-
Tuesday, 15 May, 2012 7:26 AM
Ja danke,
habe ich gesehen und die Codezeile verwende ich bereits. Aber es geht genau um die beschriebene Problematik, dass onLoad keine Wirkung zeigt und wohl systeminterne Abhängigkeiten das "read-only" wieder deaktivieren, zumindest beim Laden eines Formulars.