起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: alang

[分享]根据需要做一个查询任务的功能,并且可以运行查询到的任务

[复制链接]
发表于 2007-10-31 18:12:38 | 显示全部楼层
//流程模型的BizURL
    lFlowParam.ProcURLs.Add('Biz:\DMISXT\ZDHXSBTZTCLC.Proc') ;
之后加吗?
任务的接收者列表如何写?
======================
procedure TMainForm.btnRunTaskClick(Sender: TObject);
var
  lTaskParam: TLoadTaskParam;
  lFlowParam: TLoadFlowParam;
  lTasks: TTasks;
  lDataSet : TDataSet;
  lDetailForm : TXXXXCKCT;
begin
  lDataSet := DataSetBroker.DataSet;
  if not lDataSet.Active or lDataSet.Eof then
    Exit;

  lFlowParam := TLoadFlowParam.Create;
  lTaskParam := TLoadTaskParam.Create;
  lTasks := TTasks.Create;
  try

    //根据ProductID,找到对应的流程Guid值
    DoGetFlowGUIDs(lDataSet.FieldByName('Inst_ID').AsString, lFlowParam.GUIDs);
    lTaskParam.States := [TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];
    //流程模型的BizURL
    lFlowParam.ProcURLs.Add('Biz:\DMISXT\ZDHXSBTZTCLC.Proc') ;
    //以给定的条件查询任务(这里给定的条件由lFlowParam给出,根据流程Guid值查询,lTaskParam条件是按照任务状态,只查询出需要处理的任务)
    Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
    //Dialogs.Showmessage(SysUtils.IntToStr(lTasks.Count));
     if lTasks.Count = 0 then
     begin

        lDetailForm := TXXXXCKCT.Create(Context);
        try
          lDetailForm.Showmodal;
        finally
          lDetailForm.Free;
       end;
     end
     else
       SystemCore.TSystemCore.FuncManager.RunTask(SystemCore.TSystemCore.Operator.Positions[0], lTasks[0]);
  finally
    lFlowParam.Free;
    lTaskParam.Free;
    lTasks.Free;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2007-10-31 19:02:35 | 显示全部楼层
如何写 可以得到上一步 流转给谁。。。只能这个人可看流转下一步 不然只能查看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-1 09:08:13 | 显示全部楼层
不是,其实是按照各种条件找符合条件的任务
比如:流转给张三,那么就是创建了一个任务,这个任务的执行者是张三
按照执行者=张三就可以找到这条任务,但是按照执行者=李四就找不到这条任务了
回复 支持 反对

使用道具 举报

发表于 2007-11-1 09:15:27 | 显示全部楼层
lOrgURL := TOrgURL.Create(ADept, ARole, APerson);
    lFlowTask.Executors.Add(lOrgURL);

还是如何写,写在哪?好晕哦。。。找一个晚上 没有合适的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-1 09:29:44 | 显示全部楼层
看看 http://bbs.justep.com/forum.php? ... ight=tloadtaskparam  4楼的例子呢
或者看看 StudioHelp,有三个增加的方法
TOrgURLs = class(Business.System.TObjectList)
public
  constructor create; overload;
  constructor create(AOwnsObjects: Boolean); overload;
  function Add(ABizURL: Business.Model.TBizURL): Longint; overload;
  function Add(AOrgURL: TOrgURL): Longint; overload;
  function Add(ADeptID: string; APositionID: string; APersonID: string): Longint; overload;
  procedure Assign(Source: TOrgURLs);
  property Items[Longint]: TOrgURL;
end;
回复 支持 反对

使用道具 举报

发表于 2007-11-1 11:27:32 | 显示全部楼层
看了一头雾水,看不明白 要详细 如何才可以实现我们的需求。。。

没权限不能流转流程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-1 11:58:56 | 显示全部楼层
44楼的写法就是对的啊,有什么问题呢?
回复 支持 反对

使用道具 举报

发表于 2007-11-2 09:03:50 | 显示全部楼层
我要如何加下面加上(Executors:执行者),可以生效 ,有任务处理权限才能流转
procedure TMainForm.btnRunTaskClick(Sender: TObject);
var
  lTaskParam: TLoadTaskParam;
  lFlowParam: TLoadFlowParam;
  lTasks: TTasks;
  lDataSet : TDataSet;
  lDetailForm : TXXXXCKCT;
