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

📄 global.pas

📁 BOM表
💻 PAS
📖 第 1 页 / 共 2 页
字号:
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
// ┃ Copyright(c) 2001, Narada I.E., nCRM                                   ┃
// ┃ 文件名   :Global.pas                                                  ┃
// ┃ 版本     :1.0, 2.0                                                    ┃
// ┃ 创建日期 :2000.09.28                                                  ┃
// ┃ 作者     :朱怀阳                                                      ┃
// ┃ 说明     :公用文件。包括公用常量、变量、函数、对象。                  ┃
// ┃ 修改历史 :2001.11.18 去除TUIControl和TUINavigator对象。(朱怀阳)     ┃
// ┃            2001.11.18 去除一些无用的函数。              (朱怀阳)     ┃
// ┃            2004.05.10 权限表及权限判断方法的改变。      (朱怀阳)     ┃
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

unit Global;

interface

uses Classes, Sysutils, controls, stdctrls, Dialogs, extctrls, Forms, Graphics,
  DB, ADOdb, Windows, Menus, ShellAPI, comctrls, Messages;

const

  //  UDL文件名
  UDL_PATH     = 'DataLinks\';
  UDL_FILENAME = 'DataLinks.ini';
  
  //  翻译属性词汇表文件名
  TRANSLATE_FILENAME = 'NxInspectors.INI';

  //  The resource file which save ImageList
  RS_MAIN = 'ILMain.res';
  RS_APP  = 'ILApp.res';
  RS_CPL  = 'ILCPL.res'; 

  // Pub_ObjectType 中 ObjectTypeDataType
  otdTable = 0;
  otdSQL   = 1;
  otdNone  = 2;

  //  业务模块类型  Pub_UI.UIType
  nx_mkUser = 0;    //  用户自定义界面
  nx_mkDLL  = 1;    //  外挂业务模块
  nx_mkCust = 2;    //  系统自动配置的功能模块
  nx_mkURL  = 3;    //  Internet/Intranet功能模块

  //  界面显示方式
  nx_utInplace   = 0;   //  Inplace
  nx_utShow      = 1;   //  非模式化弹出窗口
  nx_utShowModal = 2;   //  模式化弹出窗口

  //  权限对象类型  Sys_Permission.PermissionBusiType字段定义
  nx_pbtBusiObject = 0;    // 业务对象
  nx_pbtFunction   = 1;    // 特定功能
  nx_pbtUI         = 3;    // 界面/模块

  //  访问权限  Sys_Permission
  nx_opDeny     = 0;    //  无权
  nx_opAllow    = 1;    //  允许
  nx_opOnlySelf = 2;    //  只允许对自己建立的数据进行操作

  //  访问类型
  nx_acBrow  = 'PermissionAllowBrow';
  nx_acInst  = 'PermissionAllowInst';
  nx_acDele  = 'PermissionAllowDele';
  nx_acUpdt  = 'PermissionAllowUpdt';
  nx_acPrnt  = 'PermissionAllowPrnt';

  //  Pub_Components中ComponentBuisType - 业务数据类型
  nx_cbtData = 0; //  数据集
  nx_cbtFunc = 1; //  功能调用
  nx_cbtUI   = 2; //  界面
  nx_cbtSys  = 3; //  系统调用
  nx_cbtHL   = 4; //  超级链接
  nx_cbtObj  = 5; //  业务对象
  NX_CBTS: array[0..5] of Integer = (nx_cbtData, nx_cbtFunc, nx_cbtUI,
                                     nx_cbtSys, nx_cbtHL, nx_cbtObj);

  //  数字链接
  DataHypers: array[1..7] of String =
             ('http:', 'data:', 'ui:', 'sql:', 'keyword:', 'function:', 'search:');
  dh_APL    = 0; //
  dh_HTTP   = 1;
  dh_DATA   = 2;
  dh_UI     = 3;
  dh_SQL    = 4;
  dh_KEYW   = 5;
  dh_FUNC   = 6;
  dh_SEARCH = 7;

  //  系统参数
  isp_ReportDir  = 1;  // 汇总目录下内容
  isp_DisplayTab = 3;  // 显示方式:紧凑方式
  isp_DisplayWin = 4;  // 显示方式:窗口方式

  //  IPensee消息处理名
  WM_IPENSEE = WM_USER + 8182;

