Search code examples
javascriptdynamics-crm-2011odata

Xrm.Page.data.entity.save and OData error


While I try to set a lookup value, it Save first then set lookup and refresh the Form. Thus it removes the lookup field. How can I solve it?

Main Function

Xrm.Page.getAttribute("new_personsendsapproval").setSubmitMode("always");
setInfo("new_personsendsapproval");
Xrm.Page.getAttribute("statuscode").setSubmitMode("always");
Xrm.Page.getAttribute("statuscode").setValue(100000000);
Xrm.Page.data.entity.save();

setInfo() Function

function setInfo(fieldname) {
    var context;
    var serverUrl;
    var UserID;
    var ODataPath;
    context = Xrm.Page.context;
    serverUrl = context.getServerUrl();
    UserID = context.getUserId();
    ODataPath = serverUrl + "/XRMServices/2011/OrganizationData.svc";
    var retrieveUserReq = new XMLHttpRequest();
    retrieveUserReq.open("GET", ODataPath + "/SystemUserSet(guid'" + UserID + "')", true);
    retrieveUserReq.setRequestHeader("Accept", "application/json");
    retrieveUserReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    retrieveUserReq.onreadystatechange = function () {
        retrieveUserReqCallBack(this, fieldname);
    };
    retrieveUserReq.send();

}

Callback Function

function retrieveUserReqCallBack(retrieveUserReq, fieldname) {
    if (retrieveUserReq.readyState == 4 /* complete */) {

        if (retrieveUserReq.status == 200) {
            var retrievedUser = this.parent.JSON.parse(retrieveUserReq.responseText).d;
            if (retrievedUser.FullName != null)
            debugger;
                var setUservalue = new Array();
            setUservalue[0] = new Object();
            setUservalue[0].id = Xrm.Page.context.getUserId();
            setUservalue[0].entityType = 'systemuser';
            setUservalue[0].name = retrievedUser.FullName;
            Xrm.Page.getAttribute(fieldname).setSubmitMode("always");
            Xrm.Page.getAttribute(fieldname).setValue(setUservalue);
        }

        else {

        }
    }
}

Solution

  • You need to make the call synchronous e.g.

     retrieveUserReq.open("GET", ODataPath + "/SystemUserSet(guid'" + UserID + "')", false );