Don't保存表单

Don't save the Form

本文关键字:保存 表单 Don      更新时间:2023-09-26

我在约会表单中有一个自定义javascript。功能区上有一个按钮。按钮应该更改状态代码,然后保存表单。但当我尝试保存时,如果有一个字段发生了更改,表单就不会保存自己。下面是我的代码;

Xrm.Page.data.entity.save();
var newStatus = 3;
var json = new JSonObject();
var data = json.SetState(Xrm.Page.data.entity.getId(), Xrm.Page.data.entity.getEntityName(), 1, newStatus);
if (data != true)
    alert("Error!");
else {
    Xrm.Page.data.entity.save('saveandclose');
    //window.parent.location.reload();
}

我什么都试过了。首先保存,然后设置状态,然后再次保存等。如果代码是这样的,则会导致一个错误,即"无法更新Closed或Cancelled Activity"。如果它先保存,然后重新加载,然后设置状态,然后保存,然后再重新加载,则更改的字段不会得到最后一个值。它获取从保存按钮手动保存的上一个值。

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>cmic_systemusersalesterritoryassociation</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.getServerUrl() + "/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);
        }
    });
}

我使用了上面提到的函数来异步更改RecordStatus创建一个如下所示的函数名AppointmentOnSave(),并在其中调用上述函数:

function AppointmentOnSave(){
var AppointmentGuid = Xrm.Page.data.entity.getId();
var StateCode = 1; 
var StatusCode= 3;
Xrm.Page.data.entity.save( "saveandclose");
changeRecordStatus(AppointmentGuid,StateCode,StatusCode); //Mark Completed
}

此处为实体状态代码

这是第二种方法,也是一种简单的方法:试试这个:

首先需要添加这三个javascript文件作为CRM 中的网络资源

jquery1.4.1.min.jsjson2.jsSDK.JQuery.js

这些文件在SDK的Script文件夹下(SDK''samplecode''js''restendpoint''jqueryrestdataoperations''jqueryrestdataoperations''scripts)

然后:

function AppointmentOnSave(){
var AppointmentGuid = Xrm.Page.data.entity.getId();
var StateCode = 1; 
var StatusCode= 3;
var Appoinment= {};
Appoinment.StateCode=1;
Appoinment.StatusCode=3;
setTimeout(function(){
SDK.JQuery.updateRecord(
 AppointmentGuid ,
 Appoinment,
 "task",
 function success (msg) {
     alert(msg);
 },
 function failed (error) {
     alert(error);
 }
 );
 }, 500);at
 Xrm.Page.data.entity.save( "saveandclose");
 }