微软动态CRM专家罗勇 ,回复326或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
Dynamics 365 Customer Engagement 定制中少不了为命令栏添加按钮,点击按钮常做的事情包括设置表单字段的值,然后保存记录(保存记录过程中可能触发同步插件执行),再提示成功,用户点击后需要刷新当前页面,以便表单页面应用新逻辑,比如提交后表单页面只读。
刷新当前页面,那还不简单?用 formContext.data.refresh(save).then(successCallback, errorCallback); 或者 formContext.data.entity.save(saveOption);
光是这样不行,下面我介绍一个可行的方法。
命令栏添加按钮执行的JavaScript方法增加一个参数来接收传递过来的execution context (执行上下文,一般为表单上下文或者表格上下文),这个 CrmParameter 的名称是 PrimaryControl ,Ribbon的定义示例如下,这里来自官方文档:Pass Customer Engagement data from a page as a parameter to ribbon actions 。
<CommandDefinition Id="SampleCommand"> <EnableRules/> <DisplayRules/> <Actions> <JavaScriptFunction Library="$webresource:new_mySampleScript.js" FunctionName="CloseRequest"> <CrmParameter Value="PrimaryControl" /> </JavaScriptFunction> </Actions> </CommandDefinition>
然后我这里演示执行的代码如下:
function CloseRequest(primaryControl) { var formContext = primaryControl; formContext.getAttribute("statuscode").setValue(100000006); formContext.data.save().then(function () { var entityFormOptions = {}; entityFormOptions["entityName"] = formContext.data.entity.getEntityName(); entityFormOptions["entityId"] = formContext.data.entity.getId(); Xrm.Navigation.openForm(entityFormOptions).then( function () { var alertStrings = { text: "操作成功!" }; var alertOptions = { height: 120, 160 }; Xrm.Navigation.openAlertDialog(alertStrings, alertOptions).then( function success() { }, function () { } ); }, function (errorOjb) { console.log(errorOjb); }); }, function (errorOjb) { Xrm.Navigation.openErrorDialog({ message: errorOjb.message }).then( function () { }, function () { }); } ); }