如何使用CRM2011中的插件從適當的web資源運行JavaScript函數。crm2011插件調用js函數
我在因特網上找不到任何信息。大多數資源描述瞭如何從JS觸發插件,但不是相反的。
這裏是JS代碼taht複製筆記到說明字段。 單擊保存時。您可以看到數據正確顯示在說明字段中。但是,如果按保存並關閉並再次打開表單,說明字段將爲空。 我認爲這是因爲JS在安全事件後執行,但後來的測試表明它是錯誤的。有人能指出這個JS代碼中的錯誤導致數據沒有保存嗎? 或者給出一個建議如何編寫一個從相關實體中檢索數據並將其寫入表單中的字段的插件。感謝名單
function copyNotes()
{
// CLEAR DESCRIPTION FIELD
alert("JS");
Xrm.Page.getAttribute("description").setValue('');
// GET ID OF THE CASE AND CLEAN IT AND GET URL for oData stuff
//THEN CALL RETRIEVE FUNCTION
var caseID = Xrm.Page.data.entity.getId();
caseID = caseID.replace('{', '').replace('}', '');
var oDataPath = Xrm.Page.context.getServerUrl() + "/xrmservices/2011/organizationdata.svc";
ODataPath = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc";
retrieveRecord(caseID);
}
// CREATE AN HTTP REQUEST AND SEND IT
function retrieveRecord(Id) {
var retrieveReq = new XMLHttpRequest();
retrieveReq.open("GET", ODataPath + "/AnnotationSet?$filter=ObjectId/Id" + " eq (guid'" + Id + "')", true);
retrieveReq.setRequestHeader("Accept", "application/json");
retrieveReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
retrieveReq.onreadystatechange = function() {
// THIS HANDLES A CALLBACK
retrieveReqCallBack(this);
};
retrieveReq.send();
}
function retrieveReqCallBack(retrieveReq) {
if (retrieveReq.readyState == 4 /* complete */ )
{
if (retrieveReq.status == 200) {
//Success
var retrieved = this.parent.JSON.parse(retrieveReq.responseText).d;
// ITERATE THROUGH THE NOTES FOR THIS CASE
for (var i = 0; i < retrieved.results.length; i++) {
// IF IS AN EMPTY FIELD ADD 'case details:'
if (Xrm.Page.getAttribute("description").getValue() == null || Xrm.Page.getAttribute("description").getValue() == 'null') {
Xrm.Page.getAttribute("description").setValue('Case details:');
}
// BOF PARSE DATE
var date = retrieved.results[i].CreatedOn;
date = new Date(parseInt(date.replace("/Date(", "").replace(")/", ""), 10));
// EOF PARSE DATE
var newtext = "--------------------\r\n" + "Created by: " + retrieved.results[i].CreatedBy.Name + " - " + date + "\r\n" + retrieved.results[i].NoteText + "\r\n--------------------\r\n";
var text = Xrm.Page.getAttribute("description").getValue() + "\r\n" + newtext;
Xrm.Page.getAttribute("description").setValue(text);
}
}
}
}
你想要完成一個插件需要從服務器更新客戶端上的JavaScript? – Daryl 2013-03-25 03:19:09
插件需要運行js web資源中的一個函數。問題是我需要讓這個函數在onSave事件之前運行,我不知道如何,我認爲這是不可能的。我唯一能想到的就是編寫一個可以運行JS腳本的插件。否則,我覺得我必須在插件中複製js函數的行爲。 – Alexey 2013-03-25 03:35:56
爲什麼你的JavaScript不能在窗體的OnSave事件中運行? – Daryl 2013-03-25 03:42:55