none
Feldfarbe ändern

    Frage

  • Hallo CRM Gemeinde,

    ich habe ein kleines Problem. In einem schreibgeschützten Feld wird ein Wert errechnet, der sich zwischen 0 und 100 bewegt. Wenn der Wert kleiner 40 ist, soll das Feld rot markiert werden, sollte der Wert größer 40 sein soll es grün markiert werden. Ich habe es mit folgenden Script erstellt:

    function MarkDB(Grenze){

     var Grenze = 40;  
       
      if (Grenze<40)
      {
       document.getElementById('eve_deckungsbeitragin_c').style.backgroundColor = 'red';

       document.getElementById('eve_deckungsbeitragin_d').style.backgroundColor = 'red';
       }
       
      else (Grenze>40)
      {
       document.getElementById('eve_deckungsbeitragin_c').style.backgroundColor = 'green';

       document.getElementById('eve_deckungsbeitragin_d').style.backgroundColor = 'green';
       }
    }

    leider wird das Feld immer nur grün markiert! Kann mir jemand helfen?


    Mit freundlichen Grüßen, Mark Otto

    Montag, 22. April 2013 09:34

Antworten

  • Hallo Mark,

    wie die anderen schon geschrieben haben, wertest du den Fall =40 nicht aus. Außerdem ist dein Java Script auch nicht wirklich gültig, da du in einem Else-Zweig nicht erneute abfragen kannst.

    Ein gültiges script, bei dem bis 40 rot und über 40 grün angezeigt wird, wäre folgendes (allerdings unsupportet):

    var Grenze = 40; if (Grenze <= 40) { document.getElementById('eve_deckungsbeitragin_c').style.backgroundColor = 'red'; document.getElementById('eve_deckungsbeitragin_d').style.backgroundColor = 'red'; } else { document.getElementById('eve_deckungsbeitragin_c').style.backgroundColor = 'green'; document.getElementById('eve_deckungsbeitragin_d').style.backgroundColor = 'green'; }


    <snip>bin kein Javascript Experte, aber " var Grenze = 40; " deklariert und initialisiert die lokale Variable Grenze und setzt sie auf 40.
    Und danach prüfst Du ob sie größer oder kleiner 40 ist. Das da überhaupt was grün wird verwirrt mich.</snip>

    Das liegt daran, das in einem Else-Zweig keine Prüfung mehr erfolgen kann, das geht nur mit else if. Und da die erste Bedingung false ist landet das Script im Else Zewig.

    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter


    • Bearbeitet Michael SulzModerator Montag, 22. April 2013 11:27
    • Als Antwort vorgeschlagen _BenJohn_ Montag, 22. April 2013 11:40
    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    • Tag als Antwort aufgehoben M. Otto Dienstag, 23. April 2013 06:30
    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    Montag, 22. April 2013 11:24
    Moderator
  • Hallo,

    Weil du der Variablen, die du im Script abprüfst, einen fixen Wert zuweist:

    var Grenze = 40;

    Hier muss ungefähr so etwas stehen:

    var Grenze = Xrm.Page.getAttribute('feldname').getValue();

    Wenn du hier das korrekte Feld holst, dann wird das schreibgeschützte Feld bei einem Wert von 0 bis INKL. 40 (d.h. <= 40) rot und ansonsten grün.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    • Tag als Antwort aufgehoben M. Otto Dienstag, 23. April 2013 06:30
    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    Montag, 22. April 2013 12:46

