在Microsoft Dynamic CRM 2011中由Javascript填充时,查找字段不会保存

时间:2015-12-18 12:02:51

标签: javascript dynamics-crm-2011 crm lookup

在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事件中调用。

1 个答案:

答案 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。这将使该功能进入同步模式。