簡體   English   中英

在Dynamics CRM Opportunity中進行“初始保存”后,值似乎會立即改變

[英]Values seems changing straight after Initial Save in Dynamics CRM Opportunity

我正在進行服務調用,以使用CRM 2016 On-上的 Web API在“機會”表單(表單類型== 1 //創建)上選擇“帳戶”查找時檢索“帳戶詳細信息”(貨幣,與該帳戶相關的折扣)。 前提 一切工作正常,但最初保存機會時,立即保存后立即出現未保存的更改 ,這會迫使我再次進行保存(異常行為),這迫使我再次進行保存(異常行為)。初始保存后立即更改。

服務呼叫是同步的,並且在更改帳戶查找時被觸發,並且早於初始保存。 任何幫助表示贊賞!。

function SetOpportunityCurrencyAndDiscount(){
    var accountId = (GetValue("vm_accountid"))[0].id;
    var result = RetrieveRecord("account", null, accountId.slice(1,-1));
    var accountDiscount = result["vm_accountdiscount"];
    var transactionCurrencyId = result["_transactioncurrencyid_value"];
    var currencyName =  result["_transactioncurrencyid_value@OData.Community.Display.V1.FormattedValue"];
    SetValue("vm_discount", accountDiscount);
    Xrm.Page.getAttribute("transactioncurrencyid").setValue([{ id: transactionCurrencyId, name: currencyName, entityType: "transactioncurrency"}]); }

function RetrieveRecord(recordType, alternateKey, accountId){
    var result = null;
    var entityType = recordType;
    var query = null;
    if(alternateKey != null && agencyId == null)
        query = "/api/data/v8.0/accounts(emailaddress1='"+alternateKey+"')?$select=name,accountid,_transactioncurrencyid_value,vm_agencydiscount";
    else
        query = "/api/data/v8.0/accounts("+agencyId+")?$select=name,accountid,_transactioncurrencyid_value,vm_agencydiscount";
    var req = new XMLHttpRequest();
    req.open("GET", Xrm.Page.context.getClientUrl() + query, false);
    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.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
    req.onreadystatechange = function () {
        if (this.readyState === 4) {
            req.onreadystatechange = null;
            if (this.status === 200) {
                result = JSON.parse(this.response);
            }
            else {
                alert(this.statusText);
            }
        }
    };
    req.send();
    return result; 
}

保存記錄並再次使表單變臟后,打開開發工具並將其粘貼到控制台中。 它會告訴您哪些字段是臟的。

function showDirtyFields() { 
    var Xrm = Array.prototype.slice.call(document.querySelectorAll('iframe')).filter(function(d) {
        return d.style.visibility !== 'hidden';
    })[0].contentWindow.Xrm;
    var message='The following fields are dirty: \n';
    Xrm.Page.data.entity.attributes.forEach(function(attribute,index){
        if(attribute.getIsDirty()==true){message+="\u2219 "+attribute.getName()+"\n";}
    });
    Xrm.Utility.alertDialog(message);
}
showDirtyFields();

完成同一件事的另一種方法是打開實體的審核。 審核日志將顯示您提交了哪些字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM