adressenImpl.cls 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903
  1. /*------------------------------------------------------------------------
  2. File : adressenImpl
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Wed May 29 21:02:53 CEST 2024
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  12. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH.
  13. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  14. USING OpenEdge.Web.WebHandler FROM PROPATH.
  15. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  16. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  17. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  18. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  19. USING utilities.utilitiesHandler FROM PROPATH.
  20. CLASS adressenImpl INHERITS WebHandler:
  21. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  22. { ttInput.i }
  23. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  24. DEFINE VARIABLE httBrowserKo AS HANDLE NO-UNDO.
  25. DEFINE VARIABLE httBrowserze AS HANDLE NO-UNDO.
  26. DEFINE VARIABLE httViewerKo AS HANDLE NO-UNDO.
  27. DEFINE VARIABLE httViewerZe AS HANDLE NO-UNDO.
  28. DEFINE VARIABLE httBrowser AS HANDLE NO-UNDO.
  29. DEFINE VARIABLE hbttDBTabelle AS HANDLE NO-UNDO.
  30. DEFINE VARIABLE httDBTabelle AS HANDLE NO-UNDO.
  31. DEFINE VARIABLE hqDBTabelle AS HANDLE NO-UNDO.
  32. DEFINE VARIABLE hbDBTabelle AS HANDLE NO-UNDO.
  33. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  34. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  35. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  36. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  37. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  38. DEFINE VARIABLE cAktion AS CHARACTER NO-UNDO.
  39. DEFINE VARIABLE cUpdateAktion AS CHARACTER NO-UNDO
  40. INIT 'add,update,copy'.
  41. /*------------------------------------------------------------------------------
  42. Purpose:
  43. Notes:
  44. ------------------------------------------------------------------------------*/
  45. METHOD PUBLIC LONGCHAR addDatenFromJson( ):
  46. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  47. DEFINE VARIABLE cResult AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cMessage AS LONGCHAR NO-UNDO.
  50. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO.
  51. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  52. DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO.
  53. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  54. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  55. DEFINE VARIABLE cDataType AS CHARACTER NO-UNDO.
  56. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  57. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO.
  58. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  59. iAnzRec = 0.
  60. rRecid = INT64(hbttInput::ident).
  61. cTabelle = hbttInput::tabelle.
  62. CREATE BUFFER hbDBTabelle FOR TABLE cTabelle.
  63. hbttDBTabelle:FIND-FIRST ().
  64. cIndexFields = outilitiesHandler:getPrimaryIndexFields(cTabelle).
  65. cWhere = ''.
  66. DO ii = 1 TO NUM-ENTRIES(cIndexFields, ','):
  67. cFeld = ENTRY(ii, cIndexFields, ',').
  68. hFeld = hbDBTabelle:BUFFER-FIELD (cFeld).
  69. cWert = hbttDBTabelle:BUFFER-FIELD(cFeld):BUFFER-VALUE(0).
  70. cDataType = hFeld:DATA-TYPE.
  71. CASE cDataType:
  72. WHEN 'character' THEN
  73. cWert = QUOTER(cWert).
  74. END CASE.
  75. cWhere = cWhere
  76. + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
  77. + SUBSTITUTE('&1.&3 = &2 ', cTabelle, cWert, cFeld ).
  78. END.
  79. lRetVal = hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(NO-LOCK) ) NO-ERROR.
  80. IF lRetVal THEN
  81. DO:
  82. outilitiesHandler:getErrorMessage(
  83. INPUT '9',
  84. INPUT INTEGER(hbttInput::sprcd),
  85. INPUT hbttDBTabelle::Geb_Cd,
  86. OUTPUT cMessage
  87. ).
  88. IF cMessage <> '' THEN
  89. DO:
  90. RETURN cMessage.
  91. END.
  92. END.
  93. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  94. hbDBTabelle:BUFFER-CREATE().
  95. hbDBTabelle:BUFFER-COPY(hbttDBTabelle).
  96. hbttInput::ident = TRIM(STRING(hbDBTabelle:RECID,'>>>>>>>>9')).
  97. rRecid = hbDBTabelle:RECID.
  98. httBrowserKo::rRecid.
  99. hbDBTabelle:BUFFER-RELEASE().
  100. LEAVE.
  101. END.
  102. iAnzahl = 0.
  103. CREATE QUERY hqDBTabelle.
  104. hqDBTabelle:SET-BUFFERS (hbDBTabelle).
  105. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK WHERE &1.Firma = &2 ', cTabelle, QUOTER(hbttInput::mandant)).
  106. hqDBTabelle:QUERY-PREPARE (cWhere).
  107. hqDBTabelle:QUERY-OPEN().
  108. hqDBTabelle:GET-FIRST() NO-ERROR.
  109. DO WHILE NOT hqDBTabelle:QUERY-OFF-END:
  110. iAnzahl = iAnzahl + 1.
  111. IF hbDBTabelle:RECID = rRecid THEN LEAVE.
  112. hqDBTabelle:GET-NEXT () NO-ERROR.
  113. END.
  114. DELETE OBJECT hbDBTabelle NO-ERROR.
  115. DELETE OBJECT hqDBTabelle NO-ERROR.
  116. httBrowserKo::actualpage = (iAnzahl - (iAnzahl MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize.
  117. IF httBrowserKo::actualpage < 1 THEN httBrowserKo::actualpage = 0.
  118. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo).
  119. cAktion = 'next'.
  120. createNextResponse().
  121. cMessage = ''.
  122. RETURN cMessage.
  123. END METHOD.
  124. /*------------------------------------------------------------------------------
  125. Purpose:
  126. Notes:
  127. ------------------------------------------------------------------------------*/
  128. METHOD PUBLIC LONGCHAR copyDatenFromJson( ):
  129. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  130. DEFINE VARIABLE cResult AS CHARACTER NO-UNDO.
  131. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  132. DEFINE VARIABLE cMessage AS LONGCHAR NO-UNDO.
  133. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO.
  134. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  135. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  136. cAktion = 'add'.
  137. cMessage = addDatenFromJson().
  138. RETURN cMessage.
  139. END METHOD.
  140. /*------------------------------------------------------------------------------
  141. Purpose:
  142. Notes:
  143. ------------------------------------------------------------------------------*/
  144. METHOD PUBLIC VOID createLastResponse( ):
  145. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  146. outilitiesHandler:createQuery(
  147. INPUT hbttInput,
  148. INPUT httBrowserKo,
  149. OUTPUT hqDBTabelle,
  150. OUTPUT hbDBTabelle
  151. ).
  152. outilitiesHandler:createTemptableBrowser(
  153. INPUT hbttInput,
  154. INPUT httBrowserKo,
  155. OUTPUT httBrowser
  156. ).
  157. iAnzRec = outilitiesHandler:fillBrowserTT (
  158. INPUT httBrowserKo,
  159. INPUT hqDBTabelle,
  160. INPUT hbttInput,
  161. INPUT-OUTPUT httBrowser
  162. ).
  163. httBrowserKo::actualpage = httBrowserKo::actualpage + 1.
  164. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  165. RETURN.
  166. END METHOD.
  167. /*------------------------------------------------------------------------------
  168. Purpose:
  169. Notes:
  170. ------------------------------------------------------------------------------*/
  171. METHOD PUBLIC VOID createNextResponse( ):
  172. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  173. outilitiesHandler:createQuery(
  174. INPUT hbttInput,
  175. INPUT httBrowserKo,
  176. OUTPUT hqDBTabelle,
  177. OUTPUT hbDBTabelle
  178. ).
  179. outilitiesHandler:createTemptableBrowser(
  180. INPUT hbttInput,
  181. INPUT httBrowserKo,
  182. OUTPUT httBrowser
  183. ).
  184. DO WHILE TRUE:
  185. iAnzRec = outilitiesHandler:fillBrowserTT (
  186. INPUT httBrowserKo,
  187. INPUT hqDBTabelle,
  188. INPUT hbttInput,
  189. INPUT-OUTPUT httBrowser
  190. ).
  191. IF iAnzRec = 0 AND httBrowserKo::actualpage > 0 THEN
  192. DO:
  193. httBrowserKo::actualpage = httBrowserKo::actualpage - 1.
  194. NEXT.
  195. END.
  196. LEAVE.
  197. END.
  198. httBrowserKo::actualpage = httBrowserKo::actualpage + 1.
  199. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  200. RETURN.
  201. END METHOD.
  202. /*------------------------------------------------------------------------------
  203. Purpose:
  204. Notes:
  205. ------------------------------------------------------------------------------*/
  206. METHOD PUBLIC VOID createPrevResponse( ):
  207. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  208. httBrowserKo::actualpage = httBrowserKo::actualpage - 2.
  209. IF (httBrowserKo::actualpage < 0) THEN httBrowserKo::actualpage = 0.
  210. outilitiesHandler:createQuery(
  211. INPUT hbttInput,
  212. INPUT httBrowserKo,
  213. OUTPUT hqDBTabelle,
  214. OUTPUT hbDBTabelle
  215. ).
  216. outilitiesHandler:createTemptableBrowser(
  217. INPUT hbttInput,
  218. INPUT httBrowserKo,
  219. OUTPUT httBrowser
  220. ).
  221. iAnzRec = outilitiesHandler:fillBrowserTT (
  222. INPUT httBrowserKo,
  223. INPUT hqDBTabelle,
  224. INPUT hbttInput,
  225. INPUT-OUTPUT httBrowser
  226. ).
  227. httBrowserKo::actualpage = httBrowserKo::actualpage + 1.
  228. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  229. RETURN.
  230. END METHOD.
  231. /*------------------------------------------------------------------------------
  232. Purpose:
  233. Notes:
  234. ------------------------------------------------------------------------------*/
  235. METHOD PUBLIC VOID createSameResponse( ):
  236. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  237. DEFINE VARIABLE cTitle AS CHARACTER NO-UNDO.
  238. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  239. cTitle = outilitiesHandler:getTitle(
  240. INPUT hbttInput
  241. ).
  242. MESSAGE 'Titel = ' cTitle.
  243. cHeader = outilitiesHandler:getHeader(
  244. INPUT hbttInput
  245. ).
  246. MESSAGE 'Header = ' cHeader.
  247. ASSIGN
  248. hbttInput::params = SUBSTITUTE('Title=&1;Header=&2':U, cTitle, cHeader).
  249. outilitiesHandler:createQuery(
  250. INPUT hbttInput,
  251. INPUT httBrowserKo,
  252. OUTPUT hqDBTabelle,
  253. OUTPUT hbDBTabelle
  254. ).
  255. httBrowserKo::actualpage = httBrowserKo::actualpage - 1.
  256. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  257. outilitiesHandler:createTemptableBrowser(
  258. INPUT hbttInput,
  259. INPUT httBrowserKo,
  260. OUTPUT httBrowser
  261. ).
  262. DO WHILE TRUE:
  263. iAnzRec = outilitiesHandler:fillBrowserTT (
  264. INPUT httBrowserKo,
  265. INPUT hqDBTabelle,
  266. INPUT hbttInput,
  267. INPUT-OUTPUT httBrowser
  268. ).
  269. IF iAnzRec = 0 AND httBrowserKo::actualpage > 0 THEN
  270. DO:
  271. httBrowserKo::actualpage = httBrowserKo::actualpage - 1.
  272. NEXT.
  273. END.
  274. LEAVE.
  275. END.
  276. httBrowserKo::actualpage = httBrowserKo::actualpage + 1.
  277. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  278. RETURN.
  279. END METHOD.
  280. /*------------------------------------------------------------------------------
  281. Purpose:
  282. Notes:
  283. ------------------------------------------------------------------------------*/
  284. METHOD PUBLIC VOID createSearchResponse( ):
  285. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  286. // FIND FIRST ttInput.
  287. /* lRetVal = outilitiesHandler:getBrowserKopf(*/
  288. /* INPUT hbttInput, */
  289. /* OUTPUT httBrowserKo */
  290. /* ). */
  291. /* */
  292. httBrowserKo::actualpage = 0.
  293. outilitiesHandler:createSearchQuery(
  294. INPUT hbttInput,
  295. INPUT httBrowserKo,
  296. OUTPUT hqDBTabelle,
  297. OUTPUT hbDBtabelle
  298. ).
  299. outilitiesHandler:createTemptableBrowser(
  300. INPUT hbttInput,
  301. INPUT httBrowserKo,
  302. OUTPUT httBrowser
  303. ).
  304. iAnzRec = outilitiesHandler:fillBrowserTT (
  305. INPUT httBrowserKo,
  306. INPUT hqDBtabelle,
  307. INPUT hbttInput,
  308. INPUT-OUTPUT httBrowser
  309. ).
  310. httBrowserKo::actualpage = httBrowserKo::actualpage = 0.
  311. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  312. RETURN.
  313. END METHOD.
  314. /*------------------------------------------------------------------------------
  315. Purpose:
  316. Notes:
  317. ------------------------------------------------------------------------------*/
  318. METHOD PUBLIC VOID createSelectResponse( ):
  319. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  320. DEFINE VARIABLE hViewer_ze AS HANDLE NO-UNDO.
  321. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  322. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  323. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  324. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  325. iAnzRec = 0.
  326. hViewer_ze = BUFFER viewer_ze:HANDLE.
  327. rRecid = INT64(hbttInput::ident).
  328. outilitiesHandler:startViewerKopf (
  329. INPUT hbttInput,
  330. OUTPUT httViewerKo
  331. ).
  332. outilitiesHandler:createTemptableViewer(
  333. INPUT hbttInput,
  334. INPUT httViewerKo,
  335. OUTPUT httDBTabelle
  336. ).
  337. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hbttInput::tabelle, INT64(hbttInput::ident) ).
  338. hbDBTabelle:FIND-UNIQUE(cWhere, INTEGER(NO-LOCK)) NO-ERROR.
  339. httDBTabelle:EMPTY-TEMP-TABLE().
  340. httDBTabelle:BUFFER-CREATE().
  341. httDBTabelle:BUFFER-COPY(hbDBtabelle).
  342. httDBTabelle::ident = TRIM(STRING(hbDBTabelle:RECID,'>>>>>>>>9')).
  343. iAnzRec = iAnzRec + 1.
  344. MESSAGE 'Start getField' httDBTabelle:NUM-FIELDS.
  345. DO ii = 1 TO httDBTabelle:NUM-FIELDS:
  346. FIND FIRST viewer_ze NO-LOCK
  347. WHERE viewer_ze.mandant = hbttInput::mandant
  348. AND viewer_ze.benutzer = hbttInput::benutzer
  349. AND viewer_ze.program = hbttInput::programm
  350. AND viewer_ze.tabelle = hbttInput::tabelle
  351. AND viewer_ze.feld = httDBTabelle:BUFFER-FIELD(ii):NAME
  352. AND viewer_ze.addFieldTabelle <> '' NO-ERROR.
  353. IF NOT AVAILABLE viewer_ze THEN NEXT.
  354. lRetVal = outilitiesHandler:getField(
  355. INPUT hbttInput,
  356. INPUT viewer_ze.addFieldTabelle,
  357. INPUT viewer_ze.addFieldField,
  358. INPUT viewer_ze.addFieldKeyFields,
  359. INPUT viewer_ze.addFieldKeyValues,
  360. INPUT httDBTabelle,
  361. OUTPUT cInhalt
  362. ).
  363. httDBTabelle:BUFFER-FIELD(ii):BUFFER-VALUE(0) = cInhalt.
  364. MESSAGE httDBTabelle:BUFFER-FIELD(ii):NAME httDBTabelle:BUFFER-FIELD(ii):BUFFER-VALUE(0).
  365. END.
  366. httBrowserKo::lastrecid = httDBTabelle::ident.
  367. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo).
  368. RETURN.
  369. END METHOD.
  370. /*------------------------------------------------------------------------------
  371. Purpose:
  372. Notes:
  373. ------------------------------------------------------------------------------*/
  374. METHOD PUBLIC VOID createSortResponse( ):
  375. DEFINE VARIABLE cSortfeld AS CHARACTER NO-UNDO INIT ''.
  376. DEFINE VARIABLE cRichtung AS CHARACTER NO-UNDO INIT ''.
  377. DEFINE VARIABLE cJsonFeld AS LONGCHAR NO-UNDO INIT ''.
  378. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  379. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  380. FIND FIRST ttInput.
  381. cJsonFeld = CHR(123) + SUBSTITUTE(' "&1" : "&1" ', hbttInput::SORT) + CHR(125).
  382. outilitiesHandler:createTemptableBrowser(
  383. INPUT hbttInput ,
  384. INPUT httBrowserKo ,
  385. OUTPUT httBrowser
  386. ).
  387. MESSAGE 'cJsonFeld = ' STRING(cJsonFeld).
  388. httBrowser:READ-JSON('LONGCHAR', cJsonFeld, 'EMPTY').
  389. CREATE QUERY hQuery.
  390. hQuery:SET-BUFFERS(httBrowser).
  391. hQuery:QUERY-PREPARE ('FOR EACH ttBrowser NO-LOCK').
  392. hQuery:QUERY-OPEN ().
  393. hQuery:GET-FIRST ().
  394. DO i1 = 1 TO httBrowser:NUM-FIELDS:
  395. IF httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE(0) = '' THEN NEXT.
  396. cSortfeld = httBrowser:BUFFER-FIELD(i1):NAME.
  397. LEAVE.
  398. END.
  399. hQuery:QUERY-CLOSE ().
  400. DELETE OBJECT hQuery.
  401. MESSAGE 'Sortfeld = ' cSortfeld.
  402. outilitiesHandler:setSortField(
  403. INPUT cSortfeld ,
  404. INPUT-OUTPUT httBrowserKo
  405. ).
  406. MESSAGE 'Sortierung neu' cSortfeld '->' httBrowserKo::sortfeld.
  407. cAktion = 'start'.
  408. createStartResponse().
  409. RETURN.
  410. END METHOD.
  411. /*------------------------------------------------------------------------------
  412. Purpose:
  413. Notes:
  414. ------------------------------------------------------------------------------*/
  415. METHOD PUBLIC VOID createStartResponse( ):
  416. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  417. DEFINE VARIABLE cTitle AS CHARACTER NO-UNDO.
  418. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  419. iAnzRec = 0.
  420. cTitle = outilitiesHandler:getTitle(
  421. INPUT hbttInput
  422. ).
  423. MESSAGE 'Titel = ' cTitle.
  424. cHeader = outilitiesHandler:getHeader(
  425. INPUT hbttInput
  426. ).
  427. MESSAGE 'Header = ' cHeader.
  428. ASSIGN
  429. hbttInput::params = SUBSTITUTE('Title=&1;Header=&2':U, cTitle, cHeader).
  430. outilitiesHandler:startBrowserKopf (
  431. INPUT hbttInput,
  432. OUTPUT httBrowserKo
  433. ).
  434. outilitiesHandler:createQuery(
  435. INPUT hbttInput,
  436. INPUT httBrowserKo,
  437. OUTPUT hqDBTabelle,
  438. OUTPUT hbDBTabelle
  439. ).
  440. outilitiesHandler:createTemptableBrowser(
  441. INPUT hbttInput,
  442. INPUT httBrowserKo,
  443. OUTPUT httBrowser
  444. ).
  445. iAnzRec = outilitiesHandler:fillBrowserTT (
  446. INPUT httBrowserKo,
  447. INPUT hqDBTabelle,
  448. INPUT hbttInput,
  449. INPUT-OUTPUT httBrowser
  450. ).
  451. httBrowserKo::actualpage = 1.
  452. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  453. RETURN.
  454. END METHOD.
  455. /*------------------------------------------------------------------------------
  456. Purpose:
  457. Notes:
  458. ------------------------------------------------------------------------------*/
  459. METHOD PUBLIC VOID deleteDatenFromJson( ):
  460. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  461. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  462. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  463. iAnzRec = 0.
  464. rRecid = INT64(hbttInput::ident).
  465. cTabelle = hbttInput::tabelle.
  466. CREATE BUFFER hbDBTabelle FOR TABLE cTabelle.
  467. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  468. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', cTabelle, rRecid).
  469. hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(EXCLUSIVE-LOCK) ) NO-ERROR.
  470. hbDBTabelle:BUFFER-DELETE ().
  471. hbDBTabelle:BUFFER-RELEASE ().
  472. hbDBTabelle:GET-PREV ().
  473. rRecid = (IF hbDBTabelle:AVAILABLE THEN hbDBTabelle:RECID ELSE ? ).
  474. LEAVE.
  475. END.
  476. DELETE OBJECT hbDBTabelle NO-ERROR.
  477. httDBTabelle:EMPTY-TEMP-TABLE().
  478. IF rRecid = ? THEN
  479. DO:
  480. hbttInput::ident = ''.
  481. cAktion = 'first'.
  482. END.
  483. ELSE
  484. DO:
  485. hbttInput::ident = TRIM(STRING(rRecid,'>>>>>>>>9')).
  486. cAktion = 'next'.
  487. END.
  488. httBrowserKo::actualpage = httBrowserKo::actualpage - 1.
  489. IF httBrowserKo::actualpage < 0 THEN httBrowserKo::actualpage = 0.
  490. httBrowserKo::lastrecid = rRecid.
  491. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo).
  492. createNextResponse().
  493. RETURN.
  494. END METHOD.
  495. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  496. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  497. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  498. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  499. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  500. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  501. DEFINE VARIABLE oJsonDataset AS JsonObject NO-UNDO.
  502. DEFINE VARIABLE oInput AS JsonObject NO-UNDO.
  503. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  504. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
  505. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  506. DEFINE VARIABLE cGetHtml AS CHARACTER NO-UNDO.
  507. DEFINE VARIABLE lcHTML AS LONGCHAR NO-UNDO.
  508. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  509. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  510. MESSAGE 'getJsonFromRequest = ' lRetVal.
  511. oJsonData:WRITE(lcJsonString, FALSE).
  512. MESSAGE 'ganzer eingangsstring = ' STRING(lcJsonString).
  513. //
  514. // Input-Daten (Steuersatz) aus JsonObject lesen und in ttInput füllen
  515. //
  516. EMPTY TEMP-TABLE ttInput .
  517. hbttInput = TEMP-TABLE ttInput:DEFAULT-BUFFER-HANDLE.
  518. oInput = NEW JsonObject().
  519. oInput = oJsonData:GetJsonObject('ttInput').
  520. lRetVal = hbttInput:READ-JSON ('JsonObject', oInput).
  521. FIND FIRST ttInput.
  522. cAktion = ttInput.action.
  523. CREATE TEMP-TABLE httDBTabelle.
  524. CREATE BUFFER hbDBTabelle FOR TABLE ttInput.tabelle.
  525. httDBTabelle:CREATE-LIKE (hbDBTabelle).
  526. httDBTabelle:ADD-NEW-FIELD ('ident', 'character').
  527. httDBTabelle:TEMP-TABLE-PREPARE(ttInput.tabelle).
  528. hbttDBTabelle = httDBTabelle:DEFAULT-BUFFER-HANDLE.
  529. httDBTabelle:EMPTY-TEMP-TABLE ().
  530. outilitiesHandler = NEW utilitiesHandler ().
  531. DO WHILE lRetVal:
  532. MESSAGE 'Temptable-Name = ' httDBTabelle:NAME.
  533. IF LOOKUP(cAktion, cUpdateAktion, ',') > 0 THEN
  534. DO:
  535. lRetVal = outilitiesHandler:readInputDatenFromJson(
  536. INPUT oJsonData,
  537. INPUT hbttInput,
  538. INPUT-OUTPUT hbttDBTabelle
  539. ).
  540. hbttDBTabelle:FIND-FIRST ().
  541. IF NOT lRetVal THEN LEAVE.
  542. END.
  543. lRetVal = outilitiesHandler:getBrowserKopf(
  544. INPUT hbttInput,
  545. OUTPUT httBrowserKo
  546. ).
  547. IF cAktion = 'same' THEN ttInput.ident = TRIM(STRING(httBrowserKo::lastrecid,'>>>>>>>>9')).
  548. CASE cAktion:
  549. WHEN 'start' THEN createStartResponse ( ).
  550. WHEN 'same' THEN createSameResponse ( ).
  551. WHEN 'first' THEN createStartResponse ( ).
  552. WHEN 'last' THEN createLastResponse ( ).
  553. WHEN 'next' THEN createNextResponse ( ).
  554. WHEN 'prev' THEN createPrevResponse ( ).
  555. WHEN 'select' THEN createSelectResponse( ).
  556. WHEN 'search' THEN createSearchResponse( ).
  557. WHEN 'sort' THEN createSortResponse ( ).
  558. WHEN 'update' THEN updateDatenFromJson ( ).
  559. WHEN 'delete' THEN deleteDatenFromJson ( ).
  560. WHEN 'copy' THEN
  561. DO:
  562. lcJsonString = copyDatenFromJson ( ).
  563. IF lcJsonString <> '' THEN
  564. DO:
  565. lRetVal = FALSE.
  566. LEAVE.
  567. END.
  568. END.
  569. WHEN 'add' THEN
  570. DO:
  571. lcJsonString = addDatenFromJson ( ).
  572. IF lcJsonString <> '' THEN
  573. DO:
  574. lRetVal = FALSE.
  575. LEAVE.
  576. END.
  577. END.
  578. END CASE.
  579. MESSAGE 'Anzahl gelesene Adress-Record = ' iAnzRec.
  580. hbttDBTabelle:FIND-FIRST () NO-ERROR.
  581. FIND FIRST ttInput.
  582. /* IF NOT AVAILABLE ttBrowser AND */
  583. /* NOT AVAILABLE ttKGebinde THEN LEAVE. */
  584. IF iAnzRec = 0 THEN
  585. DO:
  586. lRetVal = FALSE.
  587. LEAVE.
  588. END.
  589. httBuffer = (IF cAktion = 'select' THEN httDBTabelle ELSE httBrowser).
  590. oJsonArray = NEW JsonArray().
  591. oJsonData = NEW JsonObject().
  592. hbttInput:WRITE-JSON('JsonObject', oJsonData).
  593. oJsonArray:Add(oJsonData).
  594. oJsonData = NEW JsonObject().
  595. httBuffer:WRITE-JSON('JsonObject', oJsonData).
  596. oJsonArray:Add(oJsonData).
  597. oJsonArray:WRITE(lcJsonString, FALSE).
  598. oJsonData:WRITE(lcJsonString, FALSE).
  599. MESSAGE 'JsonArray = ' STRING(lcJsonString).
  600. MESSAGE 'lcString Rückgabe: ' + STRING(lcJsonString).
  601. oResponse = NEW OpenEdge.Web.WebResponse().
  602. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  603. oResponse:ContentType = "application/json;charset=utf-8".
  604. oWriter = NEW WebResponseWriter(oResponse).
  605. oWriter:Open().
  606. oWriter:Write(lcJsonString).
  607. oWriter:Close().
  608. LEAVE.
  609. END.
  610. IF NOT lRetVal THEN
  611. DO:
  612. oResponse = NEW OpenEdge.Web.WebResponse().
  613. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  614. oResponse:ContentType = "application/json;charset=utf-8".
  615. oWriter = NEW WebResponseWriter(oResponse).
  616. oWriter:Open().
  617. MESSAGE 'lcString Rückgabe: ' + STRING(lcJsonString) VIEW-AS ALERT-BOX.
  618. oWriter:Write(lcJsonString).
  619. oWriter:Close().
  620. END.
  621. DELETE OBJECT httDBTabelle NO-ERROR.
  622. DELETE OBJECT hbDBTabelle NO-ERROR.
  623. MESSAGE "Exiting HandlePost" VIEW-AS ALERT-BOX.
  624. CATCH e AS Progress.Lang.Error:
  625. MESSAGE "Exception occurred: " + e:GetMessage(1) VIEW-AS ALERT-BOX ERROR BUTTONS OK.
  626. RETURN -1.
  627. END CATCH.
  628. END METHOD.
  629. /*------------------------------------------------------------------------------
  630. Purpose:
  631. Notes:
  632. ------------------------------------------------------------------------------*/
  633. METHOD PUBLIC LOGICAL updateDatenFromJson( ):
  634. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  635. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  636. DEFINE VARIABLE cResult AS CHARACTER NO-UNDO.
  637. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO.
  638. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  639. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO.
  640. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO.
  641. iAnzRec = 0.
  642. rRecid = INT64(hbttInput::ident).
  643. cTabelle = hbttInput::tabelle.
  644. CREATE BUFFER hbDBTabelle FOR TABLE cTabelle.
  645. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hbttInput::tabelle, rRecid).
  646. hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(NO-LOCK) ) NO-ERROR.
  647. hbttDBTabelle:FIND-FIRST ().
  648. lRetVal = hbDBTabelle:BUFFER-COMPARE(hbttDBTabelle).
  649. REPEAT TRANSACTION WHILE NOT lRetVal ON ERROR UNDO, LEAVE:
  650. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hbttInput::tabelle, rRecid).
  651. hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(EXCLUSIVE-LOCK) ) NO-ERROR.
  652. DO i1 = 1 TO hbDBTabelle:NUM-FIELDS:
  653. cFeld = hbDBTabelle:BUFFER-FIELD(i1):NAME.
  654. hFeld = hbttDBTabelle:BUFFER-FIELD(cFeld) NO-ERROR.
  655. IF hFeld:BUFFER-VALUE(0) = hbDBTabelle:BUFFER-FIELD(i1):BUFFER-VALUE(0) THEN NEXT.
  656. hbDBTabelle:BUFFER-FIELD(i1):BUFFER-VALUE(0) = hFeld:BUFFER-VALUE(0).
  657. END.
  658. hbDBTabelle:BUFFER-RELEASE ().
  659. LEAVE.
  660. END.
  661. DELETE OBJECT hqDBTabelle NO-ERROR.
  662. CREATE QUERY hqDBTabelle.
  663. cWhere = SUBSTITUTE('FOR EACH &1 WHERE &1.Firma = &2 NO-LOCK ', cTabelle, QUOTER(hbttInput::mandant)).
  664. hqDBTabelle:SET-BUFFERS(hbDBTabelle).
  665. hqDBTabelle:QUERY-PREPARE(cWhere).
  666. hqDBTabelle:QUERY-OPEN().
  667. hqDBTabelle:GET-FIRST() NO-ERROR.
  668. iAnzahl = 0.
  669. DO WHILE NOT hqDBTabelle:QUERY-OFF-END:
  670. iAnzahl = iAnzahl + 1.
  671. IF hbDBTabelle:RECID = rRecid THEN LEAVE.
  672. hqDBTabelle:GET-NEXT () NO-ERROR.
  673. END.
  674. DELETE OBJECT hbDBTabelle NO-ERROR.
  675. DELETE OBJECT hqDBTabelle NO-ERROR.
  676. httBrowserKo::actualpage = (iAnzahl - (iAnzahl MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize.
  677. IF httBrowserKo::actualpage < 1 THEN httBrowserKo::actualpage = 0.
  678. httDBTabelle:EMPTY-TEMP-TABLE ().
  679. hbttInput::ident = TRIM(STRING(rRecid,'>>>>>>>>9')).
  680. cAktion = 'next'.
  681. IF (iAnzahl MOD httBrowserKo::pagesize) = 0 THEN httBrowserKo::actualpage = httBrowserKo::actualpage - 1.
  682. httBrowserKo::lastrecid = INT64(ttInput.ident).
  683. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo).
  684. createNextResponse().
  685. lRetVal = TRUE.
  686. RETURN lRetVal.
  687. END METHOD.
  688. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  689. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  690. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  691. RETURN result.
  692. END METHOD.
  693. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  694. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  695. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  696. RETURN result.
  697. END METHOD.
  698. /*------------------------------------------------------------------------------
  699. Purpose:
  700. Notes:
  701. ------------------------------------------------------------------------------*/
  702. DESTRUCTOR PUBLIC adressenImpl ( ):
  703. DELETE OBJECT outilitiesHandler NO-ERROR.
  704. MESSAGE 'DESTRUCTOR adressenImpl'.
  705. END DESTRUCTOR.
  706. END CLASS.