programgeneratorImpl.cls 14 KB

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