type

  //  回调函数:聚焦数据
  //  参数说明:ObjectID: 数据索引号;InPlace: 是否在系统界面中显示(如果为 False,
  //            则弹出单独的信息窗口显示);ShowModal: 是否Modal显示。
  //  参考:DoCompAct.pas 中 DoFocusObject 函数。
  //  2004.3.9 作废!用TDoActionHyper代替
  //TnxFocusObject = procedure (ObjectID: Integer; InPlace, ShowModal: Boolean); stdcall;

  TDoActionHyper = procedure (ADataHyper: PChar); stdcall;

  //  TEnv是保存并处理系统环境的类。
  //  注意:如果对TEnv的结构有所改动,所有引用它的动态连接库都必须重新编译!
  TEnv = class(TObject)
  private
    FOperatorID: Integer;
    FOperatorName: String;
    FSysName: String;
    FLoginName: String;
    FUIID: Integer;
    FIsAdmin: Boolean;
    FEnterAsAdmin: Boolean;
    FTodayPrompt: Boolean;
    FADOConnection: TADOConnection;
    FEnterDate: TDateTime;
    FEmplID: Integer;
    FGroupID: Integer;
    FParams: TStringList;
    ADOQueryPerm: TADOQuery; // 权限表
  protected
    procedure SetOperatorID(Value: Integer);
    function GetComputerName: String;
  public
    //  数据库(ADO)配置文件(UDL)
    UDLConfFile: String;

    constructor Create; //override;
    destructor Destroy; override;

    //属性:

    //  作为系统管理员进入系统
    property EnterAsAdmin: Boolean read FEnterAsAdmin write FEnterAsAdmin;
    //  数据库ADO连接
    property ADOConnection: TADOConnection read FADOConnection write FADOConnection;
    //  进入系统的操作员ID。来源于表Sys_Operators.OptID
    property OperatorID: Integer read FOperatorID write SetOperatorID;
    //  进入系统的操作员姓名。
    property OperatorName: String read FOperatorName;
    //  进入的系统名称。
    property SysName: String read FSysName write FSysName;
    //  该操作员进入系统的第一个界面ID
    property UIID: Integer read FUIID default 0;
    //  判断该操作员是否为管理员
    property IsAdmin: Boolean read FIsAdmin default False;
    //  判断该操作员是否显示任务提醒
    property TodayPrompt: Boolean read FTodayPrompt default False;
    //  该操作员登录进入系统的时间
    property EnterDate: TDateTime read FEnterDate;
    //  使用的计算机名
    property ComputerName: String read GetComputerName;
    //  使用的系统登录名
    property LoginName: String read FLoginName;
    //  该操作员的员工ID。来源于表Pub_Objects.ObjectID
    property EmplID: Integer read FEmplID;
    //  该操作员的部门ID。来源于表Pub_Objects.ObjectParentID
    property GroupID: Integer read FGroupID;
    //  该操作员的全局参数
    property Params: TStringList read FParams write FParams;

    //方法:

    //  提示信息
    function TodayPromptStr: String;
    //  判断是否属于某一组  (目前已不用!)
    function IsBelongGroup(GroupID: Integer): Boolean;
    //  向某一操作员发送信息
    function SendMsgTo(OptID: Integer): TModalResult;
    //  异常处理
    procedure RaiseExcept(ExceptMsg: String);
    //  获得指定业务类型的SQL
    function GetBusiSQL(ObjTypeID: Integer): String;
    //  判断业务操作的权限
    function HasPermission(AType, AID, DataOwnerID: Integer; Action: String): Boolean;
    //  添加操作日志
    procedure AddLogRecord(AObjectID: Integer; AOperation, ARemark: String);

  end;

  //  CPL调用接口函数
  TCPLFunction = procedure (AHandle: Integer; AEnv: TEnv; Params: PChar); stdcall;


