本文概述了在服务端开发过程中,操作插件进行逻辑判断后需要进行提示的三种方式。包括:1) 直接通过抛出异常方式,但前端体验不佳;2) 通过操作结果对象返回提示信息,适合单条记录,多条记录执行时会统一显示成功;3) 使用错误信息列表返回提示,能针对每条记录的错误详细反馈,解决了第二条方式的不足。作者希望这些经验对开发者有所帮助,并欢迎更多方式的分享。
在开发过程中经常碰到操作插件做了逻辑判断之后需要进行提示的场景,由于操作插件运行在服务端,无法通过showMessage的方式进行提示。
结合平常开发过程中的积累,将三种提示异常的方式整理出来,希望给需要的小伙伴一点帮助,也请各位大佬补充、指正。
1. 直接通过throw抛出异常的方式
```language
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
super.beginOperationTransaction(e);
//逻辑判断后需要给出前端信息显示
throw new KDException(new ErrorCode(this.getClass().getName(),"抛出异常"));
}
```
抛异常的方式最直接,但是前端会通过报错的方式显示,给人的感觉不好
2. 通过this.operationResult.setMessage方式返回提示
```language
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
super.beginOperationTransaction(e);
//逻辑判断需要给出提示
this.operationResult.setShowMessage(true);
this.operationResult.setSuccess(false);
this.operationResult.setMessage("直接返回信息");
}
```
该方式会弹出红色提示弹窗,交互方式比较好。
但是一旦在列表中选择了多条记录执行时,也会弹窗,但是无论代码里的判断是怎么样的,一律都是执行成功。
3. 通过this.operationResult.addErrorInfo方式返回提示
```language
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
super.beginOperationTransaction(e);
DynamicObject[] bills= e.getDataEntities();
List<DynamicObject> successObj=new ArrayList<>();
for (DynamicObject bill : bills) {
//业务逻辑判断
Boolean isSuccess=false;
if(isSuccess)
{
successObj.add(bill);
}
else
{
this.operationResult.addErrorInfo(new ValidationErrorInfo("",bill.getPkValue(),
0,0,"err","billtitle",bill.getString("billno")+"出现错误",ErrorLevel.Error));
}
}
e.setDataEntities(successObj.toArray(new DynamicObject[successObj.size()]));
}
```
该方式解决了第二种提示方式多条记录同时执行是的问题,
当在单据中或列表选择一条记录执行时,会以顶部黄色弹窗提示
当在列表中选择了多条记录执行时,系统会以系统标准的弹窗给予提示,统计出执行了多少条,成功多少天失败多少条,并且可以将没条记录的详细信息在窗口下半部分进行列示。
-------------------------------------------------------------------------------------------------------------
以上就是到目前为止我所碰到的三种操作插件提示方式,希望能给同样在项目一线奋斗的小伙伴一点点帮助。
如果您有其他方式欢迎分享出来。
推荐阅读