业务模型\协同系统\任务\任务中心资源
function TFilterBuilder.GetFilter: string;
begin
Result := AddFilter('', GetDateRangeFilter);
Result := AddFilter(Result, GetOrgFilter);
// Result := AddFilter(Result, GetStateFilter);
end;
function TFilterBuilder.GetOrgFilter: string;
const
SSOrgURLIn = 'T1.FSORGURL IN(%s) OR (T1.FSPERSON = ''%s'')';
SSOrgURLIn_Pos = 'T1.FSORGURL IN(%s) OR ((T1.FSDEPT = ''%s'') AND ' +
'(T1.FSPOSITION = ''%s'') AND (T1.FSPERSON = ''%s''))';
SROrgURLAndPersonIn = 'TTASKMESSAGE.FRORGURL IN(%s) OR (TTASKMESSAGE.FRPERSON = ''%s'') ';
SROrgURLAndPersonIn_Pos = 'TTASKMESSAGE.FRORGURL IN(%s) OR ((TTASKMESSAGE.FRDEPT = ''%s'') AND ' +
'(TTASKMESSAGE.FRPOSITION = ''%s'') AND (TTASKMESSAGE.FRPERSON = ''%s''))';
SROrgURLIn = 'TTASKMESSAGE.FRORGURL IN(%s) ';
SROrgURLLike = 'TTASKMESSAGE.FRORGURL LIKE ''%s%%''';
SRPositionWhere = 'TTASKMESSAGE.FRPOSITION = ''%s''';
SRStateIn = 'TTASKMESSAGE.FSTATE IN(%s)';
SRSQL = 'SELECT TTASKMESSAGE.FTASKGUID FROM TTASKMESSAGE WHERE %s';
SSStateIn = 'T1.FSTATE IN(%s)';
SSSQL = 'SELECT T1.FGUID FROM TTASK T1 WHERE %s';
SMain = 'TTASK.FGUID IN(%s)';
SUnionMian = 'TTASK.FGUID IN((%s) UNION (%S))';
var
lRStates: TTaskMessageStates;
lSStates: TTaskStates;
lROrgList, lSOrgList: TStringList;
lReceived, lSent, lROrgURLIn, lSOrgURLIn, lOperatorID: string;
lDept, lPos, lPer: string;
begin
lRStates := [];
lSStates := [];
lROrgList := nil;
lSOrgList := nil;
lReceived := '';
lSent := '';
lOperatorID := TContextUtils.GetOperator(FContext).ID;
// 本人待办
if (TProcessState.psProcess in FProcessStates) or (FProcessStates = []) then
begin
lRStates := TTaskMessage.NeedProcessTaskMessageStates;
if FOrgTypes <> [TOrgType.otPerson, TOrgType.otDept] then
begin
if TOrgType.otPerson in FOrgTypes then
lROrgList := PersonMemberURLs
else if TOrgType.otDept in FOrgTypes then
lROrgList := PersonMemberParentURLs
else
Assert(False, '尚未支持');
end
else
lROrgList := PersonMemberAndParentURLs;
end;
// 本人已办
if (TProcessState.psFinish in FProcessStates) or (FProcessStates = []) then
begin
lRStates := lRStates + TTaskMessage.FinishedTaskMessageStates;
if lROrgList = nil then
lROrgList := PersonMemberURLs
else
; // 已经设置 PersonMemberAndParentURLs
end;
// 本人提交待办
if (TProcessState.psPost in FProcessStates) or (FProcessStates = []) then
begin
lSStates := TTask.CanProcessTaskStates;
lSOrgList := PersonMemberURLs
end;
// 本人提交已办
if (TProcessState.psPostFinished in FProcessStates) or (FProcessStates = []) then
begin
lSStates := lSStates + TTask.FinishedTaskStates;
lSOrgList := PersonMemberURLs
end;
if lRStates <> [] then
begin
lReceived := SysUtils.Format(SRStateIn, [DoGetTaskMessageStatesQueryStr(lRStates)]);
end;
if lROrgList <> nil then
begin
// TODO: ??
if not (TOrgType.otPerson in FOrgTypes) and (TOrgType.otDept in FOrgTypes) then
lROrgURLIn := SysUtils.Format(SROrgURLIn, [DoGetQueryURLStr(lROrgList)])
else
begin
if TOrgUtils.GetIsPersonMember(FContext) then
begin
TContextUtils.GetContextOperator(FContext, lDept, lPos, lPer);
lROrgURLIn := SysUtils.Format(SROrgURLAndPersonIn_Pos, [DoGetQueryURLStr(lROrgList),
lDept, lPos, lPer]);
end
else
lROrgURLIn := SysUtils.Format(SROrgURLAndPersonIn, [DoGetQueryURLStr(lROrgList),
lOperatorID]);
end;
if lReceived <> '' then
lReceived := AddAndCondition(lReceived, lROrgURLIn)
else
lReceived := lROrgURLIn;
end;
if lSStates <> [] then
begin
lSent := SysUtils.Format(SSStateIn, [DoGetTaskStatesQueryStr(lSStates)]);
end;
if lSOrgList <> nil then
begin
if TOrgUtils.GetIsPersonMember(FContext) then
begin
TContextUtils.GetContextOperator(FContext, lDept, lPos, lPer);
lSOrgURLIn := SysUtils.Format(SSOrgURLIn_Pos, [DoGetQueryURLStr(lSOrgList), lDept, lPos, lPer]);
end
else
lSOrgURLIn := SysUtils.Format(SSOrgURLIn, [DoGetQueryURLStr(lSOrgList), lOperatorID]);
if lSent <> '' then
lSent := AddAndCondition(lSent, lSOrgURLIn)
else
lSent := lSOrgURLIn;
end;
if lReceived <> '' then
lReceived := SysUtils.Format(SRSQL, [lReceived]);
if lSent <> '' then
lSent := SysUtils.Format(SSSQL, [lSent]);
if (lReceived <> '') or (lSent <> '') then
begin
if (lReceived <> '') and (lSent <> '') then
Result := SysUtils.Format(SUnionMian, [lReceived, lSent])
else begin
if lReceived <> '' then
Result := SysUtils.Format(SMain, [lReceived])
else
Result := SysUtils.Format(SMain, [lSent]);
end;
end
else
Result := '';
end; |