2016-11-26 4 views
0

ダイナミックCRM 2016の製品の価格は、製品のonChangeイベントのjavascriptを使用して取得しようとしています。これは私が作成し、pricelistidとproductidを使用しているカスタムエンティティ上にあります。Dynamics CRM 2016:JavaScriptによりJSON解析エラーが発生する

私はChromeでコンソールで同じJavaScriptを使用している場合、私はデータを取得することができますが、それはCRMのフォームで実行されたとき、私はエラーを取得:

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

コードは次のとおりです。

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); 
     } 

答えて

2

非同期要求を実行してから、応答が何かに設定される前に解析しようとしています。

これは、要求を送信した直後にコードブロックの下部にあるdata = JSON.parse(req.responseText)に発生します。

応答に依存するすべてのコードは、req.onreadystatechangeコールバック関数で実行する必要があります。

関連する問題