formdesignerImpl.cls 37 KB

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