起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 196|回复: 7

【结贴】代码修改执行者**

[复制链接]
发表于 2008-7-14 08:34:50 | 显示全部楼层 |阅读模式
procedure TCCBGSQDForm.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var
  lFlowTask:TFlowTask;
  AAssignMode:TTaskAssignMode;
  lRange:String;
  AExecutorAmount:TTaskExecutorAmount;
  i:integer;
  lDeptList:TStrings;
  lPositionList:TStrings;
  lPersonList:TStrings;
  APersonList:Tstrings;
  //lOrgURL:TOrgURL;
  //lQuery: TQuery;
begin
     lRange := '';
     lFlowTask := Command.FlowTasks.FindFlowTask('BMJLSP');

     if lFlowTask <> nil then
     begin

         lDeptList:=TStringList.Create;
         lPositionList:=TStringList.Create;
         lPersonList:=TStringList.Create;
         try
            GetDeptPositionListByPersonList(lPersonList,lDeptList,lPositionList);
            for i := 0 to  lPersonList.Count -1 do
            begin
            if  lRange ='' then
                lRange:='OrgKey('''+lDeptList.Strings+''','''+lPositionList.Strings+''','''+lPersonList.Strings+''')'
            else
                lRange:=lRange + ' or '+'OrgKey('''+lDeptList.Strings+''','''+lPositionList.Strings+''','''+lPersonList.Strings+''')'
            end;
            //lRange:='OrgKey(JSFZC,KFCS,4956)';

            if  lRange='' then
                lFlowTask.ExecutorMustBeFuncOwner:=True
            else
                lFlowTask.ExecutorMustBeFuncOwner:=False;

            lFlowTask.ExecutorAmount:= AExecutorAmount; //TTaskExecutorAmount.teaMulti;
            lFlowTask.ExecutorKinds := [TTaskExecutorKind.ekPersonMember]; //执行者类型   人员成员
            lFlowTask.AssignMode := AAssignMode;// TTaskAssignMode.amSingleness;

            case  AAssignMode of
              TTaskAssignMode.amSingleness:
              begin
                   lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive;
              end;
              TTaskAssignMode.amTogether:
              begin
                   lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous ;  //任务执行方式  同时执行
              end;
            end;

            lFlowTask.AllowExecutorRange:=lRange;
            lFlowTask.ExecutorRange:=lRange;
            { lFlowTask.Executors.Clear;   //删除缺省执行者
            lOrgURL:=TOrgURL.Create('JSFZC','KFCS','4956' );
            lFlowTask.Executors.Add(lOrgURL);  }
         finally
                lDeptList.Free;
                lPositionList.Free;
                lPersonList.Free;
         end;
     end;
end;

Static procedure TCCBGSQDForm.GetDeptPositionListByPersonList(var APersonMember,ADeptList,APositionList:TStrings);
var
  lPersonMembers: TList;
  lPersonMember: TOrgUnit;
  i,j: integer;
  lQuery: TQuery;
begin
     lPersonMembers := TList.Create;
     APersonMember.Clear;
     ADeptList.Clear;
     APositionList.Clear;

     lQuery := TQuery.Create(nil);
     lQuery.ConnectionString :='DATABASEURL=Biz:\SYSTEM\SYSTEM.DATABASE';
     //lQuery.CommandText := 'SELECT FDEPT,FPOSITION,FPERSON as FreportNo From TORGSYSTEM where '+
     lQuery.CommandText := 'SELECT FPERSON as FreportNo From TORGSYSTEM where '+
     'FDEPT = '''+TSystemCore.Operator.Positions[0].PositionMember.Parent.ID+''' and '+
     'FPERSON <> '''' and '+
     'FPOSITION = ''CZ1'' ';
     lQuery.Open;


  try
    for j:=0 to lQuery.RecordCount-1 do
    begin
      lPersonMembers.Clear;
      OrgSys.OrgSystem.GetPersonMembers(lQuery.Fields.AsString, lPersonMembers); //
      for i := 0 to lPersonMembers.count-1 do
      begin
        lPersonMember := TOrgUnit(lPersonMembers.Items);
        //lPersonMember := TOrgUnit(lQuery.Fields.AsString);
        APersonMember.Add(lPersonMember.ID);
        APositionList.Add(lPersonMember.Parent.ID);
        ADeptList.Add(lPersonMember.Parent.Parent.ID);

      end;
    end;
  finally
    lPersonMembers.Free;
  end;
  lQuery.Free;
end;
回复

使用道具 举报

 楼主| 发表于 2008-7-14 08:36:07 | 显示全部楼层
lFlowTask.ExecutorRange:=lRange;执行到这句没起到效果
执行范围确定了 但执行者没在这个范围内
回复 支持 反对

使用道具 举报

发表于 2008-7-14 08:51:31 | 显示全部楼层
检查一下lRange:=lRange + ' or '+'OrgKey('''+lDeptList.Strings+''','''+lPositionList.Strings+''','''+lPersonList.Strings+''')'
得到的结果是什么?拿这个去Studio试一下,能找到相关人员吗?
还有在做
            lFlowTask.AllowExecutorRange:=lRange;
            lFlowTask.ExecutorRange:=lRange;
之前,先得Clear一下
回复 支持 反对

使用道具 举报

发表于 2008-7-14 09:05:07 | 显示全部楼层
楼主在:
            lFlowTask.AllowExecutorRange:=lRange;
            lFlowTask.ExecutorRange:=lRange;
后面调用这两句看看。  
lFlowTask.ReLoadAllowExecutors;
  lFlowTask.ReLoadExecutors;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-14 09:05:37 | 显示全部楼层
lRange的值是不是不能一个值
现在测试时,执行者只有一个,是不是问题在这里?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-14 09:09:20 | 显示全部楼层
lFlowTask.ReLoadAllowExecutors;
lFlowTask.ReLoadExecutors;
加上这两句是可以了 代码意思是什么?说明下
回复 支持 反对

使用道具 举报

发表于 2008-7-14 09:17:51 | 显示全部楼层
按照楼主定义的表达式,重新为Executors属性赋值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-14 09:28:07 | 显示全部楼层
结 3Q各位
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-19 06:21 , Processed in 0.055673 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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