begin
  lDataSet := DataSetBroker.DataSet;
  if not lDataSet.Active or lDataSet.Eof then
    Exit;

  lFlowParam := TLoadFlowParam.Create;
  lTaskParam := TLoadTaskParam.Create;
  lTasks := TTasks.Create;
  try

    //根据ProductID,找到对应的流程Guid值
    DoGetFlowGUIDs(lDataSet.FieldByName('Inst_ID').AsString, lFlowParam.GUIDs);
    lTaskParam.States := [TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];
    //流程模型的BizURL
    lFlowParam.ProcURLs.Add('Biz:\DMISXT\ZDHXSBTZTCLC.Proc') ;

    //以给定的条件查询任务(这里给定的条件由lFlowParam给出,根据流程Guid值查询,lTaskParam条件是按照任务状态,只查询出需要处理的任务)
    Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
    //Dialogs.Showmessage(SysUtils.IntToStr(lTasks.Count));
     if lTasks.Count = 0 then
     begin

        lDetailForm := TXXXXCKCT.Create(Context);
        try
          lDetailForm.Showmodal;
        finally
          lDetailForm.Free;
       end;
     end
     else
       SystemCore.TSystemCore.FuncManager.RunTask(SystemCore.TSystemCore.Operator.Positions[0], lTasks[0]);
  finally
    lFlowParam.Free;
    lTaskParam.Free;
    lTasks.Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-11-2 09:10:41 | 显示全部楼层
你需要在GetTasks之前获取当前登陆用户,然后获得当前登陆用户的部门ID,岗位ID,人员ID
然后利用44楼的代码把上面的ID增加到条件中就可以了
回复 支持 反对

使用道具 举报

发表于 2007-11-2 10:48:04 | 显示全部楼层
运行系统初始化的时候发生异常:Access violation at address 025949F6 in module 'CLRModel.bpl'.
Read of address 0000004C
类型:EAccessViolation。
lFlowTask.Executors.Add(lOrgURL);  出错。。。。。。。。。。如何解决
=====================
procedure TMainForm.btnRunTaskClick(Sender: TObject);
var
  lTaskParam: TLoadTaskParam;
  lFlowParam: TLoadFlowParam;
  lTasks: TTasks;
  lDataSet : TDataSet;
  lDetailForm : TXXXXCKCT;

  lFlowTask:TFlowTask;
  lOrgURL: TOrgURL;
  lContextCurrent: TContextCurrent;
  lOrgUnit: TOrgUnit;
  ADept,ARole,APerson:String;
begin
  lDataSet := DataSetBroker.DataSet;
  if not lDataSet.Active or lDataSet.Eof then
    Exit;

  lFlowParam := TLoadFlowParam.Create;
  lTaskParam := TLoadTaskParam.Create;
  lTasks := TTasks.Create;
  try

    //根据ProductID,找到对应的流程Guid值
    DoGetFlowGUIDs(lDataSet.FieldByName('Inst_ID').AsString, lFlowParam.GUIDs);
    lTaskParam.States := [TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];
    //流程模型的BizURL
    lFlowParam.ProcURLs.Add('Biz:\DMISXT\ZDHXSBTZTCLC.Proc') ;

    //过滤用户
    lContextCurrent := TContextCurrent.Create(Context);
    lOrgUnit := lContextCurrent.PersonMember;
    ADept := lOrgUnit.Parent.Parent.ID;
    ARole := lOrgUnit.Parent.ID;
    APerson := lOrgUnit.ID;
    lOrgURL := TOrgURL.Create(ADept, ARole, APerson);  //部门ID,岗位ID,人员ID
    lFlowTask.Executors.Add(lOrgURL);

    //以给定的条件查询任务(这里给定的条件由lFlowParam给出,根据流程Guid值查询,lTaskParam条件是按照任务状态,只查询出需要处理的任务)
    Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
    //Dialogs.Showmessage(SysUtils.IntToStr(lTasks.Count));
     if lTasks.Count = 0 then
     begin

        lDetailForm := TXXXXCKCT.Create(Context);
        try
          lDetailForm.Showmodal;
        finally
          lDetailForm.Free;
       end;
     end
     else
       SystemCore.TSystemCore.FuncManager.RunTask(SystemCore.TSystemCore.Operator.Positions[0], lTasks[0]);
  finally
    lFlowParam.Free;
    lTaskParam.Free;
    lTasks.Free;
  end;
end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 23:33 , Processed in 0.044400 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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