utilitiesHandler.cls 86 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269
  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. USING OpenEdge.DataAdmin.DataAccess.UserData FROM PROPATH.
  13. CLASS utilities.utilitiesHandler:
  14. PROCEDURE GetUserNameA EXTERNAL "advapi32.dll":
  15. DEFINE OUTPUT PARAMETER lpUserName AS MEMPTR.
  16. DEFINE INPUT-OUTPUT PARAMETER nChars AS LONG.
  17. DEFINE RETURN PARAMETER bool AS SHORT.
  18. END PROCEDURE.
  19. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  20. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  21. DEFINE VARIABLE cProgramm AS CHARACTER NO-UNDO.
  22. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  23. DEFINE TEMP-TABLE ttBrowserKo LIKE browser_ko.
  24. DEFINE TEMP-TABLE ttViewerKo LIKE viewer_ko.
  25. DEFINE TEMP-TABLE ttExternefield_nameer NO-UNDO
  26. FIELD ctable AS CHARACTER
  27. FIELD hBuffer AS HANDLE
  28. FIELD cKeyfield_nameer AS CHARACTER
  29. FIELD cWhere AS CHARACTER
  30. FIELD cfield_nameer AS CHARACTER
  31. FIELD cDataType AS CHARACTER
  32. .
  33. DEFINE TEMP-TABLE twebmenu
  34. SERIALIZE-NAME 'menuItems'
  35. FIELD level1 AS INTEGER SERIALIZE-NAME 'level1'
  36. FIELD level2 AS INTEGER SERIALIZE-NAME 'level2'
  37. FIELD level3 AS INTEGER SERIALIZE-NAME 'level3'
  38. FIELD menu_title AS CHARACTER SERIALIZE-NAME 'menu_title'
  39. FIELD menu_link AS CHARACTER SERIALIZE-NAME 'menu_link'
  40. .
  41. /*------------------------------------------------------------------------------
  42. Purpose:
  43. Notes:
  44. ------------------------------------------------------------------------------*/
  45. METHOD PUBLIC HANDLE createExterneFieldName(
  46. INPUT ipctable AS CHARACTER ,
  47. INPUT ipcfield_name AS CHARACTER ,
  48. INPUT ipcDatatype AS CHARACTER ,
  49. INPUT iphttInput AS HANDLE
  50. ):
  51. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  52. DEFINE VARIABLE cKeyfield_name AS CHARACTER NO-UNDO.
  53. DEFINE VARIABLE cKeyValue AS CHARACTER NO-UNDO.
  54. FIND FIRST ttExternefield_nameer
  55. WHERE ttExternefield_nameer.ctable = ipctable NO-ERROR.
  56. DO WHILE TRUE:
  57. IF AVAILABLE ttExternefield_nameer THEN LEAVE.
  58. FIND _File NO-LOCK WHERE _File._File-name = ipctable NO-ERROR.
  59. IF NOT AVAILABLE _File THEN RETURN hBuffer.
  60. FIND FIRST _Field NO-LOCK OF _File
  61. WHERE _Field._Field-Name = ipcfield_name NO-ERROR.
  62. IF NOT AVAILABLE _Field THEN RETURN hBuffer.
  63. CREATE BUFFER hBuffer FOR TABLE ipctable.
  64. CREATE ttExternefield_nameer.
  65. ASSIGN
  66. ttExternefield_nameer.ctable = ipctable
  67. ttExternefield_nameer.hBuffer = hBuffer.
  68. FIND FIRST _Index WHERE RECID(_Index) = _File._Prime-Index NO-LOCK.
  69. FOR EACH _Index-Field
  70. WHERE _Index-Field._Index-Recid = RECID(_Index):
  71. FIND _Field WHERE RECID(_Field) = _Index-Field._Field-Recid.
  72. cKeyfield_name = _Field._Field-Name.
  73. cKeyValue = ''.
  74. CASE cKeyfield_name:
  75. WHEN 'company' OR
  76. WHEN 'Mandant' OR
  77. WHEN 'Firma' THEN
  78. DO:
  79. cKeyValue = QUOTER(iphttInput::company).
  80. END.
  81. WHEN 'language_id' THEN
  82. DO:
  83. cKeyValue = iphttInput::language_id.
  84. END.
  85. WHEN 'user_name' THEN
  86. DO:
  87. cKeyValue = iphttInput::user_name.
  88. END.
  89. END CASE.
  90. IF cKeyValue <> '' THEN
  91. DO:
  92. CASE ipcDatatype:
  93. WHEN 'character' THEN
  94. cKeyValue = QUOTER(cKeyValue).
  95. END CASE.
  96. ttExternefield_nameer.cWhere = ttExternefield_nameer.cWhere
  97. + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
  98. + SUBSTITUTE('&1.&2 = &3':U, ipctable, cKeyfield_name, cKeyValue).
  99. NEXT.
  100. END.
  101. ttExternefield_nameer.cKeyfield_nameer = ttExternefield_nameer.cKeyfield_nameer
  102. + (IF ttExternefield_nameer.cKeyfield_nameer = '' THEN '' ELSE ';')
  103. + cKeyfield_name.
  104. END.
  105. IF LOOKUP(ipcfield_name, ttExternefield_nameer.cfield_nameer, ';') > 0 THEN NEXT.
  106. ttExternefield_nameer.cfield_nameer = ttExternefield_nameer.cfield_nameer
  107. + (IF ttExternefield_nameer.cfield_nameer = '' THEN '' ELSE ';')
  108. + ipcfield_name.
  109. ttExternefield_nameer.cDataType = ttExternefield_nameer.cDataType
  110. + (IF ttExternefield_nameer.cDataType = '' THEN '' ELSE ';')
  111. + ipcfield_name.
  112. END.
  113. // DELETE OBJECT hBuffer NO-ERROR.
  114. RETURN hBuffer.
  115. END METHOD.
  116. /*------------------------------------------------------------------------------
  117. Purpose:
  118. Notes:
  119. ------------------------------------------------------------------------------*/
  120. METHOD PUBLIC LOGICAL createQuery(
  121. INPUT httInput AS HANDLE,
  122. INPUT httBrowserKo AS HANDLE,
  123. OUTPUT hQuery AS HANDLE,
  124. OUTPUT hBuffer AS HANDLE
  125. ).
  126. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  127. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  128. DEFINE VARIABLE cAnd AS CHARACTER NO-UNDO INIT 'WHERE'.
  129. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  130. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  131. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  132. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  133. DEFINE VARIABLE iModulo AS INTEGER NO-UNDO.
  134. ctable = httInput::table_name.
  135. cSortField = httBrowserKo::sortfield.
  136. cDirection = ''.
  137. IF cSortField <> '' THEN
  138. DO:
  139. IF NUM-ENTRIES(cSortField, ':') > 1 THEN
  140. DO:
  141. cDirection = ENTRY(2, cSortField, ':').
  142. cSortField = ENTRY(1, cSortField, ':').
  143. END.
  144. IF cDirection = '' THEN cDirection = 'ASCENDING'.
  145. END.
  146. CREATE QUERY hQuery.
  147. CREATE BUFFER hBuffer FOR TABLE ctable.
  148. hQuery:SET-BUFFERS (hBuffer).
  149. IF httInput::action = 'last' THEN
  150. DO:
  151. cWhere = SUBSTITUTE('PRESELECT EACH &1 NO-LOCK ', httInput::table_name).
  152. IF httBrowserKo::lmandant THEN
  153. DO:
  154. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, httInput::table_name, httInput::company).
  155. END.
  156. hQuery:QUERY-PREPARE (cWhere).
  157. hQuery:QUERY-OPEN ().
  158. iAnzRec = hQuery:NUM-RESULTS.
  159. iModulo = iAnzRec MOD httBrowserKo::pagesize.
  160. IF iModulo > 0 THEN httBrowserKo::actualpage = (iAnzRec - (iAnzRec MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize.
  161. ELSE httBrowserKo::actualpage = (iAnzRec / httBrowserKo::pagesize) - 1.
  162. hQuery:QUERY-CLOSE ().
  163. END.
  164. i1 = 0.
  165. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', httInput::table_name).
  166. IF httBrowserKo::lmandant THEN
  167. DO:
  168. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, httInput::table_name, httInput::company).
  169. cAnd = 'AND'.
  170. END.
  171. IF cDirection = 'ASCENDING' THEN cDirection = ''.
  172. IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
  173. MESSAGE 'cWhere-Statement = ' cWhere.
  174. hQuery:QUERY-PREPARE (cWhere).
  175. lRetVal = TRUE.
  176. RETURN lRetVal.
  177. END METHOD.
  178. /*------------------------------------------------------------------------------
  179. Purpose:
  180. Notes:
  181. ------------------------------------------------------------------------------*/
  182. METHOD PUBLIC LOGICAL createSearchQuery(
  183. INPUT httInput AS HANDLE,
  184. INPUT httBrowserKo AS HANDLE,
  185. OUTPUT hQuery AS HANDLE,
  186. OUTPUT hBuffer AS HANDLE
  187. ).
  188. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  189. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  190. DEFINE VARIABLE cAnd AS CHARACTER NO-UNDO INIT 'WHERE'.
  191. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  192. DEFINE VARIABLE cSuchfield_name AS CHARACTER NO-UNDO.
  193. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  194. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  195. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  196. DEFINE VARIABLE lcWortIndex AS LONGCHAR NO-UNDO.
  197. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  198. DEFINE VARIABLE ifield_nameer AS INTEGER NO-UNDO.
  199. DEFINE VARIABLE iFound AS INTEGER NO-UNDO.
  200. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  201. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  202. DEFINE VARIABLE httTemp AS HANDLE NO-UNDO.
  203. DEFINE VARIABLE hbtable AS HANDLE NO-UNDO.
  204. DEFINE VARIABLE hqtable AS HANDLE NO-UNDO.
  205. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  206. DEFINE VARIABLE hWortIndex AS HANDLE NO-UNDO.
  207. DEFINE VARIABLE hSuchfield_name AS HANDLE NO-UNDO.
  208. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  209. DEFINE VARIABLE hfield_nametable AS HANDLE NO-UNDO EXTENT 10.
  210. DEFINE VARIABLE cInhalttable AS CHARACTER NO-UNDO EXTENT 10.
  211. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  212. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  213. DEFINE VARIABLE iy AS INTEGER NO-UNDO.
  214. DEFINE VARIABLE lQuoter AS LOGICAL NO-UNDO.
  215. ctable = httInput::table_name.
  216. cSuchfield_name = httInput::suchfield_name.
  217. cSortField = httBrowserKo::sortfield.
  218. cDirection = ''.
  219. IF cSortField <> '' THEN
  220. DO:
  221. IF NUM-ENTRIES(cSortField, ':') > 1 THEN
  222. DO:
  223. cDirection = ENTRY(2, cSortField, ':').
  224. cSortField = ENTRY(1, cSortField, ':').
  225. END.
  226. IF cDirection = '' THEN cDirection = 'ASCENDING'.
  227. END.
  228. MESSAGE 'Suchfield_name = ' cSuchfield_name ' sortfield = ' cSortField ' Richtung = ' cDirection.
  229. CREATE TEMP-TABLE httTemp.
  230. httTemp:CREATE-LIKE (ctable).
  231. httTemp:ADD-NEW-FIELD ('ident', 'CHARACTER').
  232. httTemp:TEMP-TABLE-PREPARE('ttTemp').
  233. hBuffer = httTemp:DEFAULT-BUFFER-HANDLE.
  234. CREATE QUERY hqtable.
  235. CREATE BUFFER hbtable FOR TABLE ctable.
  236. hqtable:SET-BUFFERS ( hbtable ).
  237. hWortIndex = hbtable:BUFFER-FIELD('WortIndex') NO-ERROR.
  238. ifield_nameer = NUM-ENTRIES(cSuchfield_name, ' ').
  239. ASSIGN
  240. hfield_nametable = ?
  241. cInhalttable = ''
  242. ix = 0.
  243. IF NUM-ENTRIES(cSuchfield_name, '=') > 1 THEN
  244. DO:
  245. DO ii = 1 TO NUM-ENTRIES(cSuchfield_name, ' '):
  246. cString = ENTRY(ii, cSuchfield_name, ' ').
  247. IF NUM-ENTRIES(cString, '=') > 1 THEN
  248. DO:
  249. cfield_name = ENTRY(1, cString, '=').
  250. hSuchfield_name = hbtable:BUFFER-FIELD(cfield_name) NO-ERROR.
  251. IF NOT VALID-HANDLE(hSuchfield_name) THEN NEXT.
  252. ix = ix + 1.
  253. hfield_nametable [ix] = hSuchfield_name.
  254. cInhalttable[ix] = ENTRY(2, cString, '=').
  255. NEXT.
  256. END.
  257. IF NOT VALID-HANDLE(hSuchfield_name) THEN NEXT.
  258. cInhalttable[ix] = cInhalttable[ix] + ',' + cString.
  259. END.
  260. END.
  261. cWhere = SUBSTITUTE('PRESELECT EACH &1 NO-LOCK ', ctable).
  262. IF httBrowserKo::lmandant THEN
  263. DO:
  264. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, ctable, httInput::company).
  265. cAnd = 'AND'.
  266. END.
  267. MESSAGE 'cWhere beim Suchen ' cWhere.
  268. hqtable:QUERY-PREPARE (cWhere).
  269. hqtable:QUERY-OPEN ().
  270. NEXTDATENSATZ:
  271. DO WHILE TRUE:
  272. hqtable:GET-NEXT() NO-ERROR.
  273. IF hqtable:QUERY-OFF-END THEN LEAVE.
  274. lcwortindex = ''.
  275. rRecid = hbtable:RECID.
  276. DO WHILE ix > 0:
  277. MESSAGE 'Suchen mit bestimmtenm field_nameern' ix.
  278. iFound = 0.
  279. DO ii = 1 TO ix:
  280. hfield_name = hfield_nametable [ii].
  281. cSuchfield_name = cInhalttable[ii].
  282. cInhalt = hfield_name:BUFFER-VALUE(0) NO-ERROR.
  283. IF ERROR-STATUS:ERROR THEN NEXT.
  284. IF cInhalt = ? THEN NEXT.
  285. DO iy = 1 TO NUM-ENTRIES(cSuchfield_name, ','):
  286. cString = ENTRY(iy, cSuchfield_name, ',').
  287. MESSAGE 'Kommt der Wert ' cString 'in' cInhalt 'vor?'.
  288. IF LOOKUP(cString, cInhalt, ' ') = 0 THEN NEXT.
  289. iFound = iFound + 1.
  290. LEAVE.
  291. END.
  292. END.
  293. IF iFound < ix THEN NEXT NEXTDATENSATZ.
  294. LEAVE.
  295. END.
  296. DO WHILE ix = 0:
  297. iFound = 0.
  298. IF VALID-HANDLE(hWortIndex) THEN
  299. DO:
  300. lcWortIndex = hWortIndex:BUFFER-VALUE(0).
  301. END.
  302. ELSE
  303. DO:
  304. DO ii = 1 TO hbtable:NUM-FIELDS:
  305. hfield_name = hbtable:BUFFER-FIELD(ii).
  306. IF hfield_name:EXTENT > 0 THEN NEXT.
  307. cInhalt = getBufferFieldValue(INPUT hfield_name, OUTPUT lQuoter).
  308. IF cInhalt = '' THEN NEXT.
  309. lcWortIndex = lcWortIndex
  310. + (IF lcWortindex = '' THEN '' ELSE ' ')
  311. + cInhalt.
  312. END.
  313. END.
  314. DO ii = 1 TO ifield_nameer:
  315. cInhalt = ENTRY(ii, cSuchfield_name, ' ').
  316. IF INDEX(lcWortIndex, cInhalt) = 0 THEN NEXT.
  317. iFound = iFound + 1.
  318. END.
  319. IF iFound < ifield_nameer THEN NEXT NEXTDATENSATZ.
  320. LEAVE.
  321. END.
  322. hBuffer:BUFFER-CREATE ().
  323. hBuffer:BUFFER-COPY (hbtable).
  324. hBuffer::ident = TRIM(STRING(rRecid,'>>>>>>>>9')).
  325. END.
  326. hqtable:QUERY-CLOSE ().
  327. DELETE OBJECT hqtable.
  328. CREATE QUERY hQuery.
  329. hQuery:SET-BUFFERS ( hBuffer ).
  330. cWhere = SUBSTITUTE('FOR EACH ttTemp NO-LOCK ').
  331. IF cDirection = 'ASCENDING' THEN cDirection = ''.
  332. IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
  333. hQuery:QUERY-PREPARE (cWhere).
  334. lRetVal = TRUE.
  335. RETURN lRetVal.
  336. END METHOD.
  337. /*------------------------------------------------------------------------------
  338. Purpose:
  339. Notes:
  340. ------------------------------------------------------------------------------*/
  341. METHOD PUBLIC VOID createTemptableBrowser(
  342. INPUT httInput AS HANDLE,
  343. INPUT httBrowserKo AS HANDLE,
  344. OUTPUT httBrowser AS HANDLE
  345. ):
  346. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  347. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  348. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  349. DEFINE VARIABLE hFremdBuff AS HANDLE NO-UNDO.
  350. EMPTY TEMP-TABLE ttExternefield_nameer.
  351. DEFINE BUFFER bbrowser_ze FOR browser_ze.
  352. FIND FIRST browser_ze NO-LOCK
  353. WHERE browser_ze.company = httInput::company
  354. AND browser_ze.user_name = httInput::user_name
  355. AND browser_ze.program = httInput::program NO-ERROR.
  356. IF NOT AVAILABLE browser_ze THEN
  357. DO:
  358. FIND FIRST browser_ze NO-LOCK
  359. WHERE browser_ze.company = httInput::company
  360. AND browser_ze.user_name = 'admin'
  361. AND browser_ze.program = httInput::program NO-ERROR.
  362. END.
  363. IF NOT AVAILABLE browser_ze THEN RETURN.
  364. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  365. IF browser_ze.user_name <> 'admin' THEN LEAVE.
  366. IF httInput::user_name = 'admin' THEN LEAVE.
  367. FOR EACH browser_ze NO-LOCK
  368. WHERE browser_ze.company = httInput::company
  369. AND browser_ze.user_name = 'admin'
  370. AND browser_ze.program = httInput::program:
  371. CREATE bbrowser_ze.
  372. BUFFER-COPY browser_ze
  373. EXCEPT browser_ze.user_name
  374. TO bbrowser_ze
  375. ASSIGN
  376. bbrowser_ze.user_name = httInput::user_name.
  377. RELEASE bbrowser_ze.
  378. END.
  379. LEAVE.
  380. END.
  381. CREATE TEMP-TABLE httTable.
  382. httTable:SERIALIZE-NAME = 'browser'.
  383. httTable:ADD-NEW-FIELD ('ident', 'CHARACTER').
  384. httTable:ADD-NEW-FIELD ('sel' , 'CHARACTER').
  385. FOR EACH browser_ze NO-LOCK
  386. WHERE browser_ze.company = httInput::company
  387. AND browser_ze.user_name = httInput::user_name
  388. AND browser_ze.program = httInput::program
  389. BY browser_ze.prior:
  390. httTable:ADD-NEW-FIELD (browser_ze.field_name, 'CHARACTER').
  391. IF browser_ze.table_name <> httInput::table_name THEN
  392. DO:
  393. hFremdBuff = createExterneFieldName (
  394. INPUT browser_ze.table_name,
  395. INPUT browser_ze.field_name,
  396. INPUT browser_ze.field_type,
  397. INPUT httInput
  398. ).
  399. END.
  400. END.
  401. httTable:TEMP-TABLE-PREPARE ('ttBrowser').
  402. httBrowser = httTable:DEFAULT-BUFFER-HANDLE.
  403. httBrowser:BUFFER-CREATE ().
  404. DO i1 = 1 TO httBrowser:NUM-FIELDS:
  405. IF i1 = 1 THEN
  406. DO:
  407. httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE = 'ident'.
  408. NEXT.
  409. END.
  410. IF i1 = 2 THEN
  411. DO:
  412. httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE = 'sel'.
  413. NEXT.
  414. END.
  415. cfield_name = httBrowser:BUFFER-FIELD(i1):NAME.
  416. FIND FIRST labeltexte NO-LOCK
  417. WHERE labeltexte.company = httInput::company
  418. AND labeltexte.user_name = httInput::user_name
  419. AND labeltexte.program = httInput::program
  420. AND labeltexte.table_name = httInput::table_name
  421. AND labeltexte.field_name = cfield_name
  422. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  423. IF NOT AVAILABLE labeltexte THEN
  424. DO:
  425. FIND FIRST labeltexte NO-LOCK
  426. WHERE labeltexte.company = httInput::company
  427. AND labeltexte.program = httInput::program
  428. AND labeltexte.table_name = httInput::table_name
  429. AND labeltexte.field_name = cfield_name
  430. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  431. END.
  432. IF NOT AVAILABLE labeltexte THEN
  433. DO:
  434. FIND FIRST labeltexte NO-LOCK
  435. WHERE labeltexte.company = httInput::company
  436. AND labeltexte.table_name = httInput::table_name
  437. AND labeltexte.field_name = cfield_name
  438. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  439. END.
  440. IF NOT AVAILABLE labeltexte THEN
  441. DO:
  442. FIND FIRST labeltexte NO-LOCK
  443. WHERE labeltexte.company = httInput::company
  444. AND labeltexte.field_name = cfield_name
  445. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  446. END.
  447. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.headlabel ELSE cfield_name).
  448. httBrowser:BUFFER-FIELD(i1):buffer-VALUE(0) = cLabel + '/@/' + labeltexte.alignment.
  449. END.
  450. RETURN.
  451. END METHOD.
  452. /*------------------------------------------------------------------------------
  453. Purpose:
  454. Notes:
  455. ------------------------------------------------------------------------------*/
  456. METHOD PUBLIC VOID createTemptableViewer(
  457. INPUT httInput AS HANDLE,
  458. INPUT httViewerKo AS HANDLE,
  459. OUTPUT httViewer AS HANDLE
  460. ):
  461. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  462. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  463. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  464. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  465. DEFINE VARIABLE hBuftable AS HANDLE NO-UNDO.
  466. DEFINE BUFFER bviewer_ze FOR viewer_ze.
  467. FIND FIRST viewer_ze NO-LOCK
  468. WHERE viewer_ze.company = httInput::company
  469. AND viewer_ze.user_name = httInput::user_name
  470. AND viewer_ze.program = httInput::program
  471. AND viewer_ze.table_name = httInput::table_name NO-ERROR.
  472. IF NOT AVAILABLE viewer_ze THEN
  473. DO:
  474. FIND FIRST viewer_ze NO-LOCK
  475. WHERE viewer_ze.company = httInput::company
  476. AND viewer_ze.user_name = 'admin'
  477. AND viewer_ze.program = httInput::program
  478. AND viewer_ze.table_name = httInput::table_name NO-ERROR.
  479. END.
  480. IF NOT AVAILABLE viewer_ze THEN RETURN.
  481. ctable = viewer_ze.table_name.
  482. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  483. IF viewer_ze.user_name <> 'admin' THEN LEAVE.
  484. IF httInput::user_name = 'admin' THEN LEAVE.
  485. FOR EACH viewer_ze NO-LOCK
  486. WHERE viewer_ze.company = httInput::company
  487. AND viewer_ze.user_name = 'admin'
  488. AND viewer_ze.program = httInput::program
  489. AND viewer_ze.table_name = httInput::table_name:
  490. CREATE bviewer_ze.
  491. BUFFER-COPY viewer_ze
  492. EXCEPT viewer_ze.user_name
  493. TO bviewer_ze
  494. ASSIGN
  495. bviewer_ze.user_name = httInput::user_name.
  496. RELEASE bviewer_ze.
  497. END.
  498. LEAVE.
  499. END.
  500. CREATE BUFFER hBuftable FOR TABLE ctable.
  501. CREATE TEMP-TABLE httTable.
  502. httTable:SERIALIZE-NAME = 'viewerdaten'.
  503. FOR EACH viewer_ze NO-LOCK
  504. WHERE viewer_ze.company = httInput::company
  505. AND viewer_ze.user_name = httInput::user_name
  506. AND viewer_ze.program = httInput::program
  507. AND viewer_ze.table_name = httInput::table_name
  508. BY viewer_ze.prior:
  509. IF viewer_ze.addFieldtable = '' AND
  510. NOT viewer_ze.field_name BEGINS 'DUMMY' AND
  511. NOT viewer_ze.field_name BEGINS 'ident' THEN
  512. httTable:ADD-LIKE-FIELD (viewer_ze.field_name, hBuftable:BUFFER-FIELD(viewer_ze.field_name)).
  513. ELSE httTable:ADD-NEW-FIELD (viewer_ze.field_name, 'CHARACTER').
  514. /* MESSAGE viewer_ze.field_name ' hinzugef�gt'.*/
  515. END.
  516. httTable:TEMP-TABLE-PREPARE (ctable).
  517. httViewer = httTable:DEFAULT-BUFFER-HANDLE.
  518. DELETE OBJECT hBuftable.
  519. RETURN.
  520. END METHOD.
  521. /*------------------------------------------------------------------------------
  522. Purpose:
  523. Notes:
  524. ------------------------------------------------------------------------------*/
  525. METHOD PUBLIC LONGCHAR createWordindex(
  526. INPUT hBuffer AS HANDLE
  527. ):
  528. DEFINE VARIABLE cWordIndex AS LONGCHAR NO-UNDO.
  529. DEFINE VARIABLE cWords AS CHARACTER NO-UNDO.
  530. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  531. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  532. DEFINE VARIABLE cWord AS CHARACTER NO-UNDO.
  533. cWords = ''.
  534. DO ii = 1 TO hBuffer:NUM-FIELDS:
  535. IF hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = ? THEN NEXT.
  536. IF hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = '' THEN NEXT.
  537. IF hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = '0' THEN NEXT.
  538. IF INDEX(hBuffer:BUFFER-FIELD(ii):NAME, 'SHA') > 0 THEN NEXT.
  539. IF INDEX(hBuffer:BUFFER-FIELD(ii):NAME, 'word') > 0 THEN NEXT.
  540. cDatatype = hBuffer:BUFFER-FIELD(ii):DATA-TYPE.
  541. CASE cDatatype:
  542. WHEN 'logical' THEN
  543. NEXT.
  544. WHEN 'character' THEN
  545. cWords = cWords + ' ' + hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE.
  546. WHEN 'integer' THEN
  547. DO:
  548. cWord = TRIM(STRING(INTEGER(hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE),'zzzzzzzz9-')).
  549. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  550. END.
  551. WHEN 'decimal' THEN
  552. DO:
  553. cWord = TRIM(STRING(DECIMAL(hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE),'zzzzzzzz9.9<<<-')).
  554. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  555. END.
  556. WHEN 'date' THEN
  557. DO:
  558. cWord = STRING(DATE(hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE),'99.99.9999').
  559. cWords = cWords + ' ' + cWord.
  560. END.
  561. OTHERWISE
  562. NEXT.
  563. END CASE.
  564. END.
  565. cWordIndex = ''.
  566. cWords = TRIM(cWords).
  567. cWords = REPLACE(cWords, ' ', ' ').
  568. DO ii = 1 TO NUM-ENTRIES(cWords, ' '):
  569. cWord = TRIM(ENTRY(ii, cWords, ' ')).
  570. IF LOOKUP(cWord, cWordIndex, ' ') > 0 THEN NEXT.
  571. cWordIndex = cWordIndex + ' ' + cWord.
  572. END.
  573. cWordIndex = TRIM(cWordIndex).
  574. cWordIndex = REPLACE(cWordIndex, ' ', ' ').
  575. RETURN cWordIndex.
  576. END METHOD.
  577. /*------------------------------------------------------------------------------
  578. Purpose:
  579. Notes:
  580. ------------------------------------------------------------------------------*/
  581. METHOD PUBLIC VOID evaluateFile(
  582. INPUT oJsonIdent AS JsonObject,
  583. OUTPUT cFileName AS CHARACTER,
  584. OUTPUT lCompany AS LOGICAL ,
  585. OUTPUT lActive AS LOGICAL ,
  586. OUTPUT lWordindex AS LOGICAL
  587. ):
  588. cFileName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
  589. DO WHILE TRUE:
  590. FIND FIRST Ge_MIS._File NO-LOCK
  591. WHERE Ge_MIS._File._File-Name = cFileName NO-ERROR.
  592. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  593. FIND FIRST Ge_MIS._Field OF Ge_MIS._File NO-LOCK
  594. WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  595. lCompany = (IF AVAILABLE Ge_MIS._Field THEN TRUE ELSE FALSE).
  596. FIND FIRST Ge_MIS._Field OF Ge_MIS._File NO-LOCK
  597. WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  598. lActive = (IF AVAILABLE Ge_MIS._Field THEN TRUE ELSE FALSE).
  599. FIND FIRST Ge_MIS._Field OF Ge_MIS._File NO-LOCK
  600. WHERE Ge_MIS._Field._Field-Name = 'wordindex' NO-ERROR.
  601. lWordindex = (IF AVAILABLE Ge_MIS._Field THEN TRUE ELSE FALSE).
  602. RETURN.
  603. END.
  604. FIND FIRST FRAMEWORK._File NO-LOCK
  605. WHERE FRAMEWORK._File._File-Name = cFileName NO-ERROR.
  606. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File NO-LOCK
  607. WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  608. lCompany = (IF AVAILABLE FRAMEWORK._Field THEN TRUE ELSE FALSE).
  609. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File NO-LOCK
  610. WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  611. lActive = (IF AVAILABLE FRAMEWORK._Field THEN TRUE ELSE FALSE).
  612. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File NO-LOCK
  613. WHERE FRAMEWORK._Field._Field-Name = 'wordindex' NO-ERROR.
  614. lWordindex = (IF AVAILABLE FRAMEWORK._Field THEN TRUE ELSE FALSE).
  615. RETURN.
  616. END METHOD.
  617. /*------------------------------------------------------------------------------
  618. Purpose:
  619. Notes:
  620. ------------------------------------------------------------------------------*/
  621. METHOD PUBLIC INTEGER fillBrowserTT(
  622. INPUT httBrowserKo AS HANDLE,
  623. INPUT hQuery AS HANDLE,
  624. INPUT hbttInput AS HANDLE,
  625. INPUT-OUTPUT httBrowser AS HANDLE
  626. ):
  627. DEFINE VARIABLE hbQuery AS HANDLE NO-UNDO.
  628. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  629. DEFINE VARIABLE hfield_nameRecid AS HANDLE NO-UNDO.
  630. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  631. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  632. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  633. DEFINE VARIABLE iSkip AS INTEGER NO-UNDO.
  634. DEFINE VARIABLE iPageSize AS INTEGER NO-UNDO.
  635. hQuery:QUERY-OPEN ().
  636. iSkip = httBrowserKo::actualpage * httBrowserKo::pagesize.
  637. hQuery:REPOSITION-FORWARD (iSkip).
  638. MESSAGE 'anzahl records skip = ' iSkip.
  639. iAnzRec = 0.
  640. hbQuery = hQuery:GET-BUFFER-HANDLE ().
  641. hfield_nameRecid = hbQuery:BUFFER-FIELD('ident') NO-ERROR.
  642. iPageSize = (IF hbttInput::suchfield_name = '' THEN httBrowserKo::pagesize ELSE 100).
  643. DO i1 = 1 TO iPageSize:
  644. hQuery:GET-NEXT() NO-ERROR.
  645. IF hQuery:QUERY-OFF-END THEN LEAVE.
  646. httBrowser:BUFFER-CREATE ().
  647. IF hbttInput::action = 'search' AND
  648. i1 = 1 THEN hbttInput::ident = TRIM(STRING(INT64(hbQuery::ident),'>>>>>>>>>9')).
  649. IF VALID-HANDLE(hfield_nameRecid) THEN httBrowser::ident = TRIM(STRING(INT64(hbQuery::ident),'>>>>>>>>>9')).
  650. ELSE httBrowser::Ident = TRIM(STRING(hbQuery:RECID)).
  651. IF httBrowser::ident = hbttInput::ident THEN httBrowser::sel = 'TRUE'.
  652. DO i2 = 3 TO httBrowser:NUM-FIELDS:
  653. cfield_name = httBrowser:BUFFER-FIELD(i2):NAME.
  654. hfield_name = hbQuery :BUFFER-FIELD(cfield_name) NO-ERROR.
  655. IF NOT VALID-HANDLE(hfield_name) OR
  656. ERROR-STATUS:ERROR THEN
  657. DO:
  658. cInhalt = getFieldValueExtern(INPUT cfield_name, INPUT hbttInput, INPUT httBrowser ).
  659. httBrowser:BUFFER-FIELD(i2):BUFFER-VALUE = cInhalt.
  660. NEXT.
  661. END.
  662. CASE hfield_name:DATA-TYPE:
  663. WHEN 'INTEGER' OR
  664. WHEN 'INT64' THEN
  665. cInhalt = TRIM(STRING(INTEGER(hfield_name:BUFFER-VALUE(0)),'->>>,>>>,>>9')).
  666. WHEN 'DECIMAL' THEN
  667. cInhalt = TRIM(STRING(DECIMAL(hfield_name:BUFFER-VALUE(0)),'->>>,>>>,>>9.99<<<')).
  668. WHEN 'DATE' THEN
  669. cInhalt = STRING(DATE(hfield_name:BUFFER-VALUE(0)),'99.99.9999').
  670. OTHERWISE
  671. cInhalt = hfield_name:BUFFER-VALUE(0).
  672. END CASE.
  673. httBrowser:BUFFER-FIELD(i2):BUFFER-VALUE = cInhalt.
  674. END.
  675. iAnzRec = iAnzRec + 1.
  676. END.
  677. RETURN iAnzRec.
  678. END METHOD.
  679. /*------------------------------------------------------------------------------
  680. Purpose:
  681. Notes:
  682. ------------------------------------------------------------------------------*/
  683. METHOD PUBLIC VOID generateHash(
  684. INPUT ipAlgorithm AS CHARACTER,
  685. INPUT ipPhrase AS CHARACTER,
  686. INPUT ipKey AS CHARACTER,
  687. OUTPUT opERROR AS LOGICAL,
  688. OUTPUT opMESSAGE AS CHARACTER,
  689. OUTPUT opHash AS CHARACTER
  690. ):
  691. ASSIGN
  692. opERROR = FALSE
  693. opMessage = ''
  694. opHash = ''.
  695. IF ipPhrase = '' OR ipPhrase = ? THEN
  696. DO:
  697. ASSIGN
  698. opERROR = TRUE
  699. opMESSAGE = 'Input Error. Value not correct'.
  700. RETURN.
  701. END.
  702. opHash = HEX-ENCODE (MESSAGE-DIGEST (ipAlgorithm, ipPhrase, ipKey)).
  703. RETURN.
  704. END METHOD.
  705. /*------------------------------------------------------------------------------
  706. Purpose:
  707. Notes:
  708. ------------------------------------------------------------------------------*/
  709. METHOD PUBLIC VOID getActiveSelection(
  710. INPUT oJsonIdent AS JsonObject,
  711. INPUT cFileName AS CHARACTER ,
  712. OUTPUT cActiveSelection AS CHARACTER
  713. ):
  714. DEFINE VARIABLE cForm_Id AS CHARACTER NO-UNDO.
  715. FIND userdata NO-LOCK
  716. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  717. AND userdata.company = oJsonIdent:GetCharacter('company')
  718. AND userdata.branch = '0000'
  719. AND userdata.record_type = 'active'
  720. AND userdata.section = cFileName
  721. AND userdata.key_type = '' NO-ERROR.
  722. IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
  723. ELSE cActiveSelection = 'all'.
  724. RELEASE userdata.
  725. RETURN.
  726. END METHOD.
  727. /*------------------------------------------------------------------------------
  728. Purpose:
  729. Notes:
  730. ------------------------------------------------------------------------------*/
  731. METHOD PUBLIC LOGICAL getBrowserKopf(
  732. INPUT httInput AS HANDLE,
  733. OUTPUT httBrowserKo AS HANDLE
  734. ):
  735. MESSAGE 'getBrowserKopf mit ' httInput::company '/' httInput::user_name '/' httInput::program '/' httInput::table_name.
  736. FIND FIRST browser_ko NO-LOCK
  737. WHERE browser_ko.company = httInput::company
  738. AND browser_ko.user_name = httInput::user_name
  739. AND browser_ko.program = httInput::program
  740. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  741. IF NOT AVAILABLE browser_ko THEN
  742. DO:
  743. FIND FIRST browser_ko NO-LOCK
  744. WHERE browser_ko.company = httInput::company
  745. AND browser_ko.user_name = 'admin'
  746. AND browser_ko.program = httInput::program
  747. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  748. END.
  749. IF NOT AVAILABLE browser_ko THEN RETURN FALSE.
  750. httBrowserKo = TEMP-TABLE ttBrowserKo:DEFAULT-BUFFER-HANDLE.
  751. httBrowserKo:EMPTY-TEMP-TABLE ().
  752. httBrowserKo:BUFFER-CREATE ().
  753. httBrowserKo:BUFFER-COPY(BUFFER browser_ko:HANDLE).
  754. RELEASE browser_ko.
  755. RETURN TRUE.
  756. END METHOD.
  757. /*------------------------------------------------------------------------------
  758. Purpose:
  759. Notes:
  760. ------------------------------------------------------------------------------*/
  761. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphfield_name AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  762. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO.
  763. cfield_nameInhalt = ''.
  764. oplQuoter = FALSE.
  765. CASE iphfield_name:DATA-TYPE:
  766. WHEN 'CHARACTER' THEN
  767. ASSIGN
  768. cfield_nameInhalt = iphfield_name:BUFFER-VALUE(0)
  769. oplQuoter = TRUE.
  770. WHEN 'DECIMAL' OR
  771. WHEN 'INTEGER' THEN
  772. cfield_nameInhalt = TRIM(STRING(INTEGER(iphfield_name:BUFFER-VALUE),'>>>>>>>>9')).
  773. WHEN 'DATE' THEN
  774. cfield_nameInhalt = STRING(DATE(iphfield_name:BUFFER-VALUE),'99.99.9999').
  775. OTHERWISE
  776. cfield_nameInhalt = iphfield_name:BUFFER-VALUE.
  777. END CASE.
  778. IF cfield_nameInhalt = ? THEN cfield_nameInhalt = ''.
  779. RETURN cfield_nameInhalt.
  780. END METHOD.
  781. /*------------------------------------------------------------------------------
  782. Purpose:
  783. Notes:
  784. ------------------------------------------------------------------------------*/
  785. METHOD PUBLIC CHARACTER getCharDateTime(
  786. INPUT ipdDateTime AS DATETIME
  787. ):
  788. DEFINE VARIABLE cReturnValue AS CHARACTER NO-UNDO.
  789. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  790. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  791. dDateTime = ipdDateTime.
  792. cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS').
  793. cReturnValue =
  794. STRING(YEAR(dDateTime),'9999')
  795. + '-'
  796. + STRING(MONTH(dDateTime),'99')
  797. + '-'
  798. + STRING(DAY(dDateTime),'99')
  799. + SUBSTRING(cDateTime,11).
  800. RETURN cReturnValue.
  801. END METHOD.
  802. /*------------------------------------------------------------------------------
  803. Purpose:
  804. Notes:
  805. ------------------------------------------------------------------------------*/
  806. METHOD PUBLIC HANDLE getData(
  807. INPUT ipoJsonIdent AS JsonObject,
  808. INPUT ipcFileName AS CHARACTER,
  809. INPUT ipcWherePaires AS CHARACTER
  810. ):
  811. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  812. DEFINE VARIABLE cWherePaire AS CHARACTER NO-UNDO.
  813. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  814. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  815. DEFINE VARIABLE lWhere AS LOGICAL NO-UNDO INIT TRUE.
  816. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  817. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  818. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  819. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  820. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  821. lOK = FALSE.
  822. DO WHILE TRUE:
  823. FIND FIRST Ge_MIS._File NO-LOCK
  824. WHERE Ge_MIS._File._File-Name = ipcFileName NO-ERROR.
  825. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  826. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  827. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  828. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  829. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  830. lOK = TRUE.
  831. LEAVE.
  832. END.
  833. DO WHILE NOT lOK:
  834. FIND FIRST FRAMEWORK._File NO-LOCK
  835. WHERE FRAMEWORK._File._File-Name = ipcFileName NO-ERROR.
  836. IF NOT AVAILABLE FRAMEWORK._File THEN LEAVE.
  837. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  838. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  839. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  840. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  841. lOK = TRUE.
  842. LEAVE.
  843. END.
  844. CREATE BUFFER hBuffer FOR TABLE ipcFileName.
  845. CREATE TEMP-TABLE ttTable.
  846. ttTable:CREATE-LIKE (hBuffer).
  847. ttTable:TEMP-TABLE-PREPARE ('ttTable').
  848. httBuffer = ttTable:DEFAULT-BUFFER-HANDLE.
  849. DO i1 = 1 TO httBuffer:NUM-FIELDS:
  850. httBuffer:BUFFER-FIELD(i1):SERIALIZE-NAME = SUBSTITUTE('&1_&2', ipcFileName, hBuffer:BUFFER-FIELD(i1):NAME).
  851. END.
  852. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', ipcFileName).
  853. IF lCompany THEN
  854. DO:
  855. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  856. cWhere = cWhere + SUBSTITUTE('&1.company = &2 ', ipcFileName, QUOTER(ipoJsonIdent:GetCharacter('company'))).
  857. lWhere = FALSE.
  858. END.
  859. DO i1 = 1 TO NUM-ENTRIES(ipcWherePaires, ';'):
  860. cWherePaire = ENTRY(i1, ipcWherePaires, ';').
  861. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ) + cWherePaire + ' '.
  862. lWhere = FALSE.
  863. END.
  864. IF lActive THEN
  865. DO:
  866. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  867. cWhere = cWhere + SUBSTITUTE('&1.active = &2 ', ipcFileName, 'TRUE').
  868. lWhere = FALSE.
  869. END.
  870. MESSAGE 'cWhere = ' cWhere.
  871. CREATE QUERY hQuery.
  872. hQuery:SET-BUFFERS(hBuffer).
  873. hQuery:QUERY-PREPARE (cWhere).
  874. hQuery:QUERY-OPEN ().
  875. hQuery:GET-FIRST ().
  876. DO WHILE NOT hQuery:QUERY-OFF-END:
  877. httBuffer:BUFFER-CREATE ().
  878. httBuffer:BUFFER-COPY(hBuffer).
  879. hQuery:GET-NEXT ().
  880. END.
  881. hQuery:QUERY-CLOSE ().
  882. DELETE OBJECT hQuery NO-ERROR.
  883. DELETE OBJECT hBuffer NO-ERROR.
  884. RETURN httBuffer.
  885. END METHOD.
  886. /*------------------------------------------------------------------------------
  887. Purpose:
  888. Notes:
  889. ------------------------------------------------------------------------------*/
  890. METHOD PUBLIC VOID getErrorMessage(
  891. INPUT cFehlerNo AS CHARACTER,
  892. INPUT ilanguage_id AS INTEGER,
  893. INPUT cParam AS CHARACTER,
  894. OUTPUT cMessage AS LONGCHAR
  895. ):
  896. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  897. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  898. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  899. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  900. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  901. cParam = REPLACE(cParam, ',', ';').
  902. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  903. cParameter[ii] = ENTRY(ii, cParam, ';').
  904. IF ii = 5 THEN LEAVE.
  905. END.
  906. lcJsonString = '(&1) -> &2'.
  907. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  908. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  909. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  910. FIND messages NO-LOCK
  911. WHERE messages.message_no = iNo
  912. AND messages.language_id = ilanguage_id NO-ERROR.
  913. IF NOT AVAILABLE messages THEN
  914. DO:
  915. FIND FIRST messages NO-LOCK
  916. WHERE messages.message_no = iNo NO-ERROR.
  917. END.
  918. IF NOT AVAILABLE messages THEN
  919. DO:
  920. cString = cString
  921. + (IF cString = '' THEN '' ELSE ' ')
  922. + 'Systemfehler, Administrator benachrichtigen !'.
  923. END.
  924. ELSE
  925. DO:
  926. cString = cString
  927. + (IF cString = '' THEN '' ELSE ' ')
  928. + messages.message_text.
  929. END.
  930. END.
  931. MESSAGE cString '-' cParam.
  932. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  933. MESSAGE cString.
  934. cMessage = cString.
  935. RETURN.
  936. END METHOD.
  937. /*------------------------------------------------------------------------------
  938. Purpose:
  939. Notes:
  940. ------------------------------------------------------------------------------*/
  941. METHOD PUBLIC LOGICAL getField(
  942. INPUT httInput AS HANDLE,
  943. INPUT ctable AS CHARACTER,
  944. INPUT cTabfield_name AS CHARACTER,
  945. INPUT cKeyfield_nameer AS CHARACTER,
  946. INPUT cKeyValues AS CHARACTER,
  947. INPUT htable AS HANDLE,
  948. OUTPUT cInhalt AS CHARACTER
  949. ):
  950. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  951. DEFINE VARIABLE hfield_nameBuffer AS HANDLE NO-UNDO.
  952. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  953. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  954. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  955. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  956. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  957. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO.
  958. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  959. CREATE BUFFER hBuffer FOR TABLE ctable.
  960. cKeyfield_nameer = REPLACE(cKeyfield_nameer, ',', ';').
  961. cKeyValues = REPLACE(cKeyValues, ',', ';').
  962. cString = ''.
  963. DO ii = 1 TO NUM-ENTRIES(cKeyfield_nameer, ';'):
  964. cString = cString
  965. + (IF cString = '' THEN '' ELSE ' AND ')
  966. + ENTRY(ii, cKeyfield_nameer, ';')
  967. + ' = &1 '.
  968. cfield_name = ENTRY(ii, cKeyfield_nameer, ';').
  969. hfield_nameBuffer = hBuffer:BUFFER-FIELD(cfield_name).
  970. IF ENTRY(ii, cKeyValues, ';') BEGINS '@' THEN
  971. DO:
  972. cfield_name = TRIM(SUBSTRING(ENTRY(ii, cKeyValues, ';'),02)).
  973. hfield_name = htable:BUFFER-FIELD(cfield_name) NO-ERROR.
  974. IF NOT VALID-HANDLE(hfield_name) THEN hfield_name = httInput:BUFFER-FIELD(cfield_name) NO-ERROR.
  975. cWert = hfield_name:BUFFER-VALUE(0).
  976. END.
  977. ELSE cWert = TRIM(ENTRY(ii, cKeyValues, ';')).
  978. CASE hfield_nameBuffer:DATA-TYPE:
  979. WHEN 'character' OR
  980. WHEN 'date' THEN
  981. cString = SUBSTITUTE(cString, QUOTER(cWert) ).
  982. OTHERWISE
  983. cString = SUBSTITUTE(cString, cWert ).
  984. END CASE.
  985. END.
  986. cWhere = SUBSTITUTE('WHERE &1 ', cString).
  987. MESSAGE cWhere.
  988. lRetVal = hBuffer:FIND-UNIQUE (cWhere, NO-LOCK).
  989. MESSAGE lRetVal.
  990. hfield_name = hBuffer:BUFFER-FIELD(cTabfield_name).
  991. cInhalt = hfield_name:BUFFER-VALUE(0).
  992. MESSAGE cInhalt.
  993. RETURN TRUE.
  994. END METHOD.
  995. /*------------------------------------------------------------------------------
  996. Purpose:
  997. Notes:
  998. ------------------------------------------------------------------------------*/
  999. METHOD PUBLIC CHARACTER getFieldValueExtern(
  1000. INPUT ipcfield_name AS CHARACTER,
  1001. INPUT iphttInput AS HANDLE,
  1002. INPUT iphttBrowser AS HANDLE
  1003. ):
  1004. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO INIT ''.
  1005. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  1006. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1007. DEFINE VARIABLE cKeyValue AS CHARACTER NO-UNDO.
  1008. DEFINE VARIABLE cKeyfield_name AS CHARACTER NO-UNDO.
  1009. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1010. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1011. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  1012. FIND FIRST ttExternefield_nameer NO-LOCK
  1013. WHERE LOOKUP(ipcfield_name, ttExternefield_nameer.cfield_nameer, ';') > 0 NO-ERROR.
  1014. IF NOT AVAILABLE ttExternefield_nameer THEN RETURN cfield_nameInhalt.
  1015. hBuffer = ttExternefield_nameer.hBuffer.
  1016. cWhere = ttExternefield_nameer.cWhere.
  1017. DO ii = 1 TO NUM-ENTRIES(ttExternefield_nameer.cKeyfield_nameer, ';'):
  1018. cKeyfield_name = ENTRY(ii, ttExternefield_nameer.cKeyfield_nameer, ';').
  1019. hfield_name = iphttBrowser:BUFFER-FIELD(cKeyfield_name) NO-ERROR.
  1020. CASE hfield_name:DATA-TYPE:
  1021. WHEN 'INTEGER' OR
  1022. WHEN 'INT64' THEN
  1023. cKeyValue = TRIM(STRING(INTEGER(hfield_name:BUFFER-VALUE(0)),'->>>>>>>>9')).
  1024. WHEN 'DECIMAL' THEN
  1025. cKeyValue = TRIM(STRING(DECIMAL(hfield_name:BUFFER-VALUE(0)),'->>>>>>>>9.99<<<')).
  1026. WHEN 'DATE' THEN
  1027. cKeyValue = STRING(DATE(hfield_name:BUFFER-VALUE(0)),'99.99.9999').
  1028. OTHERWISE
  1029. cKeyValue = QUOTER(hfield_name:BUFFER-VALUE(0)).
  1030. END CASE.
  1031. cWhere = cWhere
  1032. + (IF cWhere = '' THEN ' WHERE ' ELSE ' AND ')
  1033. + SUBSTITUTE('&1.&2 = &3 ':U, ttExternefield_nameer.ctable, cKeyfield_name, cKeyValue).
  1034. END.
  1035. lRetVal = hBuffer:FIND-FIRST (cWhere) NO-ERROR.
  1036. IF lRetVal THEN cfield_nameInhalt = hBuffer:BUFFER-FIELD(ipcfield_name):BUFFER-VALUE(0).
  1037. RETURN cfield_nameInhalt.
  1038. END METHOD.
  1039. /*------------------------------------------------------------------------------
  1040. Purpose:
  1041. Notes:
  1042. ------------------------------------------------------------------------------*/
  1043. METHOD PUBLIC CHARACTER getHeader(
  1044. INPUT httInput AS HANDLE
  1045. ):
  1046. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  1047. FIND FIRST labeltexte NO-LOCK
  1048. WHERE labeltexte.company = httInput::company
  1049. AND labeltexte.user_name = httInput::user_name
  1050. AND labeltexte.program = httInput::program
  1051. AND labeltexte.field_name = 'KOPF'
  1052. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1053. IF NOT AVAILABLE labeltexte THEN
  1054. DO:
  1055. FIND FIRST labeltexte NO-LOCK
  1056. WHERE labeltexte.company = httInput::company
  1057. AND labeltexte.program = httInput::program
  1058. AND labeltexte.field_name = 'KOPF'
  1059. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1060. END.
  1061. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::program).
  1062. RETURN cHeader.
  1063. END METHOD.
  1064. /*------------------------------------------------------------------------------
  1065. Purpose:
  1066. Notes:
  1067. ------------------------------------------------------------------------------*/
  1068. METHOD PUBLIC LOGICAL getHeaderData(
  1069. INPUT poRequest AS IHttpRequest,
  1070. OUTPUT cCompany AS CHARACTER,
  1071. OUTPUT cuser_name AS CHARACTER,
  1072. OUTPUT cAnzeigeName AS CHARACTER,
  1073. OUTPUT iLanguage_id AS INTEGER ,
  1074. OUTPUT cSessionToken AS CHARACTER
  1075. ):
  1076. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  1077. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1078. oHeader = poRequest:GetHeader('X-COMPANY').
  1079. ccompany = oHeader:VALUE.
  1080. oHeader = poRequest:GetHeader('X-USER-NAME').
  1081. cuser_name = oHeader:VALUE.
  1082. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  1083. cAnzeigeName = oHeader:VALUE.
  1084. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  1085. ilanguage_id = INTEGER(oHeader:VALUE).
  1086. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  1087. cSessionToken = oHeader:VALUE.
  1088. lRetVal = TRUE.
  1089. RETURN lRetVal.
  1090. END METHOD.
  1091. /*------------------------------------------------------------------------------
  1092. Purpose:
  1093. Notes:
  1094. ------------------------------------------------------------------------------*/
  1095. METHOD PUBLIC LOGICAL getKeyFields(
  1096. INPUT oJsonIdent AS JsonObject,
  1097. OUTPUT cKeyFields AS CHARACTER ,
  1098. OUTPUT cKeyValues AS CHARACTER
  1099. ):
  1100. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1101. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1102. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1103. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1104. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1105. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1106. cKeyFields = ''.
  1107. cKeyValues = ''.
  1108. cFieldNames = oJsonIdent:getNames().
  1109. DO i1 = 1 TO EXTENT(cFieldNames):
  1110. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  1111. cKeyFields = cKeyFields
  1112. + (IF cKeyFields = '' THEN '' ELSE ';')
  1113. + REPLACE(cFieldNames[i1], 'keyfield_', '').
  1114. cValue = oJsonIdent:GetCharacter(cFieldNames[i1]).
  1115. cKeyValues = cKeyValues
  1116. + (IF cKeyValues = '' THEN '' ELSE CHR(01))
  1117. + cValue.
  1118. END.
  1119. lOK = TRUE.
  1120. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  1121. cString = ENTRY(i1, cKeyFields, ';').
  1122. cString = ENTRY(1, cString, '_') + '_'.
  1123. cFieldName = REPLACE(ENTRY(i1, cKeyFields, ';'), cString, '').
  1124. DO WHILE lOK:
  1125. FIND FIRST Ge_MIS._Field NO-LOCK
  1126. WHERE Ge_MIS._Field._Field-Name = cFieldname NO-ERROR.
  1127. IF NOT AVAILABLE Ge_MIS._Field THEN
  1128. DO:
  1129. lOK = FALSE.
  1130. LEAVE.
  1131. END.
  1132. CASE Ge_MIS._Field._Data-Type:
  1133. WHEN 'character' THEN
  1134. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1135. WHEN 'logical' THEN
  1136. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1137. END CASE.
  1138. LEAVE.
  1139. END.
  1140. DO WHILE NOT lOK:
  1141. FIND FIRST FRAMEWORK._Field NO-LOCK
  1142. WHERE FRAMEWORK._Field._Field-Name = cFieldname NO-ERROR.
  1143. IF NOT AVAILABLE FRAMEWORK._Field THEN
  1144. DO:
  1145. lOK = FALSE.
  1146. LEAVE.
  1147. END.
  1148. CASE FRAMEWORK._Field._Data-Type:
  1149. WHEN 'character' THEN
  1150. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1151. WHEN 'logical' THEN
  1152. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1153. END CASE.
  1154. LEAVE.
  1155. END.
  1156. END.
  1157. lRetVal = TRUE.
  1158. RETURN lRetVal.
  1159. END METHOD.
  1160. /*------------------------------------------------------------------------------
  1161. Purpose:
  1162. Notes:
  1163. ------------------------------------------------------------------------------*/
  1164. METHOD PUBLIC CHARACTER getLabel(
  1165. INPUT iprRecid AS RECID,
  1166. INPUT ipcArt AS CHARACTER,
  1167. INPUT ipilanguage_id AS INTEGER
  1168. ):
  1169. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  1170. DEFINE BUFFER bviewer_ze FOR viewer_ze.
  1171. FIND bviewer_ze NO-LOCK WHERE RECID(bviewer_ze) = iprRecid.
  1172. IF ipilanguage_id = 0 OR
  1173. ipilanguage_id > 10 THEN ipilanguage_id = 1.
  1174. FIND FIRST labeltexte NO-LOCK
  1175. WHERE labeltexte.company = bviewer_ze.company
  1176. AND labeltexte.user_name = bviewer_ze.user_name
  1177. AND labeltexte.program = bviewer_ze.program
  1178. AND labeltexte.table_name = bviewer_ze.table_name
  1179. AND labeltexte.field_name = bviewer_ze.field_name
  1180. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1181. IF NOT AVAILABLE labeltexte THEN
  1182. DO:
  1183. FIND FIRST labeltexte NO-LOCK
  1184. WHERE labeltexte.company = bviewer_ze.company
  1185. AND labeltexte.program = bviewer_ze.program
  1186. AND labeltexte.table_name = bviewer_ze.table_name
  1187. AND labeltexte.field_name = bviewer_ze.field_name
  1188. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1189. END.
  1190. IF NOT AVAILABLE labeltexte THEN
  1191. DO:
  1192. FIND FIRST labeltexte NO-LOCK
  1193. WHERE labeltexte.company = bviewer_ze.company
  1194. AND labeltexte.table_name = bviewer_ze.table_name
  1195. AND labeltexte.field_name = bviewer_ze.field_name
  1196. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1197. END.
  1198. IF NOT AVAILABLE labeltexte THEN
  1199. DO:
  1200. FIND FIRST labeltexte NO-LOCK
  1201. WHERE labeltexte.company = bviewer_ze.company
  1202. AND labeltexte.field_name = bviewer_ze.field_name
  1203. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1204. END.
  1205. CASE ipcArt:
  1206. WHEN 'side' THEN
  1207. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE bviewer_ze.field_name).
  1208. WHEN 'head' THEN
  1209. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.headlabel ELSE bviewer_ze.field_name).
  1210. END CASE.
  1211. RETURN cLabel.
  1212. END METHOD.
  1213. /*------------------------------------------------------------------------------
  1214. Purpose:
  1215. Notes:
  1216. ------------------------------------------------------------------------------*/
  1217. METHOD PUBLIC CHARACTER getProgramName(
  1218. INPUT oJsonIdent AS JsonObject,
  1219. INPUT cUsers AS CHARACTER
  1220. ):
  1221. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  1222. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1223. DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
  1224. cProgram = ''.
  1225. cCompany = (IF oJsonIdent:HAS('company') THEN oJsonIdent:GetCharacter('company') ELSE oJsonIdent:GetCharacter('H_company')).
  1226. DO i1 = 1 TO NUM-ENTRIES(cUsers, ','):
  1227. cProgramUser = ENTRY(i1, cUsers).
  1228. FIND FIRST htmldokumente NO-LOCK
  1229. WHERE htmldokumente.company = cCompany
  1230. AND htmldokumente.user_name = cProgramUser
  1231. AND htmldokumente.form_id = oJsonIdent:GetCharacter('formId' ) NO-ERROR.
  1232. IF NOT AVAILABLE htmldokumente THEN NEXT.
  1233. cProgram = htmldokumente.program.
  1234. LEAVE.
  1235. END.
  1236. RETURN cProgram.
  1237. END METHOD.
  1238. /*------------------------------------------------------------------------------
  1239. Purpose:
  1240. Notes:
  1241. ------------------------------------------------------------------------------*/
  1242. METHOD PUBLIC VOID readLastcWhere(
  1243. INPUT oJsonIdent AS JsonObject,
  1244. INPUT cFileName AS CHARACTER ,
  1245. OUTPUT cWhere AS CHARACTER
  1246. ):
  1247. FIND userdata
  1248. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1249. AND userdata.company = oJsonIdent:GetCharacter('company')
  1250. AND userdata.branch = '0000'
  1251. AND userdata.record_type = 'where'
  1252. AND userdata.section = cFileName
  1253. AND userdata.key_type = 'last' NO-ERROR.
  1254. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1255. RELEASE userdata.
  1256. RETURN.
  1257. END METHOD.
  1258. /*------------------------------------------------------------------------------
  1259. Purpose:
  1260. Notes:
  1261. ------------------------------------------------------------------------------*/
  1262. METHOD PUBLIC VOID readSortFields(
  1263. INPUT oJsonIdent AS JsonObject,
  1264. INPUT cFileName AS CHARACTER ,
  1265. OUTPUT cSortField AS CHARACTER ,
  1266. OUTPUT cDirection AS CHARACTER
  1267. ):
  1268. cSortField = ''.
  1269. cDirection = ''.
  1270. FIND userdata NO-LOCK
  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 = 'sortField'
  1275. AND userdata.section = cFileName
  1276. AND userdata.key_type = '' NO-ERROR.
  1277. IF AVAILABLE userdata THEN
  1278. ASSIGN
  1279. cSortField = userdata.cfield_1
  1280. cDirection = (IF userdata.cfield_2 BEGINS 'asc' THEN '' ELSE userdata.cfield_2).
  1281. RETURN.
  1282. END METHOD.
  1283. /*------------------------------------------------------------------------------
  1284. Purpose:
  1285. Notes:
  1286. ------------------------------------------------------------------------------*/
  1287. METHOD PUBLIC HANDLE getWebMenuStructure(
  1288. INPUT ipccompany AS CHARACTER ,
  1289. INPUT ipcuser_name AS CHARACTER ,
  1290. INPUT ipilanguage_id AS INTEGER
  1291. ):
  1292. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  1293. DEFINE VARIABLE lAdmin AS LOGICAL NO-UNDO INIT FALSE.
  1294. DEFINE VARIABLE htwebmenu AS HANDLE NO-UNDO.
  1295. EMPTY TEMP-TABLE twebmenu.
  1296. htwebmenu = TEMP-TABLE twebmenu:DEFAULT-BUFFER-HANDLE.
  1297. cuser_name = ipcuser_name.
  1298. lAdmin = FALSE.
  1299. DO WHILE TRUE.
  1300. FIND FIRST webmenu NO-LOCK
  1301. WHERE webmenu.company = ipccompany
  1302. AND webmenu.user_name = ipcuser_name NO-ERROR.
  1303. IF AVAILABLE webmenu THEN LEAVE.
  1304. IF cuser_name = 'Admin' THEN LEAVE.
  1305. cuser_name = 'Admin'.
  1306. END.
  1307. FIND FIRST users NO-LOCK
  1308. WHERE users.user_name = cuser_name NO-ERROR.
  1309. IF NOT AVAILABLE users THEN RETURN htwebmenu.
  1310. lAdmin = users.lAdmin.
  1311. FOR EACH webmenu NO-LOCK
  1312. WHERE webmenu.company = ipccompany
  1313. AND webmenu.user_name = cuser_name :
  1314. IF NOT lAdmin AND
  1315. webmenu.menu_link <> '' AND
  1316. webmenu.ladmin THEN NEXT.
  1317. CREATE twebmenu.
  1318. BUFFER-COPY webmenu
  1319. EXCEPT webmenu.created_at webmenu.updated_at
  1320. TO twebmenu.
  1321. END.
  1322. RETURN htwebmenu.
  1323. END METHOD.
  1324. /*------------------------------------------------------------------------------
  1325. Purpose:
  1326. Notes:
  1327. ------------------------------------------------------------------------------*/
  1328. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  1329. INPUT ipctable AS CHARACTER
  1330. ):
  1331. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  1332. DEFINE VARIABLE cDBNames AS CHARACTER NO-UNDO INIT 'Ge_MIS;FRAMEWORK'.
  1333. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1334. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1335. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1336. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  1337. DO ix = 1 TO NUM-ENTRIES(cDBNames, ';'):
  1338. cDBName = ENTRY(ix, cDBNames, ';').
  1339. cFileName = SUBSTITUTE('&1.&2', cDBName, ipcTable).
  1340. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  1341. IF NOT ERROR-STATUS:ERROR AND
  1342. VALID-HANDLE(hBuffer) THEN LEAVE.
  1343. DELETE OBJECT hBuffer NO-ERROR.
  1344. cDBName = ''.
  1345. END.
  1346. DELETE OBJECT hBuffer NO-ERROR.
  1347. cFields = ''.
  1348. CASE cDBName:
  1349. WHEN 'Ge_MIS' THEN
  1350. DO:
  1351. FIND FIRST Ge_MIS._File NO-LOCK
  1352. WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
  1353. // FIND FIRST Ge_MIS._Index NO-LOCK
  1354. // WHERE RECID(Ge_MIS._Index) = Ge_MIS._File._Prime-Index NO-ERROR.
  1355. FOR EACH Ge_MIS._Index-Field NO-LOCK
  1356. WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
  1357. FIRST Ge_MIS._Field NO-LOCK
  1358. WHERE RECID(Ge_MIS._Field) = Ge_MIS._index-Field._Field-recid
  1359. BY Ge_MIS._Index-Field._Index-Seq:
  1360. cFields = cFields
  1361. + (IF cFields = '' THEN '' ELSE ';')
  1362. + Ge_MIS._Field._Field-Name.
  1363. END.
  1364. END.
  1365. WHEN 'FRAMEWORK' THEN
  1366. DO:
  1367. FIND FIRST FRAMEWORK._File NO-LOCK
  1368. WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
  1369. // FIND FIRST FRAMEWORK._Index NO-LOCK
  1370. // WHERE RECID(FRAMEWORK._Index) = FRAMEWORK._File._Prime-Index NO-ERROR.
  1371. FOR EACH FRAMEWORK._Index-Field NO-LOCK
  1372. WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
  1373. FIRST FRAMEWORK._Field NO-LOCK
  1374. WHERE RECID(FRAMEWORK._Field) = FRAMEWORK._index-Field._Field-recid
  1375. BY FRAMEWORK._Index-Field._Index-Seq:
  1376. cFields = cFields
  1377. + (IF cFields = '' THEN '' ELSE ';')
  1378. + FRAMEWORK._Field._Field-Name.
  1379. END.
  1380. END.
  1381. END CASE.
  1382. RETURN cFields.
  1383. END METHOD.
  1384. /*------------------------------------------------------------------------------
  1385. Purpose:
  1386. Notes:
  1387. ------------------------------------------------------------------------------*/
  1388. METHOD PUBLIC CHARACTER getSysUser( ):
  1389. /*------------------------------------------------------------------------------
  1390. Purpose:
  1391. Notes:
  1392. ------------------------------------------------------------------------------*/
  1393. DEFINE VARIABLE mBen AS MEMPTR NO-UNDO.
  1394. DEFINE VARIABLE iLeng AS INTEGER INIT 100 NO-UNDO.
  1395. DEFINE VARIABLE fok AS INTEGER NO-UNDO.
  1396. DEFINE VARIABLE cBen AS CHARACTER NO-UNDO.
  1397. SET-SIZE(mBen) = iLeng.
  1398. RUN GetUserNameA( OUTPUT mBen, INPUT-OUTPUT iLeng, OUTPUT fok ) NO-ERROR.
  1399. ASSIGN
  1400. cBen = GET-STRING(mBen,1) NO-ERROR.
  1401. SET-SIZE(mBen) = 0.
  1402. RETURN cBen.
  1403. END METHOD.
  1404. /*------------------------------------------------------------------------------
  1405. Purpose:
  1406. Notes:
  1407. ------------------------------------------------------------------------------*/
  1408. METHOD PUBLIC CHARACTER getTitle(
  1409. INPUT httInput AS HANDLE
  1410. ):
  1411. DEFINE VARIABLE cTitel AS CHARACTER NO-UNDO.
  1412. FIND FIRST labeltexte NO-LOCK
  1413. WHERE labeltexte.company = httInput::company
  1414. AND labeltexte.user_name = httInput::user_name
  1415. AND labeltexte.program = httInput::program
  1416. AND labeltexte.field_name = 'TITLE'
  1417. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1418. IF NOT AVAILABLE labeltexte THEN
  1419. DO:
  1420. FIND FIRST labeltexte NO-LOCK
  1421. WHERE labeltexte.company = httInput::company
  1422. AND labeltexte.program = httInput::program
  1423. AND labeltexte.field_name = 'TITLE'
  1424. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1425. END.
  1426. cTitel = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE cProgramm).
  1427. RETURN cTitel.
  1428. END METHOD.
  1429. /*------------------------------------------------------------------------------
  1430. Purpose:
  1431. Notes:
  1432. ------------------------------------------------------------------------------*/
  1433. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  1434. INPUT oJsonObject AS JsonObject,
  1435. INPUT hbttInput AS HANDLE,
  1436. INPUT-OUTPUT hbttTemp AS HANDLE
  1437. ):
  1438. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  1439. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  1440. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  1441. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  1442. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  1443. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1444. jsonttTemp = NEW JsonObject().
  1445. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  1446. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  1447. hbttTemp:FIND-FIRST ().
  1448. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  1449. MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  1450. lRetVal = TRUE.
  1451. RETURN lRetVal.
  1452. END METHOD.
  1453. /*------------------------------------------------------------------------------
  1454. Purpose:
  1455. Notes:
  1456. ------------------------------------------------------------------------------*/
  1457. METHOD PUBLIC VOID readPosition(
  1458. INPUT oJsonIdent AS JsonObject ,
  1459. INPUT cFileName AS CHARACTER ,
  1460. OUTPUT iCurrentPosition AS INTEGER
  1461. ):
  1462. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1463. FIND userdata
  1464. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1465. AND userdata.company = oJsonIdent:GetCharacter('company')
  1466. AND userdata.branch = '0000'
  1467. AND userdata.record_type = 'position'
  1468. AND userdata.section = cFileName
  1469. AND userdata.key_type = '' NO-ERROR.
  1470. iCurrentPosition = (IF NOT AVAILABLE userdata THEN 1 ELSE userdata.ifield_1).
  1471. RELEASE userdata.
  1472. LEAVE.
  1473. END.
  1474. RETURN.
  1475. END METHOD.
  1476. /*------------------------------------------------------------------------------
  1477. Purpose:
  1478. Notes:
  1479. ------------------------------------------------------------------------------*/
  1480. METHOD PUBLIC VOID readStartcWhere(
  1481. INPUT oJsonIdent AS JsonObject,
  1482. INPUT cFileName AS CHARACTER ,
  1483. OUTPUT cWhere AS CHARACTER
  1484. ):
  1485. FIND userdata
  1486. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1487. AND userdata.company = oJsonIdent:GetCharacter('company')
  1488. AND userdata.branch = '0000'
  1489. AND userdata.record_type = 'where'
  1490. AND userdata.section = cFileName
  1491. AND userdata.key_type = 'start' NO-ERROR.
  1492. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1493. RELEASE userdata.
  1494. RETURN.
  1495. END METHOD.
  1496. /*------------------------------------------------------------------------------
  1497. Purpose:
  1498. Notes:
  1499. ------------------------------------------------------------------------------*/
  1500. METHOD PUBLIC VOID setActiveSelection(
  1501. INPUT oJsonIdent AS JsonObject,
  1502. INPUT cFileName AS CHARACTER ,
  1503. INPUT cActiveSelection AS CHARACTER
  1504. ):
  1505. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1506. FIND userdata
  1507. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1508. AND userdata.company = oJsonIdent:GetCharacter('company')
  1509. AND userdata.branch = '0000'
  1510. AND userdata.record_type = 'active'
  1511. AND userdata.section = cFileName
  1512. AND userdata.key_type = '' NO-ERROR.
  1513. IF NOT AVAILABLE UserData THEN
  1514. DO:
  1515. CREATE userdata.
  1516. ASSIGN
  1517. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1518. userdata.company = oJsonIdent:GetCharacter('company')
  1519. userdata.branch = '0000'
  1520. userdata.record_type = 'active'
  1521. userdata.section = cFileName
  1522. userdata.key_type = '' NO-ERROR.
  1523. END.
  1524. userdata.cfield_1 = cActiveSelection.
  1525. RELEASE userdata.
  1526. LEAVE.
  1527. END.
  1528. RETURN.
  1529. END METHOD.
  1530. /*------------------------------------------------------------------------------
  1531. Purpose:
  1532. Notes:
  1533. ------------------------------------------------------------------------------*/
  1534. METHOD PUBLIC VOID setSortField(
  1535. INPUT cSortField AS CHARACTER,
  1536. INPUT-OUTPUT httBrowserKo AS HANDLE
  1537. ):
  1538. DO WHILE TRUE:
  1539. IF httBrowserKo::sortfield = '' THEN
  1540. DO:
  1541. httBrowserKo::sortfield = cSortField + ':ASCENDING'.
  1542. LEAVE.
  1543. END.
  1544. /* ASCENDING / DESCENDING Kehren */
  1545. IF LOOKUP(cSortField, httBrowserKo::sortfield, ':') > 0 THEN
  1546. DO:
  1547. IF ENTRY(2, httBrowserKo::sortfield, ':') = 'ASCENDING' THEN
  1548. DO:
  1549. ENTRY(2, httBrowserKo::sortfield, ':') = 'DESCENDING'.
  1550. LEAVE.
  1551. END.
  1552. ELSE
  1553. DO:
  1554. ENTRY(2, httBrowserKo::sortfield, ':') = 'ASCENDING'.
  1555. LEAVE.
  1556. END.
  1557. END.
  1558. httBrowserKo::sortfield = cSortField + ':ASCENDING'.
  1559. LEAVE.
  1560. END.
  1561. updateBrowserKo( INPUT httBrowserKo ).
  1562. RETURN.
  1563. END METHOD.
  1564. /*------------------------------------------------------------------------------
  1565. Purpose:
  1566. Notes:
  1567. ------------------------------------------------------------------------------*/
  1568. METHOD PUBLIC LOGICAL startBrowserKopf (
  1569. INPUT httInput AS HANDLE,
  1570. OUTPUT httBrowserKo AS HANDLE
  1571. ):
  1572. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  1573. DEFINE BUFFER bbrowser_ko FOR browser_ko.
  1574. FIND FIRST browser_ko NO-LOCK
  1575. WHERE browser_ko.company = httInput::company
  1576. AND browser_ko.user_name = httInput::user_name
  1577. AND browser_ko.program = httInput::program
  1578. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  1579. IF NOT AVAILABLE browser_ko THEN
  1580. DO:
  1581. FIND FIRST browser_ko NO-LOCK
  1582. WHERE browser_ko.company = httInput::company
  1583. AND browser_ko.user_name = 'admin'
  1584. AND browser_ko.program = httInput::program
  1585. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  1586. END.
  1587. IF NOT AVAILABLE browser_ko THEN RETURN FALSE.
  1588. rRecid = RECID(browser_ko).
  1589. REPEAT TRANSACTION:
  1590. FIND browser_ko WHERE RECID(browser_ko) = rRecid.
  1591. IF browser_ko.user_name = 'admin' THEN
  1592. DO:
  1593. CREATE bbrowser_ko.
  1594. BUFFER-COPY browser_ko
  1595. EXCEPT browser_ko.user_name
  1596. TO bbrowser_ko
  1597. ASSIGN
  1598. bbrowser_ko.user_name = httInput::user_name.
  1599. rRecid = RECID(bbrowser_ko).
  1600. FIND browser_ko WHERE RECID(browser_ko) = rRecid.
  1601. END.
  1602. ASSIGN
  1603. browser_ko.actualpage = 0
  1604. browser_ko.lastrecid = 0.
  1605. RELEASE browser_ko.
  1606. LEAVE.
  1607. END.
  1608. FIND browser_ko NO-LOCK WHERE RECID(browser_ko) = rRecid.
  1609. httBrowserKo = TEMP-TABLE ttBrowserKo:DEFAULT-BUFFER-HANDLE.
  1610. httBrowserKo:EMPTY-TEMP-TABLE ().
  1611. httBrowserKo:BUFFER-CREATE ().
  1612. httBrowserKo:BUFFER-COPY(BUFFER browser_ko:HANDLE).
  1613. RELEASE browser_ko.
  1614. RETURN TRUE.
  1615. END METHOD.
  1616. /*------------------------------------------------------------------------------
  1617. Purpose:
  1618. Notes:
  1619. ------------------------------------------------------------------------------*/
  1620. METHOD PUBLIC LOGICAL startViewerKopf(
  1621. INPUT httInput AS HANDLE,
  1622. OUTPUT httViewerKo AS HANDLE
  1623. ):
  1624. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  1625. DEFINE BUFFER bviewer_ko FOR viewer_ko.
  1626. FIND FIRST viewer_ko NO-LOCK
  1627. WHERE viewer_ko.company = httInput::company
  1628. AND viewer_ko.user_name = httInput::user_name
  1629. AND viewer_ko.program = httInput::program
  1630. AND viewer_ko.table_name = httInput::table_name NO-ERROR.
  1631. IF NOT AVAILABLE viewer_ko THEN
  1632. DO:
  1633. FIND FIRST viewer_ko NO-LOCK
  1634. WHERE viewer_ko.company = httInput::company
  1635. AND viewer_ko.user_name = 'admin'
  1636. AND viewer_ko.program = httInput::program
  1637. AND viewer_ko.table_name = httInput::table_name NO-ERROR.
  1638. END.
  1639. IF NOT AVAILABLE viewer_ko THEN RETURN FALSE.
  1640. rRecid = RECID(viewer_ko).
  1641. REPEAT TRANSACTION:
  1642. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  1643. IF viewer_ko.user_name = 'admin' THEN
  1644. DO:
  1645. CREATE bviewer_ko.
  1646. BUFFER-COPY viewer_ko
  1647. EXCEPT viewer_ko.user_name
  1648. TO bviewer_ko
  1649. ASSIGN
  1650. bviewer_ko.user_name = httInput::user_name.
  1651. rRecid = RECID(bviewer_ko).
  1652. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  1653. END.
  1654. RELEASE viewer_ko.
  1655. LEAVE.
  1656. END.
  1657. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  1658. httviewerKo = TEMP-TABLE ttviewerKo:DEFAULT-BUFFER-HANDLE.
  1659. httviewerKo:EMPTY-TEMP-TABLE ().
  1660. httviewerKo:BUFFER-CREATE ().
  1661. httviewerKo:BUFFER-COPY(BUFFER viewer_ko:HANDLE).
  1662. RELEASE viewer_ko.
  1663. RETURN TRUE.
  1664. END METHOD.
  1665. /*------------------------------------------------------------------------------
  1666. Purpose:
  1667. Notes:
  1668. ------------------------------------------------------------------------------*/
  1669. METHOD PUBLIC LONGCHAR trimStructure(
  1670. INPUT oJsonInput AS JsonObject
  1671. ):
  1672. DEFINE VARIABLE lcResult AS LONGCHAR NO-UNDO.
  1673. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1674. lcResult = TRIM(oJsonInput:GetJsonText()).
  1675. lcResult = SUBSTRING(lcResult,02).
  1676. ii = LENGTH(lcResult) - 1.
  1677. lcResult = SUBSTRING(lcResult,01, ii).
  1678. RETURN lcResult.
  1679. END METHOD.
  1680. /*------------------------------------------------------------------------------
  1681. Purpose:
  1682. Notes:
  1683. ------------------------------------------------------------------------------*/
  1684. METHOD PUBLIC VOID updateBrowserKo(
  1685. INPUT httBrowserKo AS HANDLE
  1686. ):
  1687. DEFINE VARIABLE hBrowserKo AS HANDLE NO-UNDO.
  1688. hBrowserKo = BUFFER browser_ko:HANDLE.
  1689. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1690. FIND browser_ko EXCLUSIVE-LOCK
  1691. WHERE browser_ko.company = httBrowserKo::company
  1692. AND browser_ko.user_name = httBrowserKo::user_name
  1693. AND browser_ko.program = httBrowserKo::program
  1694. AND browser_ko.table_name = httBrowserKo::table_name NO-ERROR.
  1695. IF NOT AVAILABLE browser_ko THEN LEAVE.
  1696. DO i1 = 1 TO httBrowserKo:NUM-FIELDS:
  1697. IF httBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) = hBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) THEN NEXT.
  1698. hBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) = httBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0).
  1699. END.
  1700. RELEASE browser_ko.
  1701. LEAVE.
  1702. END.
  1703. RETURN.
  1704. END METHOD.
  1705. /*------------------------------------------------------------------------------
  1706. Purpose:
  1707. Notes:
  1708. ------------------------------------------------------------------------------*/
  1709. METHOD PUBLIC VOID writeLastcWhere(
  1710. INPUT oJsonIdent AS JsonObject,
  1711. INPUT cFileName AS CHARACTER ,
  1712. INPUT cWhere AS CHARACTER
  1713. ):
  1714. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1715. FIND userdata
  1716. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1717. AND userdata.company = oJsonIdent:GetCharacter('company')
  1718. AND userdata.branch = '0000'
  1719. AND userdata.record_type = 'where'
  1720. AND userdata.section = cFileName
  1721. AND userdata.key_type = 'last' NO-ERROR.
  1722. IF NOT AVAILABLE userdata THEN
  1723. DO:
  1724. CREATE userdata.
  1725. ASSIGN
  1726. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1727. userdata.company = oJsonIdent:GetCharacter('company')
  1728. userdata.branch = '0000'
  1729. userdata.record_type = 'where'
  1730. userdata.section = cFileName
  1731. userdata.key_type = 'last' NO-ERROR.
  1732. END.
  1733. ASSIGN
  1734. userdata.cfield_1 = cWhere.
  1735. RELEASE userdata.
  1736. LEAVE.
  1737. END.
  1738. RETURN.
  1739. END METHOD.
  1740. /*------------------------------------------------------------------------------
  1741. Purpose:
  1742. Notes:
  1743. ------------------------------------------------------------------------------*/
  1744. METHOD PUBLIC VOID writePosition(
  1745. INPUT oJsonIdent AS JsonObject ,
  1746. INPUT cFileName AS CHARACTER ,
  1747. INPUT iCurrentPosition AS INTEGER
  1748. ):
  1749. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1750. FIND userdata
  1751. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1752. AND userdata.company = oJsonIdent:GetCharacter('company')
  1753. AND userdata.branch = '0000'
  1754. AND userdata.record_type = 'position'
  1755. AND userdata.section = cFileName
  1756. AND userdata.key_type = '' NO-ERROR.
  1757. IF NOT AVAILABLE userdata THEN
  1758. DO:
  1759. CREATE userdata.
  1760. ASSIGN
  1761. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1762. userdata.company = oJsonIdent:GetCharacter('company')
  1763. userdata.branch = '0000'
  1764. userdata.record_type = 'position'
  1765. userdata.section = cFileName
  1766. userdata.key_type = '' NO-ERROR.
  1767. END.
  1768. ASSIGN
  1769. userdata.ifield_1 = iCurrentPosition.
  1770. RELEASE userdata.
  1771. LEAVE.
  1772. END.
  1773. RETURN.
  1774. END METHOD.
  1775. /*------------------------------------------------------------------------------
  1776. Purpose:
  1777. Notes:
  1778. ------------------------------------------------------------------------------*/
  1779. METHOD PUBLIC VOID writeSortfields(
  1780. INPUT oJsonIdent AS JsonObject,
  1781. INPUT cFileName AS CHARACTER ,
  1782. INPUT cSortField AS CHARACTER ,
  1783. INPUT cDirection AS CHARACTER
  1784. ):
  1785. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1786. FIND userdata
  1787. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1788. AND userdata.company = oJsonIdent:GetCharacter('company')
  1789. AND userdata.branch = '0000'
  1790. AND userdata.record_type = 'sortField'
  1791. AND userdata.section = cFileName
  1792. AND userdata.key_type = '' NO-ERROR.
  1793. IF NOT AVAILABLE userdata THEN
  1794. DO:
  1795. CREATE userdata.
  1796. ASSIGN
  1797. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1798. userdata.company = oJsonIdent:GetCharacter('company')
  1799. userdata.branch = '0000'
  1800. userdata.record_type = 'sortField'
  1801. userdata.section = cFileName
  1802. userdata.key_type = '' NO-ERROR.
  1803. END.
  1804. ASSIGN
  1805. userdata.cfield_1 = cSortfield
  1806. userdata.cfield_2 = cDirection.
  1807. RELEASE userdata.
  1808. LEAVE.
  1809. END.
  1810. RETURN.
  1811. END METHOD.
  1812. /*------------------------------------------------------------------------------
  1813. Purpose:
  1814. Notes:
  1815. ------------------------------------------------------------------------------*/
  1816. METHOD PUBLIC VOID writeStartcWhere(
  1817. INPUT oJsonIdent AS JsonObject,
  1818. INPUT cFileName AS CHARACTER ,
  1819. INPUT cWhere AS CHARACTER
  1820. ):
  1821. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1822. FIND userdata
  1823. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1824. AND userdata.company = oJsonIdent:GetCharacter('company')
  1825. AND userdata.branch = '0000'
  1826. AND userdata.record_type = 'where'
  1827. AND userdata.section = cFileName
  1828. AND userdata.key_type = 'start' NO-ERROR.
  1829. IF NOT AVAILABLE userdata THEN
  1830. DO:
  1831. CREATE userdata.
  1832. ASSIGN
  1833. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1834. userdata.company = oJsonIdent:GetCharacter('company')
  1835. userdata.branch = '0000'
  1836. userdata.record_type = 'where'
  1837. userdata.section = cFileName
  1838. userdata.key_type = 'start' NO-ERROR.
  1839. END.
  1840. ASSIGN
  1841. userdata.cfield_1 = cWhere.
  1842. RELEASE userdata.
  1843. LEAVE.
  1844. END.
  1845. RETURN.
  1846. END METHOD.
  1847. /*------------------------------------------------------------------------------
  1848. Purpose:
  1849. Notes:
  1850. ------------------------------------------------------------------------------*/
  1851. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  1852. MESSAGE 'Destructor utilitiesHandler '.
  1853. /* DELETE OBJECT hQuery NO-ERROR. */
  1854. /* DELETE OBJECT hBuffer NO-ERROR. */
  1855. END DESTRUCTOR.
  1856. END CLASS.