代码如下:
unit SHBD;
interface
uses
Business.System, Business.Model, Business.Forms, Business.Model.Flow, Business.Data;
type
TSHBD = class(TFormDoc)
InfoBroker: TInfoBroker;
DocView1: TDocView;
FlowBroker1: TFlowBroker;
Panel1: TPanel;
ToolBar1: TToolBar;
ToolButton2: TToolButton;
ToolButtonDropTicket: TToolButton;
ToolButton1: TToolButton;
DataNavigator1: TDataNavigator;
DocViewBar: TDocViewBar;
ImageList1: TImageList;
ActionList1: TActionList;
ActDropTicket: TAction;
procedure FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
procedure ActDropTicketExecute(Sender: TObject);
private
{private declarations}
public
{public declarations}
end;
implementation
procedure TSHBD.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);
var
lQuery: TQuery;
lFlowID, lDeptID: string;
lFlowOrder, lFlowCount, lRATIFY: integer;
lFlowTask: TFlowTask;
lRange: String;
lUnits: TList;
i: integer;
begin
//exit;
// 修改流转顺序表
lQuery := TQuery.Create(nil);
//lUnits := TList.Create;
try
lQuery.ConnectionString := 'DATABASEURL=Biz:\DDJHXT\MAINTAIN.Database';
// 判断数据唯一性
lQuery.Close;
lQuery.CommandText := 'select * from T_FLOWQUEUE where REQUISITION_ID = ''' + FlowBroker1.FlowControl.Flow.ID + '''';
lQuery.Open;
if not lQuery.IsEmpty then
begin
lQuery.Delete;
lQuery.ApplyUpdates();
end;
lQuery.Close;
lQuery.CommandText := 'select * from T_TICKETFLOWMODE where REQUISITION_ID = ''' + FlowBroker1.FlowControl.Flow.ID + ''' order by IS_RATIFY, FLOW_ORDER';
lQuery.Open;
if not lQuery.IsEmpty then
begin
lFlowID := lQuery.FieldByName('REQUISITION_ID').AsString;
lFlowOrder := lQuery.FieldByName('FLOW_ORDER').AsInteger;
lFlowCount := lQuery.RecordCount;
lDeptID := lQuery.FieldByName('DEPARTMENT_ID').AsString;
lRATIFY := lQuery.FieldByName('IS_RATIFY').AsInteger;
lQuery.Close;
lQuery.CommandText := 'insert into T_FLOWQUEUE Values(''' + lFlowID + ''', ' + SysUtils.inttostr(lFlowOrder) + ', ' + SysUtils.inttostr(lFlowCount) + ', ''' + lDeptID + ''', ''' + SysUtils.inttostr(lRATIFY) + ''')';
lQuery.Execute;
end;
// 指定下一环节的执行者
lQuery.Close;
lQuery.CommandText := 'select * from T_FLOWQUEUE where REQUISITION_ID = ''' + FlowBroker1.FlowControl.Flow.ID + '''';
lQuery.Open;
//Command.FlowControl.CurrentProcUnit.GetSuccedentUnits(lUnits,
// [TProcUnitKind.ukActivity], [TProcUnitKind.ukActivity]); // ukActivity表示活动环节
//for i := 0 to lUnits.Count - 1 do
//begin
// if SysUtils.UpperCase(TProcUnit(lUnits).ID) = 'YCSBLZGN' then
// begin
// TProcUnit(lUnits[I]).
// end;
//end;
lFlowTask := Command.FlowTasks.FindFlowTask('YCSBLZGN');
//lFlowTask := Command.FlowTasks.FindFlowTask('HSYWGN');
if lFlowTask <> nil then
begin
lRange := 'OrgChildren(OrgKey('''+lQuery.FieldByName('DEPARTMENT_ID').AsString+''','''',''''), '''', True, False)';
lFlowTask.ExecutorMustBeFuncOwner:=True; //执行者必须是功能拥有者
lFlowTask.ExecutorAmount:= TTaskExecutorAmount.teaMulti; //TTaskExecutorAmount.teaMulti; //执行者范围 多个
// lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaOne; //执行者范围 单个
lFlowTask.ExecutorKinds := [TTaskExecutorKind.ekPersonMember]; //执行者类型 人员成员
lFlowTask.AllowExecutorRange:=lRange; //限定执行者范围
lFlowTask.ExecutorRange:=lRange; //默认执行者范围
//lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous ; //任务执行方式 同时执行
// lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous ; //任务执行方式 同时执行
// lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive ; //任务执行方式 独立执行
lFlowTask.ExecuteMode := TTaskExecuteMode.emMonopolize ; //任务执行方式 独占方式
// lFlowTask.ExecuteMode := TTaskExecuteMode.emSequential ; //任务执行方式 顺序执行
lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstOpen; //抢占方式 第一个打开
// lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstProcess; //抢占方式 第一个处理
lFlowTask.AssignMode := TTaskAssignMode.amSingleness;//TTaskAssignMode.amSingleness; //任务分配方式 独立分配
// lFlowTask.AssignMode := TTaskAssignMode.amTogether; //任务分配方式 共同分配
end;
finally
lQuery.Free;
//lUnits.Free;
end;
{lQuery := TQuery.Create(nil);
try
lQuery.ConnectionString := 'DATABASEURL=Biz:\DDJHXT\MAINTAIN.Database';
lQuery.Close;
lQuery.CommandText := 'select * from T_FLOWQUEUE where REQUISITION_ID = ''' + FlowBroker1.FlowControl.Flow.ID + '''';
lQuery.Open;
finally
lQuery.Free;
end; }
end;
procedure TSHBD.ActDropTicketExecute(Sender: TObject);
var myform:TFPCT;
begin
try
myform:=TFPCT.Create(context);
myform.ShowModal;
finally
myform.Free;
end;
end;
对13#的解决方案:A环节的 onCreateFlowOutFlowTasks触发时环节B必须是默认的环节,所以根本不能在这里进行判断。
end. |