utilitiesHandler.cls 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331
  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 System.Reflection.Emit.Label FROM ASSEMBLY.
  12. CLASS utilities.utilitiesHandler:
  13. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  14. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  15. DEFINE VARIABLE cProgramm AS CHARACTER NO-UNDO.
  16. DEFINE TEMP-TABLE ttBrowserKo LIKE browser_ko.
  17. DEFINE TEMP-TABLE ttViewerKo LIKE viewer_ko.
  18. DEFINE TEMP-TABLE ttExterneFelder NO-UNDO
  19. FIELD cTabelle AS CHARACTER
  20. FIELD hBuffer AS HANDLE
  21. FIELD cKeyFelder AS CHARACTER
  22. FIELD cWhere AS CHARACTER
  23. FIELD cFelder AS CHARACTER
  24. FIELD cDataType AS CHARACTER
  25. .
  26. /*------------------------------------------------------------------------------
  27. Purpose:
  28. Notes:
  29. ------------------------------------------------------------------------------*/
  30. METHOD PUBLIC HANDLE createExterneFelder(
  31. INPUT ipcTabelle AS CHARACTER ,
  32. INPUT ipcFeld AS CHARACTER ,
  33. INPUT ipcDatatype AS CHARACTER ,
  34. INPUT iphttInput AS HANDLE
  35. ):
  36. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  37. DEFINE VARIABLE cKeyFeld AS CHARACTER NO-UNDO.
  38. DEFINE VARIABLE cKeyValue AS CHARACTER NO-UNDO.
  39. FIND FIRST ttExterneFelder
  40. WHERE ttExterneFelder.cTabelle = ipcTabelle NO-ERROR.
  41. DO WHILE TRUE:
  42. IF AVAILABLE ttExterneFelder THEN LEAVE.
  43. FIND AnaDat._File NO-LOCK WHERE AnaDat._File._File-name = ipcTabelle NO-ERROR.
  44. IF NOT AVAILABLE AnaDat._File THEN RETURN hBuffer.
  45. FIND FIRST AnaDat._Field NO-LOCK OF _File
  46. WHERE AnaDat._Field._Field-Name = ipcFeld NO-ERROR.
  47. IF NOT AVAILABLE AnaDat._Field THEN RETURN hBuffer.
  48. CREATE BUFFER hBuffer FOR TABLE ipcTabelle.
  49. CREATE ttExterneFelder.
  50. ASSIGN
  51. ttExterneFelder.cTabelle = ipcTabelle
  52. ttExterneFelder.hBuffer = hBuffer.
  53. FIND FIRST AnaDat._Index WHERE RECID(_Index) = _File._Prime-Index NO-LOCK.
  54. FOR EACH AnaDat._Index-Field
  55. WHERE _Index-Field._Index-Recid = RECID(_Index):
  56. FIND AnaDat._Field WHERE RECID(_Field) = _Index-Field._Field-Recid.
  57. cKeyFeld = _Field._Field-Name.
  58. cKeyValue = ''.
  59. CASE cKeyFeld:
  60. WHEN 'Firma' OR
  61. WHEN 'Mandant' THEN
  62. DO:
  63. cKeyValue = QUOTER(iphttInput::mandant).
  64. END.
  65. WHEN 'Sprcd' THEN
  66. DO:
  67. cKeyValue = iphttInput::sprcd.
  68. END.
  69. WHEN 'Benutzer' THEN
  70. DO:
  71. cKeyValue = iphttInput::benutzer.
  72. END.
  73. END CASE.
  74. IF cKeyValue <> '' THEN
  75. DO:
  76. CASE ipcDatatype:
  77. WHEN 'character' THEN
  78. cKeyValue = QUOTER(cKeyValue).
  79. END CASE.
  80. ttExterneFelder.cWhere = ttExterneFelder.cWhere
  81. + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
  82. + SUBSTITUTE('&1.&2 = &3':U, ipcTabelle, cKeyFeld, cKeyValue).
  83. NEXT.
  84. END.
  85. ttExterneFelder.cKeyFelder = ttExterneFelder.cKeyFelder
  86. + (IF ttExterneFelder.cKeyFelder = '' THEN '' ELSE ';')
  87. + cKeyFeld.
  88. END.
  89. IF LOOKUP(ipcFeld, ttExterneFelder.cFelder, ';') > 0 THEN NEXT.
  90. ttExterneFelder.cFelder = ttExterneFelder.cFelder
  91. + (IF ttExterneFelder.cFelder = '' THEN '' ELSE ';')
  92. + ipcFeld.
  93. ttExterneFelder.cDataType = ttExterneFelder.cDataType
  94. + (IF ttExterneFelder.cDataType = '' THEN '' ELSE ';')
  95. + ipcFeld.
  96. END.
  97. // DELETE OBJECT hBuffer NO-ERROR.
  98. RETURN hBuffer.
  99. END METHOD.
  100. /*------------------------------------------------------------------------------
  101. Purpose:
  102. Notes:
  103. ------------------------------------------------------------------------------*/
  104. METHOD PUBLIC LOGICAL createQuery(
  105. INPUT httInput AS HANDLE,
  106. INPUT httBrowserKo AS HANDLE,
  107. OUTPUT hQuery AS HANDLE,
  108. OUTPUT hBuffer AS HANDLE
  109. ).
  110. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  111. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  112. DEFINE VARIABLE cAnd AS CHARACTER NO-UNDO INIT 'WHERE'.
  113. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  114. DEFINE VARIABLE cSortFeld AS CHARACTER NO-UNDO.
  115. DEFINE VARIABLE cRichtung AS CHARACTER NO-UNDO.
  116. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  117. DEFINE VARIABLE iModulo AS INTEGER NO-UNDO.
  118. cTabelle = httInput::tabelle.
  119. cSortFeld = httBrowserKo::sortfeld.
  120. cRichtung = ''.
  121. IF cSortFeld <> '' THEN
  122. DO:
  123. IF NUM-ENTRIES(cSortfeld, ':') > 1 THEN
  124. DO:
  125. cRichtung = ENTRY(2, cSortfeld, ':').
  126. cSortfeld = ENTRY(1, cSortfeld, ':').
  127. END.
  128. IF cRichtung = '' THEN cRichtung = 'ASCENDING'.
  129. END.
  130. CREATE QUERY hQuery.
  131. CREATE BUFFER hBuffer FOR TABLE cTabelle.
  132. hQuery:SET-BUFFERS (hBuffer).
  133. IF httInput::action = 'last' THEN
  134. DO:
  135. cWhere = SUBSTITUTE('PRESELECT EACH &1 NO-LOCK ', httInput::tabelle).
  136. IF httBrowserKo::lmandant THEN
  137. DO:
  138. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, httInput::tabelle, httInput::mandant).
  139. END.
  140. hQuery:QUERY-PREPARE (cWhere).
  141. hQuery:QUERY-OPEN ().
  142. iAnzRec = hQuery:NUM-RESULTS.
  143. iModulo = iAnzRec MOD httBrowserKo::pagesize.
  144. IF iModulo > 0 THEN httBrowserKo::actualpage = (iAnzRec - (iAnzRec MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize.
  145. ELSE httBrowserKo::actualpage = (iAnzRec / httBrowserKo::pagesize) - 1.
  146. hQuery:QUERY-CLOSE ().
  147. END.
  148. i1 = 0.
  149. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', httInput::tabelle).
  150. IF httBrowserKo::lmandant THEN
  151. DO:
  152. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, httInput::tabelle, httInput::mandant).
  153. cAnd = 'AND'.
  154. END.
  155. IF cRichtung = 'ASCENDING' THEN cRichtung = ''.
  156. IF cSortFeld <> '' THEN cWhere = cWhere + ' BY ' + cSortFeld + ' ' + cRichtung.
  157. MESSAGE 'cWhere-Statement = ' cWhere.
  158. hQuery:QUERY-PREPARE (cWhere).
  159. lRetVal = TRUE.
  160. RETURN lRetVal.
  161. END METHOD.
  162. /*------------------------------------------------------------------------------
  163. Purpose:
  164. Notes:
  165. ------------------------------------------------------------------------------*/
  166. METHOD PUBLIC LOGICAL createSearchQuery(
  167. INPUT httInput AS HANDLE,
  168. INPUT httBrowserKo AS HANDLE,
  169. OUTPUT hQuery AS HANDLE,
  170. OUTPUT hBuffer AS HANDLE
  171. ).
  172. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  173. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  174. DEFINE VARIABLE cAnd AS CHARACTER NO-UNDO INIT 'WHERE'.
  175. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  176. DEFINE VARIABLE cSuchFeld AS CHARACTER NO-UNDO.
  177. DEFINE VARIABLE cSortfeld AS CHARACTER NO-UNDO.
  178. DEFINE VARIABLE cRichtung AS CHARACTER NO-UNDO.
  179. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  180. DEFINE VARIABLE lcWortIndex AS LONGCHAR NO-UNDO.
  181. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  182. DEFINE VARIABLE iFelder AS INTEGER NO-UNDO.
  183. DEFINE VARIABLE iFound AS INTEGER NO-UNDO.
  184. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  185. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  186. DEFINE VARIABLE httTemp AS HANDLE NO-UNDO.
  187. DEFINE VARIABLE hbTabelle AS HANDLE NO-UNDO.
  188. DEFINE VARIABLE hqTabelle AS HANDLE NO-UNDO.
  189. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  190. DEFINE VARIABLE hWortIndex AS HANDLE NO-UNDO.
  191. DEFINE VARIABLE hSuchFeld AS HANDLE NO-UNDO.
  192. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  193. DEFINE VARIABLE hFeldTabelle AS HANDLE NO-UNDO EXTENT 10.
  194. DEFINE VARIABLE cInhaltTabelle AS CHARACTER NO-UNDO EXTENT 10.
  195. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  196. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  197. DEFINE VARIABLE iy AS INTEGER NO-UNDO.
  198. DEFINE VARIABLE lQuoter AS LOGICAL NO-UNDO.
  199. cTabelle = httInput::tabelle.
  200. cSuchFeld = httInput::suchfeld.
  201. cSortfeld = httBrowserKo::sortfeld.
  202. cRichtung = ''.
  203. IF cSortFeld <> '' THEN
  204. DO:
  205. IF NUM-ENTRIES(cSortfeld, ':') > 1 THEN
  206. DO:
  207. cRichtung = ENTRY(2, cSortfeld, ':').
  208. cSortfeld = ENTRY(1, cSortfeld, ':').
  209. END.
  210. IF cRichtung = '' THEN cRichtung = 'ASCENDING'.
  211. END.
  212. MESSAGE 'Suchfeld = ' cSuchfeld ' Sortfeld = ' cSortfeld ' Richtung = ' cRichtung.
  213. CREATE TEMP-TABLE httTemp.
  214. httTemp:CREATE-LIKE (cTabelle).
  215. httTemp:ADD-NEW-FIELD ('ident', 'CHARACTER').
  216. httTemp:TEMP-TABLE-PREPARE('ttTemp').
  217. hBuffer = httTemp:DEFAULT-BUFFER-HANDLE.
  218. CREATE QUERY hqTabelle.
  219. CREATE BUFFER hbTabelle FOR TABLE cTabelle.
  220. hqTabelle:SET-BUFFERS ( hbTabelle ).
  221. hWortIndex = hbTabelle:BUFFER-FIELD('WortIndex') NO-ERROR.
  222. iFelder = NUM-ENTRIES(cSuchFeld, ' ').
  223. ASSIGN
  224. hFeldTabelle = ?
  225. cInhaltTabelle = ''
  226. ix = 0.
  227. IF NUM-ENTRIES(cSuchfeld, '=') > 1 THEN
  228. DO:
  229. DO ii = 1 TO NUM-ENTRIES(cSuchfeld, ' '):
  230. cString = ENTRY(ii, cSuchFeld, ' ').
  231. IF NUM-ENTRIES(cString, '=') > 1 THEN
  232. DO:
  233. cFeld = ENTRY(1, cString, '=').
  234. hSuchFeld = hbTabelle:BUFFER-FIELD(cFeld) NO-ERROR.
  235. IF NOT VALID-HANDLE(hSuchFeld) THEN NEXT.
  236. ix = ix + 1.
  237. hFeldTabelle [ix] = hSuchFeld.
  238. cInhaltTabelle[ix] = ENTRY(2, cString, '=').
  239. NEXT.
  240. END.
  241. IF NOT VALID-HANDLE(hSuchfeld) THEN NEXT.
  242. cInhaltTabelle[ix] = cInhaltTabelle[ix] + ',' + cString.
  243. END.
  244. END.
  245. cWhere = SUBSTITUTE('PRESELECT EACH &1 NO-LOCK ', cTabelle).
  246. IF httBrowserKo::lmandant THEN
  247. DO:
  248. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, cTabelle, httInput::mandant).
  249. cAnd = 'AND'.
  250. END.
  251. MESSAGE 'cWhere beim Suchen ' cWhere.
  252. hqTabelle:QUERY-PREPARE (cWhere).
  253. hqTabelle:QUERY-OPEN ().
  254. NEXTDATENSATZ:
  255. DO WHILE TRUE:
  256. hqTabelle:GET-NEXT() NO-ERROR.
  257. IF hqTabelle:QUERY-OFF-END THEN LEAVE.
  258. lcwortindex = ''.
  259. rRecid = hbTabelle:RECID.
  260. DO WHILE ix > 0:
  261. MESSAGE 'Suchen mit bestimmtenm feldern' ix.
  262. iFound = 0.
  263. DO ii = 1 TO ix:
  264. hFeld = hFeldTabelle [ii].
  265. cSuchfeld = cInhaltTabelle[ii].
  266. cInhalt = hFeld:BUFFER-VALUE(0) NO-ERROR.
  267. IF ERROR-STATUS:ERROR THEN NEXT.
  268. IF cInhalt = ? THEN NEXT.
  269. DO iy = 1 TO NUM-ENTRIES(cSuchFeld, ','):
  270. cString = ENTRY(iy, cSuchFeld, ',').
  271. MESSAGE 'Kommt der Wert ' cString 'in' cInhalt 'vor?'.
  272. IF LOOKUP(cString, cInhalt, ' ') = 0 THEN NEXT.
  273. iFound = iFound + 1.
  274. LEAVE.
  275. END.
  276. END.
  277. IF iFound < ix THEN NEXT NEXTDATENSATZ.
  278. LEAVE.
  279. END.
  280. DO WHILE ix = 0:
  281. iFound = 0.
  282. IF VALID-HANDLE(hWortIndex) THEN
  283. DO:
  284. lcWortIndex = hWortIndex:BUFFER-VALUE(0).
  285. END.
  286. ELSE
  287. DO:
  288. DO ii = 1 TO hbTabelle:NUM-FIELDS:
  289. hFeld = hbTabelle:BUFFER-FIELD(ii).
  290. IF hFeld:EXTENT > 0 THEN NEXT.
  291. cInhalt = getBufferFieldValue(INPUT hFeld, OUTPUT lQuoter).
  292. IF cInhalt = '' THEN NEXT.
  293. lcWortIndex = lcWortIndex
  294. + (IF lcWortindex = '' THEN '' ELSE ' ')
  295. + cInhalt.
  296. END.
  297. END.
  298. DO ii = 1 TO iFelder:
  299. cInhalt = ENTRY(ii, cSuchfeld, ' ').
  300. IF INDEX(lcWortIndex, cInhalt) = 0 THEN NEXT.
  301. iFound = iFound + 1.
  302. END.
  303. IF iFound < iFelder THEN NEXT NEXTDATENSATZ.
  304. LEAVE.
  305. END.
  306. hBuffer:BUFFER-CREATE ().
  307. hBuffer:BUFFER-COPY (hbTabelle).
  308. hBuffer::ident = TRIM(STRING(rRecid,'>>>>>>>>9')).
  309. END.
  310. hqTabelle:QUERY-CLOSE ().
  311. DELETE OBJECT hqTabelle.
  312. CREATE QUERY hQuery.
  313. hQuery:SET-BUFFERS ( hBuffer ).
  314. cWhere = SUBSTITUTE('FOR EACH ttTemp NO-LOCK ').
  315. IF cRichtung = 'ASCENDING' THEN cRichtung = ''.
  316. IF cSortFeld <> '' THEN cWhere = cWhere + ' BY ' + cSortFeld + ' ' + cRichtung.
  317. hQuery:QUERY-PREPARE (cWhere).
  318. lRetVal = TRUE.
  319. RETURN lRetVal.
  320. END METHOD.
  321. /*------------------------------------------------------------------------------
  322. Purpose:
  323. Notes:
  324. ------------------------------------------------------------------------------*/
  325. METHOD PUBLIC VOID createTemptableBrowser(
  326. INPUT httInput AS HANDLE,
  327. INPUT httBrowserKo AS HANDLE,
  328. OUTPUT httBrowser AS HANDLE
  329. ):
  330. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  331. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  332. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  333. DEFINE VARIABLE hFremdBuff AS HANDLE NO-UNDO.
  334. EMPTY TEMP-TABLE ttExterneFelder.
  335. DEFINE BUFFER bbrowser_ze FOR browser_ze.
  336. FIND FIRST browser_ze NO-LOCK
  337. WHERE browser_ze.mandant = httInput::mandant
  338. AND browser_ze.benutzer = httInput::benutzer
  339. AND browser_ze.program = httInput::programm NO-ERROR.
  340. IF NOT AVAILABLE browser_ze THEN
  341. DO:
  342. FIND FIRST browser_ze NO-LOCK
  343. WHERE browser_ze.mandant = httInput::mandant
  344. AND browser_ze.benutzer = 'admin'
  345. AND browser_ze.program = httInput::programm NO-ERROR.
  346. END.
  347. IF NOT AVAILABLE browser_ze THEN RETURN.
  348. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  349. IF browser_ze.benutzer <> 'admin' THEN LEAVE.
  350. IF httInput::benutzer = 'admin' THEN LEAVE.
  351. FOR EACH browser_ze NO-LOCK
  352. WHERE browser_ze.mandant = httInput::mandant
  353. AND browser_ze.benutzer = 'admin'
  354. AND browser_ze.program = httInput::programm:
  355. CREATE bbrowser_ze.
  356. BUFFER-COPY browser_ze
  357. EXCEPT browser_ze.benutzer
  358. TO bbrowser_ze
  359. ASSIGN
  360. bbrowser_ze.benutzer = httInput::benutzer.
  361. RELEASE bbrowser_ze.
  362. END.
  363. LEAVE.
  364. END.
  365. CREATE TEMP-TABLE httTable.
  366. httTable:SERIALIZE-NAME = 'browser'.
  367. httTable:ADD-NEW-FIELD ('ident', 'CHARACTER').
  368. httTable:ADD-NEW-FIELD ('sel' , 'CHARACTER').
  369. FOR EACH browser_ze NO-LOCK
  370. WHERE browser_ze.mandant = httInput::mandant
  371. AND browser_ze.benutzer = httInput::benutzer
  372. AND browser_ze.program = httInput::programm
  373. BY browser_ze.prior:
  374. httTable:ADD-NEW-FIELD (browser_ze.feld, 'CHARACTER').
  375. IF browser_ze.tabelle <> httInput::tabelle THEN
  376. DO:
  377. hFremdBuff = createExterneFelder (
  378. INPUT browser_ze.tabelle,
  379. INPUT browser_ze.feld,
  380. INPUT browser_ze.feldtype,
  381. INPUT httInput
  382. ).
  383. END.
  384. END.
  385. httTable:TEMP-TABLE-PREPARE ('ttBrowser').
  386. httBrowser = httTable:DEFAULT-BUFFER-HANDLE.
  387. httBrowser:BUFFER-CREATE ().
  388. DO i1 = 1 TO httBrowser:NUM-FIELDS:
  389. IF i1 = 1 THEN
  390. DO:
  391. httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE = 'ident'.
  392. NEXT.
  393. END.
  394. IF i1 = 2 THEN
  395. DO:
  396. httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE = 'sel'.
  397. NEXT.
  398. END.
  399. cFeld = httBrowser:BUFFER-FIELD(i1):NAME.
  400. FIND FIRST labeltexte NO-LOCK
  401. WHERE labeltexte.mandant = httInput::mandant
  402. AND labeltexte.benutzer = httInput::benutzer
  403. AND labeltexte.program = httInput::program
  404. AND labeltexte.tabelle = httInput::tabelle
  405. AND labeltexte.feld = cFeld
  406. AND labeltexte.sprcd = httInput::sprcd NO-ERROR.
  407. IF NOT AVAILABLE labeltexte THEN
  408. DO:
  409. FIND FIRST labeltexte NO-LOCK
  410. WHERE labeltexte.mandant = httInput::mandant
  411. AND labeltexte.program = httInput::program
  412. AND labeltexte.tabelle = httInput::tabelle
  413. AND labeltexte.feld = cFeld
  414. AND labeltexte.sprcd = httInput::sprcd NO-ERROR.
  415. END.
  416. IF NOT AVAILABLE labeltexte THEN
  417. DO:
  418. FIND FIRST labeltexte NO-LOCK
  419. WHERE labeltexte.mandant = httInput::mandant
  420. AND labeltexte.tabelle = httInput::tabelle
  421. AND labeltexte.feld = cFeld
  422. AND labeltexte.sprcd = httInput::sprcd NO-ERROR.
  423. END.
  424. IF NOT AVAILABLE labeltexte THEN
  425. DO:
  426. FIND FIRST labeltexte NO-LOCK
  427. WHERE labeltexte.mandant = httInput::mandant
  428. AND labeltexte.feld = cFeld
  429. AND labeltexte.sprcd = httInput::sprcd NO-ERROR.
  430. END.
  431. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.headlabel ELSE cFeld).
  432. httBrowser:BUFFER-FIELD(i1):buffer-VALUE(0) = cLabel + '/@/' + labeltexte.ausrichtung.
  433. END.
  434. RETURN.
  435. END METHOD.
  436. /*------------------------------------------------------------------------------
  437. Purpose:
  438. Notes:
  439. ------------------------------------------------------------------------------*/
  440. METHOD PUBLIC VOID createTemptableViewer(
  441. INPUT httInput AS HANDLE,
  442. INPUT httViewerKo AS HANDLE,
  443. OUTPUT httViewer AS HANDLE
  444. ):
  445. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  446. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  447. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  448. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  449. DEFINE VARIABLE hBufTabelle AS HANDLE NO-UNDO.
  450. DEFINE BUFFER bviewer_ze FOR viewer_ze.
  451. FIND FIRST viewer_ze NO-LOCK
  452. WHERE viewer_ze.mandant = httInput::mandant
  453. AND viewer_ze.benutzer = httInput::benutzer
  454. AND viewer_ze.program = httInput::programm
  455. AND viewer_ze.tabelle = httInput::tabelle NO-ERROR.
  456. IF NOT AVAILABLE viewer_ze THEN
  457. DO:
  458. FIND FIRST viewer_ze NO-LOCK
  459. WHERE viewer_ze.mandant = httInput::mandant
  460. AND viewer_ze.benutzer = 'admin'
  461. AND viewer_ze.program = httInput::programm
  462. AND viewer_ze.tabelle = httInput::tabelle NO-ERROR.
  463. END.
  464. IF NOT AVAILABLE viewer_ze THEN RETURN.
  465. cTabelle = viewer_ze.tabelle.
  466. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  467. IF viewer_ze.benutzer <> 'admin' THEN LEAVE.
  468. IF httInput::benutzer = 'admin' THEN LEAVE.
  469. FOR EACH viewer_ze NO-LOCK
  470. WHERE viewer_ze.mandant = httInput::mandant
  471. AND viewer_ze.benutzer = 'admin'
  472. AND viewer_ze.program = httInput::programm
  473. AND viewer_ze.tabelle = httInput::tabelle:
  474. CREATE bviewer_ze.
  475. BUFFER-COPY viewer_ze
  476. EXCEPT viewer_ze.benutzer
  477. TO bviewer_ze
  478. ASSIGN
  479. bviewer_ze.benutzer = httInput::benutzer.
  480. RELEASE bviewer_ze.
  481. END.
  482. LEAVE.
  483. END.
  484. CREATE BUFFER hBufTabelle FOR TABLE cTabelle.
  485. CREATE TEMP-TABLE httTable.
  486. httTable:SERIALIZE-NAME = 'viewerdaten'.
  487. FOR EACH viewer_ze NO-LOCK
  488. WHERE viewer_ze.mandant = httInput::mandant
  489. AND viewer_ze.benutzer = httInput::benutzer
  490. AND viewer_ze.program = httInput::programm
  491. AND viewer_ze.tabelle = httInput::tabelle
  492. BY viewer_ze.prior:
  493. IF viewer_ze.addFieldTabelle = '' AND
  494. NOT viewer_ze.feld BEGINS 'DUMMY' AND
  495. NOT viewer_ze.feld BEGINS 'ident' THEN
  496. httTable:ADD-LIKE-FIELD (viewer_ze.feld, hBufTabelle:BUFFER-FIELD(viewer_ze.feld)).
  497. ELSE httTable:ADD-NEW-FIELD (viewer_ze.feld, 'CHARACTER').
  498. /* MESSAGE viewer_ze.feld ' hinzugefügt'.*/
  499. END.
  500. httTable:TEMP-TABLE-PREPARE (cTabelle).
  501. httViewer = httTable:DEFAULT-BUFFER-HANDLE.
  502. DELETE OBJECT hBufTabelle.
  503. RETURN.
  504. END METHOD.
  505. /*------------------------------------------------------------------------------
  506. Purpose:
  507. Notes:
  508. ------------------------------------------------------------------------------*/
  509. METHOD PUBLIC INTEGER fillBrowserTT(
  510. INPUT httBrowserKo AS HANDLE,
  511. INPUT hQuery AS HANDLE,
  512. INPUT hbttInput AS HANDLE,
  513. INPUT-OUTPUT httBrowser AS HANDLE
  514. ):
  515. DEFINE VARIABLE hbQuery AS HANDLE NO-UNDO.
  516. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  517. DEFINE VARIABLE hFeldRecid AS HANDLE NO-UNDO.
  518. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  519. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  520. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  521. DEFINE VARIABLE iSkip AS INTEGER NO-UNDO.
  522. DEFINE VARIABLE iPageSize AS INTEGER NO-UNDO.
  523. hQuery:QUERY-OPEN ().
  524. iSkip = httBrowserKo::actualpage * httBrowserKo::pagesize.
  525. hQuery:REPOSITION-FORWARD (iSkip).
  526. MESSAGE 'anzahl records skip = ' iSkip.
  527. iAnzRec = 0.
  528. hbQuery = hQuery:GET-BUFFER-HANDLE ().
  529. hFeldRecid = hbQuery:BUFFER-FIELD('ident') NO-ERROR.
  530. iPageSize = (IF hbttInput::suchfeld = '' THEN httBrowserKo::pagesize ELSE 100).
  531. DO i1 = 1 TO iPageSize:
  532. hQuery:GET-NEXT() NO-ERROR.
  533. IF hQuery:QUERY-OFF-END THEN LEAVE.
  534. httBrowser:BUFFER-CREATE ().
  535. IF hbttInput::action = 'search' AND
  536. i1 = 1 THEN hbttInput::ident = TRIM(STRING(INT64(hbQuery::ident),'>>>>>>>>>9')).
  537. IF VALID-HANDLE(hFeldRecid) THEN httBrowser::ident = TRIM(STRING(INT64(hbQuery::ident),'>>>>>>>>>9')).
  538. ELSE httBrowser::Ident = TRIM(STRING(hbQuery:RECID)).
  539. IF httBrowser::ident = hbttInput::ident THEN httBrowser::sel = 'TRUE'.
  540. DO i2 = 3 TO httBrowser:NUM-FIELDS:
  541. cFeld = httBrowser:BUFFER-FIELD(i2):NAME.
  542. hFeld = hbQuery :BUFFER-FIELD(cFeld) NO-ERROR.
  543. IF NOT VALID-HANDLE(hFeld) OR
  544. ERROR-STATUS:ERROR THEN
  545. DO:
  546. cInhalt = getFieldValueExtern(INPUT cFeld, INPUT hbttInput, INPUT httBrowser ).
  547. httBrowser:BUFFER-FIELD(i2):BUFFER-VALUE = cInhalt.
  548. NEXT.
  549. END.
  550. CASE hFeld:DATA-TYPE:
  551. WHEN 'INTEGER' OR
  552. WHEN 'INT64' THEN
  553. cInhalt = TRIM(STRING(INTEGER(hFeld:BUFFER-VALUE(0)),'->>>,>>>,>>9')).
  554. WHEN 'DECIMAL' THEN
  555. cInhalt = TRIM(STRING(DECIMAL(hFeld:BUFFER-VALUE(0)),'->>>,>>>,>>9.99<<<')).
  556. WHEN 'DATE' THEN
  557. cInhalt = STRING(DATE(hFeld:BUFFER-VALUE(0)),'99.99.9999').
  558. OTHERWISE
  559. cInhalt = hFeld:BUFFER-VALUE(0).
  560. END CASE.
  561. httBrowser:BUFFER-FIELD(i2):BUFFER-VALUE = cInhalt.
  562. END.
  563. iAnzRec = iAnzRec + 1.
  564. END.
  565. RETURN iAnzRec.
  566. END METHOD.
  567. /*------------------------------------------------------------------------------
  568. Purpose:
  569. Notes:
  570. ------------------------------------------------------------------------------*/
  571. METHOD PUBLIC LOGICAL getBrowserKopf(
  572. INPUT httInput AS HANDLE,
  573. OUTPUT httBrowserKo AS HANDLE
  574. ):
  575. MESSAGE 'getBrowserKopf mit ' httInput::mandant '/' httInput::benutzer '/' httInput::programm '/' httInput::tabelle.
  576. FIND FIRST browser_ko NO-LOCK
  577. WHERE browser_ko.mandant = httInput::mandant
  578. AND browser_ko.benutzer = httInput::benutzer
  579. AND browser_ko.program = httInput::programm
  580. AND browser_ko.tabelle = httInput::tabelle NO-ERROR.
  581. IF NOT AVAILABLE browser_ko THEN
  582. DO:
  583. FIND FIRST browser_ko NO-LOCK
  584. WHERE browser_ko.mandant = httInput::mandant
  585. AND browser_ko.benutzer = 'admin'
  586. AND browser_ko.program = httInput::programm
  587. AND browser_ko.tabelle = httInput::tabelle NO-ERROR.
  588. END.
  589. IF NOT AVAILABLE browser_ko THEN RETURN FALSE.
  590. httBrowserKo = TEMP-TABLE ttBrowserKo:DEFAULT-BUFFER-HANDLE.
  591. httBrowserKo:EMPTY-TEMP-TABLE ().
  592. httBrowserKo:BUFFER-CREATE ().
  593. httBrowserKo:BUFFER-COPY(BUFFER browser_ko:HANDLE).
  594. RELEASE browser_ko.
  595. RETURN TRUE.
  596. END METHOD.
  597. /*------------------------------------------------------------------------------
  598. Purpose:
  599. Notes:
  600. ------------------------------------------------------------------------------*/
  601. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphFeld AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  602. DEFINE VARIABLE cFeldInhalt AS CHARACTER NO-UNDO.
  603. cFeldInhalt = ''.
  604. oplQuoter = FALSE.
  605. CASE iphFeld:DATA-TYPE:
  606. WHEN 'CHARACTER' THEN
  607. ASSIGN
  608. cFeldInhalt = iphFeld:BUFFER-VALUE(0)
  609. oplQuoter = TRUE.
  610. WHEN 'DECIMAL' OR
  611. WHEN 'INTEGER' THEN
  612. cFeldInhalt = TRIM(STRING(INTEGER(iphFeld:BUFFER-VALUE),'>>>>>>>>9')).
  613. WHEN 'DATE' THEN
  614. cFeldInhalt = STRING(DATE(iphFeld:BUFFER-VALUE),'99.99.9999').
  615. OTHERWISE
  616. cFeldInhalt = iphFeld:BUFFER-VALUE.
  617. END CASE.
  618. IF cFeldInhalt = ? THEN cFeldInhalt = ''.
  619. RETURN cFeldInhalt.
  620. END METHOD.
  621. /*------------------------------------------------------------------------------
  622. Purpose:
  623. Notes:
  624. ------------------------------------------------------------------------------*/
  625. METHOD PUBLIC VOID getErrorMessage(
  626. INPUT cFehlerNo AS CHARACTER,
  627. INPUT iSprcd AS INTEGER,
  628. INPUT cParam AS CHARACTER,
  629. OUTPUT cMessage AS LONGCHAR
  630. ):
  631. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  632. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  633. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  634. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  635. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  636. cParam = REPLACE(cParam, ',', ';').
  637. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  638. cParameter[ii] = ENTRY(ii, cParam, ';').
  639. IF ii = 5 THEN LEAVE.
  640. END.
  641. lcJsonString = '"ERROR": "(&1) : &2"'.
  642. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  643. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  644. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  645. FIND Femeld NO-LOCK
  646. WHERE Femeld.Fenr = iNo
  647. AND Femeld.Sprcd = iSprcd NO-ERROR.
  648. IF NOT AVAILABLE Femeld THEN
  649. DO:
  650. FIND FIRST Femeld NO-LOCK
  651. WHERE Femeld.Fenr = iNo NO-ERROR.
  652. END.
  653. IF NOT AVAILABLE Femeld THEN
  654. DO:
  655. cString = cString
  656. + (IF cString = '' THEN '' ELSE ' ')
  657. + 'Systemfehler, Administrator benachrichtigen !'.
  658. END.
  659. ELSE
  660. DO:
  661. cString = cString
  662. + (IF cString = '' THEN '' ELSE ' ')
  663. + Femeld.FeText.
  664. END.
  665. END.
  666. MESSAGE cString '-' cParam.
  667. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  668. MESSAGE cString.
  669. lcJsonString = CHR(123) + SUBSTITUTE(lcJsonString, cFehlerNo, cString) + CHR(125).
  670. cMessage = lcJsonString.
  671. RETURN.
  672. END METHOD.
  673. /*------------------------------------------------------------------------------
  674. Purpose:
  675. Notes:
  676. ------------------------------------------------------------------------------*/
  677. METHOD PUBLIC LOGICAL getField(
  678. INPUT httInput AS HANDLE,
  679. INPUT cTabelle AS CHARACTER,
  680. INPUT cTabFeld AS CHARACTER,
  681. INPUT cKeyFelder AS CHARACTER,
  682. INPUT cKeyValues AS CHARACTER,
  683. INPUT hTabelle AS HANDLE,
  684. OUTPUT cInhalt AS CHARACTER
  685. ):
  686. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  687. DEFINE VARIABLE hFeldBuffer AS HANDLE NO-UNDO.
  688. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  689. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  690. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  691. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  692. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  693. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO.
  694. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  695. CREATE BUFFER hBuffer FOR TABLE cTabelle.
  696. cKeyFelder = REPLACE(cKeyFelder, ',', ';').
  697. cKeyValues = REPLACE(cKeyValues, ',', ';').
  698. cString = ''.
  699. DO ii = 1 TO NUM-ENTRIES(cKeyFelder, ';'):
  700. cString = cString
  701. + (IF cString = '' THEN '' ELSE ' AND ')
  702. + ENTRY(ii, cKeyFelder, ';')
  703. + ' = &1 '.
  704. cFeld = ENTRY(ii, cKeyFelder, ';').
  705. hFeldBuffer = hBuffer:BUFFER-FIELD(cFeld).
  706. IF ENTRY(ii, cKeyValues, ';') BEGINS '@' THEN
  707. DO:
  708. cFeld = TRIM(SUBSTRING(ENTRY(ii, cKeyValues, ';'),02)).
  709. hFeld = hTabelle:BUFFER-FIELD(cFeld) NO-ERROR.
  710. IF NOT VALID-HANDLE(hFeld) THEN hFeld = httInput:BUFFER-FIELD(cFeld) NO-ERROR.
  711. cWert = hFeld:BUFFER-VALUE(0).
  712. END.
  713. ELSE cWert = TRIM(ENTRY(ii, cKeyValues, ';')).
  714. CASE hFeldBuffer:DATA-TYPE:
  715. WHEN 'character' OR
  716. WHEN 'date' THEN
  717. cString = SUBSTITUTE(cString, QUOTER(cWert) ).
  718. OTHERWISE
  719. cString = SUBSTITUTE(cString, cWert ).
  720. END CASE.
  721. END.
  722. cWhere = SUBSTITUTE('WHERE &1 ', cString).
  723. MESSAGE cWhere.
  724. lRetVal = hBuffer:FIND-UNIQUE (cWhere, NO-LOCK).
  725. MESSAGE lRetVal.
  726. hFeld = hBuffer:BUFFER-FIELD(cTabFeld).
  727. cInhalt = hFeld:BUFFER-VALUE(0).
  728. MESSAGE cInhalt.
  729. RETURN TRUE.
  730. END METHOD.
  731. /*------------------------------------------------------------------------------
  732. Purpose:
  733. Notes:
  734. ------------------------------------------------------------------------------*/
  735. METHOD PUBLIC CHARACTER getFieldValueExtern(
  736. INPUT ipcFeld AS CHARACTER,
  737. INPUT iphttInput AS HANDLE,
  738. INPUT iphttBrowser AS HANDLE
  739. ):
  740. DEFINE VARIABLE cFeldInhalt AS CHARACTER NO-UNDO INIT ''.
  741. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  742. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  743. DEFINE VARIABLE cKeyValue AS CHARACTER NO-UNDO.
  744. DEFINE VARIABLE cKeyFeld AS CHARACTER NO-UNDO.
  745. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  746. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  747. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  748. FIND FIRST ttExterneFelder NO-LOCK
  749. WHERE LOOKUP(ipcFeld, ttExterneFelder.cFelder, ';') > 0 NO-ERROR.
  750. IF NOT AVAILABLE ttExterneFelder THEN RETURN cFeldInhalt.
  751. hBuffer = ttExterneFelder.hBuffer.
  752. cWhere = ttExterneFelder.cWhere.
  753. DO ii = 1 TO NUM-ENTRIES(ttExterneFelder.cKeyFelder, ';'):
  754. cKeyFeld = ENTRY(ii, ttExterneFelder.cKeyFelder, ';').
  755. hFeld = iphttBrowser:BUFFER-FIELD(cKeyFeld) NO-ERROR.
  756. CASE hFeld:DATA-TYPE:
  757. WHEN 'INTEGER' OR
  758. WHEN 'INT64' THEN
  759. cKeyValue = TRIM(STRING(INTEGER(hFeld:BUFFER-VALUE(0)),'->>>>>>>>9')).
  760. WHEN 'DECIMAL' THEN
  761. cKeyValue = TRIM(STRING(DECIMAL(hFeld:BUFFER-VALUE(0)),'->>>>>>>>9.99<<<')).
  762. WHEN 'DATE' THEN
  763. cKeyValue = STRING(DATE(hFeld:BUFFER-VALUE(0)),'99.99.9999').
  764. OTHERWISE
  765. cKeyValue = QUOTER(hFeld:BUFFER-VALUE(0)).
  766. END CASE.
  767. cWhere = cWhere
  768. + (IF cWhere = '' THEN ' WHERE ' ELSE ' AND ')
  769. + SUBSTITUTE('&1.&2 = &3 ':U, ttExterneFelder.cTabelle, cKeyFeld, cKeyValue).
  770. END.
  771. lRetVal = hBuffer:FIND-FIRST (cWhere) NO-ERROR.
  772. IF lRetVal THEN cFeldInhalt = hBuffer:BUFFER-FIELD(ipcFeld):BUFFER-VALUE(0).
  773. RETURN cFeldInhalt.
  774. END METHOD.
  775. /*------------------------------------------------------------------------------
  776. Purpose:
  777. Notes:
  778. ------------------------------------------------------------------------------*/
  779. METHOD PUBLIC CHARACTER getHeader(
  780. INPUT httInput AS HANDLE
  781. ):
  782. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  783. FIND FIRST labeltexte NO-LOCK
  784. WHERE labeltexte.mandant = httInput::mandant
  785. AND labeltexte.benutzer = httInput::benutzer
  786. AND labeltexte.program = httInput::programm
  787. AND labeltexte.feld = 'KOPF'
  788. AND labeltexte.sprcd = INTEGER(httInput::sprcd) NO-ERROR.
  789. IF NOT AVAILABLE labeltexte THEN
  790. DO:
  791. FIND FIRST labeltexte NO-LOCK
  792. WHERE labeltexte.mandant = httInput::mandant
  793. AND labeltexte.program = httInput::programm
  794. AND labeltexte.feld = 'KOPF'
  795. AND labeltexte.sprcd = INTEGER(httInput::sprcd) NO-ERROR.
  796. END.
  797. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::programm).
  798. RETURN cHeader.
  799. END METHOD.
  800. /*------------------------------------------------------------------------------
  801. Purpose:
  802. Notes:
  803. ------------------------------------------------------------------------------*/
  804. METHOD PUBLIC CHARACTER getLabel(
  805. INPUT iprRecid AS RECID,
  806. INPUT ipcArt AS CHARACTER,
  807. INPUT ipiSprcd AS INTEGER
  808. ):
  809. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  810. DEFINE BUFFER bviewer_ze FOR viewer_ze.
  811. FIND bviewer_ze NO-LOCK WHERE RECID(bviewer_ze) = iprRecid.
  812. IF ipiSprcd = 0 OR
  813. ipiSprcd > 10 THEN ipiSprcd = 1.
  814. FIND FIRST labeltexte NO-LOCK
  815. WHERE labeltexte.mandant = bviewer_ze.mandant
  816. AND labeltexte.benutzer = bviewer_ze.benutzer
  817. AND labeltexte.program = bviewer_ze.program
  818. AND labeltexte.tabelle = bviewer_ze.tabelle
  819. AND labeltexte.feld = bviewer_ze.feld
  820. AND labeltexte.sprcd = ipiSprcd NO-ERROR.
  821. IF NOT AVAILABLE labeltexte THEN
  822. DO:
  823. FIND FIRST labeltexte NO-LOCK
  824. WHERE labeltexte.mandant = bviewer_ze.mandant
  825. AND labeltexte.program = bviewer_ze.program
  826. AND labeltexte.tabelle = bviewer_ze.tabelle
  827. AND labeltexte.feld = bviewer_ze.feld
  828. AND labeltexte.sprcd = ipiSprcd NO-ERROR.
  829. END.
  830. IF NOT AVAILABLE labeltexte THEN
  831. DO:
  832. FIND FIRST labeltexte NO-LOCK
  833. WHERE labeltexte.mandant = bviewer_ze.mandant
  834. AND labeltexte.tabelle = bviewer_ze.tabelle
  835. AND labeltexte.feld = bviewer_ze.feld
  836. AND labeltexte.sprcd = ipiSprcd NO-ERROR.
  837. END.
  838. IF NOT AVAILABLE labeltexte THEN
  839. DO:
  840. FIND FIRST labeltexte NO-LOCK
  841. WHERE labeltexte.mandant = bviewer_ze.mandant
  842. AND labeltexte.feld = bviewer_ze.feld
  843. AND labeltexte.sprcd = ipiSprcd NO-ERROR.
  844. END.
  845. CASE ipcArt:
  846. WHEN 'side' THEN
  847. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE bviewer_ze.feld).
  848. WHEN 'head' THEN
  849. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.headlabel ELSE bviewer_ze.feld).
  850. END CASE.
  851. RETURN cLabel.
  852. END METHOD.
  853. /*------------------------------------------------------------------------------
  854. Purpose:
  855. Notes:
  856. ------------------------------------------------------------------------------*/
  857. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  858. INPUT ipcTabelle AS CHARACTER
  859. ):
  860. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  861. FIND AnaDat._File NO-LOCK
  862. WHERE AnaDat._File._File-Name = ipcTabelle.
  863. FIND AnaDat._Index NO-LOCK
  864. WHERE RECID(AnaDat._Index) = AnaDat._File._Prime-Index.
  865. FOR EACH AnaDat._Index-Field OF AnaDat._Index,
  866. FIRST AnaDat._Field NO-LOCK WHERE RECID(AnaDat._Field) = AnaDat._Index-Field._FIeld-Recid:
  867. cFields = cFields
  868. + (IF cFields = '' THEN '' ELSE ',')
  869. + AnaDat._Field._Field-Name.
  870. END.
  871. RETURN cFields.
  872. END METHOD.
  873. /*------------------------------------------------------------------------------
  874. Purpose:
  875. Notes:
  876. ------------------------------------------------------------------------------*/
  877. METHOD PUBLIC CHARACTER getTitle(
  878. INPUT httInput AS HANDLE
  879. ):
  880. DEFINE VARIABLE cTitel AS CHARACTER NO-UNDO.
  881. FIND FIRST labeltexte NO-LOCK
  882. WHERE labeltexte.mandant = httInput::mandant
  883. AND labeltexte.benutzer = httInput::benutzer
  884. AND labeltexte.program = httInput::programm
  885. AND labeltexte.feld = 'TITEL'
  886. AND labeltexte.sprcd = INTEGER(httInput::sprcd) NO-ERROR.
  887. IF NOT AVAILABLE labeltexte THEN
  888. DO:
  889. FIND FIRST labeltexte NO-LOCK
  890. WHERE labeltexte.mandant = httInput::mandant
  891. AND labeltexte.program = httInput::programm
  892. AND labeltexte.feld = 'TITEL'
  893. AND labeltexte.sprcd = INTEGER(httInput::sprcd) NO-ERROR.
  894. END.
  895. cTitel = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE cProgramm).
  896. RETURN cTitel.
  897. END METHOD.
  898. /*------------------------------------------------------------------------------
  899. Purpose:
  900. Notes:
  901. ------------------------------------------------------------------------------*/
  902. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  903. INPUT oJsonObject AS JsonObject,
  904. INPUT hbttInput AS HANDLE,
  905. INPUT-OUTPUT hbttTemp AS HANDLE
  906. ):
  907. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  908. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  909. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  910. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  911. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  912. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  913. jsonttTemp = NEW JsonObject().
  914. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  915. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  916. hbttTemp:FIND-FIRST ().
  917. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  918. MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  919. lRetVal = TRUE.
  920. RETURN lRetVal.
  921. END METHOD.
  922. /*------------------------------------------------------------------------------
  923. Purpose:
  924. Notes:
  925. ------------------------------------------------------------------------------*/
  926. METHOD PUBLIC VOID setSortField(
  927. INPUT cSortfeld AS CHARACTER,
  928. INPUT-OUTPUT httBrowserKo AS HANDLE
  929. ):
  930. DO WHILE TRUE:
  931. IF httBrowserKo::sortfeld = '' THEN
  932. DO:
  933. httBrowserKo::sortfeld = cSortfeld + ':ASCENDING'.
  934. LEAVE.
  935. END.
  936. /* ASCENDING / DESCENDING Kehren */
  937. IF LOOKUP(cSortfeld, httBrowserKo::sortfeld, ':') > 0 THEN
  938. DO:
  939. IF ENTRY(2, httBrowserKo::sortfeld, ':') = 'ASCENDING' THEN
  940. DO:
  941. ENTRY(2, httBrowserKo::sortfeld, ':') = 'DESCENDING'.
  942. LEAVE.
  943. END.
  944. ELSE
  945. DO:
  946. ENTRY(2, httBrowserKo::sortfeld, ':') = 'ASCENDING'.
  947. LEAVE.
  948. END.
  949. END.
  950. httBrowserKo::sortfeld = cSortfeld + ':ASCENDING'.
  951. LEAVE.
  952. END.
  953. updateBrowserKo( INPUT httBrowserKo ).
  954. RETURN.
  955. END METHOD.
  956. /*------------------------------------------------------------------------------
  957. Purpose:
  958. Notes:
  959. ------------------------------------------------------------------------------*/
  960. METHOD PUBLIC LOGICAL startBrowserKopf (
  961. INPUT httInput AS HANDLE,
  962. OUTPUT httBrowserKo AS HANDLE
  963. ):
  964. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  965. DEFINE BUFFER bbrowser_ko FOR browser_ko.
  966. FIND FIRST browser_ko NO-LOCK
  967. WHERE browser_ko.mandant = httInput::mandant
  968. AND browser_ko.benutzer = httInput::benutzer
  969. AND browser_ko.program = httInput::programm
  970. AND browser_ko.tabelle = httInput::tabelle NO-ERROR.
  971. IF NOT AVAILABLE browser_ko THEN
  972. DO:
  973. FIND FIRST browser_ko NO-LOCK
  974. WHERE browser_ko.mandant = httInput::mandant
  975. AND browser_ko.benutzer = 'admin'
  976. AND browser_ko.program = httInput::programm
  977. AND browser_ko.tabelle = httInput::tabelle NO-ERROR.
  978. END.
  979. IF NOT AVAILABLE browser_ko THEN RETURN FALSE.
  980. rRecid = RECID(browser_ko).
  981. REPEAT TRANSACTION:
  982. FIND browser_ko WHERE RECID(browser_ko) = rRecid.
  983. IF browser_ko.benutzer = 'admin' THEN
  984. DO:
  985. CREATE bbrowser_ko.
  986. BUFFER-COPY browser_ko
  987. EXCEPT browser_ko.benutzer
  988. TO bbrowser_ko
  989. ASSIGN
  990. bbrowser_ko.benutzer = httInput::benutzer.
  991. rRecid = RECID(bbrowser_ko).
  992. FIND browser_ko WHERE RECID(browser_ko) = rRecid.
  993. END.
  994. ASSIGN
  995. browser_ko.actualpage = 0
  996. browser_ko.lastrecid = 0.
  997. RELEASE browser_ko.
  998. LEAVE.
  999. END.
  1000. FIND browser_ko NO-LOCK WHERE RECID(browser_ko) = rRecid.
  1001. httBrowserKo = TEMP-TABLE ttBrowserKo:DEFAULT-BUFFER-HANDLE.
  1002. httBrowserKo:EMPTY-TEMP-TABLE ().
  1003. httBrowserKo:BUFFER-CREATE ().
  1004. httBrowserKo:BUFFER-COPY(BUFFER browser_ko:HANDLE).
  1005. RELEASE browser_ko.
  1006. RETURN TRUE.
  1007. END METHOD.
  1008. /*------------------------------------------------------------------------------
  1009. Purpose:
  1010. Notes:
  1011. ------------------------------------------------------------------------------*/
  1012. METHOD PUBLIC LOGICAL startViewerKopf(
  1013. INPUT httInput AS HANDLE,
  1014. OUTPUT httViewerKo AS HANDLE
  1015. ):
  1016. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  1017. DEFINE BUFFER bviewer_ko FOR viewer_ko.
  1018. FIND FIRST viewer_ko NO-LOCK
  1019. WHERE viewer_ko.mandant = httInput::mandant
  1020. AND viewer_ko.benutzer = httInput::benutzer
  1021. AND viewer_ko.program = httInput::programm
  1022. AND viewer_ko.tabelle = httInput::tabelle NO-ERROR.
  1023. IF NOT AVAILABLE viewer_ko THEN
  1024. DO:
  1025. FIND FIRST viewer_ko NO-LOCK
  1026. WHERE viewer_ko.mandant = httInput::mandant
  1027. AND viewer_ko.benutzer = 'admin'
  1028. AND viewer_ko.program = httInput::programm
  1029. AND viewer_ko.tabelle = httInput::tabelle NO-ERROR.
  1030. END.
  1031. IF NOT AVAILABLE viewer_ko THEN RETURN FALSE.
  1032. rRecid = RECID(viewer_ko).
  1033. REPEAT TRANSACTION:
  1034. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  1035. IF viewer_ko.benutzer = 'admin' THEN
  1036. DO:
  1037. CREATE bviewer_ko.
  1038. BUFFER-COPY viewer_ko
  1039. EXCEPT viewer_ko.benutzer
  1040. TO bviewer_ko
  1041. ASSIGN
  1042. bviewer_ko.benutzer = httInput::benutzer.
  1043. rRecid = RECID(bviewer_ko).
  1044. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  1045. END.
  1046. RELEASE viewer_ko.
  1047. LEAVE.
  1048. END.
  1049. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  1050. httviewerKo = TEMP-TABLE ttviewerKo:DEFAULT-BUFFER-HANDLE.
  1051. httviewerKo:EMPTY-TEMP-TABLE ().
  1052. httviewerKo:BUFFER-CREATE ().
  1053. httviewerKo:BUFFER-COPY(BUFFER viewer_ko:HANDLE).
  1054. RELEASE viewer_ko.
  1055. RETURN TRUE.
  1056. END METHOD.
  1057. /*------------------------------------------------------------------------------
  1058. Purpose:
  1059. Notes:
  1060. ------------------------------------------------------------------------------*/
  1061. METHOD PUBLIC VOID updateBrowserKo( INPUT httBrowserKo AS HANDLE ):
  1062. DEFINE VARIABLE hBrowserKo AS HANDLE NO-UNDO.
  1063. hBrowserKo = BUFFER browser_ko:HANDLE.
  1064. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1065. FIND browser_ko EXCLUSIVE-LOCK
  1066. WHERE browser_ko.mandant = httBrowserKo::mandant
  1067. AND browser_ko.benutzer = httBrowserKo::benutzer
  1068. AND browser_ko.program = httBrowserKo::program
  1069. AND browser_ko.tabelle = httBrowserKo::tabelle NO-ERROR.
  1070. IF NOT AVAILABLE browser_ko THEN LEAVE.
  1071. DO i1 = 1 TO httBrowserKo:NUM-FIELDS:
  1072. IF httBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) = hBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) THEN NEXT.
  1073. hBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) = httBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0).
  1074. END.
  1075. RELEASE browser_ko.
  1076. LEAVE.
  1077. END.
  1078. RETURN.
  1079. END METHOD.
  1080. /*------------------------------------------------------------------------------
  1081. Purpose:
  1082. Notes:
  1083. ------------------------------------------------------------------------------*/
  1084. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  1085. MESSAGE 'Destructor utilitiesHandler '.
  1086. /* DELETE OBJECT hQuery NO-ERROR. */
  1087. /* DELETE OBJECT hBuffer NO-ERROR. */
  1088. END DESTRUCTOR.
  1089. END CLASS.