bugfix> javascript > 投稿

このコードは、さらに4行のコードを追加することを決定するまで正常に実行されていたため、削除しました。しかし、このエラーが発生しました。面白いのは、 Form_onload に行を追加したことです関数。これで助けが必要です。

function Form_OnLoad() {
    debugger;
        if (Xrm.Page.ui.getFormType() == 1) {
            Xrm.Page.getAttribute("quantity").setValue(1);
            Xrm.Page.getAttribute("quantity").setSubmitMode("always");
            Xrm.Page.getAttribute("isproductoverridden").setValue(true);
  Xrm.Page.getAttribute("isproductoverridden").setSubmitMode("always");
        }
        else {
            ActOnFields("disable", "ir_unit");
            ActOnFields("show", "salesorderid");
        }
    }
    function Unit_OnChange() {
        var Unit = Xrm.Page.getAttribute("ir_unit").getValue();
        if (Unit != null && Unit.length > 0) {
            var lookupid = Unit[0].id;
            var oDataSetName = "ir_unitSet";
            var columns = "ir_AmountRate,ir_Expenses,ir_PublishedRate";
            var filter = "ir_unitId eq (guid'" + lookupid + "')";
            retrieveMultiple(oDataSetName, columns, filter, "", onSuccessMapUnitFields);
            Xrm.Page.getAttribute("productdescription").setValue(Unit[0].name);
            Xrm.Page.getAttribute("productdescription").setSubmitMode("always");
        }
        else {
            Xrm.Page.getAttribute("priceperunit").setValue(null);
            Xrm.Page.getAttribute("priceperunit").setSubmitMode("always");
            Xrm.Page.getAttribute("baseamount").setValue(null);
            Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
        }
    }
    function onSuccessMapUnitFields(data, textStatus, XmlHttpRequest) {
        if (data && data.length > 0) {
            var price = 0;
            //if (data[0].ir_AmountRate != null && data[0].ir_AmountRate.Value != null) {
            //price += parseFloat(eval(data[0].ir_AmountRate.Value));
            //}
            if (data[0].ir_PublishedRate != null) {
                price += parseFloat(eval(data[0].ir_PublishedRate));
            }
            if (data[0].ir_Expenses != null && data[0].ir_Expenses.Value != null) {
                price += parseFloat(eval(data[0].ir_Expenses.Value));
            }
            Xrm.Page.getAttribute("priceperunit").setValue(price);
            Xrm.Page.getAttribute("priceperunit").setSubmitMode("always");
            Xrm.Page.getAttribute("baseamount").setValue(price);
            Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
            Xrm.Page.getAttribute("ir_publishedrate").setValue(price);
            Xrm.Page.getAttribute("ir_publishedrate").setSubmitMode("always");
        }
    }

回答 1 件
  • debugger; を追加  内部 Unit_OnChange  関数と成功コールバック関数 onSuccessMapUnitFields 、デバッグ中に、 priceperunit の3つのフィールドのうちのどれかを把握できます 、 baseamountir_publishedrate  このエラーをスローしています。

    ActOnFields を呼び出しているかどうかも確認してください  この setValue(price) を呼び出す前に、これら3つのフィールドを他の場所で非表示にするメソッド 。コントロール/属性がフォームに表示されていない場合- Xrm.Page.getAttribute  戻り値ヌル、その後、あなたが setValue しようとしているとき  このエラーで失敗します。

    フェイルセーフアプローチ:

    if(Xrm.Page.getAttribute("baseamount") != null){
           Xrm.Page.getAttribute("baseamount").setValue(price);
           Xrm.Page.getAttribute("baseamount").setSubmitMode("always");
    }
    
    

あなたの答え