type
  TncDSList = class(TObject)
  private
    FADOConnection: TADOConnection;
    FDSItems: TList;
    FObjectTypeDS: TDataSet;
    function GetItem(Index: Integer): TADOQuery;
    function GetItemCount: Integer;
    procedure SQLDataSetBeforePost(Sender: TDataSet);
  protected

  public
    constructor Create(BusiClasses: array of Integer;
               Connection: TADOConnection; ObjectDS: TDataSource);
    destructor Destroy; override;
    function FindItem(ObjectTypeID: Integer): TDataSet;
    property ADOConnection: TADOConnection read FADOConnection write FADOConnection;
    property Items[Index: Integer]: TADOQuery read GetItem;
    property ItemCount: Integer read GetItemCount;
    property ObjectTypeDS: TDataSet read FObjectTypeDS;
  end;

type
  //  系统参数,存在于表Sys_Parameters中
  TisParameters = class(TObject)
  private
    FADOQuery: TADOQuery;
  protected
  public
    constructor Create(AConnection: TADOConnection);
    destructor Destroy; override;
    function GetParamByName(AParam: String): Boolean;
    function GetParamByIndex(AParamIndex: Integer): Boolean;
  end;


type
  //  IPenseeObject
  TIPenseeObject = class(TObject)
  private
    FQry: TADOQuery;
    FObjectID: Integer;
    FObjectTypeID: Integer;
    FObjectParentID: Integer;
    FObjectFID: Integer;
    FObjectName: String;
    FObjectShortName: String;
    FObjectTypeName: String;
    FObjectOwnerID: Integer;
  protected
    procedure SetObjectID(Value: Integer);
  public
    constructor Create(AConnection: TADOConnection);
    destructor Destroy; override;

    property ObjectID: Integer read FObjectID write SetObjectID;
    property ObjectTypeID: Integer read FObjectTypeID;
    property ObjectParentID: Integer read FObjectParentID;
    property ObjectFID: Integer read FObjectFID;
    property ObjectName: String read FObjectName;
    property ObjectShortName: String read FObjectShortName;
    property ObjectTypeName: String read FObjectTypeName;
    property ObjectOwnerID: Integer read FObjectOwnerID;
  end;

var
  Env: TEnv;
  isParameters: TisParameters;

procedure SendMsgToIPensee(AMsg: String);

implementation

{ TEnv }

constructor TEnv.Create;
begin

  inherited;
  FOperatorID := -1;
  FADOConnection := nil;
  FEnterAsAdmin := False;
  FParams := TStringList.Create;

  // 权限表 - 事先建立好,由于它被频繁调用,不建议采用用时建立方式
  ADOQueryPerm := TADOQuery.Create(nil);

end;

destructor TEnv.Destroy;
begin

  ADOQueryPerm.Free;
  FParams.Free;
  inherited;

end;

function TEnv.GetComputerName: String;
var
  ACN: PAnsiChar;
  ALen: Cardinal;
begin

   ACN := StrAlloc(50);
   ALen := 50;
   Windows.GetComputerName(ACN, ALen);
   Result := ACN;
   StrDispose(ACN);

end;

function TEnv.IsBelongGroup(GroupID: Integer): Boolean;
begin

  Result := False;
  if (FADOConnection = nil) or (FOperatorID = -1) then
  begin
    MessageBox(Application.Handle,
               'TEnv: 在执行此方法(IsAdmin)之前,请设置ADOConnection和OperatorID属性。',
               '错误', MB_OK or MB_ICONERROR);
    Exit;
  end;

  with TADOQuery.Create(FADOConnection) do
  begin
    Connection := FADOConnection;
    SQL.Text := 'select Count(*) from Sys_OptrGroup ' +
                ' where (Sys_OptrGroup.OptID = ' + IntToStr(FOperatorID) + ') and' +
                '       (Sys_OptrGroup.GroupID = ' + IntToStr(GroupID) + ')';
    ExecuteOptions := ExecuteOptions - [eoExecuteNoRecords];
    try
      Open;
      Result := (Fields[0].AsInteger > 0);
    finally
      Close;
    end;
    Free;
  end;

