这个是把有问题的组织单元和单元上分配的功能查询出来了,如果要删除还要调用删除方法来删除:
删除方法如下:
procedure TFixSysError.RefreshOrgFuncs;
const
csSQL = 'SELECT FDEPT, FPOSITION, FPERSON, FVALUE FROM TORGSYSTEM OS, TORGINDEX OI ' +
'WHERE (NOT FVALUE IN (SELECT (FSPACE %s FFILENAME) FROM TFILESYSTEM)) AND '+
'OI.FID = ''%s'' AND OS.FGUID = OI.FGUID AND OS.FDELETELEVEL = 0';
csSQL_ex = 'SELECT FDEPT, FPOSITION, FPERSON, FVALUE FROM TORGSYSTEM OS, TORGINDEX OI ' +
'WHERE (NOT FVALUE IN (SELECT (FSPACE %s FFILENAME) FROM TFILESYSTEM)) AND '+
'OI.FID = ''%s'' AND OS.FGUID = OI.FGUID AND OS.FDELETELEVEL = 0 AND OS.FCLIENTACCOUNT = ''%s''';
var
lQuery: TQuery;
begin
lQuery := TQuery.Create(nil);
try
lQuery.Connection := FConnection;
if TFixSysError.MultiAccount then //() then
lQuery.CommandText := Format(csSQL_ex, [GetAddSQL, SOrgUnitRunFuncRef, BizSys.BizSystem.ClientAccount ])
else
lQuery.CommandText := Format(csSQL, [GetAddSQL, SOrgUnitRunFuncRef]);
lQuery.Open;
lQuery.First;
while not lQuery.Eof do
begin
DeleteOrgFunc(lQuery.FieldByName('FDEPT').AsString, lQuery.FieldByName('FPOSITION').AsString,
lQuery.FieldByName('FPERSON').AsString, cBizFilePrefix + lQuery.FieldByName('FVALUE').AsString,
TOrgFuncKind.ofkRun);
lQuery.Next;
end;
lQuery.Close;
if TFixSysError.MultiAccount then //() then
lQuery.CommandText := Format(csSQL_ex, [GetAddSQL, SOrgUnitManageFuncRef, BizSys.BizSystem.ClientAccount ])
else
lQuery.CommandText := Format(csSQL, [GetAddSQL, SOrgUnitManageFuncRef]);
lQuery.Open;
lQuery.First;
while not lQuery.Eof do
begin
DeleteOrgFunc(lQuery.FieldByName('FDEPT').AsString, lQuery.FieldByName('FPOSITION').AsString,
lQuery.FieldByName('FPERSON').AsString, cBizFilePrefix + lQuery.FieldByName('FVALUE').AsString,
TOrgFuncKind.ofkManage);
lQuery.Next;
end;
finally
lQuery.Free;
end;
end;
procedure TFixSysError.DeleteOrgFunc(const ADept, APosition, APerson,
AFuncURL: string; AOrgFuncKind: TOrgFuncKind);
var
lOrgUnit: TOrgUnit;
begin
try
lOrgUnit := OrgSystem.GetUnit(ADept, APosition, APerson, True);
case AOrgFuncKind of
TOrgFuncKind.ofkRun:
lOrgUnit.Module.RunFuncAlloc.DeleteItem(AFuncURL);
TOrgFuncKind.ofkManage:
lOrgUnit.Module.ManageFuncAlloc.DeleteItem(AFuncURL);
end;
OrgSystem.SaveUnit(lOrgUnit);
except
on E: Exception do
ShowError(E.Message, '')
else
Raise;
end;
end; |