起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1097|回复: 21

刷新功能权限点了无反应,有没有SQL方式清理?

[复制链接]
发表于 2010-6-9 10:33:06 | 显示全部楼层 |阅读模式
v刷新功能权限:在组织单元功能权限中,删除所对应业务功能不存在的功能权限项。
点了无反应,有没有SQL方式清理?
回复

使用道具 举报

发表于 2010-6-9 10:47:41 | 显示全部楼层
可以调试一下这个功能看看代码走到哪里没有反映了

也可以自己跟踪一下按钮中的代码看看是如何操作的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-9 11:13:23 | 显示全部楼层
这你们的核心内容。。。给个SQL方式清理?
回复 支持 反对

使用道具 举报

发表于 2010-6-9 11:21:06 | 显示全部楼层
参考:

业务模型\系统空间\系统功能\系统修复工具\修复工具
procedure TFixSysError.RefreshOrgFuncs;  
里面的sql
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-9 14:58:12 | 显示全部楼层
当时升级不彻底,直接给个SQL吧,不然IE分权限,每人提示有几百次。累人
回复 支持 反对

使用道具 举报

发表于 2010-6-9 15:07:13 | 显示全部楼层
SELECT FDEPT, FPOSITION, FPERSON, FVALUE FROM TORGSYSTEM OS, TORGINDEX OI WHERE (NOT FVALUE IN (SELECT (FSPACE + FFILENAME) FROM TFILESYSTEM)) AND OI.FID = 'OrgUnit.FuncRef' AND OS.FGUID = OI.FGUID AND OS.FDELETELEVEL = 0 AND OS.FCLIENTACCOUNT = 'JUSTEP.COM'
回复 支持 反对

使用道具 举报

发表于 2010-6-9 15:13:36 | 显示全部楼层
这个是把有问题的组织单元和单元上分配的功能查询出来了,如果要删除还要调用删除方法来删除:
删除方法如下:

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;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-13 09:23:56 | 显示全部楼层
SELECT count(*) TORGSYSTEM OS, TORGINDEX OI WHERE (NOT FVALUE IN (SELECT (FSPACE||FFILENAME) FROM TFILESYSTEM)) AND OI.FID = 'OrgUnit.FuncRef' AND OS.FGUID = OI.FGUID AND OS.FDELETELEVEL = 0 AND OS.FCLIENTACCOUNT = 'JUSTEP.COM'


数据少的4000多条,PLSQL运行了很久,现在另一个用户到现在还出不了结果。。。效率太差

怪不得修复工具 没反应。。。


造成假死
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-13 09:29:47 | 显示全部楼层
24000条,要是修复,要多久???有没修复 快些的。24000估计要1天吧
回复 支持 反对

使用道具 举报

发表于 2010-6-13 09:50:41 | 显示全部楼层
改造一下sql语句,把Not in换成not exists看看执行需要多久?
类似这样:

SELECT count(*) from  TORGSYSTEM OS, TORGINDEX OI WHERE  (NOT exists (SELECT 1 FROM TFILESYSTEM where oi.FValue = FSPACE||FFILENAME)) AND  OI.FID = 'OrgUnit.FuncRef' AND OS.FGUID = OI.FGUID AND OS.FDELETELEVEL = 0 AND OS.FCLIENTACCOUNT = 'JUSTEP.COM'
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 17:57 , Processed in 0.039963 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表