/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

  1. unit CommonBpl_DBFormBaseEx;
  2. //{$DEFINE DEBUG}
  3. interface
  4. uses
  5. SysUtils,
  6. Windows,
  7. Messages,
  8. Classes,
  9. MASK,
  10. Grids,
  11. Graphics,
  12. Controls,
  13. AppEvnts,
  14. Forms,
  15. Dialogs,
  16. {$IFNDEF DEBUG}
  17. CnDebug,
  18. {$ENDIF}
  19. dbclient,
  20. ExtCtrls,
  21. DBpl_DBUtil,
  22. DBGrids,
  23. DBpl_IDBProvide,
  24. CommonBpl_DBFormUtil,
  25. CommonBpl_DBFormBase,
  26. CommonBpl_BaseType,
  27. Struct_CntlDataInput,
  28. commonBpl_JzUserBase;
  29. Const
  30. Auth_App_Prefix = 'APP_';
  31. Auth_Moudle_Prefix = 'MOD_';
  32. Auth_Function_Prefix = 'FUN_';
  33. type
  34. TDBFormBaseEx = class(TDBFormBase)
  35. private
  36. public
  37. function mGetLoginUser: TLoginUser;
  38. procedure mSetLoginUser(aLoginUser: TLoginUser);
  39. procedure mSetUserAuth(aUserId: String;metaDB:IDBProvideInterface);
  40. function mHaveAppAuth(authString: String): Boolean;
  41. function mHaveModuleAuth(authString: String): Boolean;
  42. constructor Create(AOwner: TComponent); override;
  43. destructor Destroy; override;
  44. function mDBProvide: IDBProvideInterface;
  45. function mgetDbControl(controlName: string): TDbControl;
  46. procedure mSetDbControlDefaultValue(controlName, strValue: string);
  47. procedure mRegistCntrl(aPanel: TPanel; aTableName: String); overload;
  48. procedure mRegistCntrl(cntrlList: TStringList; aTableName: String);
  49. overload;
  50. procedure mCleanPanel(aPanel: TPanel);
  51. procedure mDisplayRecord(cntrlList: TStringList; whereSql: string);
  52. overload;
  53. procedure mDisplayRecord(cntrlList: TStringList; ACDS: TClientDataSet);
  54. overload;
  55. procedure mDisplayRecord(aPanel: TPanel; whereSql: string); overload;
  56. procedure mDisplayRecord(aPanel: TPanel; ACDS: TClientDataSet); overload;
  57. function mGetSelectCdsByPanel(cntrlList: TStringList; ACDS: TClientDataSet)
  58. : String; overload;
  59. function mGetSelectCdsByPanel(aPanel: TPanel; ACDS: TClientDataSet)
  60. : String; overload;
  61. function mGetSqlByPanel(aPanel: TPanel): String;
  62. procedure mTranslateGrid(AGrid: TDBGrid; aTableName: String); overload;
  63. function mGetDicValue(dbcntl: TDbControl): String;
  64. function mUpdateRecord(aPanel: TPanel; aTableName: String): integer;
  65. overload;
  66. function mInsertRecord(aPanel: TPanel; aTableName: String): integer;
  67. overload;
  68. function mInsertRecord(cntrlList: TStringList; aTableName: String)
  69. : integer; overload;
  70. function mGetGuid: String;
  71. function mGetMetaDBProvide:IDBProvideInterface;
  72. procedure mClearEnv;
  73. end;
  74. { TODO : ???????? }
  75. var
  76. uLoginUser: TLoginUser;
  77. uUserAuthList: TStringList;
  78. implementation
  79. uses Struct_Util, Variants, DB;
  80. { TDBFormBaseEx }
  81. constructor TDBFormBaseEx.Create(AOwner: TComponent);
  82. begin
  83. inherited;
  84. // uUserAuthList:=TStringList.Create;
  85. end;
  86. destructor TDBFormBaseEx.Destroy;
  87. begin
  88. inherited;
  89. end;
  90. function TDBFormBaseEx.mGetLoginUser: TLoginUser;
  91. begin
  92. if not assigned(uLoginUser) then
  93. uLoginUser := TLoginUser.Create;
  94. result := uLoginUser;
  95. end;
  96. function TDBFormBaseEx.mGetMetaDBProvide: IDBProvideInterface;
  97. begin
  98. result:=StructUtil.getApplication(self.getAppId).MetaSource.dbProvide;
  99. end;
  100. procedure TDBFormBaseEx.mSetLoginUser(aLoginUser: TLoginUser);
  101. begin
  102. uLoginUser := aLoginUser;
  103. end;
  104. procedure TDBFormBaseEx.mSetUserAuth(aUserId: String;metaDB:IDBProvideInterface);
  105. var
  106. sql,authid: string;
  107. cdsAuth:TClientDataSet;
  108. begin
  109. if not assigned(uUserAuthList)
  110. then uUserAuthList:=TStringList.Create;
  111. cdsAuth:=TClientDataSet.Create(nil);
  112. sql := 'select * from GROUP_AUTHORITY a ';
  113. sql := sql +
  114. ' where a.GROUP_id=''10000'' or exists ';
  115. sql:=sql+' ( select * from group_user b where b.user_id=%s and a.group_id=b.group_id) ';
  116. sql := format(sql, [quotedstr(aUserId)]);
  117. metaDB.SelectCommand(cdsAuth,sql,0);
  118. cdsAuth.First;
  119. repeat
  120. Forms.Application.ProcessMessages;
  121. authid:=uppercase(cdsAuth.FieldByName('Auth_id').AsString) ;
  122. uUserAuthList.Add(authid);
  123. // showmessage('add auth'+cdsAuth.FieldByName('Auth_id').AsString);
  124. cdsAuth.Next;
  125. until cdsAuth.eof;
  126. cdsAuth.Free;
  127. end;
  128. function TDBFormBaseEx.mgetDbControl(controlName: string): TDbControl;
  129. begin
  130. result := dbFormUtil.getDbControl(controlName);
  131. end;
  132. procedure TDBFormBaseEx.mRegistCntrl(aPanel: TPanel; aTableName: String);
  133. var
  134. i: integer;
  135. begin
  136. for i := 0 to aPanel.ControlCount - 1 do
  137. begin
  138. if aPanel.Controls[i].ClassName = 'TMaskEdit' then
  139. begin
  140. with (aPanel.Controls[i] as TMaskedit) do
  141. begin
  142. dbFormUtil.RegistCntrl(aPanel.Controls[i] as TMaskedit, aTableName,
  143. self.getAppId);
  144. end;
  145. end;
  146. end;
  147. end;
  148. function TDBFormBaseEx.mGetGuid: String;
  149. var
  150. cds: TClientDataSet;
  151. begin
  152. // result:=self.dbprovide.
  153. cds := TClientDataSet.Create(self);
  154. self.mDBProvide.SelectCommand(cds, 'select sys_guid() from dual', 0);
  155. result := cds.Fields[0].AsString;
  156. cds.free;
  157. end;
  158. function TDBFormBaseEx.mDBProvide: IDBProvideInterface;
  159. begin
  160. { ?????????
  161. ??????????:
  162. dbutil.getDBProvide('SYSCONFIG') ;
  163. }
  164. // result:=dbutil.getDBProvide(self.getDbName);
  165. result := StructUtil.getApplication(self.getAppId).DBProvide;
  166. end;
  167. { ===================DISPLAY RECORD======================= }
  168. procedure TDBFormBaseEx.mDisplayRecord(cntrlList: TStringList;
  169. whereSql: string);
  170. begin
  171. self.dbFormUtil.DisplayRecord(cntrlList, whereSql);
  172. end;
  173. procedure TDBFormBaseEx.mDisplayRecord(cntrlList: TStringList;
  174. ACDS: TClientDataSet);
  175. begin
  176. self.dbFormUtil.DisplayRecord(cntrlList, ACDS);
  177. end;
  178. procedure TDBFormBaseEx.mDisplayRecord(aPanel: TPanel; whereSql: string);
  179. var
  180. ulist: TStringList;
  181. var
  182. i: integer;
  183. begin
  184. ulist := TStringList.Create;
  185. for i := 0 to aPanel.ControlCount - 1 do
  186. begin
  187. if aPanel.Controls[i].ClassName = 'TMaskEdit' then
  188. begin
  189. with (aPanel.Controls[i] as TMaskedit) do
  190. begin
  191. ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
  192. aPanel.Controls[i] as TMaskedit);
  193. end;
  194. end;
  195. end;
  196. self.mDisplayRecord(ulist, whereSql);
  197. ulist.free;
  198. end;
  199. procedure TDBFormBaseEx.mDisplayRecord(aPanel: TPanel; ACDS: TClientDataSet);
  200. var
  201. ulist: TStringList;
  202. var
  203. i: integer;
  204. begin
  205. self.dbFormUtil.DisplayRecord(aPanel, ACDS);
  206. end;
  207. function TDBFormBaseEx.mUpdateRecord(aPanel: TPanel; aTableName: String)
  208. : integer;
  209. var
  210. ulist: TStringList;
  211. var
  212. i: integer;
  213. begin
  214. ulist := TStringList.Create;
  215. for i := 0 to aPanel.ControlCount - 1 do
  216. begin
  217. if aPanel.Controls[i].ClassName = 'TMaskEdit' then
  218. begin
  219. with (aPanel.Controls[i] as TMaskedit) do
  220. begin
  221. ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
  222. aPanel.Controls[i] as TMaskedit);
  223. end;
  224. end;
  225. end;
  226. result := self.dbFormUtil.UpdateRecord(ulist, aTableName);
  227. end;
  228. function TDBFormBaseEx.mInsertRecord(aPanel: TPanel; aTableName: String)
  229. : integer;
  230. var
  231. ulist: TStringList;
  232. var
  233. i: integer;
  234. begin
  235. ulist := TStringList.Create;
  236. for i := 0 to aPanel.ControlCount - 1 do
  237. begin
  238. if aPanel.Controls[i].ClassName = 'TMaskEdit' then
  239. begin
  240. with (aPanel.Controls[i] as TMaskedit) do
  241. begin
  242. ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
  243. aPanel.Controls[i] as TMaskedit);
  244. end;
  245. end;
  246. end;
  247. result := self.dbFormUtil.InsertRecord(ulist, aTableName);
  248. ulist.free;
  249. end;
  250. procedure TDBFormBaseEx.mCleanPanel(aPanel: TPanel);
  251. var
  252. i: integer;
  253. begin
  254. for i := 0 to aPanel.ControlCount - 1 do
  255. begin
  256. if aPanel.Controls[i].ClassName = 'TMaskEdit' then
  257. begin
  258. with (aPanel.Controls[i] as TMaskedit) do
  259. begin (aPanel.Controls[i] as TMaskedit)
  260. .Text := '';
  261. end;
  262. end;
  263. end;
  264. end;
  265. procedure TDBFormBaseEx.mClearEnv;
  266. begin
  267. uLoginUser.free;
  268. uUserAuthList.free;
  269. end;
  270. function TDBFormBaseEx.mGetSelectCdsByPanel
  271. (aPanel: TPanel; ACDS: TClientDataSet): String;
  272. var
  273. ulist: TStringList;
  274. var
  275. i: integer;
  276. begin
  277. ulist := TStringList.Create;
  278. for i := 0 to aPanel.ControlCount - 1 do
  279. begin
  280. if aPanel.Controls[i].ClassName = 'TMaskEdit' then
  281. begin
  282. with (aPanel.Controls[i] as TMaskedit) do
  283. begin
  284. ulist.Addobject((aPanel.Controls[i] as TMaskedit).name,
  285. aPanel.Controls[i] as TMaskedit);
  286. end;
  287. end;
  288. end;
  289. result := self.mGetSelectCdsByPanel(ulist, ACDS);
  290. ulist.free;
  291. end;
  292. function TDBFormBaseEx.mGetSqlByPanel(aPanel: TPanel): String;
  293. begin
  294. result:=mGetSelectCdsByPanel(aPanel,nil);
  295. end;
  296. function TDBFormBaseEx.mHaveAppAuth(authString: String): Boolean;
  297. var i:integer;
  298. begin
  299. {$IFNDEF NDEBUG}
  300. for i := 0 to uUserAuthList.Count - 1 do
  301. cndebugger.TraceMsg(uUserAuthList.Strings[i]);
  302. cndebugger.TraceMsg(authString);
  303. {$ENDIF}
  304. if uUserAuthList.IndexOf(uppercase(authString)) > -1 then
  305. result := true
  306. else
  307. result := false;
  308. end;
  309. function TDBFormBaseEx.mHaveModuleAuth(authString: String): Boolean;
  310. begin
  311. {$IFNDEF NDEBUG}
  312. if uUserAuthList.IndexOf(Auth_Moudle_Prefix+uppercase(authString)) > -1 then
  313. result := true
  314. else
  315. result := false;
  316. {$ENDIF}
  317. end;
  318. function TDBFormBaseEx.mGetSelectCdsByPanel(cntrlList: TStringList;
  319. ACDS: TClientDataSet): String;
  320. begin
  321. result := self.dbFormUtil.mGetSelectCdsByPanel(cntrlList, ACDS);
  322. end;
  323. procedure TDBFormBaseEx.mTranslateGrid(AGrid: TDBGrid; aTableName: String);
  324. { //?dbgrid????????????? }
  325. var
  326. i, j: integer;
  327. var
  328. fieldName, fieldNames, dicID: String;
  329. // var dicCDS:array of TClientDataSet;
  330. var
  331. uDiccds, uTableDefine: TClientDataSet;
  332. var
  333. ACDS: TDataSet;
  334. var
  335. aDBControl: TDbControl;
  336. var
  337. idx: integer;
  338. var
  339. T: TStringField;
  340. var
  341. list: TStringList;
  342. var
  343. tmpField: array of TStringField;
  344. var
  345. strDicId, strDicKey, strDicValue: String;
  346. begin
  347. with StructUtil.getApplication(self.getAppId).MetaSource do
  348. begin
  349. // first;
  350. // filtered:=false;
  351. uTableDefine := getCDSTableDefine(self.getAppId, aTableName);
  352. end;
  353. ACDS := AGrid.DataSource.DataSet;
  354. aTableName := UpperCASE(aTableName);
  355. for i := 0 to ACDS.FieldDefs.Count - 1 do
  356. fieldNames := fieldNames + ACDS.FieldDefs[i].Name + ',';
  357. list := TStringList.Create;
  358. list.CommaText := fieldNames;
  359. setlength(tmpField, list.Count);
  360. ACDS.Close;
  361. ACDS.Fields.Clear;
  362. for i := 0 to list.Count - 2 do
  363. begin
  364. fieldName := UpperCASE(list[i]);
  365. tmpField[i] := TStringField.Create(ACDS);
  366. tmpField[i].FieldKind := fkdata;
  367. tmpField[i].fieldName := fieldName;
  368. tmpField[i].DataSet := ACDS;
  369. uTableDefine.first;
  370. uTableDefine.filtered := false;
  371. uTableDefine.Locate('AppId;TableName;ColName', VarArrayOf
  372. ([self.getAppId, aTableName, fieldName]), [loCaseInsensitive,
  373. loCaseInsensitive, loCaseInsensitive]);
  374. strDicId := uTableDefine.FieldByName('dicId').AsString; ;
  375. if strDicId <> '' then
  376. begin
  377. with StructUtil.getApplication(self.getAppId).MetaSource do
  378. begin
  379. with getCDSDicDefine do
  380. begin
  381. first;
  382. filtered := false;
  383. Locate('dicid', VarArrayOf([strDicId]), [loCaseInsensitive]);
  384. strDicKey := FieldByName('dicKeyField').AsString;
  385. strDicValue := FieldByName('dicValField').AsString;
  386. end;
  387. uDiccds := getDicCds(strDicId);
  388. end;
  389. T := TStringField.Create(ACDS);
  390. // acds.Fields.Add(T);
  391. // uDiccds := StructUtil.getApplication(self.getAppId).MetaSource.getDicCdsCopy(adbcontrol.dicMetaBase.dicId,self);
  392. T.LookupDataSet := uDiccds;
  393. T.fieldName := fieldName + '_DIC';
  394. T.DataSet := ACDS;
  395. T.Name := fieldName + '_DIC';
  396. T.FieldKind := fklookup;
  397. T.KeyFields := fieldName;
  398. // aGrid.DataSource.DataSet.Fields[i].LookupDataSet.Owner:=self;
  399. T.LookupKeyFields := strDicKey;
  400. T.LookupResultField := strDicValue;
  401. T.Lookup := true;
  402. ACDS.FieldDefs.Update;
  403. for j := 0 to AGrid.Columns.Count - 1 do
  404. begin
  405. if AGrid.Columns[j].fieldName = fieldName then
  406. begin
  407. AGrid.Columns[j].fieldName := T.fieldName;
  408. end;
  409. end;
  410. end;
  411. aDBControl.free;
  412. end;
  413. ACDS.Open;
  414. end;
  415. procedure TDBFormBaseEx.mRegistCntrl(cntrlList: TStringList;
  416. aTableName: String);
  417. var
  418. i: integer;
  419. begin
  420. for i := 0 to cntrlList.Count - 1 do
  421. begin
  422. // if cntrlList.Objects[i]a as TMaskEdit then
  423. // begin
  424. //
  425. with (cntrlList.Objects[i] as TMaskedit) do
  426. begin
  427. dbFormUtil.RegistCntrl(cntrlList.Objects[i] as TMaskedit, aTableName,
  428. self.getAppId);
  429. end;
  430. // end;
  431. end;
  432. end;
  433. function TDBFormBaseEx.mGetDicValue(dbcntl: TDbControl): String;
  434. begin
  435. result := StructUtil.getFieldDicValue(dbcntl);
  436. end;
  437. function TDBFormBaseEx.mInsertRecord(cntrlList: TStringList; aTableName: String)
  438. : integer;
  439. var
  440. i: integer;
  441. begin
  442. result := self.dbFormUtil.InsertRecord(cntrlList, aTableName);
  443. cntrlList.free;
  444. end;
  445. procedure TDBFormBaseEx.mSetDbControlDefaultValue
  446. (controlName, strValue: string);
  447. begin
  448. self.mgetDbControl(controlName).setDefaultValue(strValue);
  449. end;
  450. end.