SysOperation框架服务无响应:点击对话框OK无反应问题排查
问题排查:SysOperation对话框点击OK无反应
先给你揪出最致命的问题——这直接导致了点击OK后毫无动静:
1. 契约验证直接失败
你的ProdutionFLowsContract类里的validate()方法硬返回了false:
public boolean validate() { return false; }
SysOperation框架的执行逻辑是:先调用契约的validate()做参数校验,只要返回false,就会直接终止流程,根本不会进入Service类的process()方法。这就是点击OK没反应的核心原因!
修复方案:
要么直接删除这个validate()方法(框架会默认返回true),要么根据你的业务需求编写合理的校验逻辑,比如:
public boolean validate() { boolean ret = true; // 校验生产流程ID不能为空 if (idOfCopy == "") { ret = checkFailed("@YourResId:ProductionFlowIdRequired"); } // 校验复制数量必须大于0 if (copyToDo <= 0) { ret = checkFailed("@YourResId:CopyCountMustBePositive"); } return ret; }
2. Service类查询数据未正确赋值
你的process()方法里的查询语句写法有误,没有把查询结果存到类成员prodTable中:
select firstonly ProdId from prodTable order by ProdId where prodTable.ProductionFlowId == this.idOfCopy;
这种写法只是执行了查询,但结果并没有赋值给类变量prodTable,后续buf2Buf复制的是空记录,就算验证通过也插不了有效数据。
修复方案:
改成直接查询到类成员变量的写法:
select firstonly prodTable order by ProdId where prodTable.ProductionFlowId == this.idOfCopy;
3. 潜在的业务逻辑小问题
在insertInProdTable()方法里,你写了:
_prodTable.GAP035ProductionFlowId = _prodTable.ProductionFlowId;
这里_prodTable.ProductionFlowId是从原记录复制过来的(也就是你要复制的idOfCopy),如果你的业务是让新记录关联原生产流程ID,这没问题;但如果是要设置新的流程ID,这里需要调整。不过这不是导致无反应的原因,只是业务逻辑层面的提醒。
4. 小细节:类名拼写一致性
注意到你的类名有拼写错误:ProdutionFLowsService应该是ProductionFlowsService(少了一个c,FLows的大小写也不一致),虽然编译能过,但规范的命名能避免后续维护踩坑。
内容的提问来源于stack exchange,提问作者OiRc
相关产品推荐
相关产品推荐

