gemis_startImpl.cls 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. /*------------------------------------------------------------------------
  2. File : gemis_startImpl
  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 utilities.utilitiesHandler FROM PROPATH.
  18. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  19. CLASS gemis_startImpl INHERITS WebHandler:
  20. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler.
  21. { ttInput.i }
  22. DEFINE VARIABLE httBrowserKo AS HANDLE NO-UNDO.
  23. DEFINE VARIABLE httBrowserze AS HANDLE NO-UNDO.
  24. DEFINE VARIABLE httViewerKo AS HANDLE NO-UNDO.
  25. DEFINE VARIABLE httViewerZe AS HANDLE NO-UNDO.
  26. DEFINE VARIABLE httBrowser AS HANDLE NO-UNDO.
  27. DEFINE VARIABLE hbttDBTabelle AS HANDLE NO-UNDO.
  28. DEFINE VARIABLE httDBTabelle AS HANDLE NO-UNDO.
  29. DEFINE VARIABLE hqDBTabelle AS HANDLE NO-UNDO.
  30. DEFINE VARIABLE hbDBTabelle AS HANDLE NO-UNDO.
  31. DEFINE VARIABLE hqAufko AS HANDLE NO-UNDO.
  32. DEFINE VARIABLE hbAufko AS HANDLE NO-UNDO.
  33. /*------------------------------------------------------------------------------
  34. Purpose:
  35. Notes:
  36. ------------------------------------------------------------------------------*/
  37. METHOD PUBLIC VOID createAufkoResponse( ):
  38. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  39. DEFINE VARIABLE cTitle AS CHARACTER NO-UNDO.
  40. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  41. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  42. FIND FIRST ttInput.
  43. iAnzRec = 0.
  44. hbttInput = TEMP-TABLE ttInput:DEFAULT-BUFFER-HANDLE.
  45. cTitle = outilitiesHandler:getTitle(
  46. INPUT hbttInput
  47. ).
  48. cHeader = outilitiesHandler:getHeader(
  49. INPUT hbttInput
  50. ).
  51. ASSIGN
  52. hbttInput::params = SUBSTITUTE('Title=&1;Header=&2':U, cTitle, cHeader).
  53. outilitiesHandler:startBrowserKopf (
  54. INPUT hbttInput,
  55. OUTPUT httBrowserKo
  56. ).
  57. outilitiesHandler:createQuery(
  58. INPUT hbttInput,
  59. INPUT httBrowserKo,
  60. OUTPUT hqAufko,
  61. OUTPUT hbAufko
  62. ).
  63. outilitiesHandler:createTemptableBrowser(
  64. INPUT hbttInput,
  65. INPUT httBrowserKo,
  66. OUTPUT httBrowser
  67. ).
  68. iAnzRec = outilitiesHandler:fillBrowserTT (
  69. INPUT httBrowserKo,
  70. INPUT hqAufko,
  71. INPUT hbttInput,
  72. INPUT-OUTPUT httBrowser
  73. ).
  74. httBrowserKo::actualpage = 1.
  75. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ).
  76. RETURN.
  77. END METHOD.
  78. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  79. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  80. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  81. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  82. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  83. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  84. DEFINE VARIABLE cAktion AS CHARACTER NO-UNDO.
  85. DEFINE VARIABLE oInput AS JsonObject NO-UNDO.
  86. DEFINE VARIABLE hbttMandant AS HANDLE NO-UNDO.
  87. DEFINE VARIABLE lcHTML AS LONGCHAR NO-UNDO.
  88. DEFINE VARIABLE cDatei AS CHARACTER NO-UNDO.
  89. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  90. DEFINE VARIABLE lAdmin AS LOGICAL NO-UNDO.
  91. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  92. DEFINE VARIABLE iAktStufe AS INTEGER NO-UNDO.
  93. DEFINE VARIABLE lFirst AS LOGICAL NO-UNDO.
  94. DEFINE VARIABLE cKomma AS CHARACTER NO-UNDO.
  95. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  96. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  97. DEFINE BUFFER bwebmenu FOR webmenu.
  98. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  99. MESSAGE 'getJsonFromRequest = ' lRetVal STRING(lcJsonString).
  100. oJsonData:WRITE(lcJsonString, FALSE).
  101. MESSAGE 'ganzer eingangsstring = ' STRING(lcJsonString).
  102. //
  103. // Input-Daten (Steuersatz) aus JsonObject lesen und in ttInput füllen
  104. //
  105. EMPTY TEMP-TABLE ttInput .
  106. hbttInput = TEMP-TABLE ttInput:DEFAULT-BUFFER-HANDLE.
  107. oInput = NEW JsonObject().
  108. oInput = oJsonData:GetJsonObject('ttInput').
  109. lRetVal = hbttInput:READ-JSON ('JsonObject', oInput).
  110. FIND FIRST ttInput.
  111. cAktion = ttInput.action.
  112. outilitiesHandler = NEW utilitiesHandler().
  113. DO WHILE lRetVal:
  114. IF cAktion = 'aufko' THEN
  115. DO:
  116. createAufkoResponse ( ).
  117. httBrowser:WRITE-JSON('JsonObject', oJsonData).
  118. oJsonData:write(lcJsonString, FALSE).
  119. LEAVE.
  120. END.
  121. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  122. IF ttInput.benutzer = 'Admin' THEN LEAVE.
  123. FOR EACH webmenu NO-LOCK USE-INDEX webmenu-k1
  124. WHERE webmenu.mandant = ttInput.mandant
  125. AND webmenu.benutzer = 'Admin'
  126. AND webmenu.sprcd = INTEGER(ttInput.sprcd):
  127. FIND bwebmenu USE-INDEX webmenu-k1
  128. WHERE bwebmenu.mandant = webmenu.mandant
  129. AND bwebmenu.benutzer = ttInput.benutzer
  130. AND bwebmenu.sprcd = webmenu.sprcd
  131. AND bwebmenu.Position = webmenu.position NO-ERROR.
  132. IF NOT AVAILABLE bwebmenu THEN CREATE bwebmenu.
  133. BUFFER-COPY webmenu
  134. EXCEPT webmenu.benutzer
  135. TO bwebmenu
  136. ASSIGN
  137. bwebmenu.benutzer = ttInput.benutzer.
  138. END.
  139. RELEASE webmenu.
  140. RELEASE bwebmenu.
  141. LEAVE.
  142. END.
  143. lcJsonString = CHR(123).
  144. lFirst = TRUE.
  145. iAktStufe = 0.
  146. IF ttInput.action = 'first' THEN
  147. DO:
  148. FOR EACH webmenu NO-LOCK USE-INDEX webmenu-k1
  149. WHERE webmenu.mandant = ttInput.mandant
  150. AND webmenu.benutzer = ttInput.benutzer
  151. AND webmenu.sprcd = INTEGER(ttInput.sprcd) :
  152. CASE webmenu.Stufe:
  153. WHEN 0 THEN
  154. DO:
  155. IF iAktStufe = 1 THEN
  156. DO:
  157. lcJsonString = lcJsonString + SUBSTITUTE('&1,', CHR(125)).
  158. END.
  159. IF iAktStufe = 2 THEN
  160. DO:
  161. lcJsonString = lcJsonString + SUBSTITUTE('&1&1,', CHR(125)).
  162. END.
  163. IF NOT lFirst THEN
  164. DO:
  165. lcJsonString = lcJsonString + ','.
  166. lFirst = FALSE.
  167. END.
  168. IF webmenu.menulink = '' THEN lcJsonString = lcJsonString + SUBSTITUTE('&1: &2', QUOTER(webmenu.Menutext), CHR(123) ).
  169. ELSE lcJsonString = lcJsonString + SUBSTITUTE('&1: &2', QUOTER(webmenu.menutext), QUOTER(webmenu.menulink)).
  170. iAktStufe = webmenu.Stufe.
  171. END.
  172. WHEN 1 THEN
  173. DO:
  174. IF iAktStufe = 1 THEN lcJsonString = lcJsonString + ','.
  175. IF iAktStufe = 2 THEN
  176. DO:
  177. lcJsonString = lcJsonString + SUBSTITUTE('&1,', CHR(125)).
  178. END.
  179. IF webmenu.menulink = '' THEN lcJsonString = lcJsonString + SUBSTITUTE('&1: &2', QUOTER(webmenu.menutext), CHR(123)).
  180. ELSE lcJsonString = lcJsonString + SUBSTITUTE('&1: &2', QUOTER(webmenu.menutext), QUOTER(webmenu.menulink)).
  181. iAktStufe = webmenu.Stufe.
  182. END.
  183. WHEN 2 THEN
  184. DO:
  185. IF iAktStufe = 2 THEN lcJsonString = lcJsonString + ','.
  186. IF webmenu.menulink = '' THEN lcJsonString = lcJsonString + SUBSTITUTE('&1: &2', QUOTER(webmenu.menutext), CHR(123) ).
  187. ELSE lcJsonString = lcJsonString + SUBSTITUTE('&1: &2', QUOTER(webmenu.menutext), QUOTER(webmenu.menulink)).
  188. iAktStufe = webmenu.Stufe.
  189. END.
  190. END CASE.
  191. END.
  192. IF iAktStufe = 2 THEN lcJsonString = lcJsonString + SUBSTITUTE('&1&1', CHR(125)).
  193. IF iAktStufe = 1 THEN lcJsonString = lcJsonString + SUBSTITUTE('&1' , CHR(125)).
  194. lcJsonString = lcJsonString + CHR(125).
  195. LEAVE.
  196. END.
  197. IF ttInput.action BEGINS 'stufe' THEN
  198. DO:
  199. CASE ttInput.action:
  200. WHEN 'stufe0' THEN
  201. iAktStufe = 0.
  202. WHEN 'stufe1' THEN
  203. iAktStufe = 1.
  204. WHEN 'stufe2' THEN
  205. iAktStufe = 2.
  206. END CASE.
  207. cKomma = ''.
  208. IF ttInput.params <> '' THEN
  209. DO:
  210. FIND FIRST webmenu NO-LOCK USE-INDEX webmenu-k1
  211. WHERE webmenu.mandant = ttInput.mandant
  212. AND webmenu.benutzer = ttInput.benutzer
  213. AND webmenu.sprcd = INTEGER(ttInput.sprcd)
  214. /* AND webmenu.stufe = iAktStufe - 1*/
  215. AND webmenu.menutext = ttInput.params NO-ERROR.
  216. ii = webmenu.Position.
  217. END.
  218. FOR EACH webmenu NO-LOCK USE-INDEX webmenu-k1
  219. WHERE webmenu.mandant = ttInput.mandant
  220. AND webmenu.benutzer = ttInput.benutzer
  221. AND webmenu.sprcd = INTEGER(ttInput.sprcd)
  222. AND webmenu.Position > ii:
  223. IF webmenu.stufe < iAktStufe THEN LEAVE.
  224. IF webmenu.stufe > iAktStufe THEN NEXT.
  225. IF webmenu.menulink = '' THEN lcJsonString = lcJsonString + SUBSTITUTE('&3&1:&2', QUOTER(webmenu.menutext), QUOTER(STRING(iAktStufe,"9")), cKomma ).
  226. ELSE lcJsonString = lcJsonString + SUBSTITUTE('&3&1:&2', QUOTER(webmenu.menutext), QUOTER(webmenu.menulink) , cKomma ).
  227. cKomma = ', '.
  228. END.
  229. lcJsonString = lcJsonString + CHR(125).
  230. LEAVE.
  231. END.
  232. FOR EACH webmenu NO-LOCK
  233. WHERE webmenu.mandant = ttInput.mandant
  234. AND webmenu.benutzer = ttInput.benutzer
  235. AND webmenu.sprcd = INTEGER(ttInput.sprcd)
  236. AND INDEX(webmenu.wortindex, ttInput.suchfeld) > 0:
  237. IF webmenu.menulink = '' THEN lcJsonString = lcJsonString + SUBSTITUTE('&3&1:&2', QUOTER(webmenu.menutext), QUOTER(STRING(iAktStufe,"9")), cKomma ).
  238. ELSE lcJsonString = lcJsonString + SUBSTITUTE('&3&1:&2', QUOTER(webmenu.menutext), QUOTER(webmenu.menulink) , cKomma ).
  239. cKomma = ', '.
  240. END.
  241. lcJsonString = lcJsonString + CHR(125).
  242. LEAVE.
  243. END.
  244. oResponse = NEW OpenEdge.Web.WebResponse().
  245. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  246. oResponse:ContentType = "application/json;charset=utf-8".
  247. oWriter = NEW WebResponseWriter(oResponse).
  248. oWriter:Open().
  249. MESSAGE 'lcString Rückgabe: ' + STRING(lcJsonString).
  250. oWriter:Write(lcJsonString).
  251. oWriter:Close().
  252. MESSAGE "Exiting HandlePost".
  253. CATCH e AS Progress.Lang.Error:
  254. MESSAGE "Exception occurred: " + e:GetMessage(1) VIEW-AS ALERT-BOX ERROR BUTTONS OK.
  255. RETURN -1.
  256. END CATCH.
  257. END METHOD.
  258. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  259. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  260. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  261. RETURN result.
  262. END METHOD.
  263. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  264. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  265. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  266. RETURN result.
  267. END METHOD.
  268. END CLASS.