在Microsoft Dynamics CRM 2011上:
如果我使用Javascript设置查找字段的值,它会在表单(名称,图标等)上正确显示,但在用户点击保存按钮时不会保存。记录确实保存,而不是那个字段。如果我这样做"手动" (即 - 使用查找控件)它将保存字段值。
出于某种原因,它正在以"在Save"上工作。事件,但它不是以“保存& amp;关闭"事件。 有什么想法吗?
以下是代码:
//Fetching the required accountId using REST method
function fetchAccountId() {
try
{
var LE;
var Fund;
var LEId = new Array();
LEId = Xrm.Page.getAttribute('ssi_legalentityid').getValue();
if (LEId != null) {
LE = LEId[0].id;
}
var FundId = new Array();
FundId = Xrm.Page.getAttribute('ssi_fundid').getValue();
if (FundId != null) {
Fund = FundId[0].id;
}
var LEId = Xrm.Page.getAttribute('ssi_legalentityid').getValue();
var FundId = Xrm.Page.getAttribute('ssi_fundid').getValue();
var TransactionType = Xrm.Page.getAttribute('ssi_transactiontypes').getValue();
if (LEId != null && FundId != null && TransactionType == '6')
{
var options = "$select=ssi_AccountId,ssi_name&$filter=Ssi_LegalEntityId/Id eq (guid'"+LE+"') and Ssi_FundId/Id eq (guid'"+Fund+"')";
SDK.REST.retrieveMultipleRecords('ssi_Account', options, saved, err, contactsRetrieveComplete);
}
}
catch (Err) {
alert(Err);
return;
}
}
function saved(ssi_account)
{
if (ssi_account != null && ssi_account.length > 0)
{
var fetchedAccId;
for (var i = 0; i < ssi_account.length; i++)
{
fetchedAccId = ssi_account[i].ssi_AccountId;
fetchedName = ssi_account[i].ssi_name;
}
var Contact_Lookup = new Array();
Contact_Lookup[0] = new Object();
Contact_Lookup[0].id = fetchedAccId;
Contact_Lookup[0].name = fetchedName;
Contact_Lookup[0].entityType = 'ssi_Account';
Xrm.Page.getAttribute('ssi_accountid').setValue(Contact_Lookup);
Xrm.Page.data.entity.save();
}
}
function err(error){
alert('Error occurred while fetching the details of the Client Account. '+error.message);
}
function contactsRetrieveComplete() {
}
上面的代码在CRM表单的Save事件中调用。
答案 0 :(得分:0)
您的代码使用CRM SDK函数retrieveMultipleRecords
检索数据 onSave ,签名如下:
function (type, options, successCallback, errorCallback, OnComplete)
您的代码将saved
函数传递给successCallback
参数。 saved
函数是异步调用的。在保存方案中,这没关系,但在保存并关闭方案中,表单已关闭,其脚本在retrieveMultipleRecords
能够接收查询之前被释放数据
您的代码必须同步运行才能成功。
在RetrieveMultipleRecords
库的SDK.REST
函数中,您会找到以下行:
var req = new XMLHttpRequest();
req.open("GET", this._ODataPath() + type + "Set" + optionsString, true);
将上一个true
更改为false
。这将使该功能进入同步模式。