end;

function TEnv.GetBusiSQL(ObjTypeID: Integer): String;
var
  TableName: String;
begin

  with TADOQuery.Create(FADOConnection) do
  begin
    Connection := FADOConnection;
    SQL.Text := 'select * from Pub_ObjectType where ObjectTypeID = ' +
                IntToStr(ObjTypeID);
    try
      Open;
    except
      Free;
      Exit;
    end;
    case FieldByName('ObjectTypeDataType').AsInteger of
      0:  //  Table
      begin
        TableName := FindField('ObjectTypeData').AsString;
        Result := 'select Pub_Objects.*, ' + TableName + '.* ' +
                  ' from Pub_Objects left outer join ' + TableName +
                  ' on Pub_Objects.ObjectFID = ' + TableName + '.' +
                  FindField('ObjectTypeKeyField').AsString +
                  ' where Pub_Objects.ObjectTypeID = ' + IntToStr(ObjTypeID) +
                  '  and IsNull(Pub_Objects.ObjectDeleteFlag, 0) = 0 ' +
                  #10#13#10#13'/*' +
                  #10#13'<<' + FindField('ObjectTypeKeyField').AsString +
                  #10#13#10#13'*/';
      end;
      {
      1:  //  SQL
        Result := FindField('ObjectTypeData').AsString;
      }
      else  //  None
        Result := 'select * from Pub_Objects ' +
                  ' where ObjectTypeID = ' + IntToStr(ObjTypeID);
    end;
    Free;
  end;

end;

procedure TEnv.RaiseExcept(ExceptMsg: String);
//  处理异常事件
//  参数:ExceptMsg - 异常事件信息
begin

  //MessageBox(Handle, PChar(ExceptMsg), '错误', MB_OK);

end;

function TEnv.SendMsgTo(OptID: Integer): TModalResult;
{
  向OptID所对应的操作员发送信息,并返回结果。
}
begin
//
end;

procedure TEnv.SetOperatorID(Value: Integer);
begin

  FOperatorID := Value;
  FEnterDate := Now;

  if (FADOConnection = nil) or (FOperatorID = -1) then Exit;

  with TADOQuery.Create(FADOConnection) do
  begin
    Connection := FADOConnection;
    SQL.Add('select Pub_Objects.*, Sys_Operators.* from Sys_Operators ' +
            ' left outer join Pub_Objects on Sys_Operators.OptEmplID = Pub_Objects.ObjectID ' +
            ' where Sys_Operators.OptID = ' + IntToStr(FOperatorID));
    //ExecuteOptions := ExecuteOptions - [eoExecuteNoRecords];
    try
      Open;
      if RecordCount > 0 then
      begin
        //  设置LoginName属性
        FLoginName := FieldByName('OptLoginName').AsString;
        //  设置OperatorName属性
        if FieldByName('ObjectName').IsNull then
          FOperatorName := '<未名>/' + FieldByName('OptLoginName').AsString
        else
          FOperatorName := FieldByName('ObjectName').AsString;
        //  设置UIID属性
        if FieldByName('OptUIID').IsNull then
          FUIID := 0
        else
          FUIID := FieldByName('OptUIID').AsInteger;
        //  设置IsAdmin属性
        if FieldByName('OptIsAdmin').IsNull then
          FIsAdmin := False
        else
          FIsAdmin := FieldByName('OptIsAdmin').AsBoolean;
        //  设置TodayPrompt属性
        if FieldByName('OptPrompt').IsNull then
          FTodayPrompt := False
        else
          FTodayPrompt := FieldByName('OptPrompt').AsBoolean;
        //  设置EmplID属性
        if FieldByName('OptEmplID').IsNull then
          FEmplID := -1
        else
          FEmplID := FieldByName('OptEmplID').AsInteger;
        //  设置GroupID属性
        if FieldByName('ObjectParentID').IsNull then

⌨️ 快捷键说明

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