programgeneratorImpl.cls 13 KB

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