programgeneratorImpl.cls 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. /*------------------------------------------------------------------------
  2. File : programgeneratorImpl
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Wed Nov 19 13:23:38 CET 2025
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.Core.String FROM PROPATH.
  12. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH.
  13. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH.
  14. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  15. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  16. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  17. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  18. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  19. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  20. USING utilities.utilitiesHandler FROM PROPATH.
  21. USING utilities.selectboxHandler FROM PROPATH.
  22. USING OpenEdge.Web.WebHandler FROM PROPATH.
  23. USING System.Windows.Forms.HtmlDocument FROM ASSEMBLY.
  24. CLASS admin.programgeneratorImpl INHERITS WebHandler:
  25. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  27. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  29. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  31. /*------------------------------------------------------------------------------
  32. Purpose:
  33. Notes:
  34. ------------------------------------------------------------------------------*/
  35. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  36. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  37. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  38. DEFINE VARIABLE oBody AS String NO-UNDO.
  39. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  40. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  41. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  42. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  44. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  45. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  46. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  47. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cProgUser AS CHARACTER NO-UNDO.
  50. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  51. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  52. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  53. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  54. DEFINE VARIABLE lcProgramCode AS LONGCHAR NO-UNDO.
  55. DEFINE VARIABLE cMaxHeight AS CHARACTER NO-UNDO.
  56. DEFINE VARIABLE iItemsPage AS INTEGER NO-UNDO.
  57. outilitiesHandler = NEW utilitiesHandler().
  58. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  59. outilitiesHandler:getHeaderData(
  60. INPUT poRequest ,
  61. INPUT cQueryString ,
  62. OUTPUT ccompany ,
  63. OUTPUT cuser_name ,
  64. OUTPUT cAnzeigeName ,
  65. OUTPUT ilanguage_id ,
  66. OUTPUT cSessionToken,
  67. OUTPUT cFunction ,
  68. OUTPUT oJsonIdent
  69. ).
  70. // oJsonIdent:WriteFile('C:\TEMP\programgenerator_GET.json', TRUE).
  71. cProgram = oJsonIdent:GetCharacter('program_name').
  72. cProgUser = cuser_name.
  73. lRetVal = FALSE.
  74. MESSAGE 'company = ' ccompany '- proguser = ' cproguser '- ilanguage_id = ' iLanguage_id '- program = ' cprogram.
  75. DO WHILE TRUE:
  76. FIND FIRST htmldokumente NO-LOCK
  77. WHERE htmldokumente.company = ccompany
  78. AND htmldokumente.user_name = cProgUser
  79. AND htmldokumente.language_id = iLanguage_id
  80. AND htmldokumente.program = cProgram NO-ERROR.
  81. IF NOT AVAILABLE htmldokumente THEN
  82. DO:
  83. IF cProgUser = 'admin' THEN LEAVE.
  84. cProgUser = 'admin'.
  85. NEXT.
  86. END.
  87. MESSAGE 'gefunden mit user ' cproguser.
  88. COPY-LOB htmldokumente.htmlprogram TO lcProgramCode.
  89. cMaxHeight = '250px'.
  90. iItemsPage = 50.
  91. oParser = NEW ObjectModelParser().
  92. oJsonData = CAST(oParser:Parse(htmldokumente.htmltext), JsonObject) NO-ERROR.
  93. IF oJsonData:HAS('tableMaxHeight') THEN DO:
  94. cMaxHeight = oJsonData:GetCharacter('tableMaxHeight').
  95. END.
  96. IF oJsonData:HAS('itemsPerPage') THEN
  97. DO:
  98. iItemsPage = oJsonData:GetInteger('itemsPerPage').
  99. END.
  100. lRetVal = TRUE.
  101. LEAVE.
  102. END.
  103. oJsonResponse = NEW JsonObject().
  104. oJsonResponse:ADD('program_name', cProgram).
  105. oJsonResponse:ADD('form_id' , cProgram).
  106. oJsonResponse:ADD('program_code', lcprogramcode).
  107. oJsonResponse:ADD('created_at' , ISO-DATE(htmldokumente.created_at)).
  108. /* oJsonResponse:ADD('program_code', lcprogramcode).*/
  109. // oJsonResponse:WriteFile('C:\Temp\programmgenerator.json').
  110. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  111. IF NOT lRetVal THEN
  112. DO:
  113. oJsonResponse = NEW JsonObject().
  114. oJsonResponse:ADD('success', FALSE).
  115. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  116. END.
  117. cContent-Type = "application/json".
  118. cDefautlCharSet = 'utf-8'.
  119. oBody = NEW STRING(lcJsonInhalt).
  120. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  121. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  122. oWriter = NEW WebResponseWriter(oResponse).
  123. oWriter:Open().
  124. oWriter:Close().
  125. RETURN 0.
  126. CATCH e AS Progress.Lang.Error:
  127. END CATCH.
  128. FINALLY:
  129. END FINALLY.
  130. END METHOD.
  131. /*------------------------------------------------------------------------------
  132. Purpose:
  133. Notes:
  134. ------------------------------------------------------------------------------*/
  135. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  136. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  137. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  138. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  139. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  140. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  141. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  142. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  143. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  144. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  145. DEFINE VARIABLE cJSON AS LONGCHAR NO-UNDO.
  146. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  147. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  148. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  149. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  150. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  151. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  152. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  153. DEFINE VARIABLE cTargetUser AS CHARACTER NO-UNDO.
  154. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  155. DEFINE VARIABLE iTargetLanguageId AS INTEGER NO-UNDO.
  156. DEFINE VARIABLE cTargetCompany AS CHARACTER NO-UNDO.
  157. DEFINE VARIABLE cNames AS CHARACTER NO-UNDO EXTENT.
  158. DEFINE VARIABLE cName AS CHARACTER NO-UNDO.
  159. DEFINE VARIABLE lcBase64_code AS LONGCHAR NO-UNDO.
  160. DEFINE VARIABLE lcProgramCode AS LONGCHAR NO-UNDO.
  161. DEFINE VARIABLE mDecodedCode AS MEMPTR NO-UNDO.
  162. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  163. IF oJsonData:has('program_code_base64') THEN
  164. DO:
  165. lcBase64_code = oJsonData:GetLongchar("program_code_base64").
  166. mDecodedCode = BASE64-DECODE(lcBase64_code).
  167. IF GET-SIZE(mDecodedCode) > 0 THEN
  168. DO:
  169. COPY-LOB FROM mDecodedCode TO lcProgramCode CONVERT TARGET CODEPAGE "UTF-8".
  170. oJsonData:Remove('program_code_base64').
  171. END.
  172. END.
  173. IF oJsonData:has('program_code') THEN
  174. DO:
  175. lcProgramcode = oJsonData:GetLongchar("program_code4").
  176. oJsonData:Remove('program_code_base64').
  177. END.
  178. outilitiesHandler = NEW utilitiesHandler().
  179. // oJsonData:WriteFile('C:\TEMP\programgenerator_post.json', TRUE).
  180. cfunction = oJsonData:GetCharacter('function' ).
  181. cProgram = oJsonData:GetCharacter('program_name' ).
  182. cFormId = oJsonData:GetCharacter('form_id' ).
  183. cTargetUser = oJsonData:GetCharacter('target_user' ).
  184. iTargetLanguageId = oJsonData:GetInteger ('target_language_id').
  185. cTargetCompany = oJsonData:GetCharacter('target_company' ).
  186. lRetVal = FALSE.
  187. REPEAT TRANSACTION WHILE cFunction = 'save' ON ERROR UNDO, LEAVE:
  188. FIND htmldokumente
  189. WHERE htmldokumente.company = cTargetCompany
  190. AND htmldokumente.user_name = cTargetUser
  191. AND htmldokumente.form_id = cFormId
  192. AND htmldokumente.language_id = iTargetLanguageId NO-ERROR.
  193. IF NOT AVAILABLE htmldokumente THEN LEAVE.
  194. ASSIGN
  195. htmldokumente.program = cProgram.
  196. COPY-LOB lcProgramCode TO htmldokumente.htmlprogram.
  197. RELEASE htmldokumente.
  198. lRetVal = TRUE.
  199. LEAVE.
  200. END.
  201. oResponse = NEW OpenEdge.Web.WebResponse().
  202. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  203. oResponse:ContentType = "application/json;charset=utf-8".
  204. oWriter = NEW WebResponseWriter(oResponse).
  205. oJsonMessage = NEW JsonObject().
  206. IF lRetVal THEN
  207. DO:
  208. oJsonMessage:ADD('success', TRUE).
  209. oJsonMessage:WRITE(lcJsonString, TRUE).
  210. END.
  211. ELSE
  212. DO:
  213. oJsonMessage:ADD('success', TRUE).
  214. oJsonMessage:ADD('message', 'Fehler beim erstellen der Menu-Struktur').
  215. oJsonMessage:WRITE(lcJsonString, FALSE).
  216. END.
  217. // MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
  218. oWriter:Open().
  219. oWriter:Write(lcJsonString).
  220. oWriter:Close().
  221. RETURN 0.
  222. CATCH e AS Progress.Lang.Error:
  223. END CATCH.
  224. FINALLY:
  225. /* DELETE OBJECT oJsonConfig. */
  226. /* DELETE OBJECT oJsonMessage.*/
  227. END FINALLY.
  228. END METHOD.
  229. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  230. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  231. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  232. RETURN result.
  233. END METHOD.
  234. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  235. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  236. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  237. RETURN result.
  238. END METHOD.
  239. DESTRUCTOR PUBLIC programgeneratorImpl ( ):
  240. END DESTRUCTOR.
  241. END CLASS.