起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1128|回复: 16

关于流程流转的问题

[复制链接]
发表于 2011-2-17 14:58:28 | 显示全部楼层 |阅读模式
在流程图中间可以设置当前环节向下环节发送的执行规则吗?要如何传入参数(部门编号),并使用参数达到向下环节流转时能指定到我传入的参数对应的部门
回复

使用道具 举报

 楼主| 发表于 2011-2-17 15:21:55 | 显示全部楼层

UP

流程图中的执行者要怎么增加和使用?谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-18 09:50:56 | 显示全部楼层

UP

在组织机构为上下级的情况  如果上级的一个部门要发送流程给下级单位进行处理时,怎么通过传入下级单位的编号判断流程的发送?

新建 bmp 图像.jpg

308.69 KB, 下载次数: 260

回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-18 09:53:24 | 显示全部楼层

执行者规则怎么使用

执行者规则怎么使用?

截图00.png

57.98 KB, 下载次数: 265

回复 支持 反对

使用道具 举报

发表于 2011-2-21 10:22:06 | 显示全部楼层
用代码更改流程的执行者
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-21 14:50:10 | 显示全部楼层

具体在哪下面写代码?

能举个例子吗?谢谢
回复 支持 反对

使用道具 举报

发表于 2011-2-22 09:18:37 | 显示全部楼层
楼主,可以拿:代码*执行者
在论坛里搜索一下
http://bbs.justep.com/search.php ... ortorder=descending
回复 支持 反对

使用道具 举报

发表于 2011-2-22 09:59:10 | 显示全部楼层
分享我自己建的公共函数库中的几个相关函数。

static procedure TFlowRelated.ModifyExecutorRangeByPersonList(Command:TFlowOutCommand;ANextProcUnit:string;APersonList:Tstrings;AAssignMode:TTaskAssignMode;AExecutorAmount:TTaskExecutorAmount);
var
  lFlowTask:TFlowTask;
  i:integer;
  lPersonList,lURLList:TStringList;
  lRange, deptID, PosID, PsnId: string;
begin
  lFlowTask := Command.FlowTasks.FindFlowTask(ANextProcUnit);
  if lFlowTask <> nil then
  begin
    lPersonList:=TStringList.Create;
    lURLList:=TStringList.Create;
    try
      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.AllowExecutors.Clear;
      lFlowTask.Executors.Clear;
      for i := 0 to  APersonList.Count -1 do
      begin
          lPersonList.Clear;
          TPerson.GetPersonURLsByID(ApersonList.Strings,lPersonList);
          if  lPersonList.Count > 0 then
          begin
             TPerson.AnalysisURL(lPersonList.Strings[0],DeptID,PosID,PsnID);
             if lRange = '' then
                lRange:= ' OrgKey('''+  DeptID + ''',''' + PosID + ''',''' + PsnID+ ''') '
             else
                lRange:= lRange + ' or OrgKey('''+  DeptID + ''',''' + PosID + ''',''' + PsnID+ ''') '
          end;
      end;
      lFlowTask.AllowExecutorRange:= lRange;
      lFlowTask.ReLoadAllowExecutors;
      lFlowTask.ReLoadExecutors;
    finally
      lPersonList.Free;
      lURLList.Free;
    end;
  end;
end;

static procedure TPerson.GetPersonURLsByID(ID: string; var URLs: TStringList);
//根据一个ID获取所有的URL
var
  lExpr: string;
begin
  lExpr:= 'OrgCondition(''' + ID + '.psm'','''','''')';
  OrgSys.OrgSystem.GetBizURLsByOrgExpr(lExpr,URLs);
end;

static procedure TPerson.AnalysisURL(URL: string; var DeptID, PositionID, PersonID: string);
var
  lOrgUnit: TOrgUnit;
  lBizUrl: TBizUrl;
begin
    lBizUrl:= TBizUrl.Create;
  try
    if IsValidUrl(URL) then
    begin
          lBizUrl.URL:= URL;
          lOrgUnit:= OrgSys.OrgSystem.GetUnit(lBizUrl);
           case TBizObjectKind(lOrgUnit.OrgKind) of
           TBizObjectKind.boDept:  //选中部门
             begin
               DeptID:= lOrgUnit.ID;
               PositionID:= '';
               PersonID:= '';
             end;
           TBizObjectKind.boPositionMember:  //选中岗位
             begin
               DeptID:= lOrgUnit.Parent.ID;
               PositionID:= lOrgUnit.ID;
               PersonID:= '';
             end;
           TBizObjectKind.boPersonMember:  //选中人员
             begin
               DeptID:= lOrgUnit.Parent.Parent.ID;
               PositionID:= lOrgUnit.Parent.ID;
               PersonID:= lOrgUnit.ID;
             end;
           TBizObjectKind.boOrgan:
             begin
               DeptID:= '';
               PositionID:= '';
               PersonID:= '';
             end;
          end; //case
   end;
  finally
    lBizUrl.Free;
  end;
end;
回复 支持 反对

使用道具 举报

发表于 2011-2-22 10:00:41 | 显示全部楼层
static function TPerson.IsValidUrl(URL: string): Boolean;  //判断一个URL是否有效
var
lOrg: TOrgTree;
begin
  lOrg:= TOrgTree.Create(Business.System.BizServer.ServerID);
  try
    if lOrg.FindNodeByFileName(URL) <> nil then
      result:= True else result:= False;
  finally
     lOrg.Free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-22 17:26:11 | 显示全部楼层

能帮我看下下面的代码吗?

procedure TFWTSCLZCT.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var
  lFlowTask:TFlowTask;
  lOrgURL:String;

begin
  Inherited;

     lFlowTask := Command.FlowTasks.FindFlowTask(FlowBroker1.FlowControl.CurrentTask.ProcUnitID);
// 我使用这句的时候 lFlowTask 为空对象。
     lFlowTask := Command.FlowTasks[1];
//使用这句的时候报数组越界
     if lFlowTask <> nil then
      begin
       dialogs.ShowMessage('1111111');
       { lFlowTask.Executors.Clear;   //删除缺省执行者
         lOrgURL := TOrgURL.Create('XSB','XSY',ZXX' ); //部门、岗位、人员创建组织单元
         lFlowTask.Executors.Add(lOrgURL);//添加执行者
       }
       end;


end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-23 18:22 , Processed in 0.050838 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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