|
发表于 2006-12-27 15:06:50
|
显示全部楼层
使用代码创建无流程任务,通过操作TTask对象实现,但是如果希望通过右键菜单“处理”来打开自定义的功能,必须先定义任务关联。
procedure TTaskPubFunc.UserStartTask(AFuncURL, ATaskTypeName, ATaskTypeID,
ASubject, ABizField, ABizFieldValue, ADept, APosition, APerson : string);
VAR
lOrgURL : TOrgURL;
lTask : TTask;
lTaskBizData : TTaskBizData;
lTaskBizDataRec : TTaskBizDataRec;
begin
lTask := TTask.Create;
{任务接受者}
lOrgURl := TOrgURL.Create(ADept, APosition, APerson);
{任务业务关联数据定义}
lTaskBizData := TTaskBizData.Create;
lTaskBizDataRec := TTaskBizDataRec.Create;
try
lTaskBizDatarec.BizField := ABizField; //业务数据的关键字段,用于检索业务数据
lTaskBizDataRec.Value := ABizFieldValue; //业务数据的关键字段值
lTaskBizData.BizDataKeys.Add(lTaskBizDataRec);
//lTaskBizData.BizDatas.Add(lTaskBizDataRec);
{任务信息的定义}
lTask.Subject := ASubject;
lTask.Kind:= ''; //无流程任务为空
lTask.TaskType := ATaskTypeID; //任务类型,如:工作任务:WORKTASKDEAL, WORKTASK
lTask.TaskTypeName := ATaskTypeName;
lTask.FuncURL := AFuncURL; //处理任务的功能
lTask.SenderDeptID := ADept;
lTask.SenderPositionID := APosition;
lTask.SenderID := APerson;
lTask.BizDatas.Add(lTaskBizData); //设置业务数据与任务关联关系, 保存任务业务关联信息到‘系统空间\系统数据库\任务业务数据表’
lTask.TaskMessages.AddTaskMessage(nil, lOrgURl, TTaskmessagestate.tmsSend, 0,
False); //添加到任务列表
{保存任务}
Flow.FlowEngine.SaveTask(lTask); //保存任务信息到‘系统空间\系统数据库\任务表’,任务消息到‘任务消息表’
finally
//lTaskBizDataRec.Free;
//lTaskBizData.Free;
lTask .Free;
lOrgURL.Free;
end;
end;
//调用UserStartTask
procedure TDMCJWLCRW.CreateCustomTaskClick(Sender: TObject);
VAR
tpf : TTaskPubFunc;
AFuncURL, ATaskTypeName, ATaskTypeID, ASubject, ABizField, ABizFieldValue,
ADept, APosition, APerson : string;
begin
if dsb.DataSet.FieldByName('GUID').AsString = '' then exit;
tpf := TTaskPubFunc.Create(Self.Context);
try
AFuncURL := 'Biz:\PXAL\ZDYYWGN.Func';
ATaskTypeName := '我的功能';
ATaskTypeID := 'MYCUSTOMFUNCDEAL';
ASubject := dsb.DataSet.FieldByName('Subject').AsString;
ABizField := 'BIZ:\PXAL\DEMOSJK.DATABASE\ZDYRWGLDEMOB.TABLE\GUID.Field';
ABizFieldValue := dsb.DataSet.FieldByName('GUID').AsString;
ADept := dsb.DataSet.FieldByName('FDept').AsString;;
APosition := dsb.DataSet.FieldByName('FPosition').AsString;;
APerson := dsb.DataSet.FieldByName('FPerson').AsString;;
tpf.UserStartTask(AFuncURL, ATaskTypeName, ATaskTypeID, ASubject, ABizField,
ABizFieldValue, ADept, APosition, APerson);
jsDialogs.ShowMsg('启动 ' + ASubject + ' 成功', '启动无流程任务');
finally
tpf.Free;
end;
end; |
|