使用协同任务 发送任务给多个人 创建一条任务多条消息。代码如下:
procedure TDDAQXHWG.SendTask(lMembers: TStringList);
var
lTask: TTask;
lSender: TOrgUnit;
lStorage: TTaskDBStorage;
lTaskBizData: TTaskbizData;
i,j: integer;
lExpr: string;
lOrgURLs: TOrgURLs;
begin
// 接受人
lSender := SystemUtils.TContextUtils.GetPersonMember(Context);
lTask:= TTask.Create;
lTask.New(TTaskDefineInfo.Instance(Context).GetTaskTypeInfo('SELFNOTIFY'));
lTask.FlowGUID := jscommon.CreateGUIDStr;
lTask.SenderDeptID := lSender.Parent.Parent.id;
lTask.SenderPositionID := lSender.Parent.ID;
lTask.SenderID := lSender.ID;
lTask.State := TTaskState.tsStarted;
lTask.FuncURL := 'Biz:\DLSCJYYYXT\FDQCHJYJGCXFUNC.FUNC';
lTaskBizData := TTaskBizData.Create;
lTaskBizData.BizDataKey[0].BizField := 'Biz:\DLSCJYYYXT\DLJYSJK.DATABASE\BASE_RESULT.TABLE\TRADECODE.Field';
lTaskBizData.BizDataKey[0].Value := DataSetBroker1.dataset.FieldByName('TradeCode').asstring;
lTask.BizDatas.Add(lTaskBizData);
lTask.Subject := DataSetBroker2.DataSet.FieldByname('DESCRI').asstring+
'[编号:'+DataSetBroker2.DataSet.FieldByname('TradeCode').asstring+']交易结果,请查收并及时确认反馈!';
lTask.ExecuteMode := TTaskExecuteMode.emSimultaneous;
for i:=0 to lmembers.count -1 do
begin
lOrgURLs:= TOrgURLs.Create;
try
lExpr := 'OrgChildren(OrgKey('''+lMembers.Strings+''',''JYY'',''''),'+
'OrgCondition(''*.psm'','''',''''),true,true)';
org.Orgsys.Orgsystem.GetOrgURLsByOrgExpr(lExpr,lOrgURLs);
for j:=0 to lOrgURLs.Count-1 do
begin
lTask.TaskMessages.AddTaskMessage(nil, lOrgURLs.Items[j],
TTaskmessagestate.tmsSend, 0, False);
end;
finally
lOrgUrls.Free;
end;
end;
lStorage:= TTaskDBStorage.Create;
lStorage.Save(lTask);
end;
结束消息代码如下:
procedure TMAINFORM.BizFormShow(Sender: TObject);
var
lTask: TTask;
lStorage: TTaskDBStorage;
i: integer;
begin
lTask := TTaskServices.FindCurrentTask(Context);
if lTask <> nil then
begin
//结束任务
lStorage := TTaskDBStorage.Create;
for i := 0 to lTask.TaskMessages.Count -1 do
begin
if Sysutils.SameText(
KDcommonLib.TKDcommonLib.GetUserID(Context),
lTask.TaskMessages.Items.ReceiverID) then
lTask.TaskMessages.Items.State := TTaskMessageState.tmsFinished;
end;
lStorage.Save(ltask);
//关闭功能
systemcore.TSystemCore.FuncManager.TerminateFunc(FuncBroker.Func,True);
end;
end;
所有的消息都完成后,任务的状态还是尚未处理状态 ,任务的状态应当是已完成状态呀!! 是否缺陷,还是用法不对。
版本2918 |