在单据进行保存、审核等操作时,常常需要把检查结果反馈给用户确认,甚至是多步骤确认,这种交互,暂时用BOS IDE难以实现,需要编写操作的服务端插件完成。
如何编写操作的服务端插件,与主题无关,我们先略过,直奔主题:在插件代码中实现交互提示;
1. 检查用户的确认信息,如果用户已经确认,则跳过检查,直接执行主功能:
[code]// 定义交互来源标示,与其他检查区分,互不干扰
string spensorKey = "???";
bool ignore = false; // 用户是否已经确认过
this.Option.TryGetVariableValue(spensorKey, out ignore);
if (ignore || this.Option.HasInteractionFlag(spensorKey))
{
// TODO : 业务逻辑主代码
return;
}[/code]
2. 定义提示信息显示模型。提示信息可能有多列、多行。通过信息显示模型可以自定义列、不断增加行:[code]// 提示信息的列标题,以“~|~”分开两列
string titleMsg = "行号~|~物料编码~|~物料名称~|~单据数量~|~序列号数量~|~错误消息";
// 对应的提示信息格式,以"~|~"分开两列,以{n}进行占位
string errMsg = "{0}~|~{1}~|~{2}~|~{3}~|~{4}~|~{5}";
K3DisplayerModel model = K3DisplayerModel.Create(Context, titleMsg);
[/code]3. 向提示信息显示模型中,增加新的提示行:
[code]string rowMsg = string.Format(errMsg, "msg1","msg2","msg3","msg4","msg5","msg6");
((K3DisplayerModel)model).AddMessage(rowMsg);[/code]
4. 设置交互信息的整体属性,如整体提示,显示的按钮等:
[code]// 设置一个整体的提示信息,提醒用户是否继续
model.Option.SetVariableValue(K3DisplayerModel.CST_FormTitle, "有多条信息需要您确认,是否继续?");
model.OKButton.Visible = true;
model.OKButton.Caption = new BOS.LocaleValue("是", Context.UserLocale.LCID);
model.CancelButton.Visible = true;
model.CancelButton.Caption = new BOS.LocaleValue("否", Context.UserLocale.LCID);[/code]
5. 给出错误提示,终止流程:[code]// 创建一个交互提示错误对象,并设置错误来源,相互隔离
KDInteractionException ie = new KDInteractionException(spensorKey);
ie.InteractionContext.InteractionFormId = FormIdConst.BOS_K3Displayer; // 提示信息显示界面
ie.InteractionContext.K3DisplayerModel = model; // 提示内容
ie.InteractionContext.IsInteractive = true; // 是否需要交互
throw ie; // 抛出错误,终止流程[/code]