dynamicformImpl.cls 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893
  1. /*------------------------------------------------------------------------
  2. File : dynamicformImplImpl
  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 OpenEdge.Web.WebHandler FROM PROPATH.
  17. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  18. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  19. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  20. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
  21. USING utilities.selectboxHandler FROM PROPATH.
  22. USING utilities.utilitiesHandler FROM PROPATH.
  23. CLASS admin.dynamicformImpl INHERITS WebHandler:
  24. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  25. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  26. DEFINE VARIABLE oBody AS STRING NO-UNDO.
  27. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  28. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  29. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  31. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  32. DEFINE VARIABLE oJsonActiveSelectBox AS JsonObject NO-UNDO.
  33. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  34. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  35. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  36. DEFINE VARIABLE hError AS HANDLE NO-UNDO.
  37. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  38. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  39. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  40. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  41. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  42. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE cForm_Id AS CHARACTER NO-UNDO.
  44. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  45. DEFINE VARIABLE cFormUser AS CHARACTER NO-UNDO.
  46. DEFINE VARIABLE cFormColumns AS CHARACTER NO-UNDO.
  47. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO INIT 'user,admin'.
  48. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  49. DEFINE VARIABLE cErrorNo AS CHARACTER NO-UNDO.
  50. DEFINE VARIABLE cMaxHeight AS CHARACTER NO-UNDO.
  51. DEFINE VARIABLE iItemsPage AS INTEGER NO-UNDO.
  52. DEFINE VARIABLE cLogFile AS CHARACTER NO-UNDO.
  53. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  54. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  55. DEFINE VARIABLE cMethode AS CHARACTER NO-UNDO.
  56. DEFINE VARIABLE cClass AS CHARACTER NO-UNDO.
  57. DEFINE VARIABLE rClass AS Progress.Lang.Class.
  58. DEFINE VARIABLE oHandler AS Progress.Lang.Object NO-UNDO.
  59. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  60. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  61. DEFINE VARIABLE lWordindex AS LOGICAL NO-UNDO.
  62. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  63. DEFINE VARIABLE oselectboxHandler AS selectboxHandler NO-UNDO.
  64. /*------------------------------------------------------------------------------
  65. Purpose:
  66. Notes:
  67. ------------------------------------------------------------------------------*/
  68. METHOD OVERRIDE PROTECTED INTEGER HandleDelete(INPUT poRequest AS IWebRequest):
  69. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  70. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  71. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  72. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  73. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  74. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  75. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  76. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  77. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  78. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  79. DEFINE VARIABLE cUser AS CHARACTER NO-UNDO.
  80. DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
  81. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  82. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  83. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  84. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  85. outilitiesHandler = NEW utilitiesHandler().
  86. hError = ERROR-STATUS:HANDLE.
  87. outilitiesHandler:getHeaderData(
  88. INPUT poRequest ,
  89. INPUT cQueryString ,
  90. OUTPUT ccompany ,
  91. OUTPUT cuser_name ,
  92. OUTPUT cAnzeigeName ,
  93. OUTPUT ilanguage_id ,
  94. OUTPUT cSessionToken,
  95. OUTPUT cFunction ,
  96. OUTPUT oJsonIdent
  97. ).
  98. MESSAGE 'DELETE mit function ' oJsonIdent:GetCharacter('function').
  99. //
  100. // mögliche Benutzer für das durchsuchen von HTML-Dokumenten und Labeltexten ...
  101. //
  102. cUser = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
  103. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  104. cUser = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  105. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  106. //
  107. // Programmname aus den möglichen Benutzern ermitteln
  108. //
  109. lRetVal = FALSE.
  110. iItemsPage = 50.
  111. cMaxHeight = '250px'.
  112. cProgram = outilitiesHandler:getProgramName (
  113. INPUT oJsonIdent ,
  114. INPUT cUsers ,
  115. OUTPUT cFormUser ,
  116. OUTPUT cFormColumns,
  117. INPUT-OUTPUT iItemsPage ,
  118. INPUT-OUTPUT cMaxHeight
  119. ).
  120. oJsonIdent:ADD('program', cProgram) NO-ERROR.
  121. IF oJsonIdent:HAS('limit') THEN oJsonIdent:SET('limit', iItemsPage).
  122. ELSE oJsonIdent:ADD('limit', iItemsPage).
  123. // cLogFile = SUBSTITUTE('C:\TEMP\oJsonIdentDELETE_&1.json', REPLACE(STRING(TIME,'HH:MM:SS'), ':', '')).
  124. // oJsonIdent:WriteFile(cLogFile, TRUE).
  125. cForm_Id = oJsonIdent:GetCharacter('formId' ).
  126. cClassName = oJsonIdent:GetCharacter('class_name').
  127. cFileName = oJsonIdent:GetCharacter('file_name' ).
  128. FIND programs NO-LOCK
  129. WHERE programs.program_name = cProgram NO-ERROR.
  130. IF NOT AVAILABLE programs THEN LEAVE.
  131. cClass = programs.program_class.
  132. REPEAT TRANSACTION WHILE cFunction = 'delete' ON ERROR UNDO, LEAVE:
  133. rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
  134. cMethode = 'deleteData'.
  135. oHandler = rClass:NEW().
  136. lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
  137. INPUT oJsonIdent ,
  138. INPUT oJsonData ,
  139. OUTPUT oJsonResult
  140. ) NO-ERROR.
  141. outilitiesHandler:evaluateErrorStatus(hError).
  142. IF NOT lRetVal THEN LEAVE.
  143. oJsonResult:WRITE(LcJsonString, FALSE).
  144. // oJsonResult:WriteFile('C:\TEMP\DYNAMIC_DELETE_Respons.json', TRUE).
  145. LEAVE.
  146. END.
  147. oResponse = NEW OpenEdge.Web.WebResponse().
  148. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  149. oResponse:ContentType = "application/json;charset=utf-8".
  150. oWriter = NEW WebResponseWriter(oResponse).
  151. IF NOT lRetVal THEN
  152. DO:
  153. oJsonMessage = NEW JsonObject().
  154. oJsonMessage:ADD('success', FALSE).
  155. oJsonMessage:ADD('message', 'Fehler beim DELETE').
  156. oJsonMessage:WRITE(lcJsonString, FALSE).
  157. END.
  158. oWriter:Open().
  159. oWriter:Write(lcJsonString).
  160. oWriter:Close().
  161. RETURN 0.
  162. CATCH e AS Progress.Lang.Error:
  163. END CATCH.
  164. FINALLY:
  165. DELETE OBJECT oHandler NO-ERROR.
  166. DELETE OBJECT oJsonMessage NO-ERROR.
  167. DELETE OBJECT oResponse NO-ERROR.
  168. DELETE OBJECT oWriter NO-ERROR.
  169. END FINALLY.
  170. END METHOD.
  171. /*------------------------------------------------------------------------------
  172. Purpose:
  173. Notes:
  174. ------------------------------------------------------------------------------*/
  175. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  176. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  177. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  178. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  179. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  180. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  181. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  182. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  183. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  184. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  185. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  186. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  187. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  188. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  189. DEFINE VARIABLE cUser AS CHARACTER NO-UNDO.
  190. DEFINE VARIABLE lcQueryString AS CHARACTER NO-UNDO.
  191. DEFINE VARIABLE lSendChange AS LOGICAL NO-UNDO.
  192. DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
  193. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  194. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  195. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  196. outilitiesHandler = NEW utilitiesHandler().
  197. hError = ERROR-STATUS:HANDLE.
  198. outilitiesHandler:getHeaderData(
  199. INPUT poRequest ,
  200. INPUT cQueryString ,
  201. OUTPUT ccompany ,
  202. OUTPUT cuser_name ,
  203. OUTPUT cAnzeigeName ,
  204. OUTPUT ilanguage_id ,
  205. OUTPUT cSessionToken,
  206. OUTPUT cFunction ,
  207. OUTPUT oJsonIdent
  208. ).
  209. oJsonIdent:WRITE(lcString, TRUE).
  210. cString = lcString.
  211. MESSAGE 'GET mit function ' oJsonIdent:GetCharacter('function').
  212. //
  213. // mögliche Benutzer für das durchsuchen von HTML-Dokumenten und Labeltexten ...
  214. //
  215. cUser = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
  216. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  217. cUser = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  218. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  219. lRetVal = FALSE.
  220. MASTERLOOP:
  221. DO WHILE TRUE:
  222. //
  223. // Programmname aus den möglichen Benutzern ermitteln
  224. //
  225. iItemsPage = 50.
  226. cMaxHeight = '250px'.
  227. cProgram = outilitiesHandler:getProgramName (
  228. INPUT oJsonIdent ,
  229. INPUT cUsers ,
  230. OUTPUT cFormUser ,
  231. OUTPUT cformColumns,
  232. INPUT-OUTPUT iItemsPage ,
  233. INPUT-OUTPUT cMaxHeight
  234. ).
  235. IF cProgram = '' THEN
  236. DO:
  237. cString = oJsonIdent:GetCharacter('formId').
  238. outilitiesHandler:createErrorBox(
  239. INPUT oJsonIdent ,
  240. INPUT '2001' ,
  241. INPUT cString, /* Parameters */
  242. OUTPUT oJsonMessageBox
  243. ).
  244. LEAVE.
  245. END.
  246. oJsonIdent:ADD('program' , cProgram ).
  247. oJsonIdent:ADD('itemsPerPage' , iItemsPage).
  248. oJsonIdent:ADD('tableMaxHeight', cMaxHeight).
  249. oJsonIdent:ADD('formUser' , cFormUser ).
  250. cErrorNo = ''.
  251. cForm_Id = oJsonIdent:GetCharacter("formId" ) NO-ERROR.
  252. cFileName = oJsonIdent:GetCharacter("file_name" ) NO-ERROR.
  253. cClassName = oJsonIdent:GetCharacter("class_name") NO-ERROR.
  254. // MESSAGE 'cProgram =' cProgram.
  255. FIND programs NO-LOCK
  256. WHERE programs.program_name = cProgram NO-ERROR.
  257. IF NOT AVAILABLE programs THEN LEAVE.
  258. cClass = programs.program_class.
  259. lSendChange = programs.sendChangeRecord.
  260. //
  261. // active-Feld-Filter ermitten
  262. //
  263. IF cFunction <> 'saveActiveFilter' THEN
  264. DO:
  265. outilitiesHandler:getActiveSelection(
  266. INPUT oJsonIdent ,
  267. INPUT cFileName ,
  268. OUTPUT cActiveSelection
  269. ).
  270. IF cActiveSelection <> '' THEN
  271. DO:
  272. IF NOT oJsonIdent:HAS('activeFilter') THEN oJsonIdent:ADD('activeFilter', cActiveSelection ).
  273. ELSE oJsonIdent:SET('activeFilter', cActiveSelection ).
  274. END.
  275. END.
  276. DO WHILE cFunction = 'init' AND cProgram <> '':
  277. //
  278. // wenn die Tabelle(File) das Feld active enthält, soll der activeFilter activiert werden
  279. //
  280. CREATE BUFFER hBuffer FOR TABLE cFilename NO-ERROR.
  281. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  282. IF NOT ERROR-STATUS:ERROR AND
  283. VALID-HANDLE(hField) THEN lActive = TRUE.
  284. hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
  285. IF NOT ERROR-STATUS:ERROR AND
  286. VALID-HANDLE(hField) THEN lWordIndex = TRUE.
  287. DELETE OBJECT hBuffer.
  288. //
  289. // Alle Felder, welche als Selectboxen definiert sind, füllen
  290. //
  291. oselectboxHandler = NEW selectboxHandler().
  292. oJsonSelectBoxes = NEW JsonObject().
  293. FOR EACH selectboxfields NO-LOCK
  294. WHERE selectboxfields.company = ccompany
  295. AND selectboxfields.program = cform_id
  296. AND selectboxfields.user_name = cFormUser
  297. AND selectboxfields.boxfieldsFix <> '':
  298. DO ii = 1 TO NUM-ENTRIES(selectboxfields.boxfieldsFix, ';'):
  299. cFieldName = ENTRY(ii, selectboxfields.boxfieldsFix, ';').
  300. cFileName = ENTRY(1, cFieldName, '_').
  301. IF cFieldName MATCHES('*company*') THEN
  302. DO:
  303. oJsonBox = NEW JsonArray().
  304. httBuffer = oSelectboxHandler:getSelboxCompany(INPUT cFileName).
  305. httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
  306. oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
  307. NEXT.
  308. END.
  309. IF cFieldName MATCHES('*language_id*') THEN
  310. DO:
  311. oJsonBox = NEW JsonArray().
  312. httBuffer = oSelectboxHandler:getSelboxLanguage(INPUT cFileName) NO-ERROR.
  313. httBuffer:WRITE-JSON ('JsonArray', oJsonBox) NO-ERROR.
  314. oJsonSelectBoxes:ADD(cFieldName, oJsonBox) NO-ERROR.
  315. NEXT.
  316. END.
  317. IF cFieldName MATCHES('*user_name*') THEN
  318. DO:
  319. oJsonBox = NEW JsonArray().
  320. httBuffer = oSelectboxHandler:getSelboxUsers(INPUT cFileName).
  321. httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
  322. oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
  323. NEXT.
  324. END.
  325. IF cFieldName MATCHES('*table_name*') THEN
  326. DO:
  327. oJsonBox = NEW JsonArray().
  328. httBuffer = oSelectboxHandler:getSelboxTables(INPUT cFileName).
  329. httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
  330. oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
  331. NEXT.
  332. END.
  333. oselectboxHandler:getSelectBoxData(
  334. INPUT oJsonIdent,
  335. INPUT cFieldName,
  336. OUTPUT oJsonBox
  337. ).
  338. // oJsonBox:WriteFile('C:\TEMP\JsonBox.json', TRUE).
  339. oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
  340. // oJsonSelectBoxes:WriteFile(SUBSTITUTE('C:\TEMP\&1_JsonSelectBoxes.json', cFilename), TRUE).
  341. END.
  342. END.
  343. oJsonResponse = NEW JsonObject().
  344. oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
  345. oJsonResponse:ADD('tableMaxHeight' , cMaxHeight ).
  346. oJsonResponse:ADD('itemsPerPage' , iItemsPage ).
  347. oJsonResponse:ADD('formColumns' , cFormColumns ).
  348. oJsonResponse:ADD('lSearch' , lWordIndex ).
  349. oJsonResponse:ADD('hasRecordChange' , lSendChange ).
  350. //
  351. // Wenn die Tabelle das Feld active hat, wird die SelectBox für den activ-Filter gefüllt
  352. //
  353. IF lActive THEN
  354. DO:
  355. oJsonResponse:ADD("activeFilter" , cActiveSelection).
  356. oJsonResponse:ADD("hasActiveField" , lActive ).
  357. oJsonActiveSelectBox = NEW JsonObject().
  358. FOR EACH labeltexte NO-LOCK
  359. WHERE labeltexte.company = ccompany
  360. AND labeltexte.user_name = cFormUser
  361. AND labeltexte.program = 'Labels'
  362. AND labeltexte.table_name = 'table'
  363. AND labeltexte.field_name BEGINS 'LBL_FILTER'
  364. AND labeltexte.language_id = ilanguage_id :
  365. oJsonActiveSelectBox:ADD(CAPS(labeltexte.field_name), labeltexte.headlabel).
  366. END.
  367. oJsonResponse:ADD('activeFilterLabels', oJsonActiveSelectBox).
  368. END.
  369. //
  370. // Sortfelder auf start (keine Felder) stellen.
  371. //
  372. outilitiesHandler:writeSortfields(
  373. INPUT oJsonIdent ,
  374. INPUT cFileName ,
  375. INPUT '' , // cSortField
  376. INPUT '' // cDirection
  377. ) NO-ERROR.
  378. lRetVal = TRUE.
  379. // oJsonResponse:WriteFile('C:\Temp\dynamicform_init_response.json', TRUE).
  380. LEAVE.
  381. END.
  382. DO WHILE cFunction = 'loaddata' AND cProgram <> '':
  383. MESSAGE 'loaddata start'.
  384. oJsonIdent:WriteFile('C:\Temp\loaddat_jsonident.json', TRUE).
  385. IF oJsonIdent:HAS('sortField') THEN
  386. DO:
  387. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  388. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  389. cSortField = oJsonIdent:GetCharacter('sortField').
  390. cDirection = oJsonIdent:GetCharacter('sortDirection').
  391. outilitiesHandler:writeSortfields(
  392. INPUT oJsonIdent ,
  393. INPUT cFileName ,
  394. INPUT cSortField ,
  395. INPUT cDirection
  396. ).
  397. END.
  398. rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
  399. cMethode = 'getData'.
  400. oHandler = rClass:NEW().
  401. lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
  402. INPUT oJsonIdent ,
  403. OUTPUT oJsonResponse
  404. ) NO-ERROR.
  405. outilitiesHandler:evaluateErrorStatus(INPUT hError).
  406. // oJsonResponse:WriteFile(SUBSTITUTE('C:\TEMP\Loaddata_response_&1.json', oJsonIdent:GetCharacter('page')), TRUE).
  407. // oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
  408. lRetVal = TRUE.
  409. LEAVE.
  410. END.
  411. DO WHILE cFunction = 'rebuild':
  412. rClass = Progress.Lang.Class:GetClass(cClass).
  413. cMethode = 'rebuildData'.
  414. oHandler = rClass:NEW().
  415. lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
  416. INPUT oJsonIdent ,
  417. OUTPUT oJsonResult
  418. ) NO-ERROR.
  419. IF outilitiesHandler:evaluateErrorStatus(hError) THEN lRetVal = FALSE.
  420. IF NOT lRetVal THEN
  421. DO:
  422. outilitiesHandler:getErrorMessage(
  423. INPUT '2009' ,
  424. INPUT ilanguage_id ,
  425. INPUT '',
  426. OUTPUT lcMessage).
  427. oJsonResponse = NEW JsonObject().
  428. oJsonResponse:ADD('success', FALSE).
  429. oJsonResponse:ADD('message', lcMessage).
  430. oJsonResponse:WRITE(lcJsonString, FALSE).
  431. END.
  432. // oJsonResponse = NEW JsonObject().
  433. // oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
  434. oJsonResponse = oJsonResult.
  435. oJsonResponse:WriteFile(SUBSTITUTE('C:\TEMP\rebuild_&1.json', cFileName), TRUE).
  436. lRetVal = TRUE.
  437. LEAVE.
  438. END.
  439. DO WHILE cFunction = 'saveActiveFilter':
  440. cActiveSelection = oJsonIdent:GetCharacter('activeFilter').
  441. MESSAGE cFunction '-' cActiveSelection.
  442. outilitiesHandler:setActiveSelection(
  443. INPUT oJsonIdent ,
  444. INPUT cFileName ,
  445. INPUT cActiveSelection
  446. ).
  447. oJsonResponse = NEW JsonObject().
  448. oJsonResponse:ADD('success', TRUE).
  449. // oJsonResponse:WRITE(lcJsonString, FALSE).
  450. lRetVal = TRUE.
  451. LEAVE.
  452. END.
  453. DO WHILE cFunction = 'lookup' AND cProgram <> '':
  454. cMethode = oJsonIdent:GetCharacter('lookupField') NO-ERROR.
  455. cMethode = REPLACE(cMethode, cFileName + '_', '').
  456. cClass = 'utilities.lookupHandler'.
  457. ASSIGN
  458. rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
  459. oHandler = rClass:NEW() NO-ERROR.
  460. lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
  461. INPUT oJsonIdent ,
  462. OUTPUT oJsonResult
  463. ) NO-ERROR.
  464. outilitiesHandler:evaluateErrorStatus(hError).
  465. oJsonResponse = oJsonResult.
  466. LEAVE.
  467. END.
  468. LEAVE.
  469. END.
  470. IF NOT lRetVal THEN
  471. DO:
  472. lcString = oJsonMessageBox:GetLongchar('text').
  473. oJsonResponse = NEW JsonObject().
  474. oJsonResponse:ADD('success', FALSE).
  475. oJsonResponse:ADD('message', lcString).
  476. oJsonResponse:ADD('showMessage', oJsonMessageBox).
  477. END.
  478. oJsonResponse:WRITE(lcJsonString, FALSE).
  479. cContent-Type = "application/json".
  480. cDefautlCharSet = 'utf-8'.
  481. oBody = NEW STRING(lcJsonString) NO-ERROR.
  482. outilitiesHandler:evaluateErrorStatus(hError).
  483. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse) NO-ERROR.
  484. outilitiesHandler:evaluateErrorStatus(hError).
  485. // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
  486. oWriter = NEW WebResponseWriter(oResponse) NO-ERROR.
  487. outilitiesHandler:evaluateErrorStatus(hError).
  488. oWriter:Open() NO-ERROR.
  489. outilitiesHandler:evaluateErrorStatus(hError).
  490. oWriter:Close().
  491. RETURN 0.
  492. CATCH e AS Progress.Lang.Error:
  493. END CATCH.
  494. FINALLY:
  495. DELETE OBJECT oHandler NO-ERROR.
  496. DELETE OBJECT oSelectBoxHandler NO-ERROR.
  497. DELETE OBJECT oResponse NO-ERROR.
  498. DELETE OBJECT oWriter NO-ERROR.
  499. DELETE OBJECT oJsonSelectBoxes NO-ERROR.
  500. DELETE OBJECT oJsonBox NO-ERROR.
  501. DELETE OBJECT oParser NO-ERROR.
  502. DELETE OBJECT oJsonData NO-ERROR.
  503. DELETE OBJECT oJsonResponse NO-ERROR.
  504. END FINALLY.
  505. END METHOD.
  506. /*------------------------------------------------------------------------------
  507. Purpose:
  508. Notes:
  509. ------------------------------------------------------------------------------*/
  510. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  511. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  512. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  513. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  514. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  515. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  516. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  517. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  518. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  519. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  520. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  521. DEFINE VARIABLE cUser AS CHARACTER NO-UNDO.
  522. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  523. DEFINE VARIABLE lSendChange AS LOGICAL NO-UNDO.
  524. DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
  525. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  526. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  527. // oJsonData:WriteFile('C:\Temp\oJsonData_Post_Data.json', TRUE).
  528. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  529. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  530. outilitiesHandler = NEW utilitiesHandler().
  531. hError = ERROR-STATUS:HANDLE.
  532. outilitiesHandler:getHeaderData(
  533. INPUT poRequest ,
  534. INPUT cQueryString ,
  535. OUTPUT ccompany ,
  536. OUTPUT cuser_name ,
  537. OUTPUT cAnzeigeName ,
  538. OUTPUT ilanguage_id ,
  539. OUTPUT cSessionToken,
  540. OUTPUT cFunction ,
  541. OUTPUT oJsonIdent
  542. ).
  543. MESSAGE 'POST mit function ' oJsonIdent:GetCharacter('function').
  544. oJsonIdent:WRITE(lcJsonString, TRUE).
  545. //
  546. // mögliche Benutzer für das durchsuchen von HTML-DOkumenten und Labeltexten ...
  547. //
  548. cUser = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
  549. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  550. cUser = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  551. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  552. //
  553. // Programmname aus den möglichen Benutzern ermitteln
  554. //
  555. lRetVal = FALSE.
  556. iItemsPage = 50.
  557. cMaxHeight = '250px'.
  558. cProgram = outilitiesHandler:getProgramName (
  559. INPUT oJsonIdent ,
  560. INPUT cUsers ,
  561. OUTPUT cFormUser ,
  562. OUTPUT cformColumns,
  563. INPUT-OUTPUT iItemsPage ,
  564. INPUT-OUTPUT cMaxHeight
  565. ).
  566. IF cProgram = '' THEN
  567. DO:
  568. cString = oJsonIdent:GetCharacter('formId').
  569. outilitiesHandler:createErrorBox(
  570. INPUT oJsonIdent ,
  571. INPUT '2001' ,
  572. INPUT cString, /* Parameters */
  573. OUTPUT oJsonMessageBox
  574. ).
  575. LEAVE.
  576. END.
  577. oJsonIdent:ADD('program' , cProgram ).
  578. oJsonIdent:ADD('itemsPerPage' , iItemsPage).
  579. oJsonIdent:ADD('tableMaxHeight', cMaxHeight).
  580. oJsonIdent:ADD('formUser' , cFormUser ).
  581. IF oJsonIdent:HAS('limit') THEN oJsonIdent:SET('limit', iItemsPage).
  582. ELSE oJsonIdent:ADD('limit', iItemsPage).
  583. cForm_Id = oJsonIdent:GetCharacter('formId' ).
  584. cClassName = oJsonIdent:GetCharacter('class_name').
  585. cFileName = oJsonIdent:GetCharacter('file_name' ).
  586. FIND programs NO-LOCK
  587. WHERE programs.program_name = cProgram NO-ERROR.
  588. IF NOT AVAILABLE programs THEN LEAVE.
  589. cClass = programs.program_class.
  590. lSendChange = programs.sendChangeRecord.
  591. DO WHILE cFunction = 'change':
  592. cMethode = oJsonData:GetCharacter('changeAction').
  593. oJsonIdent:ADD('changeAction', cMethode).
  594. MESSAGE 'cFunction =' cFunction ' - Methode =' cMethode.
  595. rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
  596. oHandler = rClass:NEW().
  597. lRetVal = DYNAMIC-INVOKE (oHandler, cMethode,
  598. INPUT oJsonIdent ,
  599. INPUT oJsonData ,
  600. OUTPUT oJsonResult
  601. ) NO-ERROR.
  602. lRetVal = (IF outilitiesHandler:evaluateErrorStatus(hError) THEN FALSE ELSE TRUE).
  603. // oJsonResult:WriteFile('C:\TEMP\DYNAMIC_CHANGE_Respons.json', TRUE).
  604. LEAVE.
  605. END.
  606. REPEAT TRANSACTION WHILE cFunction = 'create' ON ERROR UNDO, LEAVE:
  607. rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
  608. cMethode = 'createData'.
  609. oHandler = rClass:NEW().
  610. lRetVal = DYNAMIC-INVOKE (oHandler, cMethode,
  611. INPUT oJsonIdent ,
  612. INPUT oJsonData ,
  613. OUTPUT oJsonResult
  614. ) NO-ERROR.
  615. lRetVal = (IF outilitiesHandler:evaluateErrorStatus(hError) THEN FALSE ELSE TRUE).
  616. // oJsonResult:WriteFile('C:\TEMP\DYNAMIC_CREATE_Respons.json', TRUE).
  617. LEAVE.
  618. END.
  619. oResponse = NEW OpenEdge.Web.WebResponse().
  620. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  621. oResponse:ContentType = "application/json;charset=utf-8".
  622. IF NOT lRetVal THEN
  623. DO:
  624. oJsonMessage = NEW JsonObject().
  625. oJsonMessage:ADD('success', FALSE).
  626. oJsonMessage:ADD('message', oJsonResult:GetLongchar('message')).
  627. oJsonMessage:WRITE(lcJsonString, FALSE).
  628. END.
  629. ELSE
  630. DO:
  631. oJsonResult:WRITE(lcJsonString, FALSE).
  632. // oJsonResult:WriteFile(SUBSTITUTE('C:\TEMP\DYNAMIC_&1_Respons.json', cFunction), TRUE).
  633. END.
  634. // MESSAGE 'Rueckmeldung beim POST ' cFunction STRING(lcJsonString).
  635. oWriter = NEW WebResponseWriter(oResponse).
  636. oWriter:Open().
  637. oWriter:Write(lcJsonString).
  638. oWriter:Close().
  639. RETURN 0.
  640. CATCH e AS Progress.Lang.Error:
  641. END CATCH.
  642. FINALLY:
  643. DELETE OBJECT oJsonMessage NO-ERROR.
  644. DELETE OBJECT oResponse NO-ERROR.
  645. DELETE OBJECT oWriter NO-ERROR.
  646. DELETE OBJECT oJsonResult NO-ERROR.
  647. END FINALLY.
  648. END METHOD.
  649. /*------------------------------------------------------------------------------
  650. Purpose:
  651. Notes:
  652. ------------------------------------------------------------------------------*/
  653. METHOD OVERRIDE PROTECTED INTEGER HandlePatch(INPUT poRequest AS IWebRequest):
  654. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  655. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  656. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  657. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  658. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  659. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  660. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  661. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  662. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  663. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  664. DEFINE VARIABLE cUser AS CHARACTER NO-UNDO.
  665. DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
  666. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  667. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  668. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  669. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  670. outilitiesHandler = NEW utilitiesHandler().
  671. hError = ERROR-STATUS:HANDLE.
  672. outilitiesHandler:getHeaderData(
  673. INPUT poRequest ,
  674. INPUT cQueryString ,
  675. OUTPUT ccompany ,
  676. OUTPUT cuser_name ,
  677. OUTPUT cAnzeigeName ,
  678. OUTPUT ilanguage_id ,
  679. OUTPUT cSessionToken,
  680. OUTPUT cFunction ,
  681. OUTPUT oJsonIdent
  682. ).
  683. MESSAGE 'PATCH mit function ' oJsonIdent:GetCharacter('function').
  684. //
  685. // mögliche Benutzer für das durchsuchen von HTML-Dokumenten und Labeltexten ...
  686. //
  687. cUser = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
  688. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  689. cUser = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  690. IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
  691. //
  692. // Programmname aus den möglichen Benutzern ermitteln
  693. //
  694. lRetVal = FALSE.
  695. iItemsPage = 50.
  696. cMaxHeight = '250px'.
  697. cProgram = outilitiesHandler:getProgramName (
  698. INPUT oJsonIdent ,
  699. INPUT cUsers ,
  700. OUTPUT cFormUser ,
  701. OUTPUT cFormColumns,
  702. INPUT-OUTPUT iItemsPage ,
  703. INPUT-OUTPUT cMaxHeight
  704. ).
  705. oJsonIdent:ADD('program', cProgram) NO-ERROR.
  706. cForm_Id = oJsonIdent:GetCharacter('formId' ).
  707. cClassName = oJsonIdent:GetCharacter('class_name').
  708. cFileName = oJsonIdent:GetCharacter('file_name' ).
  709. FIND programs NO-LOCK
  710. WHERE programs.program_name = cProgram NO-ERROR.
  711. IF NOT AVAILABLE programs THEN LEAVE.
  712. cClass = programs.program_class.
  713. REPEAT TRANSACTION WHILE cFunction = 'update' ON ERROR UNDO, LEAVE:
  714. rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
  715. cMethode = 'updateData'.
  716. oHandler = rClass:NEW().
  717. lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
  718. INPUT oJsonIdent ,
  719. INPUT oJsonData ,
  720. OUTPUT oJsonResult
  721. ) NO-ERROR.
  722. IF lRetVal THEN LEAVE.
  723. outilitiesHandler:evaluateErrorStatus(hError).
  724. LEAVE.
  725. END.
  726. oResponse = NEW OpenEdge.Web.WebResponse().
  727. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  728. oResponse:ContentType = "application/json;charset=utf-8".
  729. oJsonResult:WRITE(lcJsonString, FALSE).
  730. // oJsonResult:WriteFile(SUBSTITUTE('C:\TEMP\DYNAMIC_&1_Respons.json', cFunction), TRUE).
  731. oWriter = NEW WebResponseWriter(oResponse).
  732. oWriter:Open().
  733. oWriter:Write(lcJsonString).
  734. oWriter:Close().
  735. RETURN 0.
  736. CATCH e AS Progress.Lang.Error:
  737. END CATCH.
  738. FINALLY:
  739. DELETE OBJECT oJsonMessage NO-ERROR.
  740. DELETE OBJECT oWriter NO-ERROR.
  741. DELETE OBJECT oResponse NO-ERROR.
  742. DELETE OBJECT oHandler NO-ERROR.
  743. END FINALLY.
  744. END METHOD.
  745. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  746. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  747. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  748. RETURN result.
  749. END METHOD.
  750. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  751. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  752. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  753. RETURN result.
  754. END METHOD.
  755. DESTRUCTOR PUBLIC dynamicformImpl ( ):
  756. END DESTRUCTOR.
  757. END CLASS.