menudesignerImpl.cls 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  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.JsonObject FROM PROPATH.
  18. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  19. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  20. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  21. USING utilities.utilitiesHandler FROM PROPATH.
  22. CLASS admin.menudesignerImpl 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 TEMP-TABLE tcompanies
  30. SERIALIZE-NAME 'companies'
  31. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  32. FIELD company_Name AS CHARACTER SERIALIZE-NAME 'company_name'
  33. FIELD lselected AS LOGICAL SERIALIZE-NAME 'selected'
  34. .
  35. DEFINE VARIABLE htcompanies AS HANDLE NO-UNDO.
  36. DEFINE TEMP-TABLE tusers
  37. FIELD user_name AS CHARACTER
  38. FIELD display_name AS CHARACTER
  39. .
  40. DEFINE VARIABLE htusers AS HANDLE NO-UNDO.
  41. DEFINE TEMP-TABLE tlanguages
  42. FIELD language_id AS INTEGER
  43. FIELD language_name AS CHAR
  44. .
  45. DEFINE VARIABLE htlanguages AS HANDLE NO-UNDO.
  46. DEFINE TEMP-TABLE tLevel1
  47. SERIALIZE-NAME ''
  48. FIELD menu_id AS INTEGER
  49. FIELD menu_text AS CHARACTER
  50. FIELD menu_link AS CHARACTER
  51. FIELD level1 AS INTEGER SERIALIZE-NAME 'level1'
  52. FIELD level2 AS INTEGER SERIALIZE-NAME 'level2'
  53. FIELD level3 AS INTEGER SERIALIZE-NAME 'level3'
  54. FIELD openMode AS CHARACTER
  55. FIELD admin AS LOGICAL
  56. FIELD level1_recid AS RECID SERIALIZE-HIDDEN
  57. .
  58. DEFINE TEMP-TABLE tLevel2
  59. SERIALIZE-NAME 'children'
  60. FIELD level1_recid AS RECID SERIALIZE-HIDDEN
  61. FIELD menu_id AS INTEGER
  62. FIELD menu_text AS CHARACTER
  63. FIELD menu_link AS CHARACTER
  64. FIELD level1 AS INTEGER SERIALIZE-NAME 'level1'
  65. FIELD level2 AS INTEGER SERIALIZE-NAME 'level2'
  66. FIELD level3 AS INTEGER SERIALIZE-NAME 'level3'
  67. FIELD openMode AS CHARACTER
  68. FIELD admin AS LOGICAL
  69. FIELD level2_recid AS RECID SERIALIZE-HIDDEN
  70. .
  71. DEFINE TEMP-TABLE tLevel3
  72. SERIALIZE-NAME 'children'
  73. FIELD level2_recid AS RECID SERIALIZE-HIDDEN
  74. FIELD menu_id AS INTEGER
  75. FIELD menu_text AS CHARACTER
  76. FIELD menu_link AS CHARACTER
  77. FIELD level1 AS INTEGER SERIALIZE-NAME 'level1'
  78. FIELD level2 AS INTEGER SERIALIZE-NAME 'level2'
  79. FIELD level3 AS INTEGER SERIALIZE-NAME 'level3'
  80. FIELD openMode AS CHARACTER
  81. FIELD admin AS LOGICAL
  82. FIELD level3_recid AS RECID SERIALIZE-HIDDEN
  83. .
  84. DEFINE DATASET menu_structur
  85. SERIALIZE-NAME 'menuItem'
  86. FOR tLevel1, tLevel2, tLevel3
  87. PARENT-ID-RELATION RELATION1 FOR tLevel1, tLevel2
  88. PARENT-ID-FIELD level1_recid
  89. PARENT-ID-RELATION RELATION2 FOR tLevel2, tLevel3
  90. PARENT-ID-FIELD level2_recid
  91. .
  92. DEFINE VARIABLE hDSmenu_structur AS HANDLE NO-UNDO.
  93. /*------------------------------------------------------------------------------
  94. Purpose:
  95. Notes:
  96. ------------------------------------------------------------------------------*/
  97. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  98. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  99. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  100. DEFINE VARIABLE oBody AS String NO-UNDO.
  101. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  102. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  103. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  104. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  105. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  106. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  107. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  108. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  109. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  110. DEFINE VARIABLE oJsonWebmenu AS JsonObject NO-UNDO.
  111. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  112. DEFINE VARIABLE oJsonCompanies AS JsonArray NO-UNDO.
  113. DEFINE VARIABLE oJsonUsers AS JsonArray NO-UNDO.
  114. DEFINE VARIABLE oJsonLanguages AS JsonArray NO-UNDO.
  115. DEFINE VARIABLE oJsonMenu AS JsonArray NO-UNDO.
  116. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  117. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  118. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  119. DEFINE VARIABLE cnewuser_name AS CHARACTER NO-UNDO.
  120. DEFINE VARIABLE rtlevel1 AS RECID NO-UNDO.
  121. DEFINE VARIABLE rtlevel2 AS RECID NO-UNDO.
  122. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  123. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  124. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  125. DEFINE BUFFER bwebmenu FOR webmenu.
  126. outilitiesHandler = NEW utilitiesHandler().
  127. outilitiesHandler:getHeaderData(
  128. INPUT poRequest ,
  129. OUTPUT ccompany ,
  130. OUTPUT cuser_name ,
  131. OUTPUT cAnzeigeName ,
  132. OUTPUT ilanguage_id ,
  133. OUTPUT cSessionToken
  134. ).
  135. cFunction = poRequest:URI:GetQueryValue("function") NO-ERROR.
  136. ccompany = poRequest:URI:GetQueryValue("company") NO-ERROR.
  137. cuser_name = poRequest:URI:GetQueryValue("user_name") NO-ERROR.
  138. ilanguage_id = INTEGER(poRequest:URI:GetQueryValue("language_id")) NO-ERROR.
  139. MESSAGE 'GET company = ' ccompany 'user_name = ' cuser_name 'Sprache = ' ilanguage_id 'Function = ' cFunction 'Session-Token = ' cSessiontoken.
  140. lRetVal = FALSE.
  141. DO WHILE cFunction = 'init':
  142. EMPTY TEMP-TABLE tcompanies.
  143. FOR EACH companies NO-LOCK WHERE companies.active:
  144. CREATE tcompanies.
  145. BUFFER-COPY companies TO tcompanies.
  146. ASSIGN
  147. tcompanies.lselected = (IF companies.company = ccompany THEN TRUE ELSE FALSE).
  148. END.
  149. EMPTY TEMP-TABLE tusers.
  150. FOR EACH users NO-LOCK WHERE users.active:
  151. CREATE tusers.
  152. BUFFER-COPY users TO tusers.
  153. END.
  154. EMPTY TEMP-TABLE tlanguages.
  155. FOR EACH languages NO-LOCK:
  156. CREATE tlanguages.
  157. BUFFER-COPY languages TO tlanguages.
  158. END.
  159. oJsonResponse = NEW JsonObject().
  160. oJsonCompanies = NEW JsonArray().
  161. oJsonUsers = NEW JsonArray().
  162. oJsonLanguages = NEW JsonArray().
  163. htcompanies = TEMP-TABLE tcompanies:DEFAULT-BUFFER-HANDLE.
  164. htusers = TEMP-TABLE tusers :DEFAULT-BUFFER-HANDLE.
  165. htlanguages = TEMP-TABLE tlanguages:DEFAULT-BUFFER-HANDLE.
  166. htcompanies:WRITE-JSON('JsonArray', oJsonCompanies ).
  167. htusers :WRITE-JSON('JsonArray', oJsonUsers ).
  168. htlanguages:WRITE-JSON('JsonArray', oJsonLanguages ).
  169. oJsonResponse:ADD('companies', oJsonCompanies).
  170. oJsonResponse:ADD('users' , oJsonUsers ).
  171. oJsonResponse:ADD('languages', oJsonLanguages).
  172. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  173. MESSAGE STRING(lcJsonInhalt).
  174. lRetVal = TRUE.
  175. LEAVE.
  176. END.
  177. cnewuser_name = cuser_name.
  178. DO WHILE cFunction = 'load':
  179. hDSmenu_structur = DATASET menu_structur:HANDLE.
  180. EMPTY TEMP-TABLE tlevel1.
  181. EMPTY TEMP-TABLE tlevel2.
  182. EMPTY TEMP-TABLE tlevel3.
  183. DO WHILE TRUE.
  184. FIND FIRST webmenu NO-LOCK
  185. WHERE webmenu.company = ccompany
  186. AND webmenu.user_name = cnewuser_name NO-ERROR.
  187. IF AVAILABLE webmenu THEN LEAVE.
  188. IF cnewuser_name = 'Admin' THEN LEAVE.
  189. cnewuser_name = 'Admin'.
  190. END.
  191. FOR EACH webmenu NO-LOCK
  192. WHERE webmenu.company = ccompany
  193. AND webmenu.user_name = cnewuser_name
  194. AND webmenu.level1 > 0 :
  195. IF webmenu.level2 = 0 THEN
  196. DO:
  197. CREATE tlevel1.
  198. ASSIGN
  199. tlevel1.level1_recid = RECID(tLevel1)
  200. tlevel1.menu_id = webmenu.level1
  201. tlevel1.menu_text = webmenu.menu_title
  202. tlevel1.menu_link = webmenu.menu_link
  203. tLevel1.level1 = webmenu.level1
  204. tLevel1.level2 = webmenu.level2
  205. tLevel1.level3 = webmenu.level3
  206. tlevel1.openMode = webmenu.openmode
  207. tlevel1.admin = webmenu.ladmin
  208. rtlevel1 = RECID(tlevel1).
  209. NEXT.
  210. END.
  211. IF webmenu.level3 = 0 THEN
  212. DO:
  213. CREATE tlevel2.
  214. ASSIGN
  215. tlevel2.level1_recid = rtlevel1
  216. tlevel2.level2_recid = RECID(tLevel2)
  217. tlevel2.menu_id = webmenu.level2
  218. tlevel2.menu_text = webmenu.menu_title
  219. tlevel2.menu_link = webmenu.menu_link
  220. tLevel2.level1 = webmenu.level1
  221. tLevel2.level2 = webmenu.level2
  222. tLevel2.level3 = webmenu.level3
  223. tlevel2.openmode = webmenu.openmode
  224. tlevel2.admin = webmenu.ladmin
  225. rtlevel2 = RECID(tlevel2).
  226. NEXT.
  227. END.
  228. CREATE tlevel3.
  229. ASSIGN
  230. tlevel3.level2_recid = rtlevel2
  231. tlevel3.level3_recid = RECID(tLevel3)
  232. tlevel3.menu_id = webmenu.level3
  233. tlevel3.menu_text = webmenu.menu_title
  234. tlevel3.menu_link = webmenu.menu_link
  235. tLevel3.level1 = webmenu.level1
  236. tLevel3.level2 = webmenu.level2
  237. tLevel3.level3 = webmenu.level3
  238. tlevel3.openMode = webmenu.openmode
  239. tlevel3.admin = webmenu.ladmin
  240. .
  241. END.
  242. oParser = NEW ObjectModelParser().
  243. oJsonResponse = NEW JsonObject().
  244. oJsonMenu = NEW JsonArray ().
  245. oJsonData = NEW JsonObject().
  246. oJsonData:READ(hDSmenu_structur).
  247. lcJsonInhalt = oJsonData:GetJsonText('menuItem').
  248. ii = INDEX(lcJsonInhalt, '[').
  249. lcJsonInhalt = SUBSTRING(lcJsonInhalt, ii).
  250. ii = R-INDEX(lcJsonInhalt, ']').
  251. lcJsonInhalt = SUBSTRING(lcJsonInhalt,01,ii).
  252. oJsonMenu = CAST(oParser:Parse(lcJsonInhalt), JsonArray) NO-ERROR.
  253. oJsonResponse:ADD('menuItems', oJsonMenu).
  254. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  255. MESSAGE 'Menustruktur = ' STRING(lcJsonInhalt).
  256. lRetVal = TRUE.
  257. LEAVE.
  258. END.
  259. IF NOT lRetVal THEN
  260. DO:
  261. oJsonResponse = NEW JsonObject().
  262. oJsonResponse:ADD('success', FALSE).
  263. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  264. END.
  265. cContent-Type = "application/json".
  266. cDefautlCharSet = 'utf-8'.
  267. oBody = NEW STRING(lcJsonInhalt).
  268. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  269. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  270. oWriter = NEW WebResponseWriter(oResponse).
  271. oWriter:Open().
  272. oWriter:Close().
  273. RETURN 0.
  274. CATCH e AS Progress.Lang.Error:
  275. END CATCH.
  276. FINALLY:
  277. END FINALLY.
  278. END METHOD.
  279. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  280. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  281. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  282. RETURN result.
  283. END METHOD.
  284. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  285. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  286. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  287. RETURN result.
  288. END METHOD.
  289. /*------------------------------------------------------------------------------
  290. Purpose:
  291. Notes:
  292. ------------------------------------------------------------------------------*/
  293. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  294. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  295. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  296. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  297. DEFINE VARIABLE oJsonWebmenu AS JsonArray NO-UNDO.
  298. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  299. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  300. DEFINE VARIABLE oFelder AS JsonArray NO-UNDO.
  301. DEFINE VARIABLE oFeld AS JsonObject NO-UNDO.
  302. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  303. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  304. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  305. DEFINE VARIABLE cJSON AS LONGCHAR NO-UNDO.
  306. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  307. DEFINE VARIABLE cTabellen AS CHARACTER NO-UNDO.
  308. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  309. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  310. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  311. DEFINE VARIABLE cMaskenId AS CHARACTER NO-UNDO.
  312. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  313. oJsonData:WRITE(lcJsonString, FALSE).
  314. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  315. ccompany = oJsonData:GetCharacter('company' ).
  316. cuser_name = oJsonData:GetCharacter('user_name' ).
  317. ilanguage_id = INTEGER(oJsonData:GetCharacter('language_id')).
  318. // Aufbereiten Json-Struktur für READ-JSON in DATASET
  319. lcJsonString = oJsonData:GetJsonText('menuItems').
  320. lcJsonString = CHR(123) /* { */
  321. + ' "menuItem": '
  322. + CHR(123) /* { */
  323. + '"": '
  324. + lcJsonString
  325. + CHR(125) /* } */
  326. + CHR(125). /* } */
  327. hDSmenu_structur = DATASET menu_structur:HANDLE.
  328. hDSmenu_structur:READ-JSON ('LONGCHAR', lcJsonString, 'empty') NO-ERROR.
  329. lRetVal = FALSE.
  330. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  331. DEFINE VARIABLE ilevel2 AS INTEGER NO-UNDO.
  332. DEFINE VARIABLE ilevel3 AS INTEGER NO-UNDO.
  333. // Level2 und level3 neu in 10er-Schritten durchnummerieren
  334. FOR EACH tlevel1:
  335. ilevel2 = 0.
  336. FOR EACH tlevel2
  337. WHERE tLevel2.level1 = tlevel1.level1:
  338. ilevel3 = 0.
  339. FOR EACH tlevel3
  340. WHERE tLevel3.level1 = tlevel1.level1
  341. AND tLevel3.level2 = tlevel2.level2:
  342. ilevel3 = ilevel3 + 10.
  343. tlevel3.level3 = ilevel3.
  344. END.
  345. iLevel2 = ilevel2 + 10.
  346. tlevel2.level2 = ilevel2.
  347. END.
  348. END.
  349. FOR EACH webmenu
  350. WHERE webmenu.company = ccompany
  351. AND webmenu.user_name = cuser_name:
  352. DELETE webmenu.
  353. END.
  354. FOR EACH tlevel1:
  355. CREATE webmenu.
  356. ASSIGN
  357. webmenu.company = ccompany
  358. webmenu.user_name = cuser_name
  359. webmenu.level1 = tlevel1.level1
  360. webmenu.level2 = 0
  361. webmenu.level3 = 0
  362. webmenu.menu_title = tlevel1.menu_text
  363. webmenu.menu_link = tlevel1.menu_link
  364. webmenu.ladmin = tlevel1.admin
  365. webmenu.openmode = tlevel1.openMode
  366. webmenu.created_at = NOW
  367. webmenu.updated_at = NOW
  368. .
  369. END.
  370. FOR EACH tlevel2:
  371. CREATE webmenu.
  372. ASSIGN
  373. webmenu.company = ccompany
  374. webmenu.user_name = cuser_name
  375. webmenu.level1 = tlevel2.level1
  376. webmenu.level2 = tlevel2.level2
  377. webmenu.level3 = 0
  378. webmenu.menu_title = tlevel2.menu_text
  379. webmenu.menu_link = tlevel2.menu_link
  380. webmenu.ladmin = tlevel2.admin
  381. webmenu.openmode = tlevel2.openMode
  382. webmenu.created_at = NOW
  383. webmenu.updated_at = NOW
  384. .
  385. END.
  386. FOR EACH tlevel3:
  387. CREATE webmenu.
  388. ASSIGN
  389. webmenu.company = ccompany
  390. webmenu.user_name = cuser_name
  391. webmenu.level1 = tlevel3.level1
  392. webmenu.level2 = tlevel3.level2
  393. webmenu.level3 = tlevel3.level3
  394. webmenu.menu_title = tlevel3.menu_text
  395. webmenu.menu_link = tlevel3.menu_link
  396. webmenu.ladmin = tlevel3.admin
  397. webmenu.openmode = tlevel3.openMode
  398. webmenu.created_at = NOW
  399. webmenu.updated_at = NOW
  400. .
  401. END.
  402. lRetVal = TRUE.
  403. LEAVE.
  404. END.
  405. oResponse = NEW OpenEdge.Web.WebResponse().
  406. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  407. oResponse:ContentType = "application/json;charset=utf-8".
  408. oWriter = NEW WebResponseWriter(oResponse).
  409. oJsonMessage = NEW JsonObject().
  410. IF lRetVal THEN
  411. DO:
  412. oJsonMessage:ADD('success', TRUE).
  413. oJsonMessage:WRITE(lcJsonString, TRUE).
  414. END.
  415. ELSE
  416. DO:
  417. oJsonMessage:ADD('success', TRUE).
  418. oJsonMessage:ADD('message', 'Fehler beim erstellen der Menu-Struktur').
  419. oJsonMessage:WRITE(lcJsonString, FALSE).
  420. END.
  421. MESSAGE 'Rückmeldung ' STRING(lcJsonString).
  422. oWriter:Open().
  423. oWriter:Write(lcJsonString).
  424. oWriter:Close().
  425. CATCH e AS Progress.Lang.Error:
  426. END CATCH.
  427. FINALLY:
  428. /* DELETE OBJECT oJsonConfig. */
  429. /* DELETE OBJECT oJsonMessage.*/
  430. END FINALLY.
  431. END METHOD.
  432. END CLASS.