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

时间:2019-02-28 16:49:52

标签: javascript dynamics-crm microsoft-dynamics

我正在使用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) {});

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

1 个答案:

答案 0 :(得分: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);
              }
           );