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

如何用脚本启动流程

[复制链接]
rush 发表于 2012-9-3 15:29:29 | 显示全部楼层 |阅读模式
本帖最后由 purple 于 2012-9-24 14:11 编辑

我想点某个按钮的时候用已有的一个表单记录启动与该表单关联的流程,应该如何实现?是否有现成的脚本的例子?
下面是我参照论坛上的一些代码做的,似乎不能正常工作
  1. //获取所有子表单记录
  2. var parentDoc = getCurrentDocument();
  3. var parentDocid = parentDoc.getId();
  4. var dql = "$formname  = '任务' and $parent.$id ='" + parentDocid + "'";
  5. var subDocs = queryByDQL(dql);

  6. //为每一条记录启动一个流程
  7. var process = getDocumentProcess();//申明文档业务处理类
  8. var params =new Packages.cn.myapps.base.action.ParamsTable();

  9. for(var iterator = subDocs.iterator(); iterator.hasNext();)
  10. {
  11.   var subdoc = iterator.next();

  12. //将“执行者”字段作为新流程第一个节点的审批人
  13.   var userName = subdoc.getItemValueAsString("执行者");
  14.   var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
  15.   var user = userProcess.getUserByLoginno(userName, getDomainid());

  16. //启动流程//是不是这里写的有问题?params还需要设置其他的内容吗?
  17.   var webuser = new Packages.cn.myapps.core.user.action.WebUser(user);
  18.   process.doStartFlowOrUpdate(subdoc,params,webuser);
  19. }
复制代码
shary 发表于 2012-9-3 16:15:16 | 显示全部楼层
您好,您的意思是想通过按钮手动启动当前记录对应的流程吗?如果是的话您可以在表单中添加“流程启动”类型的操作。您贴出的代码是新建或更新记录并启动流程。
回复

使用道具 举报

purple 发表于 2012-9-3 16:49:20 | 显示全部楼层
电话跟客户沟通,实际问题为,主表表单,子表添加多条记录,想点击某按钮,将所有子表单记录启动流程,目前已实现启动流程,但是子表单的提交无效跟,已跟客户沟通,检查子表单的提交按钮配置,有问题再继续沟通。
回复

使用道具 举报

 楼主| rush 发表于 2012-9-4 08:40:08 | 显示全部楼层
回复 3# purple


   检查了“提交”按钮的配置,没有问题,已经与流程关联了
   昨天电话描述的有点问题,主表单提交后,脚本能够执行,没报错,但子表单并没有出现“提交”按钮。


   在数据库中的t_flowstatert表中,只有主表单的记录,没有子表单的,应该是流程没有创建成功吧?是不是脚本调用的不对?
回复

使用道具 举报

 楼主| rush 发表于 2012-9-4 08:57:12 | 显示全部楼层
回复 2# shary

要实现的是一个任务分配的功能。

用的主子表单,主表单创建一系列任务,在主表单点提交以后,希望能够同时启动一批子表单记录的对应流程,一条子记录启一个流程,所以不希望使用“启


动流程”按钮手动启动,而是希望通过脚本方式“自动”启动。


由于一些原因无法使用子流程的方式(之前与purple交流过)


是不是脚本调用的函数不对?
回复

使用道具 举报

purple 发表于 2012-9-4 10:55:47 | 显示全部楼层
您好,您的脚本不对吧?您只是声明了params变量,并没有赋值呀?您至少应该一个流程id呀,请注意看http://www.teemlink.com/bbs/view ... 26amp%3Btypeid%3D12帖子里,
  1. var params =new Packages.cn.myapps.base.action.ParamsTable();
  2. params.setParameter("_flowid", value)//value为对应的流程Id.
复制代码
回复

使用道具 举报

 楼主| rush 发表于 2012-9-4 11:27:31 | 显示全部楼层
回复 6# purple

想明白了。当时看代码还不知道怎么回事。但是...流程id去哪找?
回复

使用道具 举报

purple 发表于 2012-9-4 13:20:27 | 显示全部楼层
回复 7# rush


    流程id获取方式有两个,一个是,直接在后台流程列表,选择您需要的流程,右键查询属性,另一个是,查询T_BILLDEFI获取。
回复

使用道具 举报

 楼主| rush 发表于 2012-9-4 14:23:14 | 显示全部楼层
回复 8# purple

找到了流程id,在脚本中队subDoc和paramTable中都设置了flowid,脚本可以运行。在子表单的视图中可以看到子表单的状态,已经进入了流程第一个节点。


但还是有问题,脚本方式创建的流程,进入记录的表单时,有“提交”按钮,但按了没反应。在后台的流程中我是设置了“可指定下一步审批人”的,却前台没有显示指定审批人的选择框。
   
做了个实验,手工方式,直接填个新子表单,保存,就可以正常提交,跑完整个子表单的流程。所以我怀疑还是脚本写的有问题。

现在的脚本如下:
  1. //获取所有子表单记录
  2. var parentDoc = getCurrentDocument();
  3. var parentDocid = parentDoc.getId();
  4. var dql = "$formname  = '任务' and $parent.$id ='" + parentDocid + "'";
  5. var subDocs = queryByDQL(dql);

  6. //为每一条启动一个流程
  7. var process = getDocumentProcess();//申明文档业务处理类

  8. for(var iterator = subDocs.iterator(); iterator.hasNext();)
  9. {
  10.   var subdoc = iterator.next();
  11.   subdoc.setFlowid("11e1-e747-ed5720e8-8c0c-8bc4d4cccfcc");

  12. var userId = subdoc.getItemValueAsString("执行者");
  13.   var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
  14.   var webuser = userProcess.getWebUserInstance(userId);
  15.   
  16.   var params =new Packages.cn.myapps.base.action.ParamsTable();
  17.   params.setParameter("_flowid", "11e1-e747-ed5720e8-8c0c-8bc4d4cccfcc");

  18.   process.doStartFlowOrUpdate(subdoc,params,webuser);//启动流程
  19. }
复制代码
回复

使用道具 举报

 楼主| rush 发表于 2012-9-4 14:24:01 | 显示全部楼层
唉,一路坎坷啊~~
回复

使用道具 举报

本版积分规则

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

GMT+8, 2026-8-14 07:16

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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