⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufrmexportbusinessdata.pas

📁 抽象三层访问数据库示例
💻 PAS
📖 第 1 页 / 共 4 页
字号:

procedure TfrmExportBusinessData.GetExportBusinessData(ABusinessNameOrIDs: string);
var
  tmpBusiness, tmpProcess, tmpRole, tmpMenu, tmpModule, tmpBlock, tmpGrant: TClientDataSet;
  strSQL, strBusinessArea: string;
  blnAddFullID: boolean;

  procedure AddGrantData(ADataID, ADataValue: string; AddGrantType: TAddGrantType);
  var
    strBusinessID, strBusinessName, strProcessID, strProcessName,
      strRoleID, strRoleName, strMenuID, strMenuName, strModuleID, strModuleName,
      strBlockID, strBlockName, strBlockGrantID, strBlockGrantName: string;
  begin
    if not cdsBusinessGrant.IsEmpty then
    begin
      strBusinessID := cdsBusinessGrant.FieldByName('business_id').AsString;
      strBusinessName := cdsBusinessGrant.FieldByName('business_name').AsString;
      strProcessID := cdsBusinessGrant.FieldByName('process_id').AsString;
      strProcessName := cdsBusinessGrant.FieldByName('process_name').AsString;
      strRoleID := cdsBusinessGrant.FieldByName('role_id').AsString;
      strRoleName := cdsBusinessGrant.FieldByName('role_name').AsString;
      strMenuID := cdsBusinessGrant.FieldByName('menu_id').AsString;
      strMenuName := cdsBusinessGrant.FieldByName('menu_name').AsString;
      strModuleID := cdsBusinessGrant.FieldByName('module_id').AsString;
      strModuleName := cdsBusinessGrant.FieldByName('module_name').AsString;
      strBlockID := cdsBusinessGrant.FieldByName('block_id').AsString;
      strBlockName := cdsBusinessGrant.FieldByName('block_name').AsString;
      strBlockGrantID := cdsBusinessGrant.FieldByName('block_grant_id').AsString;
      strBlockGrantName := cdsBusinessGrant.FieldByName('block_grant_name').AsString;
    end;
    cdsBusinessGrant.Append;
    cdsBusinessGrant.FieldByName('data_id').AsString := ADataID;
    cdsBusinessGrant.FieldByName('data_type').AsString := Copy(GetEnumName(TypeInfo(TAddGrantType), Integer(AddGrantType)), 4, MaxInt);
    case AddGrantType of
      agtBusiness:
        begin
          cdsBusinessGrant.FieldByName('business_id').AsString := ADataID;
          if ADataValue = '' then
          begin
            if (tmpBusiness.FieldByName('id').AsString = ADataID)
              or tmpBusiness.Locate('id', ADataID, []) then
              cdsBusinessGrant.FieldByName('business_name').AsString := tmpBusiness.FieldByName('name').AsString
            else
              cdsBusinessGrant.FieldByName('business_name').AsString := ADataID;
          end
          else
            cdsBusinessGrant.FieldByName('business_name').AsString := ADataValue;
        end;
      agtProcess:
        begin
          if blnAddFullID then
          begin
            cdsBusinessGrant.FieldByName('business_id').AsString := strBusinessID;
            cdsBusinessGrant.FieldByName('business_name').AsString := strBusinessName;
          end;
          cdsBusinessGrant.FieldByName('process_id').AsString := ADataID;
          if ADataValue = '' then
          begin
            if (tmpProcess.FieldByName('id').AsString = ADataID)
              or tmpProcess.Locate('id', ADataID, []) then
              cdsBusinessGrant.FieldByName('process_name').AsString := tmpProcess.FieldByName('name').AsString
            else
              cdsBusinessGrant.FieldByName('process_name').AsString := ADataID;
          end
          else
            cdsBusinessGrant.FieldByName('process_name').AsString := ADataValue;
        end;
      agtRole:
        begin
          if blnAddFullID then
          begin
            cdsBusinessGrant.FieldByName('business_id').AsString := strBusinessID;
            cdsBusinessGrant.FieldByName('business_name').AsString := strBusinessName;
            cdsBusinessGrant.FieldByName('process_id').AsString := strProcessID;
            cdsBusinessGrant.FieldByName('process_name').AsString := strProcessName;
          end;
          cdsBusinessGrant.FieldByName('role_id').AsString := ADataID;
          if ADataValue = '' then
          begin
            if (tmpRole.FieldByName('id').AsString = ADataID)
              or tmpRole.Locate('id', ADataID, []) then
              cdsBusinessGrant.FieldByName('role_name').AsString := tmpRole.FieldByName('name').AsString
            else
              cdsBusinessGrant.FieldByName('role_name').AsString := ADataID;
          end
          else
            cdsBusinessGrant.FieldByName('role_name').AsString := ADataValue;
        end;
      agtMenu:
        begin
          if blnAddFullID then
          begin
            cdsBusinessGrant.FieldByName('business_id').AsString := strBusinessID;
            cdsBusinessGrant.FieldByName('business_name').AsString := strBusinessName;
            cdsBusinessGrant.FieldByName('process_id').AsString := strProcessID;
            cdsBusinessGrant.FieldByName('process_name').AsString := strProcessName;
            cdsBusinessGrant.FieldByName('role_id').AsString := strRoleID;
            cdsBusinessGrant.FieldByName('role_name').AsString := strRoleName;
          end;
          cdsBusinessGrant.FieldByName('menu_id').AsString := ADataID;
          if ADataID = 'MainForm' then
            cdsBusinessGrant.FieldByName('menu_name').AsString := '系统主界面'
          else if Copy(ADataID, 1, 4) = 'Menu' then
            cdsBusinessGrant.FieldByName('menu_name').AsString := '自定义' + Copy(ADataID, 5, MaxInt)
          else
            if ADataValue = '' then
            begin
              if (tmpMenu.FieldByName('id').AsString = ADataID)
                or tmpMenu.Locate('id', ADataID, []) then
                cdsBusinessGrant.FieldByName('menu_name').AsString := tmpMenu.FieldByName('name').AsString
              else
                cdsBusinessGrant.FieldByName('menu_name').AsString := ADataID;
            end
            else
              cdsBusinessGrant.FieldByName('menu_name').AsString := ADataValue;
        end;
      agtModule:
        begin
          if blnAddFullID then
          begin
            cdsBusinessGrant.FieldByName('business_id').AsString := strBusinessID;
            cdsBusinessGrant.FieldByName('business_name').AsString := strBusinessName;
            cdsBusinessGrant.FieldByName('process_id').AsString := strProcessID;
            cdsBusinessGrant.FieldByName('process_name').AsString := strProcessName;
            cdsBusinessGrant.FieldByName('role_id').AsString := strRoleID;
            cdsBusinessGrant.FieldByName('role_name').AsString := strRoleName;
            cdsBusinessGrant.FieldByName('menu_id').AsString := strMenuID;
            cdsBusinessGrant.FieldByName('menu_name').AsString := strMenuName;
          end;
          cdsBusinessGrant.FieldByName('module_id').AsString := ADataID;
          if ADataValue = '' then
          begin
            if (tmpModule.FieldByName('id').AsString = ADataID)
              or tmpModule.Locate('id', ADataID, []) then
              cdsBusinessGrant.FieldByName('module_name').AsString := tmpModule.FieldByName('name').AsString
            else
              cdsBusinessGrant.FieldByName('module_name').AsString := ADataID;
          end
          else
            cdsBusinessGrant.FieldByName('module_name').AsString := ADataValue;
        end;
      agtBlock:
        begin
          if blnAddFullID then
          begin
            cdsBusinessGrant.FieldByName('business_id').AsString := strBusinessID;
            cdsBusinessGrant.FieldByName('business_name').AsString := strBusinessName;
            cdsBusinessGrant.FieldByName('process_id').AsString := strProcessID;
            cdsBusinessGrant.FieldByName('process_name').AsString := strProcessName;
            cdsBusinessGrant.FieldByName('role_id').AsString := strRoleID;
            cdsBusinessGrant.FieldByName('role_name').AsString := strRoleName;
            cdsBusinessGrant.FieldByName('menu_id').AsString := strMenuID;
            cdsBusinessGrant.FieldByName('menu_name').AsString := strMenuName;
            cdsBusinessGrant.FieldByName('module_id').AsString := strModuleID;
            cdsBusinessGrant.FieldByName('module_name').AsString := strModuleName;
          end;
          case StrToIntDef(tmpGrant.FieldByName('grant_type').AsString, 10) of
            20: cdsBusinessGrant.FieldByName('block_grant_name').AsString := '只读';
            30: cdsBusinessGrant.FieldByName('block_grant_name').AsString := '完全控制';
          else
            begin
              cdsBusinessGrant.Cancel;
              exit;
            end;
          end;
          cdsBusinessGrant.FieldByName('block_grant_id').AsString := tmpGrant.FieldByName('grant_type').AsString;
          cdsBusinessGrant.FieldByName('block_id').AsString := ADataID;
          if ADataValue = '' then
          begin
            if (tmpBlock.FieldByName('id').AsString = ADataID)
              or tmpBlock.Locate('id', ADataID, []) then
              cdsBusinessGrant.FieldByName('block_name').AsString := tmpBlock.FieldByName('name').AsString
            else
              cdsBusinessGrant.FieldByName('block_name').AsString := ADataID;
          end
          else
            cdsBusinessGrant.FieldByName('block_name').AsString := ADataValue;
        end;
    end; 
    cdsBusinessGrant.Post;
  end;

  procedure GetGrant(ABusinessID: string);
  var
    strRoleID, strMenuID, strModuleID, strBlockID: string;
  begin
    tmpGrant.Filter := 'business_id = ' + QuotedStr(ABusinessID);
    tmpGrant.Filtered := true;
    strRoleID := '';
    while not tmpGrant.Eof do
    begin
      if strRoleID <> tmpGrant.FieldByName('role_id').AsString then
      begin
        strRoleID := tmpGrant.FieldByName('role_id').AsString;
        strMenuID := '';
        strModuleID := '';
        strBlockID := '';
        AddGrantData(strRoleID, '', agtRole);
      end;
      if strMenuID <> tmpGrant.FieldByName('menu_id').AsString then
      begin
        strMenuID := tmpGrant.FieldByName('menu_id').AsString;
        strModuleID := '';
        strBlockID := '';
        AddGrantData(strMenuID, '', agtMenu);
      end;
      if strModuleID <> tmpGrant.FieldByName('module_id').AsString then
      begin
        strModuleID := tmpGrant.FieldByName('module_id').AsString;
        strBlockID := '';
        AddGrantData(strModuleID, '', agtModule);
      end;
      if strBlockID <> tmpGrant.FieldByName('block_id').AsString then
      begin
        strBlockID := tmpGrant.FieldByName('block_id').AsString;
        AddGrantData(strBlockID, '', agtBlock);
      end;
      tmpGrant.Next;
    end;
  end;
