formdesignerImpl.cls 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856
  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. USING Progress.Json.ObjectModel.JsonDataType FROM PROPATH.
  23. CLASS admin.formdesignerImpl 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 ccompany AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  29. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  31. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  33. DEFINE TEMP-TABLE tcompanies
  34. SERIALIZE-NAME 'companies'
  35. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  36. FIELD company_Name AS CHARACTER SERIALIZE-NAME 'company_name'
  37. FIELD lselected AS LOGICAL SERIALIZE-NAME 'selected'
  38. .
  39. DEFINE VARIABLE htcompanies AS HANDLE NO-UNDO.
  40. DEFINE TEMP-TABLE tusers
  41. FIELD user_name AS CHARACTER
  42. FIELD display_name AS CHARACTER
  43. .
  44. DEFINE VARIABLE htusers AS HANDLE NO-UNDO.
  45. DEFINE TEMP-TABLE tlanguages
  46. FIELD language_id AS INTEGER
  47. FIELD language_name AS CHAR
  48. .
  49. DEFINE VARIABLE htlanguages AS HANDLE NO-UNDO.
  50. DEFINE TEMP-TABLE tFileDict
  51. SERIALIZE-NAME 'fields'
  52. FIELD cId AS CHARACTER SERIALIZE-NAME 'id'
  53. FIELD cName AS CHARACTER SERIALIZE-NAME 'fieldName'
  54. FIELD cLabel AS CHARACTER SERIALIZE-NAME 'label'
  55. FIELD cType AS CHARACTER SERIALIZE-NAME 'type'
  56. FIELD cDisplayType AS CHARACTER SERIALIZE-NAME 'displayType'
  57. FIELD cInputMode AS CHARACTER SERIALIZE-NAME 'inputMode'
  58. FIELD lshowSpinner AS LOGICAL SERIALIZE-NAME 'showSpinner'
  59. FIELD cFormat AS CHARACTER SERIALIZE-NAME 'format'
  60. FIELD iMaxLength AS INTEGER SERIALIZE-NAME 'maxLength'
  61. FIELD iDecimals AS INTEGER SERIALIZE-NAME 'decimalPlaces'
  62. FIELD leditable AS LOGICAL SERIALIZE-NAME 'editable'
  63. FIELD lhidden AS LOGICAL SERIALIZE-NAME 'hidden'
  64. FIELD cAusrichtung AS CHARACTER SERIALIZE-NAME 'align'
  65. .
  66. DEFINE TEMP-TABLE tConfig
  67. SERIALIZE-NAME 'existingConfigs'
  68. FIELD cId AS CHARACTER SERIALIZE-NAME 'id'
  69. FIELD cFormTitle AS CHARACTER SERIALIZE-NAME 'formTitle'
  70. FIELD cFormId AS CHARACTER SERIALIZE-NAME 'formId'
  71. FIELD cCreated AS CHARACTER SERIALIZE-NAME 'created'
  72. .
  73. DEFINE DATASET dsResponse
  74. SERIALIZE-NAME 'dsResponse'
  75. FOR tFileDict, tConfig.
  76. DEFINE VARIABLE hdsResponse AS HANDLE NO-UNDO.
  77. /*------------------------------------------------------------------------------
  78. Purpose:
  79. Notes:
  80. ------------------------------------------------------------------------------*/
  81. METHOD PUBLIC LOGICAL createTemptable(
  82. INPUT ipoJsonFields AS JsonArray,
  83. OUTPUT ophtTable AS HANDLE ,
  84. OUTPUT ophBuffer AS HANDLE
  85. ):
  86. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  87. DEFINE VARIABLE iType AS INTEGER NO-UNDO.
  88. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  89. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  90. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  91. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  92. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  93. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  94. DEFINE VARIABLE oJsonField AS JsonObject NO-UNDO.
  95. CREATE TEMP-TABLE ophtTable.
  96. DO i1 = 1 TO ipoJsonFields:LENGTH:
  97. oJsonField = NEW JsonObject().
  98. oJsonField = ipoJsonFields:GetJsonObject(i1).
  99. IF i1 = 1 THEN
  100. DO:
  101. cFieldNames = oJsonField:getNames() NO-ERROR.
  102. DO ii = 1 TO EXTENT(cFieldNames):
  103. cField = cFieldNames[ii].
  104. iType = oJsonField:GetType(cField).
  105. cType = ''.
  106. CASE iType:
  107. WHEN JsonDataType:STRING THEN
  108. cType = 'character'.
  109. WHEN JsonDataType:NUMBER THEN
  110. cType = 'integer'.
  111. WHEN JsonDataType:BOOLEAN THEN
  112. cType = 'logical'.
  113. WHEN JsonDataType:OBJECT THEN
  114. MESSAGE 'Json-Feldtype OBJECT' cField.
  115. WHEN JsonDataType:ARRAY THEN
  116. MESSAGE 'Json-Feldtype ARRAY' cField.
  117. WHEN JsonDataType:NULL THEN
  118. cType = 'character'.
  119. END CASE.
  120. IF cType = '' THEN cType = 'character'.
  121. ophtTable:ADD-NEW-FIELD(cField, cType) NO-ERROR.
  122. END.
  123. ophtTable:TEMP-TABLE-PREPARE('ttTemp').
  124. ophBuffer = ophtTable:DEFAULT-BUFFER-HANDLE.
  125. END.
  126. ophBuffer:BUFFER-CREATE().
  127. DO ii = 1 TO EXTENT(cFieldNames):
  128. cField = cFieldNames[ii].
  129. CASE ophBuffer:BUFFER-FIELD(cField):DATA-TYPE:
  130. WHEN 'character' THEN
  131. ophBuffer:BUFFER-FIELD(cField):BUFFER-VALUE = oJsonField:GetCharacter(cField) NO-ERROR.
  132. WHEN 'integer' THEN
  133. ophBuffer:BUFFER-FIELD(cField):BUFFER-VALUE = oJsonField:GetInteger(cField) NO-ERROR.
  134. WHEN 'logical' THEN
  135. ophBuffer:BUFFER-FIELD(cField):BUFFER-VALUE = STRING(oJsonField:GetLogical(cField)) NO-ERROR.
  136. END CASE.
  137. IF ophBuffer:BUFFER-FIELD(cField):BUFFER-VALUE = ? THEN ophBuffer:BUFFER-FIELD(cField):BUFFER-VALUE = ''.
  138. END.
  139. DELETE OBJECT oJsonField NO-ERROR.
  140. END.
  141. lRetVal = TRUE.
  142. RETURN lRetVal.
  143. END METHOD.
  144. /*------------------------------------------------------------------------------
  145. Purpose:
  146. Notes:
  147. ------------------------------------------------------------------------------*/
  148. METHOD PUBLIC LOGICAL fillFileDict(
  149. INPUT oJsonIdent AS JsonObject
  150. ):
  151. DEFINE VARIABLE lresult AS LOGICAL NO-UNDO INIT FALSE.
  152. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  153. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  154. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  155. DEFINE VARIABLE lRetVal AS LOG NO-UNDO INIT FALSE.
  156. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  157. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  158. DEFINE VARIABLE rFile AS RECID NO-UNDO.
  159. DEFINE VARIABLE cViewas AS CHARACTER NO-UNDO.
  160. DEFINE VARIABLE cFileNames AS CHARACTER NO-UNDO.
  161. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  162. DEFINE VARIABLE cLDBName AS CHARACTER NO-UNDO.
  163. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  164. DEFINE VARIABLE cTestName AS CHARACTER NO-UNDO.
  165. DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
  166. EMPTY TEMP-TABLE tFileDict.
  167. lRetVal = FALSE.
  168. cFileNames = oJsonIdent:GetCharacter('tables').
  169. DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
  170. cFileName = ENTRY(ii,cFileNames, ';').
  171. DO i1 = 1 TO NUM-DBS:
  172. cDBName = LDBNAME(i1).
  173. cFileName = SUBSTITUTE('&1.&2', cDBName, cFileName) NO-ERROR.
  174. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  175. IF ERROR-STATUS:ERROR OR
  176. NOT VALID-HANDLE(hBuffer) THEN NEXT.
  177. /* lRetVal = hBuffer:FIND-FIRST('WHERE _File-Name = ' + QUOTER(cFileName), NO-LOCK) NO-ERROR.*/
  178. /* IF lRetVal THEN */
  179. /* DO: */
  180. /* rFile = hBuffer:RECID. */
  181. /* DELETE OBJECT hBuffer NO-ERROR. */
  182. /* LEAVE. */
  183. /* END. */
  184. /* DELETE OBJECT hBuffer. */
  185. lRetVal = TRUE.
  186. END.
  187. IF NOT lRetVal THEN NEXT.
  188. /* cDBFileName = cDBName + '.' + '_Field'. */
  189. /* */
  190. /* CREATE BUFFER hBuffer FOR TABLE cDBFileName. */
  191. /* CREATE QUERY hQuery. */
  192. /* hQuery:SET-BUFFERS(hBuffer). */
  193. /* hQuery:QUERY-PREPARE(SUBSTITUTE('FOR EACH &1 WHERE _Field._File-Recid = &2 NO-LOCK BY _Field._Order', cDBFileName, rFile)).*/
  194. /* hQuery:QUERY-OPEN(). */
  195. DO WHILE NOT hQuery:QUERY-OFF-END:
  196. hQuery:GET-NEXT(NO-LOCK) NO-ERROR.
  197. IF hQuery:QUERY-OFF-END THEN LEAVE.
  198. DO i1 = 1 TO hBuffer:NUM-FIELDS:
  199. IF hBuffer:BUFFER-FIELD(i1):NAME = 'wordindex' THEN NEXT.
  200. CREATE tFileDict.
  201. ASSIGN
  202. tFileDict.cId = cFilename + '_' + hBuffer::_Field-Name
  203. tFileDict.cName = cFilename + '_' + hBuffer::_Field-Name
  204. tFileDict.cFormat = hBuffer::_Format
  205. tFileDict.cType = hBuffer::_Data-Type
  206. tFileDict.iDecimals = 0
  207. tFileDict.lhidden = FALSE
  208. tFileDict.leditable = TRUE
  209. tFileDict.iMaxLength = 12
  210. tFileDict.cAusrichtung = 'left'
  211. tFileDict.cDisplayType = ?
  212. tFileDict.lShowSpinner = ?
  213. tFileDict.cInputMode = ?
  214. .
  215. FIND FIRST labeltexte NO-LOCK
  216. WHERE labeltexte.company = oJsonIdent:GetCharacter('company')
  217. AND labeltexte.table_name = cFileName
  218. AND labeltexte.field_name = hBuffer::_Field-Name
  219. AND labeltexte.language_id = oJsonIdent:GetInteger('language_id') NO-ERROR.
  220. IF NOT AVAILABLE labeltexte THEN
  221. DO:
  222. FIND FIRST labeltexte NO-LOCK
  223. WHERE labeltexte.company = oJsonIdent:GetCharacter('company')
  224. AND labeltexte.table_name = 'table'
  225. AND labeltexte.field_name = hBuffer::_Field-Name NO-ERROR.
  226. END.
  227. IF NOT AVAILABLE labeltexte THEN
  228. DO:
  229. FIND FIRST labeltexte NO-LOCK
  230. WHERE labeltexte.company = oJsonIdent:GetCharacter('company')
  231. AND labeltexte.field_name = hBuffer::_Field-Name
  232. AND labeltexte.language_id = oJsonIdent:GetInteger('language_id') NO-ERROR.
  233. END.
  234. IF AVAILABLE labeltexte THEN
  235. DO:
  236. tFileDict.cLabel = labeltexte.sidelabel.
  237. END.
  238. ELSE
  239. DO:
  240. tFileDict.cLabel = (IF hBuffer::_Label <> ? THEN hBuffer::_Label ELSE hBuffer::_Field-Name).
  241. END.
  242. IF INDEX(hBuffer::_Format, '(') = 0 THEN tFileDict.iMaxLength = LENGTH(hBuffer::_Format).
  243. ELSE
  244. DO:
  245. i1 = INDEX(hBuffer::_Format, '(') + 1.
  246. i2 = INDEX(hBuffer::_Format, ')').
  247. tFileDict.iMaxLength = INTEGER(SUBSTRING(hBuffer::_Format, i1, i2 - i1)).
  248. END.
  249. CASE tFileDict.cType:
  250. WHEN 'character' THEN
  251. DO:
  252. ASSIGN
  253. tFileDict.cType = 'text'
  254. tFileDict.iDecimals = 0.
  255. IF hBuffer::_Extent > 0 THEN tFileDict.cType = 'textarea'.
  256. END.
  257. WHEN 'Date' THEN
  258. DO:
  259. ASSIGN
  260. tFileDict.cType = 'date'
  261. tFileDict.cFormat = '99.99.9999'
  262. tFileDict.iDecimals = 0
  263. tFileDict.iMaxLength = tFileDict.iMaxLength + 2
  264. tFileDict.cAusrichtung = 'center'.
  265. END.
  266. WHEN 'Decimal' THEN
  267. DO:
  268. ASSIGN
  269. tFileDict.cType = 'decimal'
  270. tFileDict.iDecimals = hBuffer::_Decimals
  271. tFileDict.cDisplayType = 'text'
  272. tFileDict.cInputMode = 'decimal'
  273. tFileDict.lShowSpinner = FALSE
  274. tFileDict.iMaxLength = tFileDict.iMaxLength
  275. tFileDict.cAusrichtung = 'right'.
  276. END.
  277. WHEN 'Integer' OR
  278. WHEN 'Int64' THEN
  279. DO:
  280. ASSIGN
  281. tFileDict.cType = 'integer'
  282. tFileDict.iDecimals = 0
  283. tFileDict.cDisplayType = 'text'
  284. tFileDict.cInputMode = 'numeric'
  285. tFileDict.lShowSpinner = FALSE
  286. tFileDict.iMaxLength = tFileDict.iMaxLength
  287. tFileDict.cAusrichtung = 'right'.
  288. END.
  289. WHEN 'Recid' THEN
  290. DO:
  291. ASSIGN
  292. tFileDict.cType = 'integer'
  293. tFileDict.iDecimals = 0
  294. tFileDict.cDisplayType = 'text'
  295. tFileDict.cInputMode = 'text'
  296. tFileDict.lShowSpinner = FALSE
  297. tFileDict.lHidden = TRUE
  298. tFileDict.leditable = FALSE.
  299. END.
  300. WHEN 'logical' THEN
  301. DO:
  302. ASSIGN
  303. tFileDict.cType = 'checkbox'
  304. tFileDict.cAusrichtung = 'center'.
  305. END.
  306. END CASE.
  307. cViewas = hBuffer::_View-as.
  308. CASE cViewas:
  309. WHEN 'combo-box' THEN
  310. tFileDict.cType = 'select'.
  311. WHEN 'editor' THEN
  312. ASSIGN
  313. tFileDict.cType = 'textarea'.
  314. END CASE.
  315. /* tFileDict.cFormat = REPLACE(tFileDict.cFormat, '9', '0').*/
  316. /* tFileDict.cFormat = REPLACE(tFileDict.cFormat, '>', ''). */
  317. /* tFileDict.cFormat = REPLACE(tFileDict.cFormat, '<', ''). */
  318. /* tFileDict.cAusrichtung = 'right'. */
  319. END.
  320. hQuery:QUERY-CLOSE().
  321. DELETE OBJECT hBuffer.
  322. DELETE OBJECT hQuery.
  323. END.
  324. lResult = TRUE.
  325. RETURN lresult.
  326. END METHOD.
  327. /*------------------------------------------------------------------------------
  328. Purpose:
  329. Notes:
  330. ------------------------------------------------------------------------------*/
  331. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  332. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  333. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  334. DEFINE VARIABLE oJsonCompanies AS JsonArray NO-UNDO.
  335. DEFINE VARIABLE oJsonUsers AS JsonArray NO-UNDO.
  336. DEFINE VARIABLE oJsonLanguages AS JsonArray NO-UNDO.
  337. DEFINE VARIABLE oBody AS String NO-UNDO.
  338. DEFINE VARIABLE oJsonFileDict AS JsonObject NO-UNDO.
  339. DEFINE VARIABLE oJsonConfig AS JsonObject NO-UNDO.
  340. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  341. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  342. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  343. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  344. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  345. DEFINE VARIABLE htFileDict AS HANDLE NO-UNDO.
  346. DEFINE VARIABLE htConfig AS HANDLE NO-UNDO.
  347. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  348. DEFINE VARIABLE cFileNames AS CHARACTER NO-UNDO.
  349. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  350. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  351. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  352. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  353. DEFINE VARIABLE oJsonMenu AS JsonArray NO-UNDO.
  354. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  355. DEFINE VARIABLE cConfig_id AS CHARACTER NO-UNDO.
  356. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  357. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  358. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  359. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  360. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  361. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  362. outilitiesHandler = NEW utilitiesHandler().
  363. outilitiesHandler:getHeaderData(
  364. INPUT poRequest ,
  365. OUTPUT ccompany ,
  366. OUTPUT cuser_name ,
  367. OUTPUT cAnzeigeName ,
  368. OUTPUT ilanguage_id ,
  369. OUTPUT cSessionToken
  370. ).
  371. oJsonIdent = NEW JsonObject().
  372. oJsonIdent:ADD('H_company' , ccompany ) NO-ERROR.
  373. oJsonIdent:ADD('H_user_name' , cuser_name ) NO-ERROR.
  374. oJsonIdent:ADD('H_display_name', cAnzeigeName ) NO-ERROR.
  375. oJsonIdent:ADD('H_language_id' , iLanguage_id ) NO-ERROR.
  376. oJsonIdent:ADD('H_sessionToken', cSessionToken) NO-ERROR.
  377. //
  378. // Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
  379. //
  380. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  381. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  382. cQueryPairs = ENTRY(ii, cQueryString, '&').
  383. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  384. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  385. IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  386. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  387. END.
  388. IF NOT oJsonIdent:HAS('company' ) THEN oJsonIdent:ADD('company' , oJsonIdent:GetCharacter('H_company' )).
  389. IF NOT oJsonIdent:HAS('user_name' ) THEN oJsonIdent:ADD('user_name' , oJsonIdent:GetCharacter('H_user_name' )).
  390. IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetInteger ('H_language_id')).
  391. oJsonIdent:WriteFile('C:\TEMP\formdesigner_GET.json', TRUE).
  392. cFileNames = REPLACE(oJsonIdent:GetCharacter("tables"), ',', ';') NO-ERROR.
  393. cFunction = oJsonIdent:GetCharacter('function').
  394. DO WHILE cFunction = 'init':
  395. EMPTY TEMP-TABLE tcompanies.
  396. FOR EACH companies NO-LOCK WHERE companies.active:
  397. CREATE tcompanies.
  398. BUFFER-COPY companies TO tcompanies.
  399. ASSIGN
  400. tcompanies.lselected = (IF companies.company = ccompany THEN TRUE ELSE FALSE).
  401. END.
  402. EMPTY TEMP-TABLE tusers.
  403. FOR EACH users NO-LOCK WHERE users.active:
  404. CREATE tusers.
  405. BUFFER-COPY users TO tusers.
  406. END.
  407. EMPTY TEMP-TABLE tlanguages.
  408. FOR EACH languages NO-LOCK:
  409. CREATE tlanguages.
  410. BUFFER-COPY languages TO tlanguages.
  411. END.
  412. oJsonResponse = NEW JsonObject().
  413. oJsonCompanies = NEW JsonArray().
  414. oJsonUsers = NEW JsonArray().
  415. oJsonLanguages = NEW JsonArray().
  416. htcompanies = TEMP-TABLE tcompanies:DEFAULT-BUFFER-HANDLE.
  417. htusers = TEMP-TABLE tusers :DEFAULT-BUFFER-HANDLE.
  418. htlanguages = TEMP-TABLE tlanguages:DEFAULT-BUFFER-HANDLE.
  419. htcompanies:WRITE-JSON('JsonArray', oJsonCompanies ).
  420. htusers :WRITE-JSON('JsonArray', oJsonUsers ).
  421. htlanguages:WRITE-JSON('JsonArray', oJsonLanguages ).
  422. oJsonResponse:ADD('companies', oJsonCompanies).
  423. oJsonResponse:ADD('users' , oJsonUsers ).
  424. oJsonResponse:ADD('languages', oJsonLanguages).
  425. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  426. lRetVal = TRUE.
  427. LEAVE.
  428. END.
  429. DO WHILE cFunction = 'load':
  430. fillFileDict(
  431. INPUT oJsonIdent
  432. ).
  433. EMPTY TEMP-TABLE tConfig.
  434. FOR EACH htmldokumente NO-LOCK
  435. WHERE htmldokumente.company = ccompany
  436. AND htmldokumente.user_name = cuser_name
  437. AND htmldokumente.language_id = ilanguage_id:
  438. DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
  439. cFileName = ENTRY(ii, cFileNames, ';').
  440. IF INDEX(htmldokumente.Form_Id, cFileName) = 0 THEN NEXT.
  441. IF htmldokumente.updated_at = ? THEN
  442. DO:
  443. dDateTime = htmldokumente.created_at.
  444. cDateTime = STRING(htmldokumente.created_at,'99-99-9999THH:MM:SS').
  445. END.
  446. ELSE
  447. DO:
  448. dDateTime = htmldokumente.updated_at.
  449. cDateTime = STRING(htmldokumente.updated_at,'99-99-9999THH:MM:SS').
  450. END.
  451. CREATE tConfig.
  452. ASSIGN
  453. tConfig.cId = htmldokumente.form_id
  454. tConfig.cFormTitle = htmldokumente.formtitle
  455. tConfig.cCreated = STRING(YEAR(dDateTime),'9999')
  456. + '-'
  457. + STRING(MONTH(dDateTime),'99')
  458. + '-'
  459. + STRING(DAY(dDateTime),'99')
  460. + SUBSTRING(cDateTime,11).
  461. LEAVE.
  462. END.
  463. END.
  464. htFileDict = TEMP-TABLE tFileDict :DEFAULT-BUFFER-HANDLE.
  465. htConfig = TEMP-TABLE tConfig :DEFAULT-BUFFER-HANDLE.
  466. hdsResponse = DATASET dsResponse:HANDLE.
  467. oJsonResponse = NEW JsonObject().
  468. oJsonResponse:READ(hdsResponse).
  469. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  470. lRetVal = TRUE.
  471. LEAVE.
  472. END.
  473. DO WHILE cFunction = 'delete':
  474. lRetVal = FALSE.
  475. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  476. FIND FIRST htmldokumente
  477. WHERE htmldokumente.company = ccompany
  478. AND htmldokumente.user_name = cuser_name
  479. AND htmldokumente.language_id = ilanguage_id
  480. AND htmldokumente.form_id = cConfig_id NO-ERROR.
  481. IF NOT AVAILABLE htmldokumente THEN LEAVE.
  482. DELETE htmldokumente.
  483. lRetVal = TRUE.
  484. LEAVE.
  485. END.
  486. oJsonResponse = NEW JsonObject().
  487. oJsonResponse:ADD("success", lRetVal).
  488. IF lRetVal THEN oJsonResponse:ADD('message', 'Konfiguration erfolreich gel�scht').
  489. ELSE oJsonResponse:ADD('error' , 'Konfiguration nicht gefunden' ).
  490. oJsonResponse:write(lcJsonInhalt, FALSE).
  491. LEAVE.
  492. END.
  493. DO WHILE cFunction = 'loaddetail':
  494. FIND FIRST htmldokumente NO-LOCK
  495. WHERE htmldokumente.company = ccompany
  496. AND htmldokumente.user_name = cuser_name
  497. AND htmldokumente.language_id = ilanguage_id
  498. AND htmldokumente.form_id = cConfig_id NO-ERROR.
  499. lcJsonInhalt = htmldokumente.htmltext.
  500. lRetVal = TRUE.
  501. LEAVE.
  502. END.
  503. IF NOT lRetVal THEN
  504. DO:
  505. oJsonResponse = NEW JsonObject().
  506. oJsonResponse:ADD('success', FALSE).
  507. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  508. END.
  509. cContent-Type = "application/json".
  510. cDefautlCharSet = 'utf-8'.
  511. oBody = NEW STRING(lcJsonInhalt).
  512. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  513. oWriter = NEW WebResponseWriter(oResponse).
  514. oWriter:Open().
  515. oWriter:Close().
  516. RETURN 0.
  517. CATCH e AS Progress.Lang.Error:
  518. END CATCH.
  519. FINALLY:
  520. END FINALLY.
  521. END METHOD.
  522. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  523. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  524. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  525. RETURN result.
  526. END METHOD.
  527. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  528. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  529. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  530. RETURN result.
  531. END METHOD.
  532. /*------------------------------------------------------------------------------
  533. Purpose:
  534. Notes:
  535. ------------------------------------------------------------------------------*/
  536. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  537. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  538. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  539. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  540. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  541. DEFINE VARIABLE oFelder AS JsonArray NO-UNDO.
  542. DEFINE VARIABLE oFeld AS JsonObject NO-UNDO.
  543. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  544. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  545. DEFINE VARIABLE cJSON AS LONGCHAR NO-UNDO.
  546. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  547. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  548. DEFINE VARIABLE oJsonConfig AS JsonObject NO-UNDO.
  549. DEFINE VARIABLE oJsonFields AS JsonArray NO-UNDO.
  550. DEFINE VARIABLE ctables AS CHARACTER NO-UNDO.
  551. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  552. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  553. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  554. DEFINE VARIABLE cformtitle AS CHARACTER NO-UNDO.
  555. DEFINE VARIABLE cformid AS CHARACTER NO-UNDO.
  556. DEFINE VARIABLE lcJsonConfig AS LONGCHAR NO-UNDO.
  557. DEFINE VARIABLE htTable AS HANDLE NO-UNDO.
  558. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  559. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  560. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  561. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO.
  562. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  563. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  564. DEFINE VARIABLE cBoxfields AS CHARACTER NO-UNDO.
  565. DEFINE VARIABLE lBoxField AS LOGICAL NO-UNDO.
  566. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  567. // MESSAGE 'getJsonFromRequest = ' lRetVal.
  568. cFunction = poRequest:URI:GetQueryValue("function").
  569. // MESSAGE 'Funktion = ' cFunction.
  570. oJsonData:WRITE(lcJsonString, FALSE).
  571. MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  572. ccompany = oJsonData:GetCharacter('company' ).
  573. cuser_name = oJsonData:GetCharacter('user_name' ).
  574. ilanguage_id = INTEGER(oJsonData:GetCharacter('language_id')).
  575. ctables = oJsonData:GetCharacter('tables').
  576. // MESSAGE ccompany '-' cuser_name '-' ilanguage_id '-' ctables.
  577. oJsonConfig = NEW JsonObject().
  578. oJsonConfig = oJsonData:GetJsonObject ('config').
  579. cformtitle = oJsonConfig:GetCharacter('formTitle').
  580. cformid = oJsonConfig:GetCharacter('formId').
  581. oJsonFields = NEW JsonArray().
  582. oJsonFields = oJsonConfig:GetJsonArray('selectedFields').
  583. oJsonConfig:WRITE(lcJsonConfig, FALSE).
  584. oJsonConfig:WriteFile('C:\TEMP\FormDesignerOutput.json', TRUE).
  585. createTemptable (
  586. INPUT oJsonFields,
  587. OUTPUT htTable ,
  588. OUTPUT hBuffer ).
  589. hBuffer:WRITE-JSON ('file', 'C:\TEMP\FeldAttributeAusFormdesigner.csv', TRUE).
  590. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  591. FIND htmldokumente
  592. WHERE htmldokumente.company = ccompany
  593. AND htmldokumente.user_name = cuser_name
  594. AND htmldokumente.form_id = cformid
  595. AND htmldokumente.language_id = ilanguage_id NO-ERROR.
  596. IF NOT AVAILABLE htmldokumente THEN
  597. DO:
  598. CREATE htmldokumente.
  599. ASSIGN
  600. htmldokumente.company = ccompany
  601. htmldokumente.user_name = cuser_name
  602. htmldokumente.form_id = cformid
  603. htmldokumente.language_id = ilanguage_id
  604. htmldokumente.created_at = NOW.
  605. END.
  606. ASSIGN
  607. htmldokumente.tables = ctables
  608. htmldokumente.formtitle = cformtitle.
  609. htmltext = STRING(lcJsonConfig).
  610. // MESSAGE 'htmldokument gschrieben mit config ' STRING(lcJsonConfig).
  611. RELEASE htmldokumente.
  612. LEAVE.
  613. END.
  614. cBoxfields = ''.
  615. CREATE QUERY hQuery.
  616. hQuery:SET-BUFFERS(hBuffer).
  617. hQuery:QUERY-PREPARE ('FOR EACH ttTemp NO-LOCK').
  618. hQuery:QUERY-OPEN ().
  619. hQUery:GET-FIRST ().
  620. DO WHILE NOT hQuery:QUERY-OFF-END TRANSACTION:
  621. cFieldName = hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE.
  622. cFileName = ENTRY(1, cFieldName, '_').
  623. FIND FIRST labeltexte
  624. WHERE labeltexte.company = ccompany
  625. AND labeltexte.user_name = cuser_name
  626. AND labeltexte.program = cformid
  627. AND labeltexte.table_name = cFileName
  628. AND labeltexte.field_name = cFieldName
  629. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  630. IF NOT AVAILABLE labeltexte THEN
  631. DO:
  632. CREATE labeltexte.
  633. ASSIGN
  634. labeltexte.company = ccompany
  635. labeltexte.user_name = cuser_name
  636. labeltexte.program = cformid
  637. labeltexte.table_name = cFileName
  638. labeltexte.field_name = cFieldName
  639. labeltexte.language_id = ilanguage_id.
  640. END.
  641. ASSIGN
  642. labeltexte.sidelabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  643. labeltexte.headlabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  644. labeltexte.alignment = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
  645. FIND FIRST labeltexte
  646. WHERE labeltexte.company = ccompany
  647. AND labeltexte.user_name = ''
  648. AND labeltexte.program = ''
  649. AND labeltexte.table_name = cFileName
  650. AND labeltexte.field_name = cFieldName
  651. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  652. IF NOT AVAILABLE labeltexte THEN
  653. DO:
  654. CREATE labeltexte.
  655. ASSIGN
  656. labeltexte.company = ccompany
  657. labeltexte.user_name = ''
  658. labeltexte.program = ''
  659. labeltexte.table_name = cFileName
  660. labeltexte.field_name = cFieldName
  661. labeltexte.language_id = ilanguage_id
  662. labeltexte.sidelabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  663. labeltexte.headlabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  664. labeltexte.alignment = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
  665. END.
  666. FIND FIRST labeltexte
  667. WHERE labeltexte.company = ccompany
  668. AND labeltexte.user_name = ''
  669. AND labeltexte.program = ''
  670. AND labeltexte.table_name = ''
  671. AND labeltexte.field_name = cFieldName
  672. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  673. IF NOT AVAILABLE labeltexte THEN
  674. DO:
  675. CREATE labeltexte.
  676. ASSIGN
  677. labeltexte.company = ccompany
  678. labeltexte.user_name = ''
  679. labeltexte.program = ''
  680. labeltexte.table_name = ''
  681. labeltexte.field_name = cFieldName
  682. labeltexte.language_id = ilanguage_id
  683. labeltexte.sidelabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  684. labeltexte.headlabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  685. labeltexte.alignment = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
  686. END.
  687. RELEASE labeltexte.
  688. lBoxField = (IF hBuffer:BUFFER-FIELD('type'):BUFFER-VALUE = 'select' THEN TRUE ELSE FALSE).
  689. IF lBoxField THEN
  690. DO:
  691. cBoxFields = cBoxfields
  692. + (IF cBoxfields = '' THEN '' ELSE ';')
  693. + hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE.
  694. END.
  695. hQuery:GET-NEXT ().
  696. END.
  697. IF cBoxfields <> '' THEN
  698. DO:
  699. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  700. FIND FIRST selectboxfields
  701. WHERE selectboxfields.company = ccompany
  702. AND selectboxfields.program = cFormId
  703. AND selectboxfields.user_name = ''
  704. AND selectboxfield.table_Name = '' NO-ERROR.
  705. IF NOT AVAILABLE selectboxfields THEN
  706. DO:
  707. CREATE selectboxfields.
  708. ASSIGN
  709. selectboxfields.company = ccompany
  710. selectboxfields.program = cFormId
  711. selectboxfields.user_name = ''
  712. selectboxfield.table_Name = ''.
  713. END.
  714. ASSIGN
  715. selectboxfield.boxfields = cBoxFields.
  716. RELEASE selectboxfields.
  717. LEAVE.
  718. END.
  719. END.
  720. // MESSAGE 'geschrieben ' ccompany '-' cuser_name '-' cformid '-' ilanguage_id.
  721. oResponse = NEW OpenEdge.Web.WebResponse().
  722. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  723. oResponse:ContentType = "application/json;charset=utf-8".
  724. oWriter = NEW WebResponseWriter(oResponse).
  725. oJsonMessage = NEW JsonObject().
  726. oJsonMessage:ADD('id', cformid).
  727. oJsonMessage:ADD('message', 'erfolgreich gespeichert').
  728. oJsonMessage:WRITE(lcJsonString, TRUE).
  729. // MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
  730. oWriter:Open().
  731. oWriter:Write(lcJsonString).
  732. oWriter:Close().
  733. CATCH e AS Progress.Lang.Error:
  734. END CATCH.
  735. FINALLY:
  736. /* DELETE OBJECT oJsonConfig NO-ERROR.*/
  737. /* DELETE OBJECT oJsonMessage NO-ERROR.*/
  738. /* DELETE OBJECT oJsonFields NO-ERROR.*/
  739. END FINALLY.
  740. END METHOD.
  741. END CLASS.