簡體   English   中英

CRM 2016 Javascript不適用於新的CRM Turbo表單

[英]CRM 2016 Javascript not working with New CRM Turbo Form

我們有一個自定義按鈕來取消CRM中的任務。 自定義按鈕觸發了一個取消任務的JavaScript。 我們基於Guru Prasad博客創建了腳本。

它曾經在CRM 2013中可用,但是在我們升級到CRM 2016之后,它不再起作用。 單擊該按鈕將不執行任何操作-沒有錯誤消息等。由於CRM 2016中的新Turbo表單功能,此按鈕不起作用。當我關閉Turbo表單以使用舊表單時,取消任務按鈕可以正常工作。

以下是我的腳本-您是否知道有什么阻止該腳本與CRM 2016 Turbo Form功能一起使用的?

PS:最初,Guru Prasad博客中的代碼仍在使用getServerUrl() ,但是根據msdn鏈接,它已被棄用並更改為getClientUrl() ,我們已更新了腳本-但仍然無法正常工作。

function cancelTaskRecord(RECORD_ID) {
    //set Task record to Cancel status, then force to close the page
    Xrm.Page.data.save().then(changeRecordStatus(RECORD_ID, 2, 6), Xrm.Page.ui.close());
}

function changeRecordStatus(RECORD_ID, stateCode, statusCode)
    {
    // create the SetState request
    var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
    request += "<s:Body>";
    request += "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
    request += "<request i:type=\"b:SetStateRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
    request += "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
    request += "<a:KeyValuePairOfstringanyType>";
    request += "<c:key>EntityMoniker</c:key>";
    request += "<c:value i:type=\"a:EntityReference\">";
    request += "<a:Id>" + RECORD_ID + "</a:Id>";
    request += "<a:LogicalName>task</a:LogicalName>";
    request += "<a:Name i:nil=\"true\" />";
    request += "</c:value>";
    request += "</a:KeyValuePairOfstringanyType>";
    request += "<a:KeyValuePairOfstringanyType>";
    request += "<c:key>State</c:key>";
    request += "<c:value i:type=\"a:OptionSetValue\">";
    request += "<a:Value>" + stateCode + "</a:Value>";
    request += "</c:value>";
    request += "</a:KeyValuePairOfstringanyType>";
    request += "<a:KeyValuePairOfstringanyType>";
    request += "<c:key>Status</c:key>";
    request += "<c:value i:type=\"a:OptionSetValue\">";
    request += "<a:Value>" + statusCode + "</a:Value>";
    request += "</c:value>";
    request += "</a:KeyValuePairOfstringanyType>";
    request += "</a:Parameters>";
    request += "<a:RequestId i:nil=\"true\" />";
    request += "<a:RequestName>SetState</a:RequestName>";
    request += "</request>";
    request += "</Execute>";
    request += "</s:Body>";
    request += "</s:Envelope>";

    //send set state request
    $.ajax({
        type: "POST",
        contentType: "text/xml; charset=utf-8",
        datatype: "xml",
        url: Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organization.svc/web",
        data: request,
        beforeSend: function (XMLHttpRequest) {
            XMLHttpRequest.setRequestHeader("Accept", "application/xml, text/xml, */*");
            XMLHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
        },
        success: function (data, textStatus, XmlHttpRequest) {
            Xrm.Page.ui.close();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });

}

在您的評論中,您提到了在兩種情況下都將觸發代碼。 這意味着您的問題在於執行SetState請求的實際Jquery調用。 下一步有兩個步驟,兩種情況下都是發送請求(是否正確加載了Jquery),發送的請求是否相同? 如果有警報,則可以在代碼中放置一個斷點,並確保在兩種情況下jquery都可以工作。 您還可以安裝fiddler並在Turbo Forms和Legacy中比較請求,以查看請求是否相同。

暫無
暫無

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

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