begin
  if ABusinessNameOrIDs = '' then
    exit;
  if cdsBusinessGrant.Active then
    cdsBusinessGrant.EmptyDataSet
  else
    CreateBusinessGrantDataSet;
  if cdsBusinessConfig.Active then
    cdsBusinessConfig.Close;
  if cdsProcessConfig.Active then
    cdsProcessConfig.Close;
  if cdsProcessOperates.Active then
    cdsProcessOperates.Close;
  tmpBusiness := TClientDataSet.Create(self);
  tmpProcess := TClientDataSet.Create(self);
  tmpRole := TClientDataSet.Create(self);
  tmpMenu := TClientDataSet.Create(self);
  tmpModule := TClientDataSet.Create(self);
  tmpBlock := TClientDataSet.Create(self);
  tmpGrant := TClientDataSet.Create(self);
  try
    ABusinessNameOrIDs := StringReplace(ABusinessNameOrIDs, ',', ';', [rfReplaceAll]);
    if Pos(';', ABusinessNameOrIDs) = 0 then
      strSQL := Format('select * from business where type = 0 and (id like %s or name like %s)',
        [QuotedStr(ABusinessNameOrIDs), QuotedStr(ABusinessNameOrIDs)])
      else
      begin
        ABusinessNameOrIDs := '''' + StringReplace(ABusinessNameOrIDs, ';', ''', ''', [rfReplaceAll]) + '''';
        strSQL := Format('select * from business where type = 0 and (id in (%s) or name in (%s))',
          [ABusinessNameOrIDs, ABusinessNameOrIDs]);
      end;
      tmpBusiness.Data := DataAccess.GetData(StringReplace(strSQL, '*', 'id, name', []));
      if tmpBusiness.IsEmpty then
        raise Exception.Create('未找到符合条件的流程');
      blnAddFullID := true;
      strBusinessArea := StringReplace(strSQL, '*', 'id', []);
      //过程
      ShowExecuteInfo('正在查询过程数据');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -