2017-05-16 1 views
0

Ich weiß, dass die Experten über diese Frage lachen werden, aber ich habe wirklich zu kämpfen. Bitte werfen Sie einen Blick auf dieses Snippet. Ich bin sehr neu in CRM und JavaScript.Dynamics CRM 2016 Funktion Lookup mit If

So ist das Problem, dass es keine Rolle spielt, was ich aus der Lookup-Liste auswählen, auf dem Alarm erscheint. Ich kann sehen, wo "unvollständig" nicht mit "vollständig" übereinstimmt, aber es löst immer noch den Alarm aus.

Muss ich eine ODATA Abfrage schreiben, dieses Problem zu lösen?

Function MPMain_OnChange() { 
    try { 
     //get the work order status. 
     var wostatus = new Array(); 
     wostatus =Xrm.Page.getAttribute("workorderstatus").getValue(); 

     if (wostatus !=null) { 
      var name = wostatus[0].name; 

      if (name =="Completed") { 
       alert("Order Complete"); 
      } 
     } 
    } catch { 
     //there is an error. 
    } 
} 

Antwort

1

In CRM 2016 können Sie getSelectedOption() oder einfach getText() verwenden. Dokumentation kann here gefunden werden. In Ihrem Code, würden Sie schreiben:

var workOrderStatus = Xrm.Page.getAttribute("wordorderstatus").getSelectedOption(); 

Dies würde zurückgeben ein Objekt mit einem Text und eine Wert Eigenschaft, zum Beispiel { text: 'Complete', value: 1 }.

Ich habe getestet und arbeiten beide in meinem Dynamics CRM 2016-Entwicklungsumgebung. Hier ist ein Screenshot von meinem Browser Chrome Konsolenfenster:

enter image description here

Sie sollten dann in der Lage sein, um die gewählte Option Text zu bewerten und lösen einen Alarm:

if (workOrderStatus === 'Completed') { 
    alert('Order Complete.); 
} 

Hinweis ich verwendet habe, === nicht == . Weitere Informationen finden Sie unter this SO answer.

Wenn das nicht funktioniert, sollten Sie versuchen, zu debuggen. Drücken Sie F12 in Ihrem Browser, suchen Sie Ihr Skript und geben Sie zu Beginn Ihrer Funktion einen Haltepunkt ein. Wenn Sie Schwierigkeiten dies zu tun haben, setzen Sie die folgende Zeile an der Spitze Ihrer Funktion (und veröffentlichen Sie Ihre Änderungen), drücken Sie F12 oben Ihre Entwickler-Konsole öffnen und dann die onChange Ereignis auslösen:

debugger; 
+0

Vielen Dank für die Antwort und für das Detail. Ich benutze den Debugger und die verrückte Sache ist, dass ich den Wert sehen kann, der sich in der Variable von "Erledigt" zu "Warten" auf "Abbrechen" ändert, aber dass die If-Anweisung weiterhin ausgelöst wird. Wenn ich die Variable an die IF übergebe, zeigt sie sogar das ausgewählte Element an, wenn es nicht mit "Completed" übereinstimmt. Ich werde Ihre Lösung versuchen und Ihnen danken und als Lösung prüfen. –

1

Re-schrieb die ganze Sache. Das funktioniert. Nicht alle JavaScript-Bibliothekselemente sind in Dynamics CRM verfügbar, z. B. getSelectedOption.

function MPMain_OnChange() { 
    try { 
     // Get the work order status. 
     var entityLabel, lookupFieldObject; 
     lookupFieldObject = Xrm.Page.data.entity.attributes.get('worksorderstatus'); 

     if (lookupFieldObject.getValue() != null) { 
      entityLabel = lookupFieldObject.getValue()[0].name; 

      if (entityLabel != null && entityLabel == 'Completed') 
       Xrm.Page.getAttribute('datecompleted').setValue(new Date()); 
     } 
    } 
    catch (error) { 

    } 
} 

Teilen für alle anderen, die auf diese Weise kommen könnten. Vielen Dank!

+0

Froh, dass es funktioniert hat. "GetSelectedOption" und "getText" sind jedoch keine JavaScript-Bibliothekselemente, sondern Funktionen, die im Namespace Xrm.Page und _only_ innerhalb von Dynamics CRM definiert sind. [Hier ist der Link zu Microsofts Dokumentation] (https://msdn.microsoft.com/en-us/library/gg334409.aspx#BKMK_getText). –

Verwandte Themen