utilitiesHandler.cls 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900
  1. /*------------------------------------------------------------------------
  2. File : queryHandler
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Wed Jul 10 18:09:37 CEST 2024
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  11. USING OpenEdge.Net.HTTP.IHttpRequest FROM PROPATH.
  12. CLASS utilities.utilitiesHandler:
  13. PROCEDURE GetUserNameA EXTERNAL "advapi32.dll":
  14. DEFINE OUTPUT PARAMETER lpUserName AS MEMPTR.
  15. DEFINE INPUT-OUTPUT PARAMETER nChars AS LONG.
  16. DEFINE RETURN PARAMETER bool AS SHORT.
  17. END PROCEDURE.
  18. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  19. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  20. DEFINE VARIABLE cProgramm AS CHARACTER NO-UNDO.
  21. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  22. /*------------------------------------------------------------------------------
  23. Purpose:
  24. Notes:
  25. ------------------------------------------------------------------------------*/
  26. METHOD PUBLIC VOID createErrorBox(
  27. INPUT oJsonIdent AS JsonObject,
  28. INPUT cErrorNumber AS CHARACTER ,
  29. INPUT cParameter AS CHARACTER ,
  30. OUTPUT oJsonMessageBox AS JsonObject
  31. ):
  32. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  33. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  34. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  35. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  36. getErrorMessage(
  37. INPUT '2012' ,
  38. INPUT ilanguage_id ,
  39. INPUT '' ,
  40. OUTPUT lcTitle
  41. ).
  42. getErrorMessage(
  43. INPUT cErrorNumber,
  44. INPUT ilanguage_id,
  45. INPUT cParameter ,
  46. OUTPUT lcMessage
  47. ).
  48. oJsonMessageBox = NEW JsonObject().
  49. oJsonMessageBox:ADD('type' , 'info').
  50. oJsonMessageBox:ADD('title', lcTitle ).
  51. oJsonMessageBox:ADD('text' , lcMessage ).
  52. RETURN.
  53. END METHOD.
  54. /*------------------------------------------------------------------------------
  55. Purpose:
  56. Notes:
  57. ------------------------------------------------------------------------------*/
  58. METHOD PUBLIC VOID createInfoBox(
  59. INPUT oJsonIdent AS JsonObject,
  60. INPUT cErrorNumber AS CHARACTER ,
  61. INPUT cParameter AS CHARACTER ,
  62. OUTPUT oJsonMessageBox AS JsonObject
  63. ):
  64. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  65. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  66. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  67. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  68. getErrorMessage(
  69. INPUT '2013' ,
  70. INPUT ilanguage_id ,
  71. INPUT '' ,
  72. OUTPUT lcTitle
  73. ).
  74. getErrorMessage(
  75. INPUT cErrorNumber,
  76. INPUT ilanguage_id,
  77. INPUT cParameter ,
  78. OUTPUT lcMessage
  79. ).
  80. oJsonMessageBox = NEW JsonObject().
  81. oJsonMessageBox:ADD('type' , 'info').
  82. oJsonMessageBox:ADD('title', lcTitle ).
  83. oJsonMessageBox:ADD('text' , lcMessage ).
  84. RETURN.
  85. END METHOD.
  86. /*------------------------------------------------------------------------------
  87. Purpose:
  88. Notes:
  89. ------------------------------------------------------------------------------*/
  90. METHOD PUBLIC VOID createLockMessage(
  91. INPUT oJsonIdent AS JsonObject,
  92. INPUT rRecid AS RECID ,
  93. OUTPUT oJsonMessageBox AS JsonObject
  94. ):
  95. DEFINE VARIABLE lFound AS LOGICAL NO-UNDO INIT FALSE.
  96. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  97. DEFINE VARIABLE cLockName AS CHARACTER NO-UNDO.
  98. DEFINE VARIABLE cLockUser AS INTEGER NO-UNDO.
  99. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  100. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  101. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  102. DO WHILE NOT lFound:
  103. FIND FIRST Ge_MIS._Lock NO-LOCK
  104. WHERE Ge_MIS._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
  105. IF NOT AVAILABLE Ge_MIS._Lock THEN LEAVE.
  106. FIND Ge_MIS._File NO-LOCK
  107. WHERE Ge_MIS._File._File-Number = Ge_MIS._Lock._Lock-Table.
  108. ASSIGN
  109. cFileName = Ge_MIS._File._File-Name
  110. cLockName = Ge_MIS._Lock._Lock-Name
  111. cLockUser = Ge_MIS._Lock._Lock-Usr.
  112. lFound = TRUE.
  113. LEAVE.
  114. END.
  115. DO WHILE NOT lFound:
  116. FIND FIRST FRAMEWORK._Lock NO-LOCK
  117. WHERE FRAMEWORK._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
  118. IF NOT AVAILABLE FRAMEWORK._Lock THEN LEAVE.
  119. FIND FRAMEWORK._File NO-LOCK
  120. WHERE FRAMEWORK._File._File-Number = FRAMEWORK._Lock._Lock-Table.
  121. ASSIGN
  122. cFileName = FRAMEWORK._File._File-Name
  123. cLockName = FRAMEWORK._Lock._Lock-Name
  124. cLockUser = FRAMEWORK._Lock._Lock-Usr.
  125. lFound = TRUE.
  126. LEAVE.
  127. END.
  128. iLanguage_id = oJsonIdent:GetInteger('language_id').
  129. getErrorMessage(
  130. INPUT '2013' ,
  131. INPUT ilanguage_id ,
  132. INPUT '' ,
  133. OUTPUT lcTitle
  134. ).
  135. getErrorMessage(
  136. INPUT '2006',
  137. INPUT ilanguage_id,
  138. INPUT SUBSTITUTE('&1;&2;&3', cFileName, cLockName, cLockUser),
  139. OUTPUT lcMessage
  140. ).
  141. oJsonMessageBox = NEW JsonObject().
  142. oJsonMessageBox:ADD('type' , 'info').
  143. oJsonMessageBox:ADD('title', lcTitle ).
  144. oJsonMessageBox:ADD('text' , lcMessage ).
  145. RETURN.
  146. END METHOD.
  147. /*------------------------------------------------------------------------------
  148. Purpose:
  149. Notes:
  150. ------------------------------------------------------------------------------*/
  151. METHOD PUBLIC VOID createQuestionBox(
  152. INPUT oJsonIdent AS JsonObject,
  153. INPUT cErrorNumber AS CHARACTER ,
  154. INPUT cParameter AS CHARACTER ,
  155. INPUT cFields AS CHARACTER ,
  156. INPUT cValues AS CHARACTER ,
  157. INPUT hBuffer AS HANDLE ,
  158. OUTPUT oJsonMessageBox AS JsonObject
  159. ):
  160. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  161. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  162. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  163. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  164. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  165. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  166. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  167. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  168. DEFINE VARIABLE oJsonUpdate AS JsonObject.
  169. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  170. getErrorMessage(
  171. INPUT '2011' ,
  172. INPUT ilanguage_id ,
  173. INPUT '' ,
  174. OUTPUT lcTitle
  175. ).
  176. getErrorMessage(
  177. INPUT cErrorNumber,
  178. INPUT ilanguage_id,
  179. INPUT cParameter ,
  180. OUTPUT lcMessage
  181. ).
  182. oJsonMessageBox = NEW JsonObject().
  183. oJsonMessageBox:ADD('type' , 'question').
  184. oJsonMessageBox:ADD('title', lcTitle ).
  185. oJsonMessageBox:ADD('text' , lcMessage ).
  186. oJsonUpdate = NEW JsonObject().
  187. DO ii = 1 TO NUM-ENTRIES(cFields, ';'):
  188. cField = ENTRY(ii, cFields, ';') .
  189. cValue = ENTRY(ii, cValues, CHR(01)).
  190. hField = hBuffer:BUFFER-FIELD(cField):HANDLE.
  191. cType = hField:DATA-TYPE.
  192. CASE ctype:
  193. WHEN 'logical' THEN oJsonUpdate:ADD(cField, LOGICAL(cValue) ).
  194. WHEN 'integer' THEN oJsonUpdate:ADD(cField, INTEGER(cValue) ).
  195. WHEN 'decimal' THEN oJsonUpdate:ADD(cField, DECIMAL(cValue) ).
  196. WHEN 'date' THEN oJsonUpdate:ADD(cField, STRING(DATE(cValue),'99.99.9999') ).
  197. OTHERWISE oJsonUpdate:ADD(cField, cValue ).
  198. END CASE.
  199. END.
  200. oJsonMessageBox:ADD('fieldUpdate', oJsonUpdate).
  201. RETURN.
  202. END METHOD.
  203. /*------------------------------------------------------------------------------
  204. Purpose:
  205. Notes:
  206. ------------------------------------------------------------------------------*/
  207. METHOD PUBLIC LONGCHAR createWordindex(
  208. INPUT hBuffer AS HANDLE
  209. ):
  210. DEFINE VARIABLE cWordIndex AS LONGCHAR NO-UNDO.
  211. DEFINE VARIABLE cWords AS CHARACTER NO-UNDO.
  212. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  213. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  214. DEFINE VARIABLE cWord AS CHARACTER NO-UNDO.
  215. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  216. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  217. DEFINE VARIABLE iNumerisch AS INTEGER NO-UNDO.
  218. cWords = ''.
  219. DO ii = 1 TO hBuffer:NUM-FIELDS:
  220. hField = hBuffer:BUFFER-FIELD(ii):HANDLE.
  221. IF INDEX(hField:NAME, 'SHA') > 0 THEN NEXT.
  222. IF INDEX(hField:NAME, 'word') > 0 THEN NEXT.
  223. cDatatype = hField:DATA-TYPE.
  224. IF hField:EXTENT = 0 THEN
  225. DO:
  226. IF hField:BUFFER-VALUE = ? THEN NEXT.
  227. IF hField:BUFFER-VALUE = '' THEN NEXT.
  228. IF hField:BUFFER-VALUE = '0' THEN NEXT.
  229. IF hField:NAME BEGINS 'phone' OR
  230. hField:NAME BEGINS 'mobile' THEN
  231. DO:
  232. cWord = REPLACE(hField:BUFFER-VALUE, ' ', '').
  233. iNumerisch = INTEGER(cWord) NO-ERROR.
  234. IF NOT ERROR-STATUS:ERROR THEN cWord = TRIM(STRING(iNumerisch,'>>>>>>>>>>>>>>9')).
  235. cWords = cWords + ' ' + SUBSTITUTE('&1&2&1', CHR(01), cWord).
  236. NEXT.
  237. END.
  238. CASE cDatatype:
  239. WHEN 'logical' THEN
  240. NEXT.
  241. WHEN 'character' THEN
  242. DO:
  243. cWord = hField:BUFFER-VALUE.
  244. iNumerisch = INTEGER(cWord) NO-ERROR.
  245. IF NOT ERROR-STATUS:ERROR THEN cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  246. cWords = cWords + ' ' + cWord.
  247. END.
  248. WHEN 'integer' OR
  249. WHEN 'int64' THEN
  250. DO:
  251. cWord = TRIM(STRING(INTEGER(hField:BUFFER-VALUE),'zzzzzzzz9-')).
  252. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  253. END.
  254. WHEN 'decimal' THEN
  255. DO:
  256. cWord = TRIM(STRING(DECIMAL(hField:BUFFER-VALUE),'zzzzzzzz9.9<<<-')).
  257. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  258. END.
  259. WHEN 'date' THEN
  260. DO:
  261. cWord = STRING(DATE(hField:BUFFER-VALUE),'99.99.9999').
  262. cWords = cWords + ' ' + cWord.
  263. END.
  264. OTHERWISE
  265. NEXT.
  266. END CASE.
  267. END.
  268. ELSE
  269. DO:
  270. DO i1 = 1 TO hField:EXTENT:
  271. IF hField:BUFFER-VALUE(i1) = ? THEN NEXT.
  272. IF hField:BUFFER-VALUE(i1) = '' THEN NEXT.
  273. IF hField:BUFFER-VALUE(i1) = '0' THEN NEXT.
  274. CASE cDatatype:
  275. WHEN 'logical' THEN
  276. NEXT.
  277. WHEN 'character' THEN
  278. DO:
  279. cWord = hField:BUFFER-VALUE(i1).
  280. iNumerisch = INTEGER(cWord) NO-ERROR.
  281. IF NOT ERROR-STATUS:ERROR THEN cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  282. cWords = cWords + ' ' + cWord.
  283. END.
  284. WHEN 'integer' THEN
  285. DO:
  286. cWord = TRIM(STRING(INTEGER(hField:BUFFER-VALUE(i1)),'zzzzzzzz9-')).
  287. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  288. END.
  289. WHEN 'decimal' THEN
  290. DO:
  291. cWord = TRIM(STRING(DECIMAL(hField:BUFFER-VALUE(i1)),'zzzzzzzz9.9<<<-')).
  292. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  293. END.
  294. WHEN 'date' THEN
  295. DO:
  296. cWord = STRING(DATE(hField:BUFFER-VALUE(i1)),'99.99.9999').
  297. cWords = cWords + ' ' + cWord.
  298. END.
  299. OTHERWISE
  300. NEXT.
  301. END CASE.
  302. END.
  303. END.
  304. END.
  305. cWordIndex = ''.
  306. cWords = TRIM(cWords).
  307. cWords = REPLACE(cWords, ' ', ' ').
  308. DO ii = 1 TO NUM-ENTRIES(cWords, ' '):
  309. cWord = TRIM(ENTRY(ii, cWords, ' ')).
  310. IF LOOKUP(cWord, cWordIndex, ' ') > 0 THEN NEXT.
  311. cWordIndex = cWordIndex + ' ' + cWord.
  312. END.
  313. cWordIndex = TRIM(cWordIndex).
  314. cWordIndex = REPLACE(cWordIndex, ' ', ' ').
  315. RETURN cWordIndex.
  316. END METHOD.
  317. /*------------------------------------------------------------------------------
  318. Purpose:
  319. Notes:
  320. ------------------------------------------------------------------------------*/
  321. METHOD PUBLIC LOGICAL evaluateErrorStatus(
  322. INPUT hError AS HANDLE
  323. ):
  324. DEFINE VARIABLE iNumMessages AS INTEGER NO-UNDO.
  325. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  326. IF NOT hError:ERROR THEN RETURN FALSE.
  327. cMessage = 'ERROR: '.
  328. DO iNumMessages = 1 TO hError:NUM-MESSAGES :
  329. cMessage = cMessage + hError:GET-MESSAGE(iNumMessages) + CHR(10) + ' '.
  330. END.
  331. MESSAGE cMessage.
  332. RETURN TRUE.
  333. END METHOD.
  334. /*------------------------------------------------------------------------------
  335. Purpose:
  336. Notes:
  337. ------------------------------------------------------------------------------*/
  338. METHOD PUBLIC VOID evaluateFile(
  339. INPUT-OUTPUT oJsonIdent AS JsonObject,
  340. OUTPUT cFileName AS CHARACTER,
  341. OUTPUT lCompany AS LOGICAL ,
  342. OUTPUT lActive AS LOGICAL ,
  343. OUTPUT lWordindex AS LOGICAL ,
  344. INPUT-OUTPUT httKeyFields AS HANDLE ,
  345. INPUT-OUTPUT httPrimaryIndex AS HANDLE
  346. ):
  347. DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
  348. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  349. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  350. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  351. DEFINE VARIABLE hDictFile AS HANDLE NO-UNDO.
  352. DEFINE VARIABLE hDictField AS HANDLE NO-UNDO.
  353. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  354. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  355. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  356. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  357. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  358. DEFINE VARIABLE cprogram AS CHARACTER NO-UNDO.
  359. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  360. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  361. DEFINE VARIABLE rPrimeIndex AS RECID NO-UNDO.
  362. DEFINE VARIABLE rField AS RECID NO-UNDO.
  363. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  364. DEFINE VARIABLE cKeyField AS CHARACTER NO-UNDO.
  365. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  366. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  367. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  368. DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
  369. ccompany = oJsonIdent:GetCharacter('company' ) NO-ERROR.
  370. cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  371. cprogram = oJsonIdent:GetCharacter('program' ) NO-ERROR.
  372. cFileName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
  373. cClassName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
  374. IF oJsonIdent:HAS('file_name') THEN oJsonIdent:SET('file_name' , cFileName ).
  375. ELSE oJsonIdent:ADD('file_name' , cFileName ).
  376. IF oJsonIdent:HAS('class_name') THEN oJsonIdent:SET('class_name', cClassName).
  377. ELSE oJsonIdent:ADD('class_name', cClassName).
  378. ASSIGN
  379. lCompany = FALSE
  380. lActive = FALSE
  381. lWordIndex = FALSE.
  382. DO WHILE TRUE:
  383. cDBName = 'Ge_MIS'.
  384. cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
  385. CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
  386. IF VALID-HANDLE(hBuffer) THEN LEAVE.
  387. cDBName = 'FRAMEWORK'.
  388. DELETE OBJECT hBuffer NO-ERROR.
  389. cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
  390. CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
  391. IF VALID-HANDLE(hBuffer) THEN LEAVE.
  392. RETURN.
  393. END.
  394. oJsonIdent:ADD('DBName', cDBName).
  395. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  396. IF NOT ERROR-STATUS:ERROR AND
  397. VALID-HANDLE(hField) THEN lActive = TRUE.
  398. DELETE OBJECT hField NO-ERROR.
  399. hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
  400. IF NOT ERROR-STATUS:ERROR AND
  401. VALID-HANDLE(hField) THEN lWordIndex = TRUE.
  402. DELETE OBJECT hField NO-ERROR.
  403. hField = hBuffer:BUFFER-FIELD('company') NO-ERROR.
  404. IF NOT ERROR-STATUS:ERROR AND
  405. VALID-HANDLE(hField) THEN lCompany = TRUE.
  406. //
  407. // Dictionary _File Buffer ermitteln
  408. //
  409. cDBFileName = SUBSTITUTE('&1._File', cDBName).
  410. CREATE BUFFER hDictFile FOR TABLE cDBFileName NO-ERROR.
  411. cWhere = SUBSTITUTE('WHERE _File-Name = &1 ', QUOTER(cFileName)).
  412. lOK = hDictFile:FIND-FIRST (cWhere) NO-ERROR.
  413. rRecid = hDictFile:RECID.
  414. rPrimeIndex = hDictFile::_Prime-Index.
  415. DO WHILE lCompany:
  416. //
  417. // ermitteln RECID von Field company
  418. //
  419. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  420. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  421. cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = "company" ', rRecid) .
  422. lOK = hDictField:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  423. rField = hDictField:RECID.
  424. DELETE OBJECT hDictField NO-ERROR.
  425. //
  426. // is Field company ein Index-Feld ? -> Wenn nicht, Flag lCompany auf FALSE setzen
  427. //
  428. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  429. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  430. cWhere = SUBSTITUTE('WHERE _Field-Recid = &1 ', rField) .
  431. lOK = hDictField:FIND-FIRST(cWhere) NO-ERROR.
  432. IF NOT lOK THEN lCompany = FALSE.
  433. DELETE OBJECT hDictField.
  434. LEAVE.
  435. END.
  436. IF lCompany THEN
  437. DO:
  438. httKeyFields:BUFFER-CREATE ().
  439. ASSIGN
  440. httKeyFields::iIndex = 1
  441. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'company')
  442. httKeyFields::cFieldName = 'company'
  443. httKeyFields::cFileName = cFileName
  444. httKeyFields::cValue = ccompany
  445. httKeyFields::cDataType = 'character'
  446. httKeyFields::lKeyfield = TRUE.
  447. END.
  448. IF lActive THEN
  449. DO:
  450. getActiveSelection(
  451. INPUT oJsonIdent,
  452. INPUT cFileName ,
  453. OUTPUT cActiveSelection
  454. ) NO-ERROR.
  455. CASE cActiveSelection:
  456. WHEN 'activeOnly' THEN
  457. cActiveSelection = 'true'.
  458. WHEN 'inactiveOnly' THEN
  459. cActiveSelection = 'false'.
  460. OTHERWISE
  461. cActiveSelection = ''.
  462. END CASE.
  463. httKeyFields:BUFFER-CREATE ().
  464. ASSIGN
  465. httKeyFields::iIndex = 99
  466. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'active')
  467. httKeyFields::cFieldName = 'active'
  468. httKeyFields::cFileName = cFileName
  469. httKeyFields::cValue = cActiveSelection
  470. httKeyFields::cDataType = 'logical'
  471. httKeyFields::lKeyfield = TRUE.
  472. END.
  473. //
  474. // restlichen Keyfelder in Tabelle schreiben
  475. //
  476. CREATE BUFFER hField FOR TABLE SUBSTITUTE('&1._Field', cDBName).
  477. cFieldNames = oJsonIdent:getNames().
  478. cKeyFieldReplace = SUBSTITUTE ('keyField_&1_', cFileName).
  479. DO i1 = 1 TO EXTENT(cFieldNames):
  480. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  481. cKeyField = cFieldNames[i1].
  482. cField = REPLACE(cKeyField, cKeyFieldReplace, '').
  483. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
  484. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  485. IF lOK THEN
  486. DO:
  487. cValue = oJsonIdent:GetCharacter(cKeyField).
  488. httKeyFields::cvalue = cValue.
  489. NEXT.
  490. END.
  491. cValue = oJsonIdent:GetCharacter(cKeyField).
  492. cWhere = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
  493. hField:FIND-FIRST(cWhere, NO-LOCK).
  494. httKeyFields:BUFFER-CREATE().
  495. ASSIGN
  496. httKeyFields::iIndex = i1 + 1
  497. httKeyFields::cLongName = cKeyField
  498. httKeyFields::cFieldName = cField
  499. httKeyFields::cFileName = cFileName
  500. httKeyFields::cValue = cValue
  501. httKeyFields::cDataType = hField::_Data-Type
  502. httKeyFields::lKeyfield = TRUE.
  503. END.
  504. //
  505. // Filterfelder
  506. //
  507. cKeyFieldReplace = SUBSTITUTE ('filter_&1_', cFileName).
  508. DO i1 = 1 TO EXTENT(cFieldNames):
  509. IF NOT cFieldNames[i1] BEGINS 'filter_' THEN NEXT.
  510. cKeyField = cFieldNames[i1].
  511. cField = REPLACE(cKeyField, cKeyFieldReplace, '').
  512. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
  513. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  514. IF lOK THEN NEXT.
  515. cValue = oJsonIdent:GetCharacter(cKeyField).
  516. cWhere = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
  517. hField:FIND-FIRST(cWhere, NO-LOCK).
  518. httKeyFields:BUFFER-CREATE().
  519. ASSIGN
  520. httKeyFields::iIndex = i1 + 20
  521. httKeyFields::cLongName = cKeyField
  522. httKeyFields::cFieldName = cField
  523. httKeyFields::cFileName = cFileName
  524. httKeyFields::cValue = cValue
  525. httKeyFields::cDataType = hField::_Data-Type
  526. httKeyFields::lKeyfield = FALSE.
  527. END.
  528. //
  529. // Primary Index Felder ermitteln
  530. //
  531. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  532. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  533. CREATE QUERY hQuery.
  534. hQuery:SET-BUFFERS(hDictField).
  535. cWhere = SUBSTITUTE('FOR EACH _Index-Field WHERE _Index-Recid = &1 BY _Index-Field._Index-Seq ', rPrimeIndex) .
  536. hQuery:QUERY-PREPARE (cWhere).
  537. hQuery:QUERY-OPEN ().
  538. hQuery:GET-FIRST () NO-ERROR.
  539. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  540. CREATE BUFFER hField FOR TABLE cDBFileName.
  541. DO WHILE NOT hQuery:QUERY-OFF-END:
  542. rRecid = hDictField::_Field-Recid.
  543. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hField:NAME, rRecid).
  544. hField:FIND-UNIQUE (cWhere, NO-LOCK).
  545. httPrimaryIndex:BUFFER-CREATE().
  546. ASSIGN
  547. httPrimaryIndex::iIndex = hDictField::_Index-Seq
  548. httPrimaryIndex::cFileName = cFileName
  549. httPrimaryIndex::cFieldName = hField::_Field-Name
  550. httPrimaryIndex::cDataType = hField::_DATA-TYPE
  551. .
  552. hQuery:GET-NEXT().
  553. END.
  554. hQuery:QUERY-CLOSE ().
  555. DELETE OBJECT hBuffer NO-ERROR.
  556. DELETE OBJECT hField NO-ERROR.
  557. DELETE OBJECT hDictField NO-ERROR.
  558. DELETE OBJECT hDictFile NO-ERROR.
  559. httKeyFields :WRITE-JSON('File', 'C:\TEMP\ttKeyFields.json' , TRUE).
  560. httPrimaryIndex:WRITE-JSON('File', 'C:\TEMP\ttPrimaryIndex.json', TRUE).
  561. RETURN.
  562. END METHOD.
  563. /*------------------------------------------------------------------------------
  564. Purpose:
  565. Notes:
  566. ------------------------------------------------------------------------------*/
  567. METHOD PUBLIC LOGICAL evaluatePageNumber(
  568. INPUT-OUTPUT oJsonIdent AS JsonObject,
  569. INPUT cWhere AS CHARACTER,
  570. INPUT rRecid AS RECID
  571. ):
  572. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  573. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  574. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  575. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO.
  576. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  577. DEFINE VARIABLE iCurrentPos AS INTEGER NO-UNDO.
  578. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  579. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  580. DEFINE VARIABLE iTotalRecords AS INTEGER NO-UNDO.
  581. cFileName = oJsonIdent:GetCharacter('file_name').
  582. iPage = 1.
  583. iMaxRecords = 25.
  584. iCurrentPos = 0.
  585. IF oJsonIdent:HAS('limit') THEN
  586. iMaxRecords = (IF oJsonIdent:getType('limit') = 1 THEN INTEGER(oJsonIdent:GetCharacter('limit')) ELSE oJsonIdent:GetInteger('limit')) NO-ERROR.
  587. cWhere = REPLACE(cWhere, 'FOR', 'PRESELECT').
  588. MESSAGE 'cWhere =' cWhere 'Filename =' cFileName.
  589. CREATE QUERY hQuery.
  590. CREATE BUFFER hBuffer FOR TABLE cFileName.
  591. hQuery:SET-BUFFERS (hBuffer).
  592. hQuery:QUERY-PREPARE (cWhere).
  593. hQuery:QUERY-OPEN ().
  594. iTotalRecords = hQuery:NUM-RESULTS.
  595. hQuery:GET-FIRST (NO-LOCK) NO-ERROR.
  596. DO WHILE NOT hQuery:QUERY-OFF-END:
  597. iCurrentPos = iCurrentPos + 1.
  598. IF hBuffer:RECID = rRecid THEN LEAVE.
  599. hQuery:GET-NEXT (NO-LOCK) NO-ERROR.
  600. END.
  601. hQuery:QUERY-CLOSE ().
  602. DELETE OBJECT hBuffer.
  603. DELETE OBJECT hQuery.
  604. iIndex = (iCurrentPos MOD iMaxRecords).
  605. IF iIndex = 0 THEN
  606. DO:
  607. iPage = iCurrentPos / iMaxRecords.
  608. iIndex = iMaxRecords - 1. // Java ist Index 0 der erste Satz
  609. END.
  610. ELSE
  611. DO:
  612. iPage = ((iCurrentPos - iIndex) / iMaxRecords) + 1.
  613. iIndex = iIndex - 1.
  614. END.
  615. IF oJsonIdent:HAS('page')
  616. THEN oJsonIdent:SET('page', iPage).
  617. ELSE oJsonIdent:ADD('page', iPage).
  618. IF oJsonIdent:HAS('index')
  619. THEN oJsonIdent:SET('index', iIndex).
  620. ELSE oJsonIdent:ADD('index', iIndex).
  621. IF oJsonIdent:HAS('totalRecords')
  622. THEN oJsonIdent:SET('totalRecords', iTotalRecords).
  623. ELSE oJsonIdent:ADD('totalRecords', iTotalRecords).
  624. MESSAGE 'page =' iPage 'index =' iIndex 'totalRecords =' iTotalRecords 'Max Records =' iMaxRecords 'Current Pos =' iCurrentPos.
  625. lRetVal = TRUE.
  626. RETURN lRetVal.
  627. END METHOD.
  628. /*------------------------------------------------------------------------------
  629. Purpose:
  630. Notes:
  631. ------------------------------------------------------------------------------*/
  632. METHOD PUBLIC VOID generateHash(
  633. INPUT ipAlgorithm AS CHARACTER,
  634. INPUT ipPhrase AS CHARACTER,
  635. INPUT ipKey AS CHARACTER,
  636. OUTPUT opERROR AS LOGICAL,
  637. OUTPUT opMESSAGE AS CHARACTER,
  638. OUTPUT opHash AS CHARACTER
  639. ):
  640. ASSIGN
  641. opERROR = FALSE
  642. opMessage = ''
  643. opHash = ''.
  644. IF ipPhrase = '' OR ipPhrase = ? THEN
  645. DO:
  646. ASSIGN
  647. opERROR = TRUE
  648. opMESSAGE = 'Input Error. Value not correct'.
  649. RETURN.
  650. END.
  651. opHash = HEX-ENCODE (MESSAGE-DIGEST (ipAlgorithm, ipPhrase, ipKey)).
  652. RETURN.
  653. END METHOD.
  654. /*------------------------------------------------------------------------------
  655. Purpose:
  656. Notes:
  657. ------------------------------------------------------------------------------*/
  658. METHOD PUBLIC VOID getActiveSelection(
  659. INPUT oJsonIdent AS JsonObject,
  660. INPUT cFileName AS CHARACTER ,
  661. OUTPUT cActiveSelection AS CHARACTER
  662. ):
  663. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  664. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  665. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  666. ASSIGN
  667. ccompany = oJsonIdent:GetCharacter('company')
  668. cuser_name = oJsonIdent:GetCharacter('user_name')
  669. cProgram = oJsonIdent:GetCharacter('program').
  670. FIND userdata NO-LOCK
  671. WHERE userdata.user_name = cuser_name
  672. AND userdata.company = ccompany
  673. AND userdata.branch = '0000'
  674. AND userdata.record_type = 'active'
  675. AND userdata.section = cFileName
  676. AND userdata.key_type = cProgram NO-ERROR.
  677. IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
  678. ELSE cActiveSelection = ''.
  679. RELEASE userdata.
  680. RETURN.
  681. END METHOD.
  682. /*------------------------------------------------------------------------------
  683. Purpose:
  684. Notes:
  685. ------------------------------------------------------------------------------*/
  686. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphfield_name AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  687. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO.
  688. cfield_nameInhalt = ''.
  689. oplQuoter = FALSE.
  690. CASE iphfield_name:DATA-TYPE:
  691. WHEN 'CHARACTER' THEN
  692. ASSIGN
  693. cfield_nameInhalt = iphfield_name:BUFFER-VALUE(0)
  694. oplQuoter = TRUE.
  695. WHEN 'DECIMAL' OR
  696. WHEN 'INTEGER' THEN
  697. cfield_nameInhalt = TRIM(STRING(INTEGER(iphfield_name:BUFFER-VALUE),'>>>>>>>>9')).
  698. WHEN 'DATE' THEN
  699. cfield_nameInhalt = STRING(DATE(iphfield_name:BUFFER-VALUE),'99.99.9999').
  700. OTHERWISE
  701. cfield_nameInhalt = iphfield_name:BUFFER-VALUE.
  702. END CASE.
  703. IF cfield_nameInhalt = ? THEN cfield_nameInhalt = ''.
  704. RETURN cfield_nameInhalt.
  705. END METHOD.
  706. /*------------------------------------------------------------------------------
  707. Purpose:
  708. Notes:
  709. ------------------------------------------------------------------------------*/
  710. METHOD PUBLIC CHARACTER getCharDateTime(
  711. INPUT ipdDateTime AS DATETIME
  712. ):
  713. DEFINE VARIABLE cReturnValue AS CHARACTER NO-UNDO.
  714. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  715. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  716. dDateTime = ipdDateTime.
  717. cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS').
  718. cReturnValue =
  719. STRING(YEAR(dDateTime),'9999')
  720. + '-'
  721. + STRING(MONTH(dDateTime),'99')
  722. + '-'
  723. + STRING(DAY(dDateTime),'99')
  724. + SUBSTRING(cDateTime,11).
  725. RETURN cReturnValue.
  726. END METHOD.
  727. /*------------------------------------------------------------------------------
  728. Purpose:
  729. Notes:
  730. ------------------------------------------------------------------------------*/
  731. METHOD PUBLIC HANDLE getData(
  732. INPUT ipoJsonIdent AS JsonObject,
  733. INPUT ipcFileName AS CHARACTER,
  734. INPUT ipcWherePaires AS CHARACTER
  735. ):
  736. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  737. DEFINE VARIABLE cWherePaire AS CHARACTER NO-UNDO.
  738. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  739. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  740. DEFINE VARIABLE lWhere AS LOGICAL NO-UNDO INIT TRUE.
  741. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  742. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  743. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  744. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  745. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  746. lOK = FALSE.
  747. DO WHILE TRUE:
  748. FIND FIRST Ge_MIS._File NO-LOCK
  749. WHERE Ge_MIS._File._File-Name = ipcFileName NO-ERROR.
  750. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  751. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  752. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  753. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  754. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  755. lOK = TRUE.
  756. LEAVE.
  757. END.
  758. DO WHILE NOT lOK:
  759. FIND FIRST FRAMEWORK._File NO-LOCK
  760. WHERE FRAMEWORK._File._File-Name = ipcFileName NO-ERROR.
  761. IF NOT AVAILABLE FRAMEWORK._File THEN LEAVE.
  762. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  763. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  764. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  765. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  766. lOK = TRUE.
  767. LEAVE.
  768. END.
  769. CREATE BUFFER hBuffer FOR TABLE ipcFileName.
  770. CREATE TEMP-TABLE ttTable.
  771. ttTable:CREATE-LIKE (hBuffer).
  772. ttTable:TEMP-TABLE-PREPARE ('ttTable').
  773. httBuffer = ttTable:DEFAULT-BUFFER-HANDLE.
  774. DO i1 = 1 TO httBuffer:NUM-FIELDS:
  775. httBuffer:BUFFER-FIELD(i1):SERIALIZE-NAME = SUBSTITUTE('&1_&2', ipcFileName, hBuffer:BUFFER-FIELD(i1):NAME).
  776. END.
  777. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', ipcFileName).
  778. IF lCompany THEN
  779. DO:
  780. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  781. cWhere = cWhere + SUBSTITUTE('&1.company = &2 ', ipcFileName, QUOTER(ipoJsonIdent:GetCharacter('company'))).
  782. lWhere = FALSE.
  783. END.
  784. DO i1 = 1 TO NUM-ENTRIES(ipcWherePaires, ';'):
  785. cWherePaire = ENTRY(i1, ipcWherePaires, ';').
  786. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ) + cWherePaire + ' '.
  787. lWhere = FALSE.
  788. END.
  789. IF lActive THEN
  790. DO:
  791. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  792. cWhere = cWhere + SUBSTITUTE('&1.active = &2 ', ipcFileName, 'TRUE').
  793. lWhere = FALSE.
  794. END.
  795. MESSAGE 'cWhere = ' cWhere.
  796. CREATE QUERY hQuery.
  797. hQuery:SET-BUFFERS(hBuffer).
  798. hQuery:QUERY-PREPARE (cWhere).
  799. hQuery:QUERY-OPEN ().
  800. hQuery:GET-FIRST ().
  801. DO WHILE NOT hQuery:QUERY-OFF-END:
  802. httBuffer:BUFFER-CREATE ().
  803. httBuffer:BUFFER-COPY(hBuffer).
  804. hQuery:GET-NEXT ().
  805. END.
  806. hQuery:QUERY-CLOSE ().
  807. DELETE OBJECT hQuery NO-ERROR.
  808. DELETE OBJECT hBuffer NO-ERROR.
  809. RETURN httBuffer.
  810. END METHOD.
  811. /*------------------------------------------------------------------------------
  812. Purpose:
  813. Notes:
  814. ------------------------------------------------------------------------------*/
  815. METHOD PUBLIC VOID getErrorMessage(
  816. INPUT cFehlerNo AS CHARACTER,
  817. INPUT ilanguage_id AS INTEGER,
  818. INPUT cParam AS CHARACTER,
  819. OUTPUT cMessage AS LONGCHAR
  820. ):
  821. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  822. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  823. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  824. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  825. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  826. cParam = REPLACE(cParam, ',', ';').
  827. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  828. cParameter[ii] = ENTRY(ii, cParam, ';').
  829. IF ii = 5 THEN LEAVE.
  830. END.
  831. lcJsonString = '(&1) -> &2'.
  832. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  833. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  834. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  835. FIND messages NO-LOCK
  836. WHERE messages.message_no = iNo
  837. AND messages.language_id = ilanguage_id NO-ERROR.
  838. IF NOT AVAILABLE messages THEN
  839. DO:
  840. FIND FIRST messages NO-LOCK
  841. WHERE messages.message_no = iNo NO-ERROR.
  842. END.
  843. IF NOT AVAILABLE messages THEN
  844. DO:
  845. cString = cString
  846. + (IF cString = '' THEN '' ELSE ' ')
  847. + 'Systemfehler, Administrator benachrichtigen !'.
  848. END.
  849. ELSE
  850. DO:
  851. cString = cString
  852. + (IF cString = '' THEN '' ELSE ' ')
  853. + messages.message_text.
  854. END.
  855. END.
  856. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  857. cMessage = cString.
  858. RETURN.
  859. END METHOD.
  860. /*------------------------------------------------------------------------------
  861. Purpose:
  862. Notes:
  863. ------------------------------------------------------------------------------*/
  864. METHOD PUBLIC CHARACTER getHeader(
  865. INPUT httInput AS HANDLE
  866. ):
  867. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  868. FIND FIRST labeltexte NO-LOCK
  869. WHERE labeltexte.company = httInput::company
  870. AND labeltexte.user_name = httInput::user_name
  871. AND labeltexte.program = httInput::program
  872. AND labeltexte.field_name = 'KOPF'
  873. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  874. IF NOT AVAILABLE labeltexte THEN
  875. DO:
  876. FIND FIRST labeltexte NO-LOCK
  877. WHERE labeltexte.company = httInput::company
  878. AND labeltexte.program = httInput::program
  879. AND labeltexte.field_name = 'KOPF'
  880. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  881. END.
  882. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::program).
  883. RETURN cHeader.
  884. END METHOD.
  885. /*------------------------------------------------------------------------------
  886. Purpose:
  887. Notes:
  888. ------------------------------------------------------------------------------*/
  889. METHOD PUBLIC LOGICAL getHeaderData(
  890. INPUT poRequest AS IHttpRequest,
  891. INPUT cQueryString AS CHARACTER ,
  892. OUTPUT ccompany AS CHARACTER ,
  893. OUTPUT cuser_name AS CHARACTER ,
  894. OUTPUT cAnzeigeName AS CHARACTER ,
  895. OUTPUT iLanguage_id AS INTEGER ,
  896. OUTPUT cSessionToken AS CHARACTER ,
  897. OUTPUT cFunction AS CHARACTER ,
  898. OUTPUT oJsonIdent AS JsonObject
  899. ):
  900. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  901. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  902. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  903. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  904. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  905. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  906. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  907. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  908. DEFINE VARIABLE cFilename AS CHARACTER NO-UNDO.
  909. oHeader = poRequest:GetHeader('X-COMPANY').
  910. ccompany = oHeader:VALUE.
  911. oHeader = poRequest:GetHeader('X-USER-NAME').
  912. cuser_name = oHeader:VALUE.
  913. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  914. cAnzeigeName = oHeader:VALUE.
  915. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  916. ilanguage_id = INTEGER(oHeader:VALUE).
  917. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  918. cSessionToken = oHeader:VALUE.
  919. oJsonIdent = NEW JsonObject().
  920. oJsonIdent:ADD('H_company' , ccompany ) NO-ERROR.
  921. oJsonIdent:ADD('H_user_name' , cuser_name ) NO-ERROR.
  922. oJsonIdent:ADD('H_language_id', iLanguage_id ) NO-ERROR.
  923. oJsonIdent:ADD('sessionToken' , cSessionToken) NO-ERROR.
  924. //
  925. // Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
  926. //
  927. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  928. cQueryPairs = ENTRY(ii, cQueryString, '&').
  929. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  930. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  931. IF oJsonIdent:HAS(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  932. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  933. END.
  934. IF NOT oJsonIdent:HAS('company' ) THEN oJsonIdent:ADD('company' , oJsonIdent:GetCharacter('H_company' )).
  935. IF NOT oJsonIdent:HAS('user_name' ) THEN oJsonIdent:ADD('user_name' , oJsonIdent:GetCharacter('H_user_name' )).
  936. IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetJsonText ('H_language_id')).
  937. // language_id soll immer ein Interger-Wert sein
  938. oJsonIdent:SET('language_id', INTEGER(oJsonIdent:GetJsonText('language_id'))).
  939. // cFileName = SUBSTITUTE ('C:\TEMP\oJsonIdent_getHeaderData_&1.log', REPLACE(STRING(TIME,'HH:MM:SS'),':', '')).
  940. // oJsonIdent:WriteFile(cFileName, TRUE).
  941. IF oJsonIdent:HAS('formId') THEN
  942. DO:
  943. cFormId = oJsonIdent:GetCharacter('formId') NO-ERROR.
  944. cClassname = ENTRY(1, cFormId, '_').
  945. cFileName = ENTRY(1, cFormId, '_').
  946. oJsonIdent:ADD('class_name', cClassName).
  947. oJsonIdent:ADD('file_name' , cFileName ).
  948. END.
  949. ccompany = oJsonIdent:GetCharacter('company').
  950. cuser_name = oJsonIdent:GetCharacter('user_name').
  951. ilanguage_id = oJsonIdent:GetInteger ('language_id').
  952. IF oJsonIdent:HAS('function') THEN cFunction = oJsonIdent:GetCharacter('function').
  953. lRetVal = TRUE.
  954. RETURN lRetVal.
  955. END METHOD.
  956. /*------------------------------------------------------------------------------
  957. Purpose:
  958. Notes:
  959. ------------------------------------------------------------------------------*/
  960. METHOD PUBLIC LOGICAL getKeyFields(
  961. INPUT oJsonIdent AS JsonObject,
  962. OUTPUT cKeyFields AS CHARACTER ,
  963. OUTPUT cKeyValues AS CHARACTER
  964. ):
  965. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  966. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  967. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  968. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  969. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  970. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  971. cKeyFields = ''.
  972. cKeyValues = ''.
  973. cFieldNames = oJsonIdent:getNames().
  974. DO i1 = 1 TO EXTENT(cFieldNames):
  975. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  976. cKeyFields = cKeyFields
  977. + (IF cKeyFields = '' THEN '' ELSE ';')
  978. + REPLACE(cFieldNames[i1], 'keyfield_', '').
  979. cValue = oJsonIdent:GetCharacter(cFieldNames[i1]).
  980. cKeyValues = cKeyValues
  981. + (IF cKeyValues = '' THEN '' ELSE CHR(01))
  982. + cValue.
  983. END.
  984. lOK = TRUE.
  985. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  986. cString = ENTRY(i1, cKeyFields, ';').
  987. cString = ENTRY(1, cString, '_') + '_'.
  988. cFieldName = REPLACE(ENTRY(i1, cKeyFields, ';'), cString, '').
  989. DO WHILE lOK:
  990. FIND FIRST Ge_MIS._Field NO-LOCK
  991. WHERE Ge_MIS._Field._Field-Name = cFieldname NO-ERROR.
  992. IF NOT AVAILABLE Ge_MIS._Field THEN
  993. DO:
  994. lOK = FALSE.
  995. LEAVE.
  996. END.
  997. CASE Ge_MIS._Field._Data-Type:
  998. WHEN 'character' THEN
  999. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1000. WHEN 'logical' THEN
  1001. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1002. END CASE.
  1003. LEAVE.
  1004. END.
  1005. DO WHILE NOT lOK:
  1006. FIND FIRST FRAMEWORK._Field NO-LOCK
  1007. WHERE FRAMEWORK._Field._Field-Name = cFieldname NO-ERROR.
  1008. IF NOT AVAILABLE FRAMEWORK._Field THEN
  1009. DO:
  1010. lOK = FALSE.
  1011. LEAVE.
  1012. END.
  1013. CASE FRAMEWORK._Field._Data-Type:
  1014. WHEN 'character' THEN
  1015. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1016. WHEN 'logical' THEN
  1017. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1018. END CASE.
  1019. LEAVE.
  1020. END.
  1021. END.
  1022. lRetVal = TRUE.
  1023. RETURN lRetVal.
  1024. END METHOD.
  1025. /*------------------------------------------------------------------------------
  1026. Purpose:
  1027. Notes:
  1028. ------------------------------------------------------------------------------*/
  1029. METHOD PUBLIC CHARACTER getLogicalDBName(
  1030. INPUT ipcFilename AS CHARACTER
  1031. ):
  1032. DEFINE VARIABLE cLogicalDBName AS CHARACTER NO-UNDO.
  1033. DEFINE VARIABLE hDictBuffer AS HANDLE NO-UNDO.
  1034. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1035. cFileName = SUBSTITUTE('Ge_MIS.&1', ipcFilename) NO-ERROR.
  1036. CREATE BUFFER hDictBuffer FOR TABLE cFileName NO-ERROR.
  1037. cLogicalDBName = (IF VALID-HANDLE(hDictBuffer) THEN 'Ge_MIS' ELSE 'FRAMEWORK').
  1038. DELETE OBJECT hDictBuffer NO-ERROR.
  1039. RETURN cLogicalDBName.
  1040. END METHOD.
  1041. /*------------------------------------------------------------------------------
  1042. Purpose:
  1043. Notes:
  1044. ------------------------------------------------------------------------------*/
  1045. METHOD PUBLIC CHARACTER getProgramName(
  1046. INPUT oJsonIdent AS JsonObject,
  1047. INPUT cUsers AS CHARACTER ,
  1048. OUTPUT cFormUser AS CHARACTER ,
  1049. OUTPUT cFormColumns AS CHARACTER ,
  1050. INPUT-OUTPUT iItemsPerPage AS INTEGER ,
  1051. INPUT-OUTPUT cMaxHeight AS CHARACTER
  1052. ):
  1053. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  1054. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1055. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  1056. DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
  1057. cProgram = ''.
  1058. ccompany = oJsonIdent:GetCharacter('company').
  1059. cFormId = oJsonIdent:GetCharacter('formId' ).
  1060. DO i1 = 1 TO NUM-ENTRIES(cUsers, ','):
  1061. cProgramUser = ENTRY(i1, cUsers).
  1062. FIND FIRST htmldokumente NO-LOCK
  1063. WHERE htmldokumente.company = ccompany
  1064. AND htmldokumente.user_name = cProgramUser
  1065. AND htmldokumente.form_id = cFormId NO-ERROR.
  1066. IF NOT AVAILABLE htmldokumente THEN NEXT.
  1067. ASSIGN
  1068. cProgram = htmldokumente.program
  1069. cFormUser = cProgramUser
  1070. iItemsPerPage = htmldokumente.itemsPerPage
  1071. cMaxHeight = htmldokumente.tableMaxHeight
  1072. cFormColumns = htmldokumente.formColumns.
  1073. LEAVE.
  1074. END.
  1075. RETURN cProgram.
  1076. END METHOD.
  1077. /*------------------------------------------------------------------------------
  1078. Purpose:
  1079. Notes:
  1080. ------------------------------------------------------------------------------*/
  1081. METHOD PUBLIC CHARACTER iso2date(
  1082. INPUT cIsoDate AS CHARACTER
  1083. ):
  1084. DEFINE VARIABLE cDate AS CHARACTER NO-UNDO.
  1085. IF cIsoDate = '' OR
  1086. cIsoDate = ? THEN RETURN cDate.
  1087. cDate = SUBSTITUTE('&1/&2/&3', ENTRY(2, cIsoDate, '-'), ENTRY(3, cIsoDate, '-'), ENTRY(1, cIsoDate, '-') ).
  1088. RETURN cDate.
  1089. END METHOD.
  1090. /*------------------------------------------------------------------------------
  1091. Purpose:
  1092. Notes:
  1093. ------------------------------------------------------------------------------*/
  1094. METHOD PUBLIC VOID readLastcWhere(
  1095. INPUT oJsonIdent AS JsonObject,
  1096. INPUT cFileName AS CHARACTER ,
  1097. OUTPUT cWhere AS CHARACTER
  1098. ):
  1099. FIND userdata
  1100. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1101. AND userdata.company = oJsonIdent:GetCharacter('company')
  1102. AND userdata.branch = '0000'
  1103. AND userdata.record_type = 'where'
  1104. AND userdata.section = cFileName
  1105. AND userdata.key_type = 'last' NO-ERROR.
  1106. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1107. RELEASE userdata.
  1108. RETURN.
  1109. END METHOD.
  1110. /*------------------------------------------------------------------------------
  1111. Purpose:
  1112. Notes:
  1113. ------------------------------------------------------------------------------*/
  1114. METHOD PUBLIC LOGICAL readLastRecord(
  1115. INPUT oJsonIdent AS JsonObject,
  1116. OUTPUT cWhere AS CHARACTER
  1117. ):
  1118. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1119. FIND userdata NO-LOCK
  1120. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1121. AND userdata.company = oJsonIdent:GetCharacter('company')
  1122. AND userdata.branch = '0000'
  1123. AND userdata.record_type = 'lastrecord'
  1124. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1125. AND userdata.key_type = '' NO-ERROR.
  1126. IF NOT AVAILABLE userdata THEN RETURN FALSE.
  1127. cWhere = userdata.cfield_1.
  1128. RELEASE userdata.
  1129. LEAVE.
  1130. END.
  1131. RETURN TRUE.
  1132. END METHOD.
  1133. /*------------------------------------------------------------------------------
  1134. Purpose:
  1135. Notes:
  1136. ------------------------------------------------------------------------------*/
  1137. METHOD PUBLIC VOID readSortFields(
  1138. INPUT oJsonIdent AS JsonObject,
  1139. INPUT cFileName AS CHARACTER ,
  1140. OUTPUT cSortField AS CHARACTER ,
  1141. OUTPUT cDirection AS CHARACTER
  1142. ):
  1143. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1144. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1145. cSortField = ''.
  1146. cDirection = ''.
  1147. cCompany = oJsonIdent:GetCharacter('company' ).
  1148. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1149. FIND userdata NO-LOCK
  1150. WHERE userdata.user_name = cUser_Name
  1151. AND userdata.company = cCompany
  1152. AND userdata.branch = '0000'
  1153. AND userdata.record_type = 'sortField'
  1154. AND userdata.section = cFileName
  1155. AND userdata.key_type = '' NO-ERROR.
  1156. IF AVAILABLE userdata THEN
  1157. ASSIGN
  1158. cSortField = userdata.cfield_1
  1159. cDirection = (IF userdata.cfield_2 BEGINS 'asc' THEN '' ELSE userdata.cfield_2).
  1160. RETURN.
  1161. END METHOD.
  1162. /*------------------------------------------------------------------------------
  1163. Purpose:
  1164. Notes:
  1165. ------------------------------------------------------------------------------*/
  1166. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  1167. INPUT ipctable AS CHARACTER
  1168. ):
  1169. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  1170. DEFINE VARIABLE cDBNames AS CHARACTER NO-UNDO INIT 'Ge_MIS;FRAMEWORK'.
  1171. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1172. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1173. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1174. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  1175. DO ix = 1 TO NUM-ENTRIES(cDBNames, ';'):
  1176. cDBName = ENTRY(ix, cDBNames, ';').
  1177. cFileName = SUBSTITUTE('&1.&2', cDBName, ipcTable).
  1178. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  1179. IF NOT ERROR-STATUS:ERROR AND
  1180. VALID-HANDLE(hBuffer) THEN LEAVE.
  1181. DELETE OBJECT hBuffer NO-ERROR.
  1182. cDBName = ''.
  1183. END.
  1184. DELETE OBJECT hBuffer NO-ERROR.
  1185. cFields = ''.
  1186. CASE cDBName:
  1187. WHEN 'Ge_MIS' THEN
  1188. DO:
  1189. FIND FIRST Ge_MIS._File NO-LOCK
  1190. WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
  1191. FOR EACH Ge_MIS._Index-Field NO-LOCK
  1192. WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
  1193. FIRST Ge_MIS._Field NO-LOCK
  1194. WHERE RECID(Ge_MIS._Field) = Ge_MIS._index-Field._Field-recid
  1195. BY Ge_MIS._Index-Field._Index-Seq:
  1196. cFields = cFields
  1197. + (IF cFields = '' THEN '' ELSE ';')
  1198. + Ge_MIS._Field._Field-Name.
  1199. END.
  1200. END.
  1201. WHEN 'FRAMEWORK' THEN
  1202. DO:
  1203. FIND FIRST FRAMEWORK._File NO-LOCK
  1204. WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
  1205. FOR EACH FRAMEWORK._Index-Field NO-LOCK
  1206. WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
  1207. FIRST FRAMEWORK._Field NO-LOCK
  1208. WHERE RECID(FRAMEWORK._Field) = FRAMEWORK._index-Field._Field-recid
  1209. BY FRAMEWORK._Index-Field._Index-Seq:
  1210. cFields = cFields
  1211. + (IF cFields = '' THEN '' ELSE ';')
  1212. + FRAMEWORK._Field._Field-Name.
  1213. END.
  1214. END.
  1215. END CASE.
  1216. RETURN cFields.
  1217. END METHOD.
  1218. /*------------------------------------------------------------------------------
  1219. Purpose:
  1220. Notes:
  1221. ------------------------------------------------------------------------------*/
  1222. METHOD PUBLIC CHARACTER getSysUser( ):
  1223. DEFINE VARIABLE mBen AS MEMPTR NO-UNDO.
  1224. DEFINE VARIABLE iLeng AS INTEGER INIT 100 NO-UNDO.
  1225. DEFINE VARIABLE fok AS INTEGER NO-UNDO.
  1226. DEFINE VARIABLE cBen AS CHARACTER NO-UNDO.
  1227. SET-SIZE(mBen) = iLeng.
  1228. RUN GetUserNameA( OUTPUT mBen, INPUT-OUTPUT iLeng, OUTPUT fok ) NO-ERROR.
  1229. ASSIGN
  1230. cBen = GET-STRING(mBen,1) NO-ERROR.
  1231. SET-SIZE(mBen) = 0.
  1232. RETURN cBen.
  1233. END METHOD.
  1234. /*------------------------------------------------------------------------------
  1235. Purpose:
  1236. Notes:
  1237. ------------------------------------------------------------------------------*/
  1238. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  1239. INPUT oJsonObject AS JsonObject,
  1240. INPUT hbttInput AS HANDLE,
  1241. INPUT-OUTPUT hbttTemp AS HANDLE
  1242. ):
  1243. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  1244. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  1245. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  1246. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  1247. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  1248. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1249. jsonttTemp = NEW JsonObject().
  1250. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  1251. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  1252. hbttTemp:FIND-FIRST ().
  1253. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  1254. MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  1255. lRetVal = TRUE.
  1256. RETURN lRetVal.
  1257. END METHOD.
  1258. /*------------------------------------------------------------------------------
  1259. Purpose:
  1260. Notes:
  1261. ------------------------------------------------------------------------------*/
  1262. METHOD PUBLIC VOID readPosition(
  1263. INPUT oJsonIdent AS JsonObject ,
  1264. INPUT cFileName AS CHARACTER ,
  1265. OUTPUT iCurrentPosition AS INTEGER ,
  1266. OUTPUT iStartPage AS INTEGER ,
  1267. OUTPUT iMaxRecords AS INTEGER
  1268. ):
  1269. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1270. FIND userdata
  1271. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1272. AND userdata.company = oJsonIdent:GetCharacter('company')
  1273. AND userdata.branch = '0000'
  1274. AND userdata.record_type = 'position'
  1275. AND userdata.section = cFileName
  1276. AND userdata.key_type = '' NO-ERROR.
  1277. IF AVAILABLE userdata THEN
  1278. DO:
  1279. ASSIGN
  1280. iCurrentPosition = userdata.ifield_1
  1281. iStartPage = userdata.ifield_2
  1282. iMaxRecords = userdata.ifield_3.
  1283. END.
  1284. ELSE
  1285. DO:
  1286. ASSIGN
  1287. iCurrentPosition = 1
  1288. iStartPage = 1
  1289. iMaxRecords = 25.
  1290. END.
  1291. RELEASE userdata.
  1292. LEAVE.
  1293. END.
  1294. RETURN.
  1295. END METHOD.
  1296. /*------------------------------------------------------------------------------
  1297. Purpose:
  1298. Notes:
  1299. ------------------------------------------------------------------------------*/
  1300. METHOD PUBLIC VOID readStartcWhere(
  1301. INPUT oJsonIdent AS JsonObject,
  1302. INPUT cFileName AS CHARACTER ,
  1303. OUTPUT cWhere AS CHARACTER
  1304. ):
  1305. FIND userdata
  1306. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1307. AND userdata.company = oJsonIdent:GetCharacter('company')
  1308. AND userdata.branch = '0000'
  1309. AND userdata.record_type = 'where'
  1310. AND userdata.section = cFileName
  1311. AND userdata.key_type = 'start' NO-ERROR.
  1312. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1313. RELEASE userdata.
  1314. RETURN.
  1315. END METHOD.
  1316. /*------------------------------------------------------------------------------
  1317. Purpose:
  1318. Notes:
  1319. ------------------------------------------------------------------------------*/
  1320. METHOD PUBLIC VOID setActiveSelection(
  1321. INPUT oJsonIdent AS JsonObject,
  1322. INPUT cFileName AS CHARACTER ,
  1323. INPUT cActiveSelection AS CHARACTER
  1324. ):
  1325. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1326. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  1327. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  1328. ASSIGN
  1329. ccompany = oJsonIdent:GetCharacter('company')
  1330. cuser_name = oJsonIdent:GetCharacter('user_name')
  1331. cProgram = oJsonIdent:GetCharacter('program').
  1332. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1333. FIND userdata
  1334. WHERE userdata.user_name = cuser_name
  1335. AND userdata.company = ccompany
  1336. AND userdata.branch = '0000'
  1337. AND userdata.record_type = 'active'
  1338. AND userdata.section = cFileName
  1339. AND userdata.key_type = cProgram NO-ERROR.
  1340. IF NOT AVAILABLE userdata THEN
  1341. DO:
  1342. CREATE userdata.
  1343. ASSIGN
  1344. userdata.user_name = cuser_name
  1345. userdata.company = ccompany
  1346. userdata.branch = '0000'
  1347. userdata.record_type = 'active'
  1348. userdata.section = cFileName
  1349. userdata.key_type = cProgram
  1350. userdata.creation_date = NOW NO-ERROR.
  1351. END.
  1352. ELSE
  1353. DO:
  1354. userdata.access_date = NOW.
  1355. END.
  1356. userdata.cfield_1 = cActiveSelection.
  1357. RELEASE userdata.
  1358. LEAVE.
  1359. END.
  1360. RETURN.
  1361. END METHOD.
  1362. /*------------------------------------------------------------------------------
  1363. Purpose:
  1364. Notes:
  1365. ------------------------------------------------------------------------------*/
  1366. METHOD PUBLIC LONGCHAR trimStructure(
  1367. INPUT oJsonInput AS JsonObject
  1368. ):
  1369. DEFINE VARIABLE lcResult AS LONGCHAR NO-UNDO.
  1370. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1371. lcResult = TRIM(oJsonInput:GetJsonText()).
  1372. lcResult = SUBSTRING(lcResult,02).
  1373. ii = LENGTH(lcResult) - 1.
  1374. lcResult = SUBSTRING(lcResult,01, ii).
  1375. RETURN lcResult.
  1376. END METHOD.
  1377. /*------------------------------------------------------------------------------
  1378. Purpose:
  1379. Notes:
  1380. ------------------------------------------------------------------------------*/
  1381. METHOD PUBLIC VOID writeLastcWhere(
  1382. INPUT oJsonIdent AS JsonObject,
  1383. INPUT cFileName AS CHARACTER ,
  1384. INPUT cWhere AS CHARACTER
  1385. ):
  1386. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1387. FIND userdata
  1388. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1389. AND userdata.company = oJsonIdent:GetCharacter('company')
  1390. AND userdata.branch = '0000'
  1391. AND userdata.record_type = 'where'
  1392. AND userdata.section = cFileName
  1393. AND userdata.key_type = 'last' NO-ERROR.
  1394. IF NOT AVAILABLE userdata THEN
  1395. DO:
  1396. CREATE userdata.
  1397. ASSIGN
  1398. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1399. userdata.company = oJsonIdent:GetCharacter('company')
  1400. userdata.branch = '0000'
  1401. userdata.record_type = 'where'
  1402. userdata.section = cFileName
  1403. userdata.key_type = 'last' NO-ERROR.
  1404. END.
  1405. ASSIGN
  1406. userdata.cfield_1 = cWhere.
  1407. RELEASE userdata.
  1408. LEAVE.
  1409. END.
  1410. RETURN.
  1411. END METHOD.
  1412. /*------------------------------------------------------------------------------
  1413. Purpose:
  1414. Notes:
  1415. ------------------------------------------------------------------------------*/
  1416. METHOD PUBLIC LOGICAL writeLastRecord(
  1417. INPUT oJsonIdent AS JsonObject,
  1418. INPUT cWhere AS CHARACTER
  1419. ):
  1420. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1421. FIND userdata
  1422. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1423. AND userdata.company = oJsonIdent:GetCharacter('company')
  1424. AND userdata.branch = '0000'
  1425. AND userdata.record_type = 'lastrecord'
  1426. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1427. AND userdata.key_type = '' NO-ERROR.
  1428. IF NOT AVAILABLE userdata THEN
  1429. DO:
  1430. CREATE userdata.
  1431. ASSIGN
  1432. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1433. userdata.company = oJsonIdent:GetCharacter('company')
  1434. userdata.branch = '0000'
  1435. userdata.record_type = 'lastrecord'
  1436. userdata.section = oJsonIdent:GetCharacter('file_name')
  1437. userdata.key_type = ''
  1438. userdata.creation_date = NOW NO-ERROR.
  1439. END.
  1440. ASSIGN
  1441. userdata.cfield_1 = cWhere
  1442. userdata.access_date = NOW.
  1443. RELEASE userdata.
  1444. LEAVE.
  1445. END.
  1446. RETURN TRUE.
  1447. END METHOD.
  1448. /*------------------------------------------------------------------------------
  1449. Purpose:
  1450. Notes:
  1451. ------------------------------------------------------------------------------*/
  1452. METHOD PUBLIC VOID writePosition(
  1453. INPUT oJsonIdent AS JsonObject,
  1454. INPUT cFileName AS CHARACTER ,
  1455. INPUT iCurrentPosition AS INTEGER ,
  1456. INPUT iStartPage AS INTEGER ,
  1457. INPUT iMaxRecords AS INTEGER
  1458. ):
  1459. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1460. FIND userdata
  1461. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1462. AND userdata.company = oJsonIdent:GetCharacter('company')
  1463. AND userdata.branch = '0000'
  1464. AND userdata.record_type = 'position'
  1465. AND userdata.section = cFileName
  1466. AND userdata.key_type = '' NO-ERROR.
  1467. IF NOT AVAILABLE userdata THEN
  1468. DO:
  1469. CREATE userdata.
  1470. ASSIGN
  1471. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1472. userdata.company = oJsonIdent:GetCharacter('company')
  1473. userdata.branch = '0000'
  1474. userdata.record_type = 'position'
  1475. userdata.section = cFileName
  1476. userdata.key_type = '' NO-ERROR.
  1477. END.
  1478. ASSIGN
  1479. userdata.ifield_1 = iCurrentPosition
  1480. userdata.iField_2 = iStartPage
  1481. userdata.ifield_3 = iMaxRecords.
  1482. RELEASE userdata.
  1483. LEAVE.
  1484. END.
  1485. RETURN.
  1486. END METHOD.
  1487. /*------------------------------------------------------------------------------
  1488. Purpose:
  1489. Notes:
  1490. ------------------------------------------------------------------------------*/
  1491. METHOD PUBLIC VOID writeSortfields(
  1492. INPUT oJsonIdent AS JsonObject,
  1493. INPUT cFileName AS CHARACTER ,
  1494. INPUT cSortField AS CHARACTER ,
  1495. INPUT cDirection AS CHARACTER
  1496. ):
  1497. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1498. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1499. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1500. cCompany = oJsonIdent:GetCharacter('company' ).
  1501. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1502. cReplace = SUBSTITUTE('&1_', cFileName).
  1503. cSortField = REPLACE(cSortField, cReplace, '').
  1504. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1505. FIND userdata
  1506. WHERE userdata.user_name = cUser_Name
  1507. AND userdata.company = cCompany
  1508. AND userdata.branch = '0000'
  1509. AND userdata.record_type = 'sortField'
  1510. AND userdata.section = cFileName
  1511. AND userdata.key_type = '' NO-ERROR.
  1512. IF NOT AVAILABLE userdata THEN
  1513. DO:
  1514. CREATE userdata.
  1515. ASSIGN
  1516. userdata.user_name = cUser_Name
  1517. userdata.company = cCompany
  1518. userdata.branch = '0000'
  1519. userdata.record_type = 'sortField'
  1520. userdata.section = cFileName
  1521. userdata.key_type = '' NO-ERROR.
  1522. END.
  1523. ASSIGN
  1524. userdata.cfield_1 = cSortfield
  1525. userdata.cfield_2 = cDirection.
  1526. RELEASE userdata.
  1527. LEAVE.
  1528. END.
  1529. RETURN.
  1530. END METHOD.
  1531. /*------------------------------------------------------------------------------
  1532. Purpose:
  1533. Notes:
  1534. ------------------------------------------------------------------------------*/
  1535. METHOD PUBLIC VOID writeStartcWhere(
  1536. INPUT oJsonIdent AS JsonObject,
  1537. INPUT cFileName AS CHARACTER ,
  1538. INPUT cWhere AS CHARACTER
  1539. ):
  1540. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1541. FIND userdata
  1542. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1543. AND userdata.company = oJsonIdent:GetCharacter('company')
  1544. AND userdata.branch = '0000'
  1545. AND userdata.record_type = 'where'
  1546. AND userdata.section = cFileName
  1547. AND userdata.key_type = 'start' NO-ERROR.
  1548. IF NOT AVAILABLE userdata THEN
  1549. DO:
  1550. CREATE userdata.
  1551. ASSIGN
  1552. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1553. userdata.company = oJsonIdent:GetCharacter('company')
  1554. userdata.branch = '0000'
  1555. userdata.record_type = 'where'
  1556. userdata.section = cFileName
  1557. userdata.key_type = 'start' NO-ERROR.
  1558. END.
  1559. ASSIGN
  1560. userdata.cfield_1 = cWhere.
  1561. RELEASE userdata.
  1562. LEAVE.
  1563. END.
  1564. RETURN.
  1565. END METHOD.
  1566. /*------------------------------------------------------------------------------
  1567. Purpose:
  1568. Notes:
  1569. ------------------------------------------------------------------------------*/
  1570. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  1571. /* MESSAGE 'Destructor utilitiesHandler '.*/
  1572. /* DELETE OBJECT hQuery NO-ERROR. */
  1573. /* DELETE OBJECT hBuffer NO-ERROR. */
  1574. END DESTRUCTOR.
  1575. END CLASS.