天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

 找回密码
 注册成为天翎用户
查看: 1722|回复: 8

[已解决] 执行 process.doFlow 的时候, 出现 Row does not exist ?

[复制链接]
上海怡蓝 发表于 2013-11-1 15:23:59 | 显示全部楼层 |阅读模式
本帖最后由 bobo 于 2013-11-1 16:12 编辑

代码如下:
  1. //提交流程
  2. var comment = "系统自动流转";          //备注
  3. var flowOption = "80";           //流程操作参数     
  4. var nextNodeId = new Array();      
  5. nextNodeId[0]="1383202957671";         //下一流程节点ID
  6. var stuDoc  = findDocument("11e3-41eb-014b788d-b799-a1c42fb76da7");
  7. var st=new Packages.cn.myapps.core.workflow.engine.StateMachine();
  8. //getCurrUserNodeRT的第二个参数必须是第一个参数的审批人
  9. var nodert = st.getCurrUserNodeRT(doc1,getWebUser());
  10. var currNodeId = nodert.getNodeid();
  11. println("123");
  12. process.doFlow(doc1,params,currNodeId,nextNodeId,flowOption,comment,getWebUser());        //流程处理   
复制代码
123 标注打印出来了,说明上面没问题, 而且 doFlow 的每个参数都OK, 执行的时候就出现了异常:
  1. java.lang.Exception: Row does not exist
  2.         at cn.myapps.core.dynaform.document.dao.AbstractDocStaticTblDAO.updateDocument(AbstractDocStaticTblDAO.java:589)
  3.         at cn.myapps.core.dynaform.document.ejb.DocumentProcessBean.doUpdate(DocumentProcessBean.java:1292)
  4.         at cn.myapps.core.dynaform.document.ejb.DocumentProcessBean.doUpdate(DocumentProcessBean.java:1073)
  5.         at cn.myapps.core.dynaform.document.ejb.DocumentProcessBean.doCreateOrUpdate(DocumentProcessBean.java:1024)
  6.         at cn.myapps.core.workflow.storage.runtime.ejb.FlowStateRTProcessBean.doApprove(FlowStateRTProcessBean.java:267)
  7.         at cn.myapps.core.workflow.storage.runtime.ejb.FlowStateRTProcessBean.doApprove(FlowStateRTProcessBean.java:200)
  8.         at cn.myapps.core.dynaform.document.ejb.DocumentProcessBean.doFlow(DocumentProcessBean.java:196)
  9.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  10.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  11.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  12.         at java.lang.reflect.Method.invoke(Method.java:597)
  13.         at org.mozilla.javascript.MemberBox.invoke(Unknown Source)
  14.         at org.mozilla.javascript.NativeJavaMethod.call(Unknown Source)
  15.         at org.mozilla.javascript.optimizer.OptRuntime.callN(Unknown Source)
复制代码
kimi 发表于 2013-11-1 15:38:00 | 显示全部楼层
您好:请问您这段代码是写在哪里的呢?您把process这个参数名该为process1后再试试。
 楼主| 上海怡蓝 发表于 2013-11-1 15:44:03 | 显示全部楼层
这段脚本是写在视图的动作按钮中, 改成 process1 也是同样的问题
kimi 发表于 2013-11-1 15:53:55 | 显示全部楼层
您好:能否把您视图操作中的所有代码都贴出来呢?
 楼主| 上海怡蓝 发表于 2013-11-1 15:59:15 | 显示全部楼层

  1. var uuid =new Packages.cn.myapps.util.sequence.Sequence();
  2. var uid=uuid.getSequence();
  3. var process1 = getDocumentProcess();     
  4. var formProcess = getFormProcess();
  5. var user=getWebUser();
  6. var flowId="11e3-41fa-9d18e260-b2c7-63b625ebab57";   //流程
  7. var subform = formProcess.doView("11e3-41eb-014b788d-b799-a1c42fb76da7");//需要插入数据的表单ID值

  8. //插入表单内容
  9. var doc1 = process1.doNew(subform,getWebUser(),new Packages.cn.myapps.base.action.ParamsTable());
  10. doc1.setId(uid);
  11. doc1.setFormid("11e3-41eb-014b788d-b799-a1c42fb76da7");
  12. doc1.setFormname("OA办公自动化/工作流/测试模块/userFrm");
  13. doc1.setAuthor(user.getId());
  14. doc1.setIstmp(false);
  15. doc1.setApplicationid(getApplication());
  16. doc1.setDomainid(user.getDomainid());
  17. doc1.setFlowid(flowId);//flowid为对应的流程Id.
  18. doc1.addStringItem("stuNo","N1001");
  19. doc1.addStringItem("stuName","名字1");       
  20. doc1.addDoubleItem("stuSex","1");
  21. doc1.set_new(true);

  22. var params =new Packages.cn.myapps.base.action.ParamsTable();  
  23. params.setParameter("_flowid", flowId);
  24. process1.doStartFlowOrUpdate(doc1,params,getWebUser());//启动流程

  25. var comment = "系统自动流转";          //备注
  26. var flowOption = "80";           //流程操作参数     
  27. var nextNodeId = new Array();      
  28. nextNodeId[0]="1383202957671";         //下一流程节点ID
  29. var stuDoc  = findDocument("11e3-41eb-014b788d-b799-a1c42fb76da7");
  30. var st=new Packages.cn.myapps.core.workflow.engine.StateMachine();
  31. //getCurrUserNodeRT的第二个参数必须是第一个参数的审批人
  32. var nodert = st.getCurrUserNodeRT(doc1,getWebUser());
  33. var currNodeId = nodert.getNodeid();
  34. println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  35. process1.doFlow(doc1,params,currNodeId,nextNodeId,flowOption,comment,getWebUser());        //流程处理   

