Feld "read-only" Attribut wird ignoriert bei Laden des Formulars

Answered Feld "read-only" Attribut wird ignoriert bei Laden des Formulars

  • Tuesday, 15 May, 2012 6:34 AM
     
      Has Code

    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 AM
    Moderator
     
     Answered

    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

  • 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
     
     Answered

    Hallo Maximilian!

    Sie dir mal diesen Thread an.
    http://social.msdn.microsoft.com/Forums/de-DE/crmgerman/thread/c0454e8d-5838-40dd-bf3f-5b3e5b704d39

    Im 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

  • 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.