/newStructBase/units/CommonBpl_DBFormBaseEx.pas
https://github.com/qriver/Delphi2010 · Pascal · 515 lines · 421 code · 65 blank · 29 comment · 23 complexity · bd507018138ddb642f8d5e6d9e67a765 MD5 · raw file
- unit CommonBpl_DBFormBaseEx;
- //{$DEFINE DEBUG}
- interface
- uses
- SysUtils,
- Windows,
- Messages,
- Classes,
- MASK,
- Grids,
- Graphics,
- Controls,
- AppEvnts,
- Forms,
- Dialogs,
- {$IFNDEF DEBUG}
- CnDebug,
- {$ENDIF}
- dbclient,
- ExtCtrls,
- DBpl_DBUtil,
- DBGrids,
- DBpl_IDBProvide,
- CommonBpl_DBFormUtil,
- CommonBpl_DBFormBase,
- CommonBpl_BaseType,
- Struct_CntlDataInput,
- commonBpl_JzUserBase;
- Const
- Auth_App_Prefix = 'APP_';
- Auth_Moudle_Prefix = 'MOD_';
- Auth_Function_Prefix = 'FUN_';
- type
- TDBFormBaseEx = class(TDBFormBase)
- private
- public
- function mGetLoginUser: TLoginUser;
- procedure mSetLoginUser(aLoginUser: TLoginUser);
- procedure mSetUserAuth(aUserId: String;metaDB:IDBProvideInterface);
- function mHaveAppAuth(authString: String): Boolean;
- function mHaveModuleAuth(authString: String): Boolean;
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- function mDBProvide: IDBProvideInterface;
- function mgetDbControl(controlName: string): TDbControl;
- procedure mSetDbControlDefaultValue(controlName, strValue: string);
- procedure mRegistCntrl(aPanel: TPanel; aTableName: String); overload;
- procedure mRegistCntrl(cntrlList: TStringList; aTableName: String);
- overload;
- procedure mCleanPanel(aPanel: TPanel);
- procedure mDisplayRecord(cntrlList: TStringList; whereSql: string);
- overload;
- procedure mDisplayRecord(cntrlList: TStringList; ACDS: TClientDataSet);
- overload;
- procedure mDisplayRecord(aPanel: TPanel; whereSql: string); overload;
- procedure mDisplayRecord(aPanel: TPanel; ACDS: TClientDataSet); overload;
- function mGetSelectCdsByPanel(cntrlList: TStringList; ACDS: TClientDataSet)
- : String; overload;
- function mGetSelectCdsByPanel(aPanel: TPanel; ACDS: TClientDataSet)
- : String; overload;
- function mGetSqlByPanel(aPanel: TPanel): String;
- procedure mTranslateGrid(AGrid: TDBGrid; aTableName: String); overload;
- function mGetDicValue(dbcntl: TDbControl): String;
- function mUpdateRecord(aPanel: TPanel; aTableName: String): integer;
- overload;
- function mInsertRecord(aPanel: TPanel; aTableName: String): integer;
- overload;
- function mInsertRecord(cntrlList: TStringList; aTableName: String)
- : integer; overload;
- function mGetGuid: String;
- function mGetMetaDBProvide:IDBProvideInterface;
- procedure mClearEnv;
- end;
- { TODO : ???????? }
- var
- uLoginUser: TLoginUser;
- uUserAuthList: TStringList;
- implementation
- uses Struct_Util, Variants, DB;
- { TDBFormBaseEx }
- constructor TDBFormBaseEx.Create(AOwner: TComponent);
- begin
- inherited;
- // uUserAuthList:=TStringList.Create;
- end;
- destructor TDBFormBaseEx.Destroy;
- begin
- inherited;
- end;
- function TDBFormBaseEx.mGetLoginUser: TLoginUser;
- begin
- if not assigned(uLoginUser) then
- uLoginUser := TLoginUser.Create;
- result := uLoginUser;
- end;
- function TDBFormBaseEx.mGetMetaDBProvide: IDBProvideInterface;
- begin
- result:=StructUtil.getApplication(self.getAppId).MetaSource.dbProvide;
- end;
- procedure TDBFormBaseEx.mSetLoginUser(aLoginUser: TLoginUser);
- begin
- uLoginUser := aLoginUser;
- end;
- procedure TDBFormBaseEx.mSetUserAuth(aUserId: String;metaDB:IDBProvideInterface);
- var
- sql,authid: string;
- cdsAuth:TClientDataSet;
- begin
- if not assigned(uUserAuthList)
- then uUserAuthList:=TStringList.Create;
- cdsAuth:=TClientDataSet.Create(nil);
- sql := 'select * from GROUP_AUTHORITY a ';
- sql := sql +
- ' where a.GROUP_id=''10000'' or exists ';
- sql:=sql+' ( select * from group_user b where b.user_id=%s and a.group_id=b.group_id) ';
- sql := format(sql, [quotedstr(aUserId)]);
- metaDB.SelectCommand(cdsAuth,sql,0);
- cdsAuth.First;
- repeat
- Forms.Application.ProcessMessages;
- authid:=uppercase(cdsAuth.FieldByName('Auth_id').AsString) ;
- uUserAuthList.Add(authid);
- // showmessage('add auth'+cdsAuth.FieldByName('Auth_id').AsString);
- cdsAuth.Next;
- until cdsAuth.eof;
- cdsAuth.Free;
- end;
- function TDBFormBaseEx.mgetDbControl(controlName: string): TDbControl;
- begin
- result := dbFormUtil.getDbControl(controlName);
- end;
- procedure TDBFormBaseEx.mRegistCntrl(aPanel: TPanel; aTableName: String);
- var
- i: integer;
- begin
- for i := 0 to aPanel.ControlCount - 1 do
- begin
- if aPanel.Controls[i].ClassName = 'TMaskEdit' then
- begin
- with (aPanel.Controls[i] as TMaskedit) do
- begin
- dbFormUtil.RegistCntrl(aPanel.Controls[i] as TMaskedit, aTableName,
- self.getAppId);
- end;
- end;
- end;
- end;
- function TDBFormBaseEx.mGetGuid: String;
- var
- cds: TClientDataSet;
- begin
- // result:=self.dbprovide.
- cds := TClientDataSet.Create(self);
- self.mDBProvide.SelectCommand(cds, 'select sys_guid() from dual', 0);
- result := cds.Fields[0].AsString;
- cds.free;
- end;
- function TDBFormBaseEx.mDBProvide: IDBProvideInterface;
- begin
- { ?????????
- ??????????:
- dbutil.getDBProvide('SYSCONFIG') ;
- }
- // result:=dbutil.getDBProvide(self.getDbName);
- result := StructUtil.getApplication(self.getAppId).DBProvide;
- end;
- { ===================DISPLAY RECORD======================= }
- procedure TDBFormBaseEx.mDisplayRecord(cntrlList: TStringList;
- whereSql: string);
- begin
- self.dbFormUtil.DisplayRecord(cntrlList, whereSql);
- end;
- procedure TDBFormBaseEx.mDisplayRecord(cntrlList: TStringList;
- ACDS: TClientDataSet);
- begin
- self.dbFormUtil.DisplayRecord(cntrlList, ACDS);
- end;
- procedure TDBFormBaseEx.mDisplayRecord(aPanel: TPanel; whereSql: string);
- var
- ulist: TStringList;
- var
- i: integer;
- begin
- ulist := TStringList.Create;
- for i := 0 to aPanel.ControlCount - 1 do
- begin
- if aPanel.Controls[i].ClassName = 'TMaskEdit' then
- begin
- with (aPanel.Controls[i] as TMaskedit) do
- begin
- ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
- aPanel.Controls[i] as TMaskedit);
- end;
- end;
- end;
- self.mDisplayRecord(ulist, whereSql);
- ulist.free;
- end;
- procedure TDBFormBaseEx.mDisplayRecord(aPanel: TPanel; ACDS: TClientDataSet);
- var
- ulist: TStringList;
- var
- i: integer;
- begin
- self.dbFormUtil.DisplayRecord(aPanel, ACDS);
- end;
- function TDBFormBaseEx.mUpdateRecord(aPanel: TPanel; aTableName: String)
- : integer;
- var
- ulist: TStringList;
- var
- i: integer;
- begin
- ulist := TStringList.Create;
- for i := 0 to aPanel.ControlCount - 1 do
- begin
- if aPanel.Controls[i].ClassName = 'TMaskEdit' then
- begin
- with (aPanel.Controls[i] as TMaskedit) do
- begin
- ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
- aPanel.Controls[i] as TMaskedit);
- end;
- end;
- end;
- result := self.dbFormUtil.UpdateRecord(ulist, aTableName);
- end;
- function TDBFormBaseEx.mInsertRecord(aPanel: TPanel; aTableName: String)
- : integer;
- var
- ulist: TStringList;
- var
- i: integer;
- begin
- ulist := TStringList.Create;
- for i := 0 to aPanel.ControlCount - 1 do
- begin
- if aPanel.Controls[i].ClassName = 'TMaskEdit' then
- begin
- with (aPanel.Controls[i] as TMaskedit) do
- begin
- ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
- aPanel.Controls[i] as TMaskedit);
- end;
- end;
- end;
- result := self.dbFormUtil.InsertRecord(ulist, aTableName);
- ulist.free;
- end;
- procedure TDBFormBaseEx.mCleanPanel(aPanel: TPanel);
- var
- i: integer;
- begin
- for i := 0 to aPanel.ControlCount - 1 do
- begin
- if aPanel.Controls[i].ClassName = 'TMaskEdit' then
- begin
- with (aPanel.Controls[i] as TMaskedit) do
- begin (aPanel.Controls[i] as TMaskedit)
- .Text := '';
- end;
- end;
- end;
- end;
- procedure TDBFormBaseEx.mClearEnv;
- begin
- uLoginUser.free;
- uUserAuthList.free;
- end;
- function TDBFormBaseEx.mGetSelectCdsByPanel
- (aPanel: TPanel; ACDS: TClientDataSet): String;
- var
- ulist: TStringList;
- var
- i: integer;
- begin
- ulist := TStringList.Create;
- for i := 0 to aPanel.ControlCount - 1 do
- begin
- if aPanel.Controls[i].ClassName = 'TMaskEdit' then
- begin
- with (aPanel.Controls[i] as TMaskedit) do
- begin
- ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
- aPanel.Controls[i] as TMaskedit);
- end;
- end;
- end;
- result := self.mGetSelectCdsByPanel(ulist, ACDS);
- ulist.free;
- end;
- function TDBFormBaseEx.mGetSqlByPanel(aPanel: TPanel): String;
- begin
- result:=mGetSelectCdsByPanel(aPanel,nil);
- end;
- function TDBFormBaseEx.mHaveAppAuth(authString: String): Boolean;
- var i:integer;
- begin
- {$IFNDEF NDEBUG}
- for i := 0 to uUserAuthList.Count - 1 do
- cndebugger.TraceMsg(uUserAuthList.Strings[i]);
- cndebugger.TraceMsg(authString);
- {$ENDIF}
- if uUserAuthList.IndexOf(uppercase(authString)) > -1 then
- result := true
- else
- result := false;
- end;
- function TDBFormBaseEx.mHaveModuleAuth(authString: String): Boolean;
- begin
- {$IFNDEF NDEBUG}
- if uUserAuthList.IndexOf(Auth_Moudle_Prefix+uppercase(authString)) > -1 then
- result := true
- else
- result := false;
- {$ENDIF}
- end;
- function TDBFormBaseEx.mGetSelectCdsByPanel(cntrlList: TStringList;
- ACDS: TClientDataSet): String;
- begin
- result := self.dbFormUtil.mGetSelectCdsByPanel(cntrlList, ACDS);
- end;
- procedure TDBFormBaseEx.mTranslateGrid(AGrid: TDBGrid; aTableName: String);
- { //?dbgrid????????????? }
- var
- i, j: integer;
- var
- fieldName, fieldNames, dicID: String;
- // var dicCDS:array of TClientDataSet;
- var
- uDiccds, uTableDefine: TClientDataSet;
- var
- ACDS: TDataSet;
- var
- aDBControl: TDbControl;
- var
- idx: integer;
- var
- T: TStringField;
- var
- list: TStringList;
- var
- tmpField: array of TStringField;
- var
- strDicId, strDicKey, strDicValue: String;
- begin
- with StructUtil.getApplication(self.getAppId).MetaSource do
- begin
- // first;
- // filtered:=false;
- uTableDefine := getCDSTableDefine(self.getAppId, aTableName);
- end;
- ACDS := AGrid.DataSource.DataSet;
- aTableName := UpperCASE(aTableName);
- for i := 0 to ACDS.FieldDefs.Count - 1 do
- fieldNames := fieldNames + ACDS.FieldDefs[i].Name + ',';
- list := TStringList.Create;
- list.CommaText := fieldNames;
- setlength(tmpField, list.Count);
- ACDS.Close;
- ACDS.Fields.Clear;
- for i := 0 to list.Count - 2 do
- begin
- fieldName := UpperCASE(list[i]);
- tmpField[i] := TStringField.Create(ACDS);
- tmpField[i].FieldKind := fkdata;
- tmpField[i].fieldName := fieldName;
- tmpField[i].DataSet := ACDS;
- uTableDefine.first;
- uTableDefine.filtered := false;
- uTableDefine.Locate('AppId;TableName;ColName', VarArrayOf
- ([self.getAppId, aTableName, fieldName]), [loCaseInsensitive,
- loCaseInsensitive, loCaseInsensitive]);
- strDicId := uTableDefine.FieldByName('dicId').AsString; ;
- if strDicId <> '' then
- begin
- with StructUtil.getApplication(self.getAppId).MetaSource do
- begin
- with getCDSDicDefine do
- begin
- first;
- filtered := false;
- Locate('dicid', VarArrayOf([strDicId]), [loCaseInsensitive]);
- strDicKey := FieldByName('dicKeyField').AsString;
- strDicValue := FieldByName('dicValField').AsString;
- end;
- uDiccds := getDicCds(strDicId);
- end;
- T := TStringField.Create(ACDS);
- // acds.Fields.Add(T);
- // uDiccds := StructUtil.getApplication(self.getAppId).MetaSource.getDicCdsCopy(adbcontrol.dicMetaBase.dicId,self);
- T.LookupDataSet := uDiccds;
- T.fieldName := fieldName + '_DIC';
- T.DataSet := ACDS;
- T.Name := fieldName + '_DIC';
- T.FieldKind := fklookup;
- T.KeyFields := fieldName;
- // aGrid.DataSource.DataSet.Fields[i].LookupDataSet.Owner:=self;
- T.LookupKeyFields := strDicKey;
- T.LookupResultField := strDicValue;
- T.Lookup := true;
- ACDS.FieldDefs.Update;
- for j := 0 to AGrid.Columns.Count - 1 do
- begin
- if AGrid.Columns[j].fieldName = fieldName then
- begin
- AGrid.Columns[j].fieldName := T.fieldName;
- end;
- end;
- end;
- aDBControl.free;
- end;
- ACDS.Open;
- end;
- procedure TDBFormBaseEx.mRegistCntrl(cntrlList: TStringList;
- aTableName: String);
- var
- i: integer;
- begin
- for i := 0 to cntrlList.Count - 1 do
- begin
- // if cntrlList.Objects[i]a as TMaskEdit then
- // begin
- //
- with (cntrlList.Objects[i] as TMaskedit) do
- begin
- dbFormUtil.RegistCntrl(cntrlList.Objects[i] as TMaskedit, aTableName,
- self.getAppId);
- end;
- // end;
- end;
- end;
- function TDBFormBaseEx.mGetDicValue(dbcntl: TDbControl): String;
- begin
- result := StructUtil.getFieldDicValue(dbcntl);
- end;
- function TDBFormBaseEx.mInsertRecord(cntrlList: TStringList; aTableName: String)
- : integer;
- var
- i: integer;
- begin
- result := self.dbFormUtil.InsertRecord(cntrlList, aTableName);
- cntrlList.free;
- end;
- procedure TDBFormBaseEx.mSetDbControlDefaultValue
- (controlName, strValue: string);
- begin
- self.mgetDbControl(controlName).setDefaultValue(strValue);
- end;
- end.