我正在使用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) {});
但是,当我应用此代码时,我可以简单地显示值,但不将其分配给所需的字段。
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);
}
);