formprogramImpl.cls 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. /*------------------------------------------------------------------------
  2. File : adresse_dict
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Thu Jun 26 13:56:20 CEST 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.WebHandler FROM PROPATH.
  16. USING OpenEdge.Web.WebResponseWriter FROM PROPATH.
  17. USING Progress.Json.ObjectModel.* FROM PROPATH.
  18. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  19. USING utilities.utilitiesHandler FROM PROPATH.
  20. USING utilities.selectboxHandler FROM PROPATH.
  21. USING OpenEdge.Web.DataObject.Writer.JsonArrayValueWriter FROM PROPATH.
  22. CLASS admin.formprogramImpl INHERITS WebHandler:
  23. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  24. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  25. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  26. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  27. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  29. DEFINE VARIABLE oSelectboxHandler AS selectboxHandler NO-UNDO.
  30. DEFINE TEMP-TABLE tcompanies
  31. SERIALIZE-NAME 'companies'
  32. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  33. FIELD company_Name AS CHARACTER SERIALIZE-NAME 'company_name'
  34. FIELD lselected AS LOGICAL SERIALIZE-NAME 'selected'
  35. .
  36. DEFINE VARIABLE htcompanies AS HANDLE NO-UNDO.
  37. DEFINE TEMP-TABLE tusers
  38. FIELD user_name AS CHARACTER
  39. FIELD display_name AS CHARACTER
  40. .
  41. DEFINE VARIABLE htusers AS HANDLE NO-UNDO.
  42. DEFINE TEMP-TABLE tlanguages
  43. FIELD language_id AS INTEGER
  44. FIELD language_name AS CHAR
  45. .
  46. DEFINE VARIABLE htlanguages AS HANDLE NO-UNDO.
  47. DEFINE TEMP-TABLE tSellanguages
  48. FIELD language_id AS INTEGER SERIALIZE-NAME 'language_id'
  49. FIELD language_name AS CHARACTER
  50. .
  51. /* DEFINE DATASET DSselectOptions */
  52. /* SERIALIZE-NAME 'selectOptyions' */
  53. /* FOR tSelCompanies, tSelLanguages, tSelRole, tSelStore.*/
  54. /* DEFINE VARIABLE hDSselectOptions AS HANDLE. */
  55. /*------------------------------------------------------------------------------
  56. Purpose:
  57. Notes:
  58. ------------------------------------------------------------------------------*/
  59. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  60. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  61. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  62. DEFINE VARIABLE oBody AS String NO-UNDO.
  63. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  64. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  65. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  66. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  67. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  68. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  69. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  70. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  71. DEFINE VARIABLE oJsonCompanies AS JsonArray NO-UNDO.
  72. DEFINE VARIABLE oJsonUsers AS JsonArray NO-UNDO.
  73. DEFINE VARIABLE oJsonLanguages AS JsonArray NO-UNDO.
  74. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  75. DEFINE VARIABLE oJsonSelectedFields AS JsonArray NO-UNDO.
  76. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  77. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  78. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  79. DEFINE VARIABLE oJsonRecords AS JsonArray NO-UNDO.
  80. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  81. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  82. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  83. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  84. DEFINE VARIABLE cForm_Id AS CHARACTER NO-UNDO.
  85. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  86. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  87. DEFINE VARIABLE cFiles AS CHARACTER NO-UNDO.
  88. DEFINE VARIABLE cFile AS CHARACTER NO-UNDO.
  89. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  90. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  91. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  92. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  93. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  94. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  95. DEFINE BUFFER bwebmenu FOR webmenu.
  96. outilitiesHandler = NEW utilitiesHandler().
  97. oselectboxHandler = NEW selectboxHandler().
  98. cFunction = poRequest:URI:GetQueryValue("function") NO-ERROR.
  99. outilitiesHandler:getHeaderData(
  100. INPUT poRequest ,
  101. OUTPUT ccompany ,
  102. OUTPUT cuser_name ,
  103. OUTPUT cAnzeigeName ,
  104. OUTPUT ilanguage_id ,
  105. OUTPUT cSessionToken
  106. ).
  107. oJsonIdent = NEW JsonObject().
  108. oJsonIdent:ADD('company' , ccompany ).
  109. oJsonIdent:ADD('user_name' , cuser_name ).
  110. oJsonIdent:ADD('language_id' , iLanguage_id ).
  111. oJsonIdent:ADD('sessionToken', cSessionToken).
  112. oJsonIdent:ADD('function' , cFunction ).
  113. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  114. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  115. cQueryPairs = ENTRY(ii, cQueryString, '&').
  116. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  117. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  118. IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  119. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  120. END.
  121. cFunction = oJsonIdent:GetCharacter('function').
  122. // MESSAGE 'Inhalt von Header und Query ' STRING(oJsonIdent:GetJsonText()).
  123. lRetVal = FALSE.
  124. DO WHILE cFunction = 'init':
  125. EMPTY TEMP-TABLE tcompanies.
  126. FOR EACH companies NO-LOCK WHERE companies.active:
  127. CREATE tcompanies.
  128. BUFFER-COPY companies TO tcompanies.
  129. ASSIGN
  130. tcompanies.lselected = (IF companies.company = ccompany THEN TRUE ELSE FALSE).
  131. END.
  132. EMPTY TEMP-TABLE tusers.
  133. FOR EACH users NO-LOCK WHERE users.active:
  134. CREATE tusers.
  135. BUFFER-COPY users TO tusers.
  136. END.
  137. EMPTY TEMP-TABLE tlanguages.
  138. FOR EACH languages NO-LOCK:
  139. CREATE tlanguages.
  140. BUFFER-COPY languages TO tlanguages.
  141. END.
  142. oJsonResponse = NEW JsonObject().
  143. oJsonCompanies = NEW JsonArray().
  144. oJsonUsers = NEW JsonArray().
  145. oJsonLanguages = NEW JsonArray().
  146. htcompanies = TEMP-TABLE tcompanies:DEFAULT-BUFFER-HANDLE.
  147. htusers = TEMP-TABLE tusers :DEFAULT-BUFFER-HANDLE.
  148. htlanguages = TEMP-TABLE tlanguages:DEFAULT-BUFFER-HANDLE.
  149. htcompanies:WRITE-JSON('JsonArray', oJsonCompanies ).
  150. htusers :WRITE-JSON('JsonArray', oJsonUsers ).
  151. htlanguages:WRITE-JSON('JsonArray', oJsonLanguages ).
  152. oJsonResponse:ADD('companies', oJsonCompanies).
  153. oJsonResponse:ADD('users' , oJsonUsers ).
  154. oJsonResponse:ADD('languages', oJsonLanguages).
  155. // oJsonResponse:WriteFile('C:\TEMP\init.json', TRUE).
  156. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  157. lRetVal = TRUE.
  158. LEAVE.
  159. END.
  160. DO WHILE cFunction = 'loadconfig':
  161. FIND htmldokumente NO-LOCK
  162. WHERE htmldokumente.company = oJsonIdent:GetCharacter('company')
  163. AND htmldokumente.user_name = oJsonIdent:GetCharacter('user_name')
  164. AND htmldokumente.form_id = oJsonIdent:GetCharacter('form_id')
  165. AND htmldokumente.language_id = INTEGER(oJsonIdent:GetCharacter('language_id')) NO-ERROR.
  166. IF NOT AVAILABLE htmldokumente THEN LEAVE.
  167. MESSAGE 'gefunden'.
  168. cFiles = htmldokumente.tables.
  169. oJsonSelectBoxes = NEW JsonObject().
  170. FOR EACH selectboxfields NO-LOCK
  171. WHERE selectboxfields.company = htmldokumente.company
  172. AND selectboxfields.program = htmldokumente.form_id:
  173. MESSAGE selectboxfields.boxfields.
  174. DO ii = 1 TO NUM-ENTRIES(selectboxfields.boxfields, ';'):
  175. cFieldName = ENTRY(ii, selectboxfields.boxfields, ';').
  176. cFileName = ENTRY(1, cFieldName, '_').
  177. IF cFieldName MATCHES('*company*') THEN
  178. DO:
  179. oJsonBox = NEW JsonArray().
  180. httBuffer = oSelectboxHandler:getSelboxCompany(cFileName).
  181. httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
  182. oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
  183. NEXT.
  184. END.
  185. IF cFieldName MATCHES('*language_id*') THEN
  186. DO:
  187. oJsonBox = NEW JsonArray().
  188. httBuffer = oSelectboxHandler:getSelboxLanguage(cFileName).
  189. httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
  190. oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
  191. NEXT.
  192. END.
  193. /* httBuffer = oSelectboxHandler:getSelboxLaguages(). */
  194. /* oJsonCompanies = NEW JsonArray(). */
  195. /* httBuffer:WRITE-JSON ('JsonArray', oJsonLanguages).*/
  196. END.
  197. END.
  198. DO ii = 1 TO NUM-ENTRIES(cFiles, ';'):
  199. httBuffer = outilitiesHandler:getData(
  200. INPUT oJsonIdent ,
  201. INPUT ENTRY(ii, cFiles, ';') ,
  202. INPUT ''
  203. ).
  204. oJsonRecords = NEW JsonArray().
  205. httBuffer:WRITE-JSON('JsonArray', oJsonRecords).
  206. END.
  207. oJsonResponse = NEW JsonObject().
  208. oJsonResponse:ADD('formTitle', htmldokumente.formtitle).
  209. oJsonResponse:ADD('formId' , htmldokumente.form_id ).
  210. oParser = NEW ObjectModelParser().
  211. oJsonData = CAST(oParser:Parse(htmldokumente.htmltext), JsonObject).
  212. oJsonSelectedFields = NEW JsonArray().
  213. oJsonSelectedFields = oJsonData:GetJsonArray('selectedFields').
  214. oJsonResponse:ADD('selectedFields' , oJsonSelectedFields).
  215. oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
  216. oJsonResponse:ADD('records', oJsonRecords).
  217. // oJsonResponse:WriteFile('C:\TEMP\loadconfig.json', TRUE).
  218. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  219. lRetVal = TRUE.
  220. LEAVE.
  221. END.
  222. DO WHILE cFunction = "getformconfig":
  223. FIND htmldokumente NO-LOCK
  224. WHERE htmldokumente.company = oJsonIdent:GetCharacter('company')
  225. AND htmldokumente.user_name = oJsonIdent:GetCharacter('user')
  226. AND htmldokumente.form_id = oJsonIdent:GetCharacter('form_id')
  227. AND htmldokumente.language_id = INTEGER(oJsonIdent:GetCharacter('language_id')) NO-ERROR.
  228. IF NOT AVAILABLE htmldokumente THEN LEAVE.
  229. oJsonResponse = NEW JsonObject().
  230. oJsonResponse:ADD('formTitle' , htmldokumente.formtitle) NO-ERROR.
  231. oJsonResponse:ADD('formId' , htmldokumente.form_id ) NO-ERROR.
  232. oJsonResponse:ADD('targetCompany' , oJsonIdent:GetCharacter('company') ) NO-ERROR.
  233. oJsonResponse:ADD('targetUser' , oJsonIdent:GetCharacter('user') ) NO-ERROR.
  234. oJsonResponse:ADD('targetLanguageId', oJsonIdent:GetCharacter('language_id')) NO-ERROR.
  235. oParser = NEW ObjectModelParser().
  236. oJsonData = CAST(oParser:Parse(htmldokumente.htmltext), JsonObject).
  237. oJsonSelectedFields = NEW JsonArray().
  238. oJsonSelectedFields = oJsonData:GetJsonArray('selectedFields').
  239. oJsonResponse:ADD('selectedFields' , oJsonSelectedFields).
  240. // oJsonResponse:WriteFile('C:\TEMP\getformconfigresponse.json', TRUE).
  241. oJsonResponse:WRITE(lcJsonInhalt, FALSE ).
  242. lRetVal = TRUE.
  243. LEAVE.
  244. END.
  245. IF NOT lRetVal THEN
  246. DO:
  247. oJsonResponse = NEW JsonObject().
  248. oJsonResponse:ADD('success', FALSE).
  249. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  250. END.
  251. cContent-Type = "application/json".
  252. cDefautlCharSet = 'utf-8'.
  253. oBody = NEW STRING(lcJsonInhalt).
  254. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  255. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  256. oWriter = NEW WebResponseWriter(oResponse).
  257. oWriter:Open().
  258. oWriter:Close().
  259. RETURN 0.
  260. CATCH e AS Progress.Lang.Error:
  261. END CATCH.
  262. FINALLY:
  263. END FINALLY.
  264. END METHOD.
  265. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  266. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  267. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  268. RETURN result.
  269. END METHOD.
  270. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  271. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  272. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  273. RETURN result.
  274. END METHOD.
  275. /*------------------------------------------------------------------------------
  276. Purpose:
  277. Notes:
  278. ------------------------------------------------------------------------------*/
  279. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  280. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  281. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  282. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  283. DEFINE VARIABLE oJsonWebmenu AS JsonArray NO-UNDO.
  284. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  285. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  286. DEFINE VARIABLE oFelder AS JsonArray NO-UNDO.
  287. DEFINE VARIABLE oFeld AS JsonObject NO-UNDO.
  288. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  289. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  290. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  291. DEFINE VARIABLE cJSON AS LONGCHAR NO-UNDO.
  292. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  293. DEFINE VARIABLE cTabellen AS CHARACTER NO-UNDO.
  294. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  295. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  296. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  297. DEFINE VARIABLE cMaskenId AS CHARACTER NO-UNDO.
  298. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  299. oJsonData:WRITE(lcJsonString, FALSE).
  300. // MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  301. ccompany = oJsonData:GetCharacter('company' ).
  302. cuser_name = oJsonData:GetCharacter('user_name' ).
  303. ilanguage_id = INTEGER(oJsonData:GetCharacter('language_id')).
  304. // MESSAGE 'HANDLE POST ' ccompany '-' cuser_name '-' ilanguage_id.
  305. END METHOD.
  306. /*------------------------------------------------------------------------------
  307. Purpose:
  308. Notes:
  309. ------------------------------------------------------------------------------*/
  310. DESTRUCTOR PUBLIC formprogramImpl ( ):
  311. END DESTRUCTOR.
  312. END CLASS.