javascript Dynamics 365无法在刷新之前保存我的字段

问题描述 投票:1回答:1

我正在使用Dynamics CRM 365,尝试在机会表单上使用javascript应用逻辑。

需要更改字段的值并在另一个处理可以刷新之前保存表单。

var opportunityID= formContext.data.entity.getId();
           var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"+
                          "  <entity name='saft_bpf_isd_opportunities'>"+
                          "    <attribute name='businessprocessflowinstanceid' />"+
                          "    <attribute name='activestageid' />"+
                          "    <filter type='and'>"+
                          "      <condition attribute='bpf_opportunityid' operator='eq' uitype='opportunity' value='"+opportunityID+"' />"+
                          "    </filter>"+
                          "  </entity>"+
                          "</fetch>";

           Xrm.WebApi.retrieveMultipleRecords("saft_bpf_isd_opportunities","fetchXml= " + fetchXml).then(
           function success(result) { 
              debugger;
              alert("existed value ==> "+formContext.getAttribute("saft_activestage").getValue());
              alert("new value ==> "+result.entities[0]._activestageid_value);
              formContext.getAttribute("saft_activestage").setValue(result.entities[0]._activestageid_value);
              formContext.data.save(70).then(function (result) {});

           },function(error) {
                console.log(error.message);
              }
           );               
        // the reatement refreshing the form  
        formContext.data.process.setActiveProcess(idProcess_ISD, function (result) {});

但是,当我应用此代码时,我可以简单地显示值,但不将其分配给所需的字段。

javascript dynamics-crm microsoft-dynamics
1个回答
0
投票

Xrm.WebApi方法总是异步的,它返回一个浏览器Promise对象并以异步模式返回结果。因此,当您希望基于成功回调结果执行某些操作时,请将其移至内部。

同样的方式.then可以帮助您按顺序执行代码。不确定缓存清除如何随机工作但进行了一些更改。您可以放置​​断点/调试以查看其运行情况或仅发出警报。

Xrm.WebApi.retrieveMultipleRecords("saft_bpf_isd_opportunities","fetchXml= " + fetchXml).then(
           function success(result) { 
              debugger;
              alert("existed value ==> "+formContext.getAttribute("saft_activestage").getValue());
              alert("new value ==> "+result.entities[0]._activestageid_value);
              formContext.getAttribute("saft_activestage").setValue(result.entities[0]._activestageid_value);
              formContext.data.save(70).then(function (result) {
            alert("after save"); 
            formContext.data.process.setActiveProcess(idProcess_ISD, function (result) { alert("setActiveProcess completed"); });
         });

           },function(error) {
                console.log(error.message);
              }
           );               
© www.soinside.com 2019 - 2024. All rights reserved.