起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 234|回复: 12

【结】代码启动流程能否定义任务协作?**

[复制链接]
发表于 2008-5-21 15:04:42 | 显示全部楼层 |阅读模式
代码如下:
procedure TCustomFLow.UserStartFlow
(FFlowUrl,FDept,FRole,FPerson,FStartProc,FFlowID,FSubject,FDescription: string; FContext: TContext);
var
  lBizURL: TBizURL;
  lFlowValue: TFlowValue;
  lFlowControl: TFlowControl;
  lExecutor: TOrgURL;
  lQuery : TQuery;
begin

  lBizURL := TBizURL.Create;
  lFlowValue := TFlowValue.Create;
  lFlowControl := TFlowControl.Create(FContext);
  lExecutor := TOrgURL.Create(FDept, FRole, FPerson);
  lBizURL.URL := FFlowUrl;
  try
    lFlowValue.IDs.Add(FFlowID);            //流程ID
    lFlowValue.Subject := FSubject;         //流程主题
    lFlowValue.Description := FDescription; //流程描述
    //启动流程实例
    lFlowControl.StartupFlow(lBizURL, FStartProc, lExecutor, lFlowValue);
    lFlowControl.CurrentTask.PreemptMode := TTaskPreemptMode.omFirstProcess; //抢占方式 第一个处理
    lFlowControl.CurrentTask.ExecuteMode := TTaskExecuteMode.emMonopolize ;  //任务执行方式  独占方式
    //流程实例数据保存到数据库
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
    SaveFLowID(FID);
  finally
    lFlowControl.Free;
    lFlowValue.Free;
    lBizURL.Free;
    lQuery.Free;
  end;
end;

当有两个人接收到任务的时候,任务需要第一个处理人独占的方式处理。现在的代码没有作用,版主帮忙看看哪里需要修改一下。谢谢
回复

使用道具 举报

发表于 2008-5-21 15:43:18 | 显示全部楼层
没有起作用,你现在是这样执行,是多人同时收到某个任务吗?

请问该发送任务的哪个功能环节的执行规则怎么定义的,范围是多人吗?如果不是,你代码也没有设置设置啊,那么任务过去就不是多人处理吗?

见附件图

1.gif

24.3 KB, 下载次数: 127

回复 支持 反对

使用道具 举报

发表于 2008-5-21 16:05:25 | 显示全部楼层
还有,任务协作定义是怎么设置的,见附件图, 任务分配方式、任务执行方式等这些是怎样,如果不是共同分配,独占执行,那么任务不可能实现抢占的,如果需要代码定义这些,请参考
http://bbs.justep.com/forum.php?mod=viewthread&tid=9962

11.gif

21.11 KB, 下载次数: 123

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 16:32:45 | 显示全部楼层
首先:
是由代码启动流程,也就是说不是由某个功能环节发送任务。
这样就是说要设置流程入口功能环节的执行规则:执行规则中的设置与2#、3#图片中的设置是一样的。
启动流程后,入口环节的任务是发送给多个人的。
现在一个人执行并流转后,其它人还是能看到并执行——流转该起始任务。这样,在下一环节的执行者就会收到两条一样的任务。
麻烦版主继续跟进
回复 支持 反对

使用道具 举报

发表于 2008-5-21 16:59:53 | 显示全部楼层
你启动的时候,任务是发送给哪个环节了,例如我的流程定义中,是入口功能还是审批1功能呢?就是   FStartProc 这个参数给的哪个值呢?需要看这个环节的执行规则的定义。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-21 17:21:23 | 显示全部楼层
就是入口环节嘛,就是图中的入口功能。
检查过了,入口功能的执行规则与图中的一样。
回复 支持 反对

使用道具 举报

发表于 2008-5-21 17:34:04 | 显示全部楼层
明白,正在处理,有结果马上反馈上来
回复 支持 反对

使用道具 举报

发表于 2008-5-21 18:31:23 | 显示全部楼层
我机器的版本出点问题,明天给你结果吧,
回复 支持 反对

使用道具 举报

发表于 2008-5-22 10:25:47 | 显示全部楼层
我测试了是代码的问题,执行方式设置的不对,修改为
lFlowControl.CurrentTask.ExecuteMode := TTaskExecuteMode.emExclusive (这是独占)

1、如果根据流程中的定义走,那么就不需要再用代码来设置抢占等属性了,

2、其实这样的东东自己也可以调试。启动后,到任务表中找到相应的任务,然后看看该任务的 执行方式 和 抢占方式 是啥。

3、我个人建议
先设置执行方式   lFlowControl.CurrentTask.ExecuteMode := TTaskExecuteMode.emExclusive ;
在设置抢占方式   lFlowControl.CurrentTask.PreemptMode := TTaskPreemptMode.omFirstProcess;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-22 11:11:07 | 显示全部楼层
版主的第三条建议在我提供的代码中已经有体现。
按照版主提供的方法,查看任务表,生成的任务执行方式为空值,抢占方式为“第一个处理”。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 12:13 , Processed in 0.046988 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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