0

我們有一個自定義按鈕來取消CRM中的任務。自定義按鈕觸發一個取消任務的JavaScript。我們已經創建了基於blog by Guru Prasad的腳本。客戶關係管理2016年JavaScript不與新的CRM渦輪形式工作

它曾經在CRM 2013中工作,但在我們升級到CRM 2016之後,它不再工作。單擊該按鈕將不會執行任何操作 - 無錯誤消息等。由於CRM 2016中新的Turbo Form功能,此功能無法正常工作。當我關閉Turbo Form以使用舊版窗體時,取消任務按鈕工作正常。

下面是我的腳本 - 你知道是否有任何東西阻止腳本使用CRM 2016 Turbo Form功能? PS:最初Guru Prasad的博客中的代碼仍然使用getServerUrl(),但根據msdn link,它已被棄用並更改爲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); 
     } 
    }); 

} 
+0

沒有明顯的,看起來應該工作。你檢查過你的代碼是否觸發了嗎? 'save()。then'只有在沒有任何驗證錯誤或者存在防止保存的自定義代碼時纔會起作用。 – dynamicallyCRM

+1

我隱藏在腳本的一個警報彈出窗口中,它會觸發,無論渦輪形式是否開啓。取消任務部分不起作用。取消任務僅在渦輪形式關閉時起作用。 當turbo表單處於活動狀態時,腳本中是否有任何內容不起作用? 此外,我刪除了我的腳本中的save()。然後部分,當turbo表單處於活動狀態時,它仍然不會取消任何內容。 – ichachan

回答

1

在您的評論中,您已經提到在兩種情況下都會觸發代碼。這意味着您的問題與實際的Jquery調用來執行SetState請求。你的下一步是雙重的,你是否真的在兩種情況下發送請求(是否正確加載了Jquery),並且發送的請求是否相同。如果你有一個提醒,你可以在代碼中放置一個斷點,並確保jquery在兩種情況下工作。您還可以安裝fiddler並比較Turbo Forms和舊版中的請求,以查看請求是否相同。

相關問題