utilitiesHandler.cls 79 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116
  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.Web.IWebRequest 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 cProgram 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 INT64 NO-UNDO.
  218. DEFINE VARIABLE cBuffValue AS CHARACTER NO-UNDO.
  219. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  220. DEFINE VARIABLE dDate AS DATE NO-UNDO.
  221. DEFINE VARIABLE nValue AS DECIMAL NO-UNDO.
  222. cWords = ''.
  223. DO ii = 1 TO hBuffer:NUM-FIELDS:
  224. hField = hBuffer:BUFFER-FIELD(ii):HANDLE.
  225. IF hField:EXTENT > 0 THEN NEXT.
  226. IF INDEX(hField:NAME, 'SHA') > 0 THEN NEXT.
  227. IF INDEX(hField:NAME, 'word') > 0 THEN NEXT.
  228. IF INDEX(hField:NAME, 'updated_') > 0 THEN NEXT.
  229. IF INDEX(hField:NAME, 'created_') > 0 THEN NEXT.
  230. cDatatype = hField:DATA-TYPE.
  231. IF cDatatype = 'logical' THEN NEXT.
  232. cBuffValue = hField:BUFFER-VALUE.
  233. IF cBuffValue = '' OR
  234. cBuffValue = '0' OR
  235. cBuffValue = ? THEN NEXT.
  236. DO i1 = 1 TO NUM-ENTRIES(cBuffValue, ' '):
  237. cWord = ENTRY(i1, cBuffValue, ' ').
  238. CASE cDatatype:
  239. WHEN 'date' THEN
  240. DO:
  241. dDate = DATE(cWord) NO-ERROR.
  242. IF ERROR-STATUS:ERROR THEN NEXT.
  243. cWord = STRING(dDate,'99.99.9999').
  244. END.
  245. WHEN 'integer' OR
  246. WHEN 'in64' OR
  247. WHEN 'decimal' THEN
  248. DO:
  249. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  250. END.
  251. OTHERWISE
  252. DO:
  253. nValue = DECIMAL(cWord) NO-ERROR.
  254. IF NOT ERROR-STATUS:ERROR THEN
  255. DO:
  256. cWord = TRIM(STRING(nValue,'->>>>>>>>>9.999999')).
  257. cWord = REPLACE(cWord, '.000000', '').
  258. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  259. END.
  260. END.
  261. END.
  262. IF LOOKUP(cWord, cWords, ' ') > 0 THEN NEXT.
  263. cWords = cWords + (IF cWords = '' THEN '' ELSE ' ') + cWord.
  264. END.
  265. END.
  266. cWords = TRIM(cWords).
  267. cWords = REPLACE(cWords, ' ', ' ').
  268. cWordIndex = TRIM(cWords).
  269. RETURN cWordIndex.
  270. END METHOD.
  271. /*------------------------------------------------------------------------------
  272. Purpose:
  273. Notes:
  274. ------------------------------------------------------------------------------*/
  275. METHOD PUBLIC CHARACTER createWordindexFromTable(
  276. INPUT hBuffer AS HANDLE
  277. ):
  278. DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
  279. DEFINE VARIABLE cWords AS CHARACTER NO-UNDO.
  280. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  281. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  282. DEFINE VARIABLE cWord AS CHARACTER NO-UNDO.
  283. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  284. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  285. DEFINE VARIABLE iNumerisch AS INT64 NO-UNDO.
  286. DEFINE VARIABLE cBuffValue AS CHARACTER NO-UNDO.
  287. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  288. DEFINE VARIABLE dDate AS DATE NO-UNDO.
  289. DEFINE VARIABLE nValue AS DECIMAL NO-UNDO.
  290. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  291. CREATE QUERY hQuery.
  292. hQuery:SET-BUFFERS(hBuffer).
  293. hQuery:QUERY-PREPARE ('FOR EACH ttWordIndexTable NO-LOCK ').
  294. hQuery:QUERY-OPEN ().
  295. hQuery:GET-FIRST () NO-ERROR.
  296. cWords = ''.
  297. DO WHILE NOT hQuery:QUERY-OFF-END:
  298. cDatatype = hBuffer::cDataType.
  299. cBuffValue = hBuffer::cValue.
  300. cField = hBuffer::cFieldName.
  301. DO WHILE TRUE:
  302. IF cBuffValue = '' OR
  303. cBuffValue = '0' OR
  304. cBuffValue = ? THEN LEAVE.
  305. cBuffValue = REPLACE(cBuffValue, ' ' , ' ').
  306. cBuffValue = REPLACE(cBuffValue, CHR(10), ' ').
  307. cBuffValue = REPLACE(cBuffValue, CHR(13), ' ').
  308. DO i1 = 1 TO NUM-ENTRIES(cBuffValue, ' '):
  309. cWord = ENTRY(i1, cBuffValue, ' ').
  310. CASE cDatatype:
  311. WHEN 'date' THEN
  312. DO:
  313. dDate = DATE(cWord) NO-ERROR.
  314. IF ERROR-STATUS:ERROR THEN NEXT.
  315. cWord = STRING(dDate,'99.99.9999').
  316. END.
  317. WHEN 'integer' OR
  318. WHEN 'in64' OR
  319. WHEN 'decimal' THEN
  320. DO:
  321. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  322. END.
  323. OTHERWISE
  324. DO:
  325. nValue = DECIMAL(cWord) NO-ERROR.
  326. IF NOT ERROR-STATUS:ERROR THEN
  327. DO:
  328. cWord = TRIM(STRING(nValue,'->>>>>>>>>9.999999')).
  329. cWord = REPLACE(cWord, '.000000', '').
  330. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  331. END.
  332. END.
  333. END CASE.
  334. IF LOOKUP(cWord, cWords, ' ') > 0 THEN NEXT.
  335. cWords = cWords + (IF cWords = '' THEN '' ELSE ' ') + cWord.
  336. END.
  337. LEAVE.
  338. END.
  339. hQuery:GET-NEXT ().
  340. END.
  341. cWords = TRIM(cWords).
  342. cWords = REPLACE(cWords, ' ', ' ').
  343. cWordIndex = TRIM(cWords).
  344. DELETE OBJECT hQuery.
  345. RETURN cWordIndex.
  346. END METHOD.
  347. /*------------------------------------------------------------------------------
  348. Purpose:
  349. Notes:
  350. ------------------------------------------------------------------------------*/
  351. METHOD PUBLIC CHARACTER date2iso(
  352. INPUT dDate AS DATE
  353. ):
  354. DEFINE VARIABLE cisoDate AS CHARACTER NO-UNDO.
  355. cisoDate = SUBSTITUTE('&1-&2-&3', STRING(YEAR(dDate),'9999'), STRING(MONTH(dDate),'99'), STRING(DAY(dDate),'99')).
  356. RETURN cisoDate.
  357. END METHOD.
  358. /*------------------------------------------------------------------------------
  359. Purpose:
  360. Notes:
  361. ------------------------------------------------------------------------------*/
  362. METHOD PUBLIC LOGICAL evaluateErrorStatus(
  363. INPUT hError AS HANDLE
  364. ):
  365. DEFINE VARIABLE iNumMessages AS INTEGER NO-UNDO.
  366. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  367. IF NOT hError:ERROR THEN RETURN FALSE.
  368. cMessage = 'ERROR: '.
  369. DO iNumMessages = 1 TO hError:NUM-MESSAGES :
  370. cMessage = cMessage + hError:GET-MESSAGE(iNumMessages) + CHR(10) + ' '.
  371. END.
  372. MESSAGE cMessage.
  373. RETURN TRUE.
  374. END METHOD.
  375. /*------------------------------------------------------------------------------
  376. Purpose:
  377. Notes:
  378. ------------------------------------------------------------------------------*/
  379. METHOD PUBLIC VOID evaluateFile(
  380. INPUT-OUTPUT oJsonIdent AS JsonObject,
  381. OUTPUT cFileName AS CHARACTER,
  382. OUTPUT lCompany AS LOGICAL ,
  383. OUTPUT lActive AS LOGICAL ,
  384. OUTPUT lWordindex AS LOGICAL ,
  385. INPUT-OUTPUT httKeyFields AS HANDLE ,
  386. INPUT-OUTPUT httPrimaryIndex AS HANDLE
  387. ):
  388. DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
  389. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  390. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  391. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  392. DEFINE VARIABLE hDictFile AS HANDLE NO-UNDO.
  393. DEFINE VARIABLE hDictField AS HANDLE NO-UNDO.
  394. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  395. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  396. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  397. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  398. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  399. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  400. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  401. DEFINE VARIABLE cFileAusForm AS CHARACTER NO-UNDO.
  402. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  403. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  404. DEFINE VARIABLE rPrimeIndex AS RECID NO-UNDO.
  405. DEFINE VARIABLE rField AS RECID NO-UNDO.
  406. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  407. DEFINE VARIABLE cKeyField AS CHARACTER NO-UNDO.
  408. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  409. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  410. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  411. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  412. DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
  413. DEFINE VARIABLE cKeyFields AS CHARACTER NO-UNDO.
  414. DEFINE VARIABLE cKeyValues AS CHARACTER NO-UNDO.
  415. ccompany = oJsonIdent:GetCharacter('company' ) NO-ERROR.
  416. cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  417. cprogram = oJsonIdent:GetCharacter('program' ) NO-ERROR.
  418. cFormId = oJsonIdent:GetCharacter('formId' ) NO-ERROR.
  419. IF oJsonIdent:HAS('file_name') THEN
  420. DO:
  421. cFileName = oJsonIdent:GetCharacter('file_name') NO-ERROR.
  422. cDBName = oJsonIdent:GetCharacter('DBName') NO-ERROR.
  423. END.
  424. ELSE
  425. DO:
  426. cFileName = ''.
  427. getFileNameFromFormId(
  428. INPUT cFormId ,
  429. OUTPUT cFileName,
  430. OUTPUT cDBName
  431. ).
  432. oJsonIdent:ADD('file_name', cFileName).
  433. oJsonIdent:ADD('DBName' , cDBName ).
  434. END.
  435. ASSIGN
  436. lCompany = FALSE
  437. lActive = FALSE
  438. lWordIndex = FALSE.
  439. /* DO WHILE TRUE: */
  440. /* cDBName = 'Ge_MIS'. */
  441. /* cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).*/
  442. /* CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR. */
  443. /* IF VALID-HANDLE(hBuffer) THEN LEAVE. */
  444. /* */
  445. /* cDBName = 'FRAMEWORK'. */
  446. /* DELETE OBJECT hBuffer NO-ERROR. */
  447. /* cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).*/
  448. /* CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR. */
  449. /* IF VALID-HANDLE(hBuffer) THEN LEAVE. */
  450. /* */
  451. /* RETURN. */
  452. /* END. */
  453. /* */
  454. /* oJsonIdent:ADD('DBName', cDBName). */
  455. /* */
  456. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  457. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  458. IF NOT ERROR-STATUS:ERROR AND
  459. VALID-HANDLE(hField) THEN lActive = TRUE.
  460. DELETE OBJECT hField NO-ERROR.
  461. hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
  462. IF NOT ERROR-STATUS:ERROR AND
  463. VALID-HANDLE(hField) THEN lWordIndex = TRUE.
  464. DELETE OBJECT hField NO-ERROR.
  465. hField = hBuffer:BUFFER-FIELD('company') NO-ERROR.
  466. IF NOT ERROR-STATUS:ERROR AND
  467. VALID-HANDLE(hField) THEN lCompany = TRUE.
  468. //
  469. // Dictionary _File Buffer ermitteln
  470. //
  471. cDBFileName = SUBSTITUTE('&1._File', cDBName).
  472. CREATE BUFFER hDictFile FOR TABLE cDBFileName NO-ERROR.
  473. cWhere = SUBSTITUTE('WHERE _File-Name = &1 ', QUOTER(cFileName)).
  474. lOK = hDictFile:FIND-FIRST (cWhere, NO-LOCK) NO-ERROR.
  475. rRecid = hDictFile:RECID.
  476. rPrimeIndex = hDictFile::_Prime-Index.
  477. DO WHILE lCompany:
  478. //
  479. // ermitteln RECID von Field company
  480. //
  481. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  482. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  483. cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = "company" ', rRecid) .
  484. lOK = hDictField:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  485. rField = hDictField:RECID.
  486. DELETE OBJECT hDictField NO-ERROR.
  487. //
  488. // is Field company ein Index-Feld ? -> Wenn nicht, Flag lCompany auf FALSE setzen
  489. //
  490. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  491. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  492. cWhere = SUBSTITUTE('WHERE _Field-Recid = &1 ', rField) .
  493. lOK = hDictField:FIND-FIRST(cWhere) NO-ERROR.
  494. IF NOT lOK THEN lCompany = FALSE.
  495. DELETE OBJECT hDictField.
  496. LEAVE.
  497. END.
  498. IF lCompany THEN
  499. DO:
  500. httKeyFields:BUFFER-CREATE ().
  501. ASSIGN
  502. httKeyFields::iIndex = 1
  503. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'company')
  504. httKeyFields::cFieldName = 'company'
  505. httKeyFields::cFileName = cFileName
  506. httKeyFields::cValue = ccompany
  507. httKeyFields::cDataType = 'character'
  508. httKeyFields::lKeyfield = TRUE.
  509. END.
  510. IF lActive THEN
  511. DO:
  512. getActiveSelection(
  513. INPUT oJsonIdent,
  514. INPUT cFileName ,
  515. OUTPUT cActiveSelection
  516. ) NO-ERROR.
  517. CASE cActiveSelection:
  518. WHEN 'activeOnly' THEN
  519. cActiveSelection = 'true'.
  520. WHEN 'inactiveOnly' THEN
  521. cActiveSelection = 'false'.
  522. OTHERWISE
  523. cActiveSelection = ''.
  524. END CASE.
  525. httKeyFields:BUFFER-CREATE ().
  526. ASSIGN
  527. httKeyFields::iIndex = 99
  528. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'active')
  529. httKeyFields::cFieldName = 'active'
  530. httKeyFields::cFileName = cFileName
  531. httKeyFields::cValue = cActiveSelection
  532. httKeyFields::cDataType = 'logical'
  533. httKeyFields::lKeyfield = TRUE.
  534. END.
  535. //
  536. // restlichen Keyfelder in Tabelle schreiben
  537. //
  538. getKeyFields(
  539. INPUT oJsonIdent,
  540. OUTPUT cKeyFields,
  541. OUTPUT cKeyValues
  542. ).
  543. MESSAGE
  544. 'cKeyFields =' cKeyFields SKIP
  545. 'cKeyValue =' cKeyValues SKIP.
  546. CREATE BUFFER hField FOR TABLE SUBSTITUTE('&1._Field', cDBName).
  547. /* cFieldNames = oJsonIdent:getNames(). */
  548. /* cKeyFieldReplace = SUBSTITUTE ('keyField_&1_', cFileName).*/
  549. /* MESSAGE */
  550. /* 'cFileName =' cFileName SKIP */
  551. /* 'cFieldNames =' cFieldNames[01] SKIP */
  552. /* 'cKeyFieldReplace =' cKeyFieldReplace SKIP */
  553. /* 'cDBName =' cDBName. */
  554. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  555. cFieldName = ENTRY(i1, cKeyFields, ';').
  556. cValue = ENTRY(i1, cKeyValues, CHR(01)).
  557. // MESSAGE 'cFieldName-1' cFieldName ' / ' 'Value ->' cValue.
  558. cFieldName = REPLACE(cFieldName, 'keyfield_', '').
  559. // MESSAGE 'cFieldName-2' cFieldName '/' cFileName.
  560. cFieldName = REPLACE(cFieldName, cFileName + '_' , '').
  561. // MESSAGE 'cFieldName-3' cFieldName '/' cFileName.
  562. //IF NOT ENTRY(2, cFieldName, '_') = cFileName THEN ENTRY(2, cFieldName, '_') = cFileName.
  563. cKeyField = ENTRY(i1, cKeyFields, ';').
  564. cField = cFieldName.
  565. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cFieldName) ).
  566. // MESSAGE 'cWhere bei _Field =' cWhere.
  567. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  568. IF lOK THEN
  569. DO:
  570. // cValue = oJsonIdent:GetCharacter(cKeyField) NO-ERROR.
  571. httKeyFields::cvalue = cValue.
  572. NEXT.
  573. END.
  574. // cValue = oJsonIdent:GetCharacter(cKeyField) NO-ERROR.
  575. cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = &2', rRecid, QUOTER(cFieldName)).
  576. hField:FIND-FIRST(cWhere, NO-LOCK).
  577. httKeyFields:BUFFER-CREATE().
  578. ASSIGN
  579. httKeyFields::iIndex = i1 + 1
  580. httKeyFields::cLongName = cKeyField
  581. httKeyFields::cFieldName = cField
  582. httKeyFields::cFileName = cFileName
  583. httKeyFields::cValue = cValue
  584. httKeyFields::cDataType = hField::_Data-Type
  585. httKeyFields::lKeyfield = TRUE.
  586. END.
  587. httKeyFields:WRITE-JSON ('FILE', SUBSTITUTE('C:\TEMP\ttKeyfields_&1.json', cFileName), TRUE).
  588. //
  589. // Filterfelder
  590. //
  591. cKeyFieldReplace = SUBSTITUTE ('filter_&1_', cFileName).
  592. DO i1 = 1 TO EXTENT(cFieldNames):
  593. IF NOT cFieldNames[i1] BEGINS 'filter_' THEN NEXT.
  594. cKeyField = cFieldNames[i1].
  595. cField = REPLACE(cKeyField, cKeyFieldReplace, '').
  596. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
  597. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  598. IF lOK THEN NEXT.
  599. cValue = oJsonIdent:GetCharacter(cKeyField).
  600. cWhere = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
  601. hField:FIND-FIRST(cWhere, NO-LOCK).
  602. httKeyFields:BUFFER-CREATE().
  603. ASSIGN
  604. httKeyFields::iIndex = i1 + 20
  605. httKeyFields::cLongName = cKeyField
  606. httKeyFields::cFieldName = cField
  607. httKeyFields::cFileName = cFileName
  608. httKeyFields::cValue = cValue
  609. httKeyFields::cDataType = hField::_Data-Type
  610. httKeyFields::lKeyfield = FALSE.
  611. END.
  612. //
  613. // Primary Index Felder ermitteln
  614. //
  615. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  616. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  617. CREATE QUERY hQuery.
  618. hQuery:SET-BUFFERS(hDictField).
  619. cWhere = SUBSTITUTE('FOR EACH _Index-Field WHERE _Index-Recid = &1 BY _Index-Field._Index-Seq ', rPrimeIndex) .
  620. hQuery:QUERY-PREPARE (cWhere).
  621. hQuery:QUERY-OPEN ().
  622. hQuery:GET-FIRST () NO-ERROR.
  623. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  624. CREATE BUFFER hField FOR TABLE cDBFileName.
  625. DO WHILE NOT hQuery:QUERY-OFF-END:
  626. rRecid = hDictField::_Field-Recid.
  627. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hField:NAME, rRecid).
  628. hField:FIND-UNIQUE (cWhere, NO-LOCK).
  629. httPrimaryIndex:BUFFER-CREATE().
  630. ASSIGN
  631. httPrimaryIndex::iIndex = hDictField::_Index-Seq
  632. httPrimaryIndex::cFileName = cFileName
  633. httPrimaryIndex::cFieldName = hField::_Field-Name
  634. httPrimaryIndex::cDataType = hField::_DATA-TYPE
  635. .
  636. hQuery:GET-NEXT().
  637. END.
  638. hQuery:QUERY-CLOSE ().
  639. DELETE OBJECT hBuffer NO-ERROR.
  640. DELETE OBJECT hField NO-ERROR.
  641. DELETE OBJECT hDictField NO-ERROR.
  642. DELETE OBJECT hDictFile NO-ERROR.
  643. httKeyFields :WRITE-JSON('File', 'C:\TEMP\ttKeyFields.json' , TRUE).
  644. httPrimaryIndex:WRITE-JSON('File', 'C:\TEMP\ttPrimaryIndex.json', TRUE).
  645. RETURN.
  646. END METHOD.
  647. /*------------------------------------------------------------------------------
  648. Purpose:
  649. Notes:
  650. ------------------------------------------------------------------------------*/
  651. METHOD PUBLIC LOGICAL evaluatePageNumber(
  652. INPUT-OUTPUT oJsonIdent AS JsonObject,
  653. INPUT cWhere AS CHARACTER,
  654. INPUT rRecid AS RECID ,
  655. INPUT cStatus AS CHARACTER
  656. ):
  657. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  658. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  659. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  660. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO.
  661. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  662. DEFINE VARIABLE iCurrentPos AS INTEGER NO-UNDO.
  663. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  664. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  665. DEFINE VARIABLE iTotalRecords AS INTEGER NO-UNDO.
  666. DEFINE VARIABLE rBefore AS RECID NO-UNDO.
  667. cFileName = oJsonIdent:GetCharacter('file_name').
  668. iPage = 1.
  669. iMaxRecords = 25.
  670. iCurrentPos = 0.
  671. IF oJsonIdent:HAS('limit') THEN
  672. DO:
  673. iMaxRecords = (IF oJsonIdent:getType('limit') = 1
  674. THEN INTEGER(oJsonIdent:GetCharacter('limit'))
  675. ELSE oJsonIdent:GetInteger('limit')) NO-ERROR.
  676. END.
  677. cWhere = SUBSTITUTE(' PRESELECT EACH &1 &2 NO-LOCK ', cFileName, cWhere).
  678. //MESSAGE 'cWhere =' cWhere 'Filename =' cFileName.
  679. CREATE QUERY hQuery.
  680. CREATE BUFFER hBuffer FOR TABLE cFileName.
  681. hQuery:SET-BUFFERS (hBuffer).
  682. hQuery:QUERY-PREPARE (cWhere).
  683. hQuery:QUERY-OPEN ().
  684. iTotalRecords = hQuery:NUM-RESULTS.
  685. hQuery:GET-FIRST (NO-LOCK) NO-ERROR.
  686. DO WHILE NOT hQuery:QUERY-OFF-END:
  687. iCurrentPos = iCurrentPos + 1.
  688. IF hBuffer:RECID = rRecid THEN LEAVE.
  689. rBefore = hBuffer:RECID.
  690. hQuery:GET-NEXT (NO-LOCK) NO-ERROR.
  691. END.
  692. hQuery:QUERY-CLOSE ().
  693. DELETE OBJECT hBuffer.
  694. DELETE OBJECT hQuery.
  695. IF cStatus = 'before' THEN iCurrentPos = iCurrentPos - 1.
  696. IF cStatus = 'after' THEN iCurrentPos = iCurrentPos + 1.
  697. iIndex = (iCurrentPos MOD iMaxRecords).
  698. IF iIndex = 0 THEN
  699. DO:
  700. iPage = iCurrentPos / iMaxRecords.
  701. iIndex = iMaxRecords - 1. // Java ist Index 0 der erste Satz
  702. END.
  703. ELSE
  704. DO:
  705. iPage = ((iCurrentPos - iIndex) / iMaxRecords) + 1.
  706. iIndex = iIndex - 1.
  707. END.
  708. IF (iPage * iMaxRecords) > iTotalRecords THEN iMaxRecords = iMaxRecords - ((iPage * iMaxRecords) - iTotalRecords).
  709. IF oJsonIdent:HAS('recordCount')
  710. THEN oJsonIdent:SET('recordCount', iMaxRecords).
  711. ELSE oJsonIdent:ADD('recordCount', iMaxRecords).
  712. IF oJsonIdent:HAS('page')
  713. THEN oJsonIdent:SET('page', iPage).
  714. ELSE oJsonIdent:ADD('page', iPage).
  715. IF oJsonIdent:HAS('index')
  716. THEN oJsonIdent:SET('index', iIndex).
  717. ELSE oJsonIdent:ADD('index', iIndex).
  718. IF oJsonIdent:HAS('totalRecords')
  719. THEN oJsonIdent:SET('totalRecords', iTotalRecords).
  720. ELSE oJsonIdent:ADD('totalRecords', iTotalRecords).
  721. // MESSAGE 'page =' iPage 'index =' iIndex 'totalRecords =' iTotalRecords 'Max Records =' iMaxRecords 'Current Pos =' iCurrentPos.
  722. // oJsonIdent:WriteFile('C:\TEMP\evaluatePageNumber_jsonIdent.json', TRUE).
  723. lRetVal = TRUE.
  724. RETURN lRetVal.
  725. END METHOD.
  726. /*------------------------------------------------------------------------------
  727. Purpose:
  728. Notes:
  729. ------------------------------------------------------------------------------*/
  730. METHOD PUBLIC VOID generateHash(
  731. INPUT ipAlgorithm AS CHARACTER,
  732. INPUT ipPhrase AS CHARACTER,
  733. INPUT ipKey AS CHARACTER,
  734. OUTPUT opERROR AS LOGICAL,
  735. OUTPUT opMESSAGE AS CHARACTER,
  736. OUTPUT opHash AS CHARACTER
  737. ):
  738. ASSIGN
  739. opERROR = FALSE
  740. opMessage = ''
  741. opHash = ''.
  742. IF ipPhrase = '' OR ipPhrase = ? THEN
  743. DO:
  744. ASSIGN
  745. opERROR = TRUE
  746. opMESSAGE = 'Input Error. Value not correct'.
  747. RETURN.
  748. END.
  749. opHash = HEX-ENCODE (MESSAGE-DIGEST (ipAlgorithm, ipPhrase, ipKey)).
  750. RETURN.
  751. END METHOD.
  752. /*------------------------------------------------------------------------------
  753. Purpose:
  754. Notes:
  755. ------------------------------------------------------------------------------*/
  756. METHOD PUBLIC VOID getActiveSelection(
  757. INPUT oJsonIdent AS JsonObject,
  758. INPUT cFileName AS CHARACTER ,
  759. OUTPUT cActiveSelection AS CHARACTER
  760. ):
  761. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  762. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  763. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  764. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO.
  765. ASSIGN
  766. ccompany = oJsonIdent:GetCharacter('company')
  767. cuser_name = oJsonIdent:GetCharacter('user_name')
  768. cProgram = oJsonIdent:GetCharacter('program').
  769. FIND userdata NO-LOCK
  770. WHERE userdata.user_name = cuser_name
  771. AND userdata.company = ccompany
  772. AND userdata.branch = '0000'
  773. AND userdata.record_type = 'active'
  774. AND userdata.section = cFileName
  775. AND userdata.key_type = cProgram NO-ERROR.
  776. IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
  777. ELSE cActiveSelection = ''.
  778. RELEASE userdata.
  779. RETURN.
  780. END METHOD.
  781. /*------------------------------------------------------------------------------
  782. Purpose:
  783. Notes:
  784. ------------------------------------------------------------------------------*/
  785. METHOD PUBLIC CHARACTER getBoxFieldText(
  786. INPUT oJsonIdent AS JsonObject,
  787. INPUT cField AS CHARACTER ,
  788. INPUT cFieldValue AS CHARACTER
  789. ):
  790. DEFINE VARIABLE cText AS CHARACTER NO-UNDO.
  791. FIND selections NO-LOCK
  792. WHERE selections.company = oJsonIdent:GetCharacter('company')
  793. AND selections.table_name = 'table'
  794. AND selections.user_name = oJsonIdent:GetCharacter('user_name')
  795. AND selections.language_id = oJsonIdent:GetInteger('language_id')
  796. AND selections.field_name = cField
  797. AND selections.field_value = cFieldValue NO-ERROR.
  798. cText = (IF AVAILABLE selections THEN selections.field_show ELSE '').
  799. RETURN cText.
  800. END METHOD.
  801. /*------------------------------------------------------------------------------
  802. Purpose:
  803. Notes:
  804. ------------------------------------------------------------------------------*/
  805. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphfield_name AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  806. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO.
  807. cfield_nameInhalt = ''.
  808. oplQuoter = FALSE.
  809. CASE iphfield_name:DATA-TYPE:
  810. WHEN 'CHARACTER' THEN
  811. ASSIGN
  812. cfield_nameInhalt = iphfield_name:BUFFER-VALUE(0)
  813. oplQuoter = TRUE.
  814. WHEN 'DECIMAL' OR
  815. WHEN 'INTEGER' THEN
  816. cfield_nameInhalt = TRIM(STRING(INTEGER(iphfield_name:BUFFER-VALUE),'>>>>>>>>9')).
  817. WHEN 'DATE' THEN
  818. cfield_nameInhalt = STRING(DATE(iphfield_name:BUFFER-VALUE),'99.99.9999').
  819. OTHERWISE
  820. cfield_nameInhalt = iphfield_name:BUFFER-VALUE.
  821. END CASE.
  822. IF cfield_nameInhalt = ? THEN cfield_nameInhalt = ''.
  823. RETURN cfield_nameInhalt.
  824. END METHOD.
  825. /*------------------------------------------------------------------------------
  826. Purpose:
  827. Notes:
  828. ------------------------------------------------------------------------------*/
  829. METHOD PUBLIC CHARACTER getCharDateTime(
  830. INPUT ipdDateTime AS DATETIME
  831. ):
  832. DEFINE VARIABLE cReturnValue AS CHARACTER NO-UNDO.
  833. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  834. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  835. dDateTime = ipdDateTime.
  836. cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS').
  837. cReturnValue =
  838. STRING(YEAR(dDateTime),'9999')
  839. + '-'
  840. + STRING(MONTH(dDateTime),'99')
  841. + '-'
  842. + STRING(DAY(dDateTime),'99')
  843. + SUBSTRING(cDateTime,11).
  844. RETURN cReturnValue.
  845. END METHOD.
  846. /*------------------------------------------------------------------------------
  847. Purpose:
  848. Notes:
  849. ------------------------------------------------------------------------------*/
  850. METHOD PUBLIC HANDLE getData(
  851. INPUT ipoJsonIdent AS JsonObject,
  852. INPUT ipcFileName AS CHARACTER,
  853. INPUT ipcWherePaires AS CHARACTER
  854. ):
  855. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  856. DEFINE VARIABLE cWherePaire AS CHARACTER NO-UNDO.
  857. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  858. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  859. DEFINE VARIABLE lWhere AS LOGICAL NO-UNDO INIT TRUE.
  860. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  861. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  862. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  863. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  864. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  865. lOK = FALSE.
  866. DO WHILE TRUE:
  867. FIND FIRST Ge_MIS._File NO-LOCK
  868. WHERE Ge_MIS._File._File-Name = ipcFileName NO-ERROR.
  869. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  870. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  871. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  872. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  873. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  874. lOK = TRUE.
  875. LEAVE.
  876. END.
  877. DO WHILE NOT lOK:
  878. FIND FIRST FRAMEWORK._File NO-LOCK
  879. WHERE FRAMEWORK._File._File-Name = ipcFileName NO-ERROR.
  880. IF NOT AVAILABLE FRAMEWORK._File THEN LEAVE.
  881. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  882. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  883. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  884. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  885. lOK = TRUE.
  886. LEAVE.
  887. END.
  888. CREATE BUFFER hBuffer FOR TABLE ipcFileName.
  889. CREATE TEMP-TABLE ttTable.
  890. ttTable:CREATE-LIKE (hBuffer).
  891. ttTable:TEMP-TABLE-PREPARE ('ttTable').
  892. httBuffer = ttTable:DEFAULT-BUFFER-HANDLE.
  893. DO i1 = 1 TO httBuffer:NUM-FIELDS:
  894. httBuffer:BUFFER-FIELD(i1):SERIALIZE-NAME = SUBSTITUTE('&1_&2', ipcFileName, hBuffer:BUFFER-FIELD(i1):NAME).
  895. END.
  896. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', ipcFileName).
  897. IF lCompany THEN
  898. DO:
  899. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  900. cWhere = cWhere + SUBSTITUTE('&1.company = &2 ', ipcFileName, QUOTER(ipoJsonIdent:GetCharacter('company'))).
  901. lWhere = FALSE.
  902. END.
  903. DO i1 = 1 TO NUM-ENTRIES(ipcWherePaires, ';'):
  904. cWherePaire = ENTRY(i1, ipcWherePaires, ';').
  905. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ) + cWherePaire + ' '.
  906. lWhere = FALSE.
  907. END.
  908. IF lActive THEN
  909. DO:
  910. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  911. cWhere = cWhere + SUBSTITUTE('&1.active = &2 ', ipcFileName, 'TRUE').
  912. lWhere = FALSE.
  913. END.
  914. MESSAGE 'cWhere = ' cWhere.
  915. CREATE QUERY hQuery.
  916. hQuery:SET-BUFFERS(hBuffer).
  917. hQuery:QUERY-PREPARE (cWhere).
  918. hQuery:QUERY-OPEN ().
  919. hQuery:GET-FIRST ().
  920. DO WHILE NOT hQuery:QUERY-OFF-END:
  921. httBuffer:BUFFER-CREATE ().
  922. httBuffer:BUFFER-COPY(hBuffer).
  923. hQuery:GET-NEXT ().
  924. END.
  925. hQuery:QUERY-CLOSE ().
  926. DELETE OBJECT hQuery NO-ERROR.
  927. DELETE OBJECT hBuffer NO-ERROR.
  928. RETURN httBuffer.
  929. END METHOD.
  930. /*------------------------------------------------------------------------------
  931. Purpose:
  932. Notes:
  933. ------------------------------------------------------------------------------*/
  934. METHOD PUBLIC VOID getErrorMessage(
  935. INPUT cFehlerNo AS CHARACTER,
  936. INPUT ilanguage_id AS INTEGER,
  937. INPUT cParam AS CHARACTER,
  938. OUTPUT cMessage AS LONGCHAR
  939. ):
  940. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  941. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  942. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  943. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  944. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  945. cParam = REPLACE(cParam, ',', ';').
  946. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  947. cParameter[ii] = ENTRY(ii, cParam, ';').
  948. IF ii = 5 THEN LEAVE.
  949. END.
  950. lcJsonString = '(&1) -> &2'.
  951. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  952. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  953. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  954. FIND messages NO-LOCK
  955. WHERE messages.message_no = iNo
  956. AND messages.language_id = ilanguage_id NO-ERROR.
  957. IF NOT AVAILABLE messages THEN
  958. DO:
  959. FIND FIRST messages NO-LOCK
  960. WHERE messages.message_no = iNo NO-ERROR.
  961. END.
  962. IF NOT AVAILABLE messages THEN
  963. DO:
  964. cString = cString
  965. + (IF cString = '' THEN '' ELSE ' ')
  966. + 'Systemfehler, Administrator benachrichtigen !'.
  967. END.
  968. ELSE
  969. DO:
  970. cString = cString
  971. + (IF cString = '' THEN '' ELSE ' ')
  972. + messages.message_text.
  973. END.
  974. END.
  975. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  976. cMessage = cString.
  977. RETURN.
  978. END METHOD.
  979. /*------------------------------------------------------------------------------
  980. Purpose:
  981. Notes:
  982. ------------------------------------------------------------------------------*/
  983. METHOD PUBLIC VOID getFileNameFromFormId(
  984. INPUT cFormId AS CHARACTER,
  985. OUTPUT cFileName AS CHARACTER,
  986. OUTPUT cDBName AS CHARACTER
  987. ):
  988. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  989. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  990. cFileName = ENTRY(1, cFormId, '_').
  991. ii = 1.
  992. DO WHILE TRUE:
  993. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  994. IF VALID-OBJECT(hBuffer) THEN LEAVE.
  995. ii = ii + 1.
  996. cFileName = cFileName
  997. + '_'
  998. + ENTRY(ii, cFormId, '_').
  999. END.
  1000. cDBName = hBuffer:DBNAME.
  1001. DELETE OBJECT hBuffer NO-ERROR.
  1002. RETURN.
  1003. END METHOD.
  1004. /*------------------------------------------------------------------------------
  1005. Purpose:
  1006. Notes:
  1007. ------------------------------------------------------------------------------*/
  1008. METHOD PUBLIC CHARACTER getHeader(
  1009. INPUT httInput AS HANDLE
  1010. ):
  1011. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  1012. FIND FIRST labeltexte NO-LOCK
  1013. WHERE labeltexte.company = httInput::company
  1014. AND labeltexte.user_name = httInput::user_name
  1015. AND labeltexte.program = httInput::program
  1016. AND labeltexte.field_name = 'KOPF'
  1017. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1018. IF NOT AVAILABLE labeltexte THEN
  1019. DO:
  1020. FIND FIRST labeltexte NO-LOCK
  1021. WHERE labeltexte.company = httInput::company
  1022. AND labeltexte.program = httInput::program
  1023. AND labeltexte.field_name = 'KOPF'
  1024. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1025. END.
  1026. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::program).
  1027. RETURN cHeader.
  1028. END METHOD.
  1029. /*------------------------------------------------------------------------------
  1030. Purpose:
  1031. Notes:
  1032. ------------------------------------------------------------------------------*/
  1033. METHOD PUBLIC LOGICAL getHeaderData(
  1034. INPUT poRequest AS IWebRequest ,
  1035. OUTPUT ccompany AS CHARACTER ,
  1036. OUTPUT cuser_name AS CHARACTER ,
  1037. OUTPUT cAnzeigeName AS CHARACTER ,
  1038. OUTPUT iLanguage_id AS INTEGER ,
  1039. OUTPUT cSessionToken AS CHARACTER ,
  1040. OUTPUT cFunction AS CHARACTER ,
  1041. OUTPUT oJsonIdent AS JsonObject
  1042. ):
  1043. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  1044. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1045. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1046. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  1047. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  1048. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  1049. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  1050. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  1051. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  1052. DEFINE VARIABLE cFilename AS CHARACTER NO-UNDO.
  1053. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1054. oHeader = poRequest:GetHeader('X-COMPANY').
  1055. ccompany = oHeader:VALUE.
  1056. oHeader = poRequest:GetHeader('X-USER-NAME').
  1057. cuser_name = oHeader:VALUE.
  1058. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  1059. cAnzeigeName = oHeader:VALUE.
  1060. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  1061. ilanguage_id = INTEGER(oHeader:VALUE).
  1062. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  1063. cSessionToken = oHeader:VALUE.
  1064. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  1065. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  1066. // MESSAGE 'cQueryYString =' cQueryString.
  1067. oJsonIdent = NEW JsonObject().
  1068. oJsonIdent:ADD('H_company' , ccompany ) NO-ERROR.
  1069. oJsonIdent:ADD('H_user_name' , cuser_name ) NO-ERROR.
  1070. oJsonIdent:ADD('H_language_id' , iLanguage_id ) NO-ERROR.
  1071. oJsonIdent:ADD('H_display_name', cAnzeigeName ) NO-ERROR.
  1072. oJsonIdent:ADD('sessionToken' , cSessionToken) NO-ERROR.
  1073. //
  1074. // Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
  1075. //
  1076. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  1077. cQueryPairs = ENTRY(ii, cQueryString, '&').
  1078. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  1079. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  1080. IF oJsonIdent:HAS(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  1081. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  1082. END.
  1083. IF NOT oJsonIdent:HAS('company' ) THEN oJsonIdent:ADD('company' , oJsonIdent:GetCharacter('H_company' )).
  1084. IF NOT oJsonIdent:HAS('user_name' ) THEN oJsonIdent:ADD('user_name' , oJsonIdent:GetCharacter('H_user_name' )).
  1085. IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetJsonText ('H_language_id')).
  1086. // language_id soll immer ein Interger-Wert sein
  1087. oJsonIdent:SET('language_id', INTEGER(oJsonIdent:GetJsonText('language_id'))).
  1088. IF NOT oJsonIdent:HAS('function') THEN MESSAGE 'getHeaderData ohne Function'.
  1089. IF oJsonIdent:HAS('formId') THEN
  1090. DO:
  1091. cFormId = oJsonIdent:GetCharacter('formId').
  1092. getFileNameFromFormId(
  1093. INPUT cFormId ,
  1094. OUTPUT cFileName ,
  1095. OUTPUT cDBName
  1096. ).
  1097. oJsonIdent:ADD('DBName' , cDBName).
  1098. oJsonIdent:ADD('file_name', cFileName).
  1099. // IF NOT oJsonIdent:HAS('file_name') THEN oJsonIdent:ADD('file_name', cFileName).
  1100. // cFileName = SUBSTITUTE ('C:\TEMP\oJsonIdent_getHeaderData_&1.log', cFormId).
  1101. // oJsonIdent:WriteFile(cFileName, TRUE).
  1102. FIND FIRST programs NO-LOCK
  1103. WHERE programs.FormId = cFormId NO-ERROR.
  1104. IF AVAILABLE programs THEN
  1105. DO:
  1106. oJsonIdent:ADD('class_name', programs.program_class).
  1107. cProgram = programs.program.
  1108. // MESSAGE 'programm gefunden mit FormId' cFormId.
  1109. END.
  1110. END.
  1111. ELSE
  1112. DO:
  1113. // MESSAGE 'getHeaderData ohne formid ********************************************************'.
  1114. END.
  1115. // MESSAGE 'createHeaderData -> FileName' cFileName.
  1116. ccompany = oJsonIdent:GetCharacter('company').
  1117. cuser_name = oJsonIdent:GetCharacter('user_name').
  1118. ilanguage_id = oJsonIdent:GetInteger ('language_id').
  1119. IF oJsonIdent:HAS('function') THEN cFunction = oJsonIdent:GetCharacter('function').
  1120. lRetVal = TRUE.
  1121. RETURN lRetVal.
  1122. END METHOD.
  1123. /*------------------------------------------------------------------------------
  1124. Purpose:
  1125. Notes:
  1126. ------------------------------------------------------------------------------*/
  1127. METHOD PUBLIC LOGICAL getKeyFields(
  1128. INPUT oJsonIdent AS JsonObject,
  1129. OUTPUT cKeyFields AS CHARACTER ,
  1130. OUTPUT cKeyValues AS CHARACTER
  1131. ):
  1132. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1133. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1134. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1135. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1136. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1137. DEFINE VARIABLE cDBFile AS CHARACTER NO-UNDO.
  1138. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  1139. DEFINE VARIABLE rFile AS RECID NO-UNDO.
  1140. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1141. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1142. DEFINE VARIABLE cValue AS LONGCHAR NO-UNDO.
  1143. DEFINE VARIABLE cDataType AS CHARACTER NO-UNDO.
  1144. DEFINE VARIABLE hFileBuff AS HANDLE NO-UNDO.
  1145. cFileName = oJsonIdent:GetCharacter('file_name').
  1146. cDBName = oJsonIdent:GetCharacter('DBName').
  1147. cDBFile = SUBSTITUTE('&1._File', cDBName).
  1148. CREATE BUFFER hFileBuff FOR TABLE cDBFile NO-ERROR.
  1149. cWhere = SUBSTITUTE('WHERE &1._File-Name = &2', cDBFile, QUOTER(cFileName)).
  1150. hFileBuff:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  1151. rFile = hFileBuff:RECID.
  1152. DELETE OBJECT hFileBuff NO-ERROR.
  1153. cKeyFields = ''.
  1154. cKeyValues = ''.
  1155. cFieldNames = oJsonIdent:getNames().
  1156. DO i1 = 1 TO EXTENT(cFieldNames):
  1157. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  1158. cKeyFields = cKeyFields
  1159. + (IF cKeyFields = '' THEN '' ELSE ';')
  1160. + REPLACE(cFieldNames[i1], 'keyfield_', '').
  1161. cValue = oJsonIdent:GetJsonText(cFieldNames[i1]).
  1162. cKeyValues = cKeyValues
  1163. + (IF cKeyValues = '' THEN '' ELSE CHR(01))
  1164. + cValue.
  1165. END.
  1166. cDBFile = SUBSTITUTE('&1._Field', cDBName).
  1167. CREATE BUFFER hFileBuff FOR TABLE cDBFile NO-ERROR.
  1168. // MESSAGE 'Buffer für Field = ' hFileBuff:NAME.
  1169. lOK = TRUE.
  1170. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  1171. cString = cFileName + '_'.
  1172. // MESSAGE 'replace String =' cString.
  1173. cFieldName = REPLACE(ENTRY(i1, cKeyFields, ';'), cString, '').
  1174. // MESSAGE 'FELDNAME =' cFieldName.
  1175. cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = &2 ', rFile, QUOTER(cFieldName)).
  1176. // MESSAGE 'cWhere bei _Field =' cWhere.
  1177. hFileBuff:FIND-FIRST(cWhere, NO-LOCK).
  1178. // MESSAGE hFileBuff::_Data-Type.
  1179. cDataType = hFileBuff::_Data-Type.
  1180. CASE cDataType:
  1181. WHEN 'character' THEN
  1182. ENTRY(i1, cKeyValues, CHR(01)) = ENTRY(i1, cKeyValues, CHR(01)).
  1183. WHEN 'logical' THEN
  1184. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1185. END CASE.
  1186. END.
  1187. DO WHILE NOT lOK:
  1188. FIND FIRST FRAMEWORK._Field NO-LOCK
  1189. WHERE FRAMEWORK._Field._Field-Name = cFieldname NO-ERROR.
  1190. IF NOT AVAILABLE FRAMEWORK._Field THEN
  1191. DO:
  1192. lOK = FALSE.
  1193. LEAVE.
  1194. END.
  1195. CASE FRAMEWORK._Field._Data-Type:
  1196. WHEN 'character' THEN
  1197. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1198. WHEN 'logical' THEN
  1199. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1200. END CASE.
  1201. LEAVE.
  1202. END.
  1203. lRetVal = TRUE.
  1204. RETURN lRetVal.
  1205. END METHOD.
  1206. /*------------------------------------------------------------------------------
  1207. Purpose:
  1208. Notes:
  1209. ------------------------------------------------------------------------------*/
  1210. METHOD PUBLIC CHARACTER getLogicalDBName(
  1211. INPUT ipcFilename AS CHARACTER
  1212. ):
  1213. DEFINE VARIABLE cLogicalDBName AS CHARACTER NO-UNDO.
  1214. DEFINE VARIABLE hDictBuffer AS HANDLE NO-UNDO.
  1215. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1216. cFileName = SUBSTITUTE('Ge_MIS.&1', ipcFilename) NO-ERROR.
  1217. CREATE BUFFER hDictBuffer FOR TABLE cFileName NO-ERROR.
  1218. cLogicalDBName = (IF VALID-HANDLE(hDictBuffer) THEN 'Ge_MIS' ELSE 'FRAMEWORK').
  1219. DELETE OBJECT hDictBuffer NO-ERROR.
  1220. RETURN cLogicalDBName.
  1221. END METHOD.
  1222. /*------------------------------------------------------------------------------
  1223. Purpose:
  1224. Notes:
  1225. ------------------------------------------------------------------------------*/
  1226. METHOD PUBLIC CHARACTER getProgramName(
  1227. INPUT oJsonIdent AS JsonObject,
  1228. INPUT cUsers AS CHARACTER ,
  1229. OUTPUT cFormUser AS CHARACTER ,
  1230. OUTPUT cFormColumns AS CHARACTER ,
  1231. INPUT-OUTPUT iItemsPerPage AS INTEGER ,
  1232. INPUT-OUTPUT cMaxHeight AS CHARACTER
  1233. ):
  1234. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1235. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  1236. DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
  1237. cProgram = ''.
  1238. ccompany = oJsonIdent:GetCharacter('company').
  1239. cFormId = oJsonIdent:GetCharacter('formId' ).
  1240. DO i1 = 1 TO NUM-ENTRIES(cUsers, ','):
  1241. cProgramUser = ENTRY(i1, cUsers).
  1242. FIND FIRST htmldokumente NO-LOCK
  1243. WHERE htmldokumente.company = ccompany
  1244. AND htmldokumente.user_name = cProgramUser
  1245. AND htmldokumente.FormId = cFormId NO-ERROR.
  1246. IF NOT AVAILABLE htmldokumente THEN NEXT.
  1247. ASSIGN
  1248. cProgram = htmldokumente.program
  1249. cFormUser = cProgramUser
  1250. iItemsPerPage = htmldokumente.itemsPerPage
  1251. cMaxHeight = htmldokumente.tableMaxHeight
  1252. cFormColumns = htmldokumente.formColumns.
  1253. LEAVE.
  1254. END.
  1255. RETURN cProgram.
  1256. END METHOD.
  1257. /*------------------------------------------------------------------------------
  1258. Purpose:
  1259. Notes:
  1260. ------------------------------------------------------------------------------*/
  1261. METHOD PUBLIC CHARACTER iso2date(
  1262. INPUT cIsoDate AS CHARACTER
  1263. ):
  1264. DEFINE VARIABLE cDate AS CHARACTER NO-UNDO.
  1265. IF cIsoDate = '' OR
  1266. cIsoDate = ? THEN RETURN cDate.
  1267. cDate = SUBSTITUTE('&1/&2/&3', ENTRY(2, cIsoDate, '-'), ENTRY(3, cIsoDate, '-'), ENTRY(1, cIsoDate, '-') ).
  1268. RETURN cDate.
  1269. END METHOD.
  1270. /*------------------------------------------------------------------------------
  1271. Purpose:
  1272. Notes:
  1273. ------------------------------------------------------------------------------*/
  1274. METHOD PUBLIC VOID readLastcWhere(
  1275. INPUT oJsonIdent AS JsonObject,
  1276. INPUT cFileName AS CHARACTER ,
  1277. OUTPUT cWhere AS CHARACTER
  1278. ):
  1279. FIND userdata
  1280. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1281. AND userdata.company = oJsonIdent:GetCharacter('company')
  1282. AND userdata.branch = '0000'
  1283. AND userdata.record_type = 'where'
  1284. AND userdata.section = cFileName
  1285. AND userdata.key_type = 'last' NO-ERROR.
  1286. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1287. RELEASE userdata.
  1288. RETURN.
  1289. END METHOD.
  1290. /*------------------------------------------------------------------------------
  1291. Purpose:
  1292. Notes:
  1293. ------------------------------------------------------------------------------*/
  1294. METHOD PUBLIC LOGICAL readLastRecord(
  1295. INPUT oJsonIdent AS JsonObject,
  1296. OUTPUT cWhere AS CHARACTER
  1297. ):
  1298. FIND userdata NO-LOCK
  1299. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1300. AND userdata.company = oJsonIdent:GetCharacter('company')
  1301. AND userdata.branch = '0000'
  1302. AND userdata.record_type = 'lastrecord'
  1303. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1304. AND userdata.key_type = '' NO-ERROR.
  1305. IF NOT AVAILABLE userdata THEN RETURN FALSE.
  1306. cWhere = userdata.cfield_1.
  1307. RELEASE userdata.
  1308. RETURN TRUE.
  1309. END METHOD.
  1310. /*------------------------------------------------------------------------------
  1311. Purpose:
  1312. Notes:
  1313. ------------------------------------------------------------------------------*/
  1314. METHOD PUBLIC VOID readSortFields(
  1315. INPUT oJsonIdent AS JsonObject,
  1316. INPUT cFileName AS CHARACTER ,
  1317. OUTPUT cSortField AS CHARACTER ,
  1318. OUTPUT cDirection AS CHARACTER
  1319. ):
  1320. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1321. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1322. cSortField = ''.
  1323. cDirection = ''.
  1324. cCompany = oJsonIdent:GetCharacter('company' ).
  1325. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1326. FIND userdata NO-LOCK
  1327. WHERE userdata.user_name = cUser_Name
  1328. AND userdata.company = cCompany
  1329. AND userdata.branch = '0000'
  1330. AND userdata.record_type = 'sortField'
  1331. AND userdata.section = cFileName
  1332. AND userdata.key_type = '' NO-ERROR.
  1333. IF AVAILABLE userdata THEN
  1334. ASSIGN
  1335. cSortField = userdata.cfield_1
  1336. cDirection = (IF userdata.cfield_2 BEGINS 'asc' THEN '' ELSE userdata.cfield_2).
  1337. RETURN.
  1338. END METHOD.
  1339. /*------------------------------------------------------------------------------
  1340. Purpose:
  1341. Notes:
  1342. ------------------------------------------------------------------------------*/
  1343. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  1344. INPUT ipctable AS CHARACTER
  1345. ):
  1346. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  1347. DEFINE VARIABLE cDBNames AS CHARACTER NO-UNDO INIT 'Ge_MIS;FRAMEWORK'.
  1348. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1349. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1350. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1351. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  1352. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1353. DO ix = 1 TO NUM-ENTRIES(cDBNames, ';'):
  1354. cDBName = ENTRY(ix, cDBNames, ';').
  1355. cFileName = SUBSTITUTE('&1.&2', cDBName, ipcTable).
  1356. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  1357. IF NOT ERROR-STATUS:ERROR AND
  1358. VALID-HANDLE(hBuffer) THEN LEAVE.
  1359. DELETE OBJECT hBuffer NO-ERROR.
  1360. cDBName = ''.
  1361. END.
  1362. DELETE OBJECT hBuffer NO-ERROR.
  1363. cFields = ''.
  1364. CASE cDBName:
  1365. WHEN 'Ge_MIS' THEN
  1366. DO:
  1367. FIND FIRST Ge_MIS._File NO-LOCK
  1368. WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
  1369. FOR EACH Ge_MIS._Index-Field NO-LOCK
  1370. WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
  1371. FIRST Ge_MIS._Field NO-LOCK
  1372. WHERE RECID(Ge_MIS._Field) = Ge_MIS._index-Field._Field-recid
  1373. BY Ge_MIS._Index-Field._Index-Seq:
  1374. cFields = cFields
  1375. + (IF cFields = '' THEN '' ELSE ';')
  1376. + Ge_MIS._Field._Field-Name.
  1377. END.
  1378. END.
  1379. WHEN 'FRAMEWORK' THEN
  1380. DO:
  1381. FIND FIRST FRAMEWORK._File NO-LOCK
  1382. WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
  1383. FOR EACH FRAMEWORK._Index-Field NO-LOCK
  1384. WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
  1385. FIRST FRAMEWORK._Field NO-LOCK
  1386. WHERE RECID(FRAMEWORK._Field) = FRAMEWORK._index-Field._Field-recid
  1387. BY FRAMEWORK._Index-Field._Index-Seq:
  1388. cFields = cFields
  1389. + (IF cFields = '' THEN '' ELSE ';')
  1390. + FRAMEWORK._Field._Field-Name.
  1391. END.
  1392. END.
  1393. END CASE.
  1394. RETURN cFields.
  1395. END METHOD.
  1396. /*------------------------------------------------------------------------------
  1397. Purpose:
  1398. Notes:
  1399. ------------------------------------------------------------------------------*/
  1400. METHOD PUBLIC CHARACTER getSysUser( ):
  1401. DEFINE VARIABLE mBen AS MEMPTR NO-UNDO.
  1402. DEFINE VARIABLE iLeng AS INTEGER INIT 100 NO-UNDO.
  1403. DEFINE VARIABLE fok AS INTEGER NO-UNDO.
  1404. DEFINE VARIABLE cBen AS CHARACTER NO-UNDO.
  1405. SET-SIZE(mBen) = iLeng.
  1406. RUN GetUserNameA( OUTPUT mBen, INPUT-OUTPUT iLeng, OUTPUT fok ) NO-ERROR.
  1407. ASSIGN
  1408. cBen = GET-STRING(mBen,1) NO-ERROR.
  1409. SET-SIZE(mBen) = 0.
  1410. RETURN cBen.
  1411. END METHOD.
  1412. /*------------------------------------------------------------------------------
  1413. Purpose:
  1414. Notes:
  1415. ------------------------------------------------------------------------------*/
  1416. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  1417. INPUT oJsonObject AS JsonObject,
  1418. INPUT hbttInput AS HANDLE,
  1419. INPUT-OUTPUT hbttTemp AS HANDLE
  1420. ):
  1421. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  1422. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  1423. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  1424. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  1425. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  1426. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1427. jsonttTemp = NEW JsonObject().
  1428. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  1429. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  1430. hbttTemp:FIND-FIRST ().
  1431. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  1432. // MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  1433. lRetVal = TRUE.
  1434. RETURN lRetVal.
  1435. END METHOD.
  1436. /*------------------------------------------------------------------------------
  1437. Purpose:
  1438. Notes:
  1439. ------------------------------------------------------------------------------*/
  1440. METHOD PUBLIC VOID readPosition(
  1441. INPUT oJsonIdent AS JsonObject ,
  1442. INPUT cFileName AS CHARACTER ,
  1443. OUTPUT iCurrentPosition AS INTEGER ,
  1444. OUTPUT iStartPage AS INTEGER ,
  1445. OUTPUT iMaxRecords AS INTEGER
  1446. ):
  1447. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1448. FIND userdata
  1449. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1450. AND userdata.company = oJsonIdent:GetCharacter('company')
  1451. AND userdata.branch = '0000'
  1452. AND userdata.record_type = 'position'
  1453. AND userdata.section = cFileName
  1454. AND userdata.key_type = '' NO-ERROR.
  1455. IF AVAILABLE userdata THEN
  1456. DO:
  1457. ASSIGN
  1458. iCurrentPosition = userdata.ifield_1
  1459. iStartPage = userdata.ifield_2
  1460. iMaxRecords = userdata.ifield_3.
  1461. END.
  1462. ELSE
  1463. DO:
  1464. ASSIGN
  1465. iCurrentPosition = 1
  1466. iStartPage = 1
  1467. iMaxRecords = 25.
  1468. END.
  1469. RELEASE userdata.
  1470. LEAVE.
  1471. END.
  1472. RETURN.
  1473. END METHOD.
  1474. /*------------------------------------------------------------------------------
  1475. Purpose:
  1476. Notes:
  1477. ------------------------------------------------------------------------------*/
  1478. METHOD PUBLIC VOID readStartcWhere(
  1479. INPUT oJsonIdent AS JsonObject,
  1480. INPUT cFileName AS CHARACTER ,
  1481. OUTPUT cWhere AS CHARACTER
  1482. ):
  1483. FIND userdata
  1484. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1485. AND userdata.company = oJsonIdent:GetCharacter('company')
  1486. AND userdata.branch = '0000'
  1487. AND userdata.record_type = 'where'
  1488. AND userdata.section = cFileName
  1489. AND userdata.key_type = 'start' NO-ERROR.
  1490. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1491. RELEASE userdata.
  1492. RETURN.
  1493. END METHOD.
  1494. /*------------------------------------------------------------------------------
  1495. Purpose:
  1496. Notes:
  1497. ------------------------------------------------------------------------------*/
  1498. METHOD PUBLIC VOID setActiveSelection(
  1499. INPUT oJsonIdent AS JsonObject,
  1500. INPUT cFileName AS CHARACTER ,
  1501. INPUT cActiveSelection AS CHARACTER
  1502. ):
  1503. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1504. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  1505. ASSIGN
  1506. ccompany = oJsonIdent:GetCharacter('company')
  1507. cuser_name = oJsonIdent:GetCharacter('user_name')
  1508. cProgram = oJsonIdent:GetCharacter('program').
  1509. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1510. FIND userdata
  1511. WHERE userdata.user_name = cuser_name
  1512. AND userdata.company = ccompany
  1513. AND userdata.branch = '0000'
  1514. AND userdata.record_type = 'active'
  1515. AND userdata.section = cFileName
  1516. AND userdata.key_type = cProgram NO-ERROR.
  1517. IF NOT AVAILABLE userdata THEN
  1518. DO:
  1519. CREATE userdata.
  1520. ASSIGN
  1521. userdata.user_name = cuser_name
  1522. userdata.company = ccompany
  1523. userdata.branch = '0000'
  1524. userdata.record_type = 'active'
  1525. userdata.section = cFileName
  1526. userdata.key_type = cProgram
  1527. userdata.creation_date = NOW NO-ERROR.
  1528. END.
  1529. ELSE
  1530. DO:
  1531. userdata.access_date = NOW.
  1532. END.
  1533. userdata.cfield_1 = cActiveSelection.
  1534. RELEASE userdata.
  1535. LEAVE.
  1536. END.
  1537. RETURN.
  1538. END METHOD.
  1539. /*------------------------------------------------------------------------------
  1540. Purpose:
  1541. Notes:
  1542. ------------------------------------------------------------------------------*/
  1543. METHOD PUBLIC LONGCHAR trimStructure(
  1544. INPUT oJsonInput AS JsonObject
  1545. ):
  1546. DEFINE VARIABLE lcResult AS LONGCHAR NO-UNDO.
  1547. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1548. lcResult = TRIM(oJsonInput:GetJsonText()).
  1549. lcResult = SUBSTRING(lcResult,02).
  1550. ii = LENGTH(lcResult) - 1.
  1551. lcResult = SUBSTRING(lcResult,01, ii).
  1552. RETURN lcResult.
  1553. END METHOD.
  1554. /*------------------------------------------------------------------------------
  1555. Purpose:
  1556. Notes:
  1557. ------------------------------------------------------------------------------*/
  1558. METHOD PUBLIC VOID writeLastcWhere(
  1559. INPUT oJsonIdent AS JsonObject,
  1560. INPUT cFileName AS CHARACTER ,
  1561. INPUT cWhere AS CHARACTER
  1562. ):
  1563. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1564. FIND userdata
  1565. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1566. AND userdata.company = oJsonIdent:GetCharacter('company')
  1567. AND userdata.branch = '0000'
  1568. AND userdata.record_type = 'where'
  1569. AND userdata.section = cFileName
  1570. AND userdata.key_type = 'last' NO-ERROR.
  1571. IF NOT AVAILABLE userdata THEN
  1572. DO:
  1573. CREATE userdata.
  1574. ASSIGN
  1575. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1576. userdata.company = oJsonIdent:GetCharacter('company')
  1577. userdata.branch = '0000'
  1578. userdata.record_type = 'where'
  1579. userdata.section = cFileName
  1580. userdata.key_type = 'last' NO-ERROR.
  1581. END.
  1582. ASSIGN
  1583. userdata.cfield_1 = cWhere.
  1584. RELEASE userdata.
  1585. LEAVE.
  1586. END.
  1587. RETURN.
  1588. END METHOD.
  1589. /*------------------------------------------------------------------------------
  1590. Purpose:
  1591. Notes:
  1592. ------------------------------------------------------------------------------*/
  1593. METHOD PUBLIC LOGICAL writeLastRecord(
  1594. INPUT oJsonIdent AS JsonObject,
  1595. INPUT cWhere AS CHARACTER
  1596. ):
  1597. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1598. FIND userdata
  1599. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1600. AND userdata.company = oJsonIdent:GetCharacter('company')
  1601. AND userdata.branch = '0000'
  1602. AND userdata.record_type = 'lastrecord'
  1603. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1604. AND userdata.key_type = '' NO-ERROR.
  1605. IF NOT AVAILABLE userdata THEN
  1606. DO:
  1607. CREATE userdata.
  1608. ASSIGN
  1609. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1610. userdata.company = oJsonIdent:GetCharacter('company')
  1611. userdata.branch = '0000'
  1612. userdata.record_type = 'lastrecord'
  1613. userdata.section = oJsonIdent:GetCharacter('file_name')
  1614. userdata.key_type = ''
  1615. userdata.creation_date = NOW NO-ERROR.
  1616. END.
  1617. ASSIGN
  1618. userdata.cfield_1 = cWhere
  1619. userdata.access_date = NOW.
  1620. RELEASE userdata.
  1621. LEAVE.
  1622. END.
  1623. RETURN TRUE.
  1624. END METHOD.
  1625. /*------------------------------------------------------------------------------
  1626. Purpose:
  1627. Notes:
  1628. ------------------------------------------------------------------------------*/
  1629. METHOD PUBLIC VOID writePosition(
  1630. INPUT oJsonIdent AS JsonObject,
  1631. INPUT cFileName AS CHARACTER ,
  1632. INPUT iCurrentPosition AS INTEGER ,
  1633. INPUT iStartPage AS INTEGER ,
  1634. INPUT iMaxRecords AS INTEGER
  1635. ):
  1636. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1637. FIND userdata
  1638. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1639. AND userdata.company = oJsonIdent:GetCharacter('company')
  1640. AND userdata.branch = '0000'
  1641. AND userdata.record_type = 'position'
  1642. AND userdata.section = cFileName
  1643. AND userdata.key_type = '' NO-ERROR.
  1644. IF NOT AVAILABLE userdata THEN
  1645. DO:
  1646. CREATE userdata.
  1647. ASSIGN
  1648. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1649. userdata.company = oJsonIdent:GetCharacter('company')
  1650. userdata.branch = '0000'
  1651. userdata.record_type = 'position'
  1652. userdata.section = cFileName
  1653. userdata.key_type = '' NO-ERROR.
  1654. END.
  1655. ASSIGN
  1656. userdata.ifield_1 = iCurrentPosition
  1657. userdata.iField_2 = iStartPage
  1658. userdata.ifield_3 = iMaxRecords.
  1659. RELEASE userdata.
  1660. LEAVE.
  1661. END.
  1662. RETURN.
  1663. END METHOD.
  1664. /*------------------------------------------------------------------------------
  1665. Purpose:
  1666. Notes:
  1667. ------------------------------------------------------------------------------*/
  1668. METHOD PUBLIC VOID writeSortfields(
  1669. INPUT oJsonIdent AS JsonObject,
  1670. INPUT cFileName AS CHARACTER ,
  1671. INPUT cSortField AS CHARACTER ,
  1672. INPUT cDirection AS CHARACTER
  1673. ):
  1674. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1675. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1676. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1677. cCompany = oJsonIdent:GetCharacter('company' ).
  1678. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1679. cReplace = SUBSTITUTE('&1_', cFileName).
  1680. cSortField = REPLACE(cSortField, cReplace, '').
  1681. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1682. FIND userdata
  1683. WHERE userdata.user_name = cUser_Name
  1684. AND userdata.company = cCompany
  1685. AND userdata.branch = '0000'
  1686. AND userdata.record_type = 'sortField'
  1687. AND userdata.section = cFileName
  1688. AND userdata.key_type = '' NO-ERROR.
  1689. IF NOT AVAILABLE userdata THEN
  1690. DO:
  1691. CREATE userdata.
  1692. ASSIGN
  1693. userdata.user_name = cUser_Name
  1694. userdata.company = cCompany
  1695. userdata.branch = '0000'
  1696. userdata.record_type = 'sortField'
  1697. userdata.section = cFileName
  1698. userdata.key_type = '' NO-ERROR.
  1699. END.
  1700. ASSIGN
  1701. userdata.cfield_1 = cSortfield
  1702. userdata.cfield_2 = cDirection.
  1703. RELEASE userdata.
  1704. LEAVE.
  1705. END.
  1706. RETURN.
  1707. END METHOD.
  1708. /*------------------------------------------------------------------------------
  1709. Purpose:
  1710. Notes:
  1711. ------------------------------------------------------------------------------*/
  1712. METHOD PUBLIC VOID writeStartcWhere(
  1713. INPUT oJsonIdent AS JsonObject,
  1714. INPUT cFileName AS CHARACTER ,
  1715. INPUT cWhere AS CHARACTER
  1716. ):
  1717. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1718. FIND userdata
  1719. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1720. AND userdata.company = oJsonIdent:GetCharacter('company')
  1721. AND userdata.branch = '0000'
  1722. AND userdata.record_type = 'where'
  1723. AND userdata.section = cFileName
  1724. AND userdata.key_type = 'start' NO-ERROR.
  1725. IF NOT AVAILABLE userdata THEN
  1726. DO:
  1727. CREATE userdata.
  1728. ASSIGN
  1729. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1730. userdata.company = oJsonIdent:GetCharacter('company')
  1731. userdata.branch = '0000'
  1732. userdata.record_type = 'where'
  1733. userdata.section = cFileName
  1734. userdata.key_type = 'start' NO-ERROR.
  1735. END.
  1736. ASSIGN
  1737. userdata.cfield_1 = cWhere.
  1738. RELEASE userdata.
  1739. LEAVE.
  1740. END.
  1741. RETURN.
  1742. END METHOD.
  1743. /*------------------------------------------------------------------------------
  1744. Purpose:
  1745. Notes:
  1746. ------------------------------------------------------------------------------*/
  1747. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  1748. /* MESSAGE 'Destructor utilitiesHandler '.*/
  1749. /* DELETE OBJECT hQuery NO-ERROR. */
  1750. /* DELETE OBJECT hBuffer NO-ERROR. */
  1751. END DESTRUCTOR.
  1752. END CLASS.