Alle Antworten

  • Hallo Mark,

    auf den ersten Blick sehe ich keinen Fehler im Script.  Hast du es mit einem nicht schreibgeschützen Feld probiert? Das würde ich auf jeden Fall testen.

    Folgende Links kennst du vermutlich schon: 

    http://social.msdn.microsoft.com/Forums/en-US/crmdevelopment/thread/674f7c9a-f417-409f-ae1b-60b508485344
    https://community.dynamics.com/product/crm/f/117/p/79257/147366.aspx

    Bitte den Hinweis beachten, dass das Vorgehen nicht supported ist.

    Ein Hinweis zur Logik: Der Fall mit Grenzwert =40 wird bei dir nicht auswertet, sondern nur kleiner und größer.



    Herzliche Grüße / Best regards Markus Müller If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"

    Montag, 22. April 2013 10:41
  • Hallo M.Otto,

    bin kein Javascript Experte, aber " var Grenze = 40; " deklariert und initialisiert die lokale Variable Grenze und setzt sie auf 40.
    Und danach prüfst Du ob sie größer oder kleiner 40 ist. Das da überhaupt was grün wird verwirrt mich.

    Ich hätte angenommen Du willst gegen den Übergabewert, der auch Grenze heißt prüfen oder? Ich würde meinen "var Grenze" überdeckt den Übergabeparameter oder?

    Grüße

    Thomas

    Montag, 22. April 2013 10:51
  • Hallo Mark,

    Also wenn du das Script wirklich 1:1 so im Formular hast, dann kann ich dir sagen warum das nicht funktioniert: Du setzt eine Variable "Grenze" auf 40 und prüfst dann ob 40 < 40 ist - das ist falsch, daher kommt die Abfrage immer in den Else-Zweig! Du musst die Variable "Grenze" mit dem Feldwert, der zu prüfen ist, initialisieren!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Montag, 22. April 2013 10:58
  •   else (Grenze>40)

    ist eigentlich kein gültiges JavaScript, es sollte entweder heißen "else if (Grenze > 40)" oder else. Wenn du prüfst auf >40 und <40 dann schließt du genau die 40 aus und es sollte eigentilch gar nichts passieren. Korrekt wäre >= 40 und <40 oder ggf. >40 und <= 40.

    Montag, 22. April 2013 11:03
  • Hallo Mark,

    wie die anderen schon geschrieben haben, wertest du den Fall =40 nicht aus. Außerdem ist dein Java Script auch nicht wirklich gültig, da du in einem Else-Zweig nicht erneute abfragen kannst.

    Ein gültiges script, bei dem bis 40 rot und über 40 grün angezeigt wird, wäre folgendes (allerdings unsupportet):

    var Grenze = 40; if (Grenze <= 40) { document.getElementById('eve_deckungsbeitragin_c').style.backgroundColor = 'red'; document.getElementById('eve_deckungsbeitragin_d').style.backgroundColor = 'red'; } else { document.getElementById('eve_deckungsbeitragin_c').style.backgroundColor = 'green'; document.getElementById('eve_deckungsbeitragin_d').style.backgroundColor = 'green'; }


    <snip>bin kein Javascript Experte, aber " var Grenze = 40; " deklariert und initialisiert die lokale Variable Grenze und setzt sie auf 40.
    Und danach prüfst Du ob sie größer oder kleiner 40 ist. Das da überhaupt was grün wird verwirrt mich.</snip>

    Das liegt daran, das in einem Else-Zweig keine Prüfung mehr erfolgen kann, das geht nur mit else if. Und da die erste Bedingung false ist landet das Script im Else Zewig.

    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter


    • Bearbeitet Michael SulzModerator Montag, 22. April 2013 11:27
    • Als Antwort vorgeschlagen _BenJohn_ Montag, 22. April 2013 11:40
    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    • Tag als Antwort aufgehoben M. Otto Dienstag, 23. April 2013 06:30
    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    Montag, 22. April 2013 11:24
    Moderator
  • Erst mal Danke für die vielen Antworten!

    Ich habe das Script wie es Michael ob eingefügt hat ausprobiert! Jetzt wird das Feld immer Rot, egal was für eine Wert in dem Feld steht.

    Ich habe leider nicht die großen Java Script Erfahrungen... Woran könnte es liegen das dass Feld nicht grün wird?

     


    Mit freundlichen Grüßen, Mark Otto

    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    • Tag als Antwort aufgehoben M. Otto Dienstag, 23. April 2013 06:30
    Montag, 22. April 2013 12:17
  • Hallo,

    Weil du der Variablen, die du im Script abprüfst, einen fixen Wert zuweist:

    var Grenze = 40;

    Hier muss ungefähr so etwas stehen:

    var Grenze = Xrm.Page.getAttribute('feldname').getValue();

    Wenn du hier das korrekte Feld holst, dann wird das schreibgeschützte Feld bei einem Wert von 0 bis INKL. 40 (d.h. <= 40) rot und ansonsten grün.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    • Tag als Antwort aufgehoben M. Otto Dienstag, 23. April 2013 06:30
    • Als Antwort markiert M. Otto Dienstag, 23. April 2013 06:30
    Montag, 22. April 2013 12:46