复制代码
 楼主| 上海怡蓝 发表于 2013-11-1 16:01:15 | 显示全部楼层
如 5# 所示, 如果单独执行 27行之内的代码, 则没有异常出现,但是不提交表单,所以加了 27行以下的内容。
kimi 发表于 2013-11-1 16:03:42 | 显示全部楼层
您好:您在37行代码后再跟进uid获取到最新的这个文档对象再去提交流程,具体修改后的代码类似如下:

  1. var uuid =new Packages.cn.myapps.util.sequence.Sequence();
  2. var uid=uuid.getSequence();
  3. var process1 = getDocumentProcess();     
  4. var formProcess = getFormProcess();
  5. var user=getWebUser();
  6. var flowId="11e3-41fa-9d18e260-b2c7-63b625ebab57";   //流程
  7. var subform = formProcess.doView("11e3-41eb-014b788d-b799-a1c42fb76da7");//需要插入数据的表单ID值

  8. //插入表单内容
  9. var doc1 = process1.doNew(subform,getWebUser(),new Packages.cn.myapps.base.action.ParamsTable());
  10. doc1.setId(uid);
  11. doc1.setFormid("11e3-41eb-014b788d-b799-a1c42fb76da7");
  12. doc1.setFormname("OA办公自动化/工作流/测试模块/userFrm");
  13. doc1.setAuthor(user.getId());
  14. doc1.setIstmp(false);
  15. doc1.setApplicationid(getApplication());
  16. doc1.setDomainid(user.getDomainid());
  17. doc1.setFlowid(flowId);//flowid为对应的流程Id.
  18. doc1.addStringItem("stuNo","N1001");
  19. doc1.addStringItem("stuName","名字1");        
  20. doc1.addDoubleItem("stuSex","1");
  21. doc1.set_new(true);

  22. var params =new Packages.cn.myapps.base.action.ParamsTable();  
  23. params.setParameter("_flowid", flowId);
  24. process1.doStartFlowOrUpdate(doc1,params,getWebUser());//启动流程

  25. var comment = "系统自动流转";          //备注
  26. var flowOption = "80";           //流程操作参数     
  27. var nextNodeId = new Array();      
  28. nextNodeId[0]="1383202957671";         //下一流程节点ID
  29. var stuDoc  = findDocument("11e3-41eb-014b788d-b799-a1c42fb76da7");
  30. var st=new Packages.cn.myapps.core.workflow.engine.StateMachine();
  31. //getCurrUserNodeRT的第二个参数必须是第一个参数的审批人
  32. var nodert = st.getCurrUserNodeRT(doc1,getWebUser());
  33. var currNodeId = nodert.getNodeid();
  34. println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  35. var doc2=findDocument(uid);
  36. process1.doFlow(doc2,params,currNodeId,nextNodeId,flowOption,comment,getWebUser());        //流程处理  
复制代码
您先尝试,有问题我们再沟通。
 楼主| 上海怡蓝 发表于 2013-11-1 16:09:37 | 显示全部楼层
嗯, 相当不错~   一眼即能洞穿问题所在 。。。。
bobo 发表于 2013-11-1 16:12:00 | 显示全部楼层
,感谢您的反馈与支持!帖子关闭!

本版积分规则

QQ|手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-13 06:26

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表