2016-11-26 5 views
0

Ich versuche, den Preis eines Produkts in Dynamics CRM 2016 durch JavaScript auf dem OnChange-Ereignis für das Produkt zu erhalten. Dies ist eine benutzerdefinierte Entität, die ich erstellt habe und die Preislisten-ID und die Produkt-ID verwendet.Dynamics CRM 2016: JavaScript verursacht JSON Parse Error

Wenn ich das gleiche Javascript in der Konsole auf Chrome verwenden kann ich die Daten bekommen, aber wenn es von der CRM-Form ausgeführt wird, bekomme ich einen Fehler:

SyntaxError: Unexpected end of JSON input at JSON.parse()

Der Code ist:

var pricelevelid = Xrm.Page.getAttribute("sg_pricelistid").getValue()[0].id; 
pricelevelid = pricelevelid.replace(/[{}]/g, ""); 

var productdata = Xrm.Page.getAttribute("sg_productid").getValue(); 
if (productdata != null) 
     { 
     console.log("going into productdata loop"); 
     productid = productdata[0].id; 
     productid = productid.replace(/[{}]/g, ""); 

     var req = new XMLHttpRequest(); 
     req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.0/productpricelevels?$select=amount,_pricelevelid_value,_productid_value,productpricelevelid&$filter=_pricelevelid_value eq " + pricelevelid + " and _productid_value eq " + productid + "", true); 
     req.setRequestHeader("OData-MaxVersion", "4.0"); 
     req.setRequestHeader("OData-Version", "4.0"); 
     req.setRequestHeader("Accept", "application/json"); 
     req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); 
     req.onreadystatechange = function() { 
      if (this.readyState === 4) { 
       req.onreadystatechange = null; 
       if (this.status === 200) { 
        var results = JSON.parse(this.response); 
         for (var i = 0; i < results.value.length; i++) { 
          var amount = results.value[i]["amount"]; 
          var amount_formatted = results.value[i]["[email protected]"]; 
         } 
       } else { 
        Xrm.Utility.alertDialog(this.statusText); 
       } 
      } 
     }; 
     req.send(); 

     data = JSON.parse(req.responseText); 
     var amount = data.value[0]["amount"]; 
     Xrm.Page.getAttribute("sg_unitprice").setValue(amount); 
     } 

Antwort

2

Sie führen eine asynchrone Anfrage durch und versuchen dann, die Antwort zu analysieren, bevor sie auf irgendwas gesetzt wurde.

Dies geschieht am unteren Rand Ihres Codeblocks unter data = JSON.parse(req.responseText), gleich nachdem Sie die Anfrage gesendet haben.

Der gesamte Code, der auf der Antwort beruht, sollte in der Callback-Funktion req.onreadystatechange ausgeführt werden.

Verwandte Themen