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