javascript Dynamics 365 не может сохранить мое поле перед обновлением - PullRequest
0 голосов
/ 28 февраля 2019

Я работаю над 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 голосов
/ 02 марта 2019

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);
              }
           );               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...