formdesignerImpl.cls 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  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. USING System.Windows.Forms.VisualStyles.FilenameProperty FROM ASSEMBLY.
  25. CLASS admin.formdesignerImpl INHERITS WebHandler:
  26. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  27. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  28. DEFINE VARIABLE oBody AS String NO-UNDO.
  29. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  31. DEFINE VARIABLE cAnzeigeName AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  33. DEFINE VARIABLE cSessionToken AS CHARACTER NO-UNDO.
  34. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  35. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  36. DEFINE TEMP-TABLE tcompanies
  37. SERIALIZE-NAME 'companies'
  38. FIELD company AS CHARACTER SERIALIZE-NAME 'company'
  39. FIELD company_Name AS CHARACTER SERIALIZE-NAME 'company_name'
  40. FIELD lselected AS LOGICAL SERIALIZE-NAME 'selected'
  41. .
  42. DEFINE VARIABLE htcompanies AS HANDLE NO-UNDO.
  43. DEFINE TEMP-TABLE tusers
  44. FIELD user_name AS CHARACTER
  45. FIELD display_name AS CHARACTER
  46. .
  47. DEFINE VARIABLE htusers AS HANDLE NO-UNDO.
  48. DEFINE TEMP-TABLE tlanguages
  49. FIELD language_id AS INTEGER
  50. FIELD language_name AS CHAR
  51. .
  52. DEFINE VARIABLE htlanguages AS HANDLE NO-UNDO.
  53. DEFINE TEMP-TABLE tFileDict
  54. SERIALIZE-NAME 'fields'
  55. FIELD cId AS CHARACTER SERIALIZE-NAME 'id'
  56. FIELD cName AS CHARACTER SERIALIZE-NAME 'fieldName'
  57. FIELD cLabel AS CHARACTER SERIALIZE-NAME 'label'
  58. FIELD cType AS CHARACTER SERIALIZE-NAME 'type'
  59. FIELD cDisplayType AS CHARACTER SERIALIZE-NAME 'displayType'
  60. FIELD cInputMode AS CHARACTER SERIALIZE-NAME 'inputMode'
  61. FIELD lshowSpinner AS LOGICAL SERIALIZE-NAME 'showSpinner'
  62. FIELD cFormat AS CHARACTER SERIALIZE-NAME 'format'
  63. FIELD iMaxLength AS INTEGER SERIALIZE-NAME 'maxLength'
  64. FIELD iDecimals AS INTEGER SERIALIZE-NAME 'decimalPlaces'
  65. FIELD leditable AS LOGICAL SERIALIZE-NAME 'editable'
  66. FIELD lhidden AS LOGICAL SERIALIZE-NAME 'hidden'
  67. FIELD cAusrichtung AS CHARACTER SERIALIZE-NAME 'align'
  68. FIELD iMaxExtent AS INTEGER SERIALIZE-NAME 'maxExtent'
  69. FIELD iAnzZeilen AS INTEGER SERIALIZE-NAME 'rowSpan'
  70. .
  71. DEFINE TEMP-TABLE tConfig
  72. SERIALIZE-NAME 'existingConfigs'
  73. FIELD cId AS CHARACTER SERIALIZE-NAME 'id'
  74. FIELD cFormTitle AS CHARACTER SERIALIZE-NAME 'formTitle'
  75. FIELD cFormId AS CHARACTER SERIALIZE-NAME 'formId'
  76. FIELD cCreated AS CHARACTER SERIALIZE-NAME 'created'
  77. .
  78. DEFINE DATASET dsResponse
  79. SERIALIZE-NAME 'dsResponse'
  80. FOR tFileDict, tConfig.
  81. DEFINE VARIABLE hdsResponse AS HANDLE NO-UNDO.
  82. /*------------------------------------------------------------------------------
  83. Purpose:
  84. Notes:
  85. ------------------------------------------------------------------------------*/
  86. METHOD PUBLIC LOGICAL createTemptable(
  87. INPUT ipoJsonFields AS JsonArray,
  88. OUTPUT ophtTable AS HANDLE ,
  89. OUTPUT ophBuffer AS HANDLE
  90. ):
  91. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  92. DEFINE VARIABLE iType AS INTEGER NO-UNDO.
  93. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  94. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  95. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  96. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  97. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  98. DEFINE VARIABLE iExtent AS INTEGER NO-UNDO.
  99. DEFINE VARIABLE iNumber AS INTEGER NO-UNDO.
  100. DEFINE VARIABLE cFieldAttributes AS CHARACTER NO-UNDO EXTENT.
  101. DEFINE VARIABLE cFieldAttribute AS CHARACTER NO-UNDO.
  102. DEFINE VARIABLE oJsonField AS JsonObject NO-UNDO.
  103. DEFINE VARIABLE oJsonAttr AS JsonObject NO-UNDO.
  104. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  105. DEFINE VARIABLE cAddFields AS CHARACTER NO-UNDO
  106. INIT 'id,fieldName,label,type,maxLength,format,decimalPlaces,widthInChars,source,align,selectOptionsType'.
  107. DEFINE VARIABLE cAddedFields AS CHARACTER NO-UNDO.
  108. CREATE TEMP-TABLE ophtTable.
  109. cAddedFields = ''.
  110. DO i1 = 1 TO ipoJsonFields:LENGTH:
  111. oJsonField = NEW JsonObject().
  112. oJsonField = ipoJsonFields:GetJsonObject(i1).
  113. EXTENT(cFieldAttributes) = ?.
  114. cFieldAttributes = oJsonField:getNames() NO-ERROR.
  115. iExtent = EXTENT(cFieldAttributes).
  116. DO ii = 1 TO iExtent:
  117. cField = cFieldAttributes[ii].
  118. IF cField = '' THEN NEXT.
  119. IF LOOKUP(cField, cAddFields , ',') = 0 THEN NEXT.
  120. IF LOOKUP(cField, cAddedFields, ',') > 0 THEN NEXT.
  121. iType = oJsonField:getType(cField).
  122. CASE iType:
  123. WHEN 1 THEN
  124. cType = 'character'.
  125. WHEN 2 THEN
  126. cType = 'integer'.
  127. WHEN 3 THEN
  128. cType = 'logical'.
  129. // 4 JsonDataType:OBJECT JSON Object
  130. // 5 JsonDataType:ARRAY JSON Array
  131. // 6 JsonDataType:NULL Null
  132. OTHERWISE
  133. DO:
  134. MESSAGE cField 'otherwise' iType.
  135. cType = 'character'.
  136. END.
  137. END CASE.
  138. cAddedFields = cAddedFields
  139. + (IF cAddedFields = '' THEN '' ELSE ',')
  140. + cField.
  141. ophtTable:ADD-NEW-FIELD(cField, cType) NO-ERROR.
  142. IF outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE) THEN NEXT.
  143. END.
  144. END.
  145. ophtTable:TEMP-TABLE-PREPARE('ttTemp').
  146. ophBuffer = ophtTable:DEFAULT-BUFFER-HANDLE.
  147. DO i1 = 1 TO ipoJsonFields:LENGTH:
  148. oJsonField = NEW JsonObject().
  149. oJsonField = ipoJsonFields:GetJsonObject(i1) NO-ERROR.
  150. IF outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE) THEN NEXT.
  151. cValue = oJsonField:GetCharacter('id') NO-ERROR.
  152. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  153. ophBuffer:BUFFER-CREATE().
  154. iExtent = NUM-ENTRIES(cAddedFields, ',').
  155. DO ii = 1 TO iExtent:
  156. cField = ENTRY(ii, cAddedFields, ',').
  157. IF NOT oJsonField:Has(cField) THEN NEXT.
  158. hField = ophBuffer:BUFFER-FIELD(cField) NO-ERROR.
  159. IF outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE) THEN NEXT.
  160. IF oJsonField:IsNull(cField) THEN
  161. DO:
  162. MESSAGE 'NULLWERT'.
  163. hField:BUFFER-VALUE = ?.
  164. NEXT.
  165. END.
  166. // cValue = oJsonField:GetCharacter(cField).
  167. CASE hField:DATA-TYPE:
  168. WHEN 'character' THEN
  169. hField:BUFFER-VALUE = oJsonField:GetCharacter(cField) NO-ERROR.
  170. WHEN 'integer' THEN
  171. hField:BUFFER-VALUE = oJsonField:GetInteger(cField) NO-ERROR.
  172. WHEN 'logical' THEN
  173. hField:BUFFER-VALUE = STRING(oJsonField:GetLogical(cField)) NO-ERROR.
  174. END CASE.
  175. IF hField:BUFFER-VALUE = ? THEN hField:BUFFER-VALUE = ''.
  176. END.
  177. LEAVE.
  178. END.
  179. END.
  180. // DELETE OBJECT oJsonField NO-ERROR.
  181. lRetVal = TRUE.
  182. RETURN lRetVal.
  183. END METHOD.
  184. /*------------------------------------------------------------------------------
  185. Purpose:
  186. Notes:
  187. ------------------------------------------------------------------------------*/
  188. METHOD PUBLIC LOGICAL fillFileDict(
  189. INPUT oJsonIdent AS JsonObject
  190. ):
  191. DEFINE VARIABLE lresult AS LOGICAL NO-UNDO INIT FALSE.
  192. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  193. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  194. DEFINE VARIABLE j1 AS INTEGER NO-UNDO.
  195. DEFINE VARIABLE j2 AS INTEGER NO-UNDO.
  196. DEFINE VARIABLE lRetVal AS LOG NO-UNDO INIT FALSE.
  197. DEFINE VARIABLE rFile AS RECID NO-UNDO.
  198. DEFINE VARIABLE cViewas AS CHARACTER NO-UNDO.
  199. DEFINE VARIABLE cSidelabel AS CHARACTER NO-UNDO.
  200. DEFINE VARIABLE cHeadlabel AS CHARACTER NO-UNDO.
  201. DEFINE VARIABLE rLabelTexte AS RECID NO-UNDO.
  202. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  203. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  204. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  205. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  206. DEFINE VARIABLE hBufferFile AS HANDLE NO-UNDO.
  207. DEFINE VARIABLE hBufferField AS HANDLE NO-UNDO.
  208. DEFINE VARIABLE cFileNames AS CHARACTER NO-UNDO.
  209. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  210. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  211. DEFINE VARIABLE cLDBName AS CHARACTER NO-UNDO.
  212. DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
  213. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  214. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  215. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  216. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  217. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  218. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  219. DEFINE BUFFER blabeltexte FOR labeltexte.
  220. DEFINE BUFFER btFileDict FOR tFileDict.
  221. ccompany = oJsonIdent:GetCharacter('company').
  222. cuser_name = oJsonIdent:GetCharacter('user_name').
  223. iLanguage_id = oJsonIdent:GetInteger ('language_id').
  224. outilitiesHandler = NEW utilitiesHandler().
  225. EMPTY TEMP-TABLE tFileDict.
  226. lRetVal = FALSE.
  227. cFileNames = oJsonIdent:GetCharacter('tables').
  228. cFileNames = REPLACE(cFileNames, '%2C', ';').
  229. cFileNames = REPLACE(cFileNames, '%3C', ';').
  230. cFileNames = REPLACE(cFileNames, ',', ';').
  231. DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
  232. cFileName = ENTRY(ii,cFileNames, ';').
  233. cLDBName = outilitiesHandler:getLogicalDBName(cFileName).
  234. cDBFileName = cLDBName + '.' + '_File'.
  235. CREATE BUFFER hBufferFile FOR TABLE cDBFileName.
  236. hBufferFile:FIND-UNIQUE(SUBSTITUTE('WHERE _File._File-Name = &1', QUOTER(cFileName)), NO-LOCK) NO-ERROR.
  237. CREATE QUERY hQuery.
  238. cDBFileName = REPLACE(cDBFileName, '_File', '_Field').
  239. CREATE BUFFER hBufferField FOR TABLE cDBFileName.
  240. hQuery:SET-BUFFERS(hBufferField).
  241. cWhere = SUBSTITUTE('FOR EACH _Field WHERE _Field._File-recid = &1 BY _Order', hBufferFile:RECID ).
  242. hQuery:QUERY-PREPARE(cWhere).
  243. hQuery:QUERY-OPEN ().
  244. hQuery:GET-FIRST().
  245. hBuffer = hBufferField.
  246. DO WHILE NOT hQuery:QUERY-OFF-END:
  247. cFieldName = hBufferField::_Field-Name.
  248. IF cFieldName = 'wordindex' THEN
  249. DO:
  250. hQuery:GET-NEXT ().
  251. NEXT.
  252. END.
  253. hField = hBufferField:BUFFER-FIELD('_Label'):HANDLE NO-ERROR.
  254. IF VALID-HANDLE(hField) THEN cLabel = hField:BUFFER-VALUE.
  255. IF cLabel = ? OR
  256. cLabel = '?' OR
  257. clabel = '' THEN cLabel = cFieldName.
  258. CREATE tFileDict.
  259. ASSIGN
  260. tFileDict.cId = cFileName + '_' + cFieldName
  261. tFileDict.cName = cFilename + '_' + cFieldName
  262. tFileDict.cFormat = hBuffer::_FORMAT
  263. tFileDict.cType = hBuffer::_DATA-TYPE
  264. tFileDict.iDecimals = 0
  265. tFileDict.lhidden = FALSE
  266. tFileDict.leditable = TRUE
  267. tFileDict.iMaxLength = 12
  268. tFileDict.cAusrichtung = 'left'
  269. tFileDict.cDisplayType = ?
  270. tFileDict.lShowSpinner = ?
  271. tFileDict.cInputMode = ?
  272. .
  273. DO WHILE TRUE TRANSACTION:
  274. FIND FIRST labeltexte NO-LOCK
  275. WHERE labeltexte.company = ccompany
  276. AND labeltexte.user_name = 'admin'
  277. AND labeltexte.table_name = cFileName
  278. AND labeltexte.field_name = cFieldName
  279. AND labeltexte.language_id = iLanguage_id
  280. AND labeltexte.program = '' NO-ERROR.
  281. IF AVAILABLE labeltexte THEN
  282. DO:
  283. rLabelTexte = RECID(labeltexte).
  284. LEAVE.
  285. END.
  286. FIND FIRST blabeltexte NO-LOCK
  287. WHERE blabeltexte.company = ccompany
  288. AND blabeltexte.user_name = 'admin'
  289. AND blabeltexte.field_name = cFieldName
  290. AND blabeltexte.language_id = iLanguage_id
  291. AND blabeltexte.program = '' NO-ERROR.
  292. IF AVAILABLE blabeltexte THEN
  293. ASSIGN
  294. cSidelabel = blabeltexte.sidelabel
  295. cHeadlabel = blabeltexte.headlabel.
  296. ELSE
  297. ASSIGN
  298. cSidelabel = cLabel
  299. cHeadlabel = cLabel.
  300. CREATE labeltexte.
  301. ASSIGN
  302. labeltexte.company = ccompany
  303. labeltexte.user_name = 'admin'
  304. labeltexte.table_name = cFileName
  305. labeltexte.field_name = cFieldName
  306. labeltexte.language_id = iLanguage_id
  307. labeltexte.program = ''
  308. labeltexte.created_at = NOW NO-ERROR.
  309. ASSIGN
  310. labeltexte.sidelabel = cSidelabel
  311. labeltexte.headlabel = cHeadlabel.
  312. rLabelTexte = RECID(labeltexte).
  313. RELEASE labeltexte.
  314. RELEASE blabeltexte.
  315. LEAVE.
  316. END.
  317. DO WHILE TRUE TRANSACTION:
  318. IF cuser_name = 'admin' THEN LEAVE.
  319. FIND FIRST labeltexte NO-LOCK
  320. WHERE labeltexte.company = ccompany
  321. AND labeltexte.user_name = cuser_name
  322. AND labeltexte.table_name = cFileName
  323. AND labeltexte.field_name = cFieldName
  324. AND labeltexte.language_id = iLanguage_id
  325. AND labeltexte.program = '' NO-ERROR.
  326. IF AVAILABLE labeltexte THEN
  327. DO:
  328. rLabelTexte = RECID(labeltexte).
  329. LEAVE.
  330. END.
  331. FIND FIRST blabeltexte NO-LOCK
  332. WHERE blabeltexte.company = ccompany
  333. AND blabeltexte.user_name = cuser_name
  334. AND blabeltexte.field_name = cFieldName
  335. AND blabeltexte.language_id = iLanguage_id
  336. AND blabeltexte.program = '' NO-ERROR.
  337. IF AVAILABLE blabeltexte THEN
  338. DO:
  339. rLabelTexte = RECID(blabeltexte).
  340. LEAVE.
  341. END.
  342. LEAVE.
  343. END.
  344. FIND labeltexte NO-LOCK
  345. WHERE RECID(labeltexte) = rLabelTexte.
  346. tFileDict.cLabel = labeltexte.headlabel.
  347. IF INDEX(hBuffer::_FORMAT, '(') = 0 THEN tFileDict.iMaxLength = LENGTH(hBuffer::_FORMAT).
  348. ELSE
  349. DO:
  350. j1 = INDEX(hBuffer::_FORMAT, '(') + 1.
  351. j2 = INDEX(hBuffer::_FORMAT, ')').
  352. tFileDict.iMaxLength = INTEGER(SUBSTRING(hBuffer::_FORMAT, j1, j2 - j1)).
  353. END.
  354. IF hBuffer::_EXTENT > 0 THEN tFileDict.iMaxLength = tFileDict.iMaxLength * hBuffer::_EXTENT.
  355. CASE tFileDict.cType:
  356. WHEN 'character' THEN
  357. DO:
  358. ASSIGN
  359. tFileDict.cType = 'text'
  360. tFileDict.iDecimals = 0.
  361. IF hBuffer::_Extent > 0 THEN
  362. DO:
  363. ASSIGN
  364. tFileDict.cType = 'extent'
  365. tFileDict.iMaxExtent = hBuffer::_Extent
  366. tFileDict.iAnzZeilen = tFileDict.iMaxExtent.
  367. END.
  368. END.
  369. WHEN 'Date' THEN
  370. DO:
  371. ASSIGN
  372. tFileDict.cType = 'date'
  373. tFileDict.cFormat = '99.99.9999'
  374. tFileDict.iDecimals = 0
  375. tFileDict.iMaxLength = tFileDict.iMaxLength + 2
  376. tFileDict.cAusrichtung = 'center'.
  377. END.
  378. WHEN 'Decimal' THEN
  379. DO:
  380. ASSIGN
  381. tFileDict.cType = 'decimal'
  382. tFileDict.iDecimals = hBuffer::_DECIMALS
  383. tFileDict.cDisplayType = 'text'
  384. tFileDict.cInputMode = 'decimal'
  385. tFileDict.lShowSpinner = FALSE
  386. tFileDict.iMaxLength = tFileDict.iMaxLength
  387. tFileDict.cAusrichtung = 'right'.
  388. END.
  389. WHEN 'Integer' OR
  390. WHEN 'Int64' THEN
  391. DO:
  392. ASSIGN
  393. tFileDict.cType = 'integer'
  394. tFileDict.iDecimals = 0
  395. tFileDict.cDisplayType = 'text'
  396. tFileDict.cInputMode = 'numeric'
  397. tFileDict.lShowSpinner = FALSE
  398. tFileDict.iMaxLength = tFileDict.iMaxLength
  399. tFileDict.cAusrichtung = 'right'.
  400. END.
  401. WHEN 'Recid' THEN
  402. DO:
  403. ASSIGN
  404. tFileDict.cType = 'integer'
  405. tFileDict.iDecimals = 0
  406. tFileDict.cDisplayType = 'text'
  407. tFileDict.cInputMode = 'text'
  408. tFileDict.lShowSpinner = FALSE
  409. tFileDict.lHidden = TRUE
  410. tFileDict.leditable = FALSE.
  411. END.
  412. WHEN 'logical' THEN
  413. DO:
  414. ASSIGN
  415. tFileDict.cType = 'checkbox'
  416. tFileDict.cAusrichtung = 'center'.
  417. END.
  418. END CASE.
  419. cViewas = hBuffer::_VIEW-AS NO-ERROR.
  420. IF ERROR-STATUS:ERROR THEN
  421. DO:
  422. hQuery:GET-NEXT ().
  423. NEXT.
  424. END.
  425. IF INDEX(cViewas, 'COMBO-BOX') > 0 THEN cViewAS = 'combo-box'.
  426. CASE cViewas:
  427. WHEN 'combo-box' THEN
  428. DO:
  429. tFileDict.cType = 'select'.
  430. CREATE btFileDict.
  431. ASSIGN
  432. btFileDict.cId = cFileName + '_' + cFieldName + '_BoxField'
  433. btFileDict.cName = cFilename + '_' + cFieldName + '_BoxField'
  434. btFileDict.cFormat = 'x(100)'
  435. btFileDict.cType = 'character'
  436. btFileDict.iDecimals = 0
  437. btFileDict.lhidden = TRUE
  438. btFileDict.leditable = FALSE
  439. btFileDict.iMaxLength = 100
  440. btFileDict.cAusrichtung = 'left'
  441. btFileDict.cDisplayType = ?
  442. btFileDict.lShowSpinner = ?
  443. btFileDict.cInputMode = ?
  444. btFileDict.cLabel = cFieldName + '_BoxField'.
  445. .
  446. END.
  447. WHEN 'editor' THEN
  448. ASSIGN
  449. tFileDict.cType = 'textarea'.
  450. END CASE.
  451. hQuery:GET-NEXT().
  452. END.
  453. DELETE OBJECT hBufferFile NO-ERROR.
  454. DELETE OBJECT hBufferField NO-ERROR.
  455. DELETE OBJECT hQuery NO-ERROR.
  456. END.
  457. lResult = TRUE.
  458. RETURN lresult.
  459. END METHOD.
  460. /*------------------------------------------------------------------------------
  461. Purpose:
  462. Notes:
  463. ------------------------------------------------------------------------------*/
  464. METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
  465. DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
  466. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  467. DEFINE VARIABLE oJsonCompanies AS JsonArray NO-UNDO.
  468. DEFINE VARIABLE oJsonUsers AS JsonArray NO-UNDO.
  469. DEFINE VARIABLE oJsonLanguages AS JsonArray NO-UNDO.
  470. DEFINE VARIABLE oBody AS String NO-UNDO.
  471. DEFINE VARIABLE cDefautlCharSet AS CHARACTER NO-UNDO INIT 'UTF-8'.
  472. DEFINE VARIABLE cCorralationID AS CHARACTER NO-UNDO.
  473. DEFINE VARIABLE cContent-Type AS CHARACTER NO-UNDO.
  474. DEFINE VARIABLE htFileDict AS HANDLE NO-UNDO.
  475. DEFINE VARIABLE htConfig AS HANDLE NO-UNDO.
  476. DEFINE VARIABLE lcJsonInhalt AS LONGCHAR NO-UNDO.
  477. DEFINE VARIABLE cFileNames AS CHARACTER NO-UNDO.
  478. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  479. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  480. DEFINE VARIABLE iMatches AS INTEGER NO-UNDO.
  481. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  482. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  483. DEFINE VARIABLE cConfig_id AS CHARACTER NO-UNDO.
  484. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  485. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  486. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  487. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  488. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  489. outilitiesHandler = NEW utilitiesHandler().
  490. // MESSAGE 'GetHandler '.
  491. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  492. outilitiesHandler:getHeaderData(
  493. INPUT poRequest ,
  494. OUTPUT ccompany ,
  495. OUTPUT cuser_name ,
  496. OUTPUT cAnzeigeName ,
  497. OUTPUT ilanguage_id ,
  498. OUTPUT cSessionToken,
  499. OUTPUT cFunction ,
  500. OUTPUT oJsonIdent
  501. ).
  502. // oJsonIdent:WriteFile('C:\TEMP\formdesigner_GET.json', TRUE).
  503. // MESSAGE 'getHandler Function =' cFunction.
  504. DO WHILE cFunction = 'init':
  505. EMPTY TEMP-TABLE tcompanies.
  506. FOR EACH companies NO-LOCK WHERE companies.active:
  507. CREATE tcompanies.
  508. BUFFER-COPY companies TO tcompanies.
  509. ASSIGN
  510. tcompanies.lselected = (IF companies.company = ccompany THEN TRUE ELSE FALSE).
  511. END.
  512. EMPTY TEMP-TABLE tusers.
  513. FOR EACH users NO-LOCK WHERE users.active:
  514. CREATE tusers.
  515. BUFFER-COPY users TO tusers.
  516. END.
  517. EMPTY TEMP-TABLE tlanguages.
  518. FOR EACH languages NO-LOCK:
  519. CREATE tlanguages.
  520. BUFFER-COPY languages TO tlanguages.
  521. END.
  522. oJsonResponse = NEW JsonObject().
  523. oJsonCompanies = NEW JsonArray().
  524. oJsonUsers = NEW JsonArray().
  525. oJsonLanguages = NEW JsonArray().
  526. htcompanies = TEMP-TABLE tcompanies:DEFAULT-BUFFER-HANDLE.
  527. htusers = TEMP-TABLE tusers :DEFAULT-BUFFER-HANDLE.
  528. htlanguages = TEMP-TABLE tlanguages:DEFAULT-BUFFER-HANDLE.
  529. htcompanies:WRITE-JSON('JsonArray', oJsonCompanies ).
  530. htusers :WRITE-JSON('JsonArray', oJsonUsers ).
  531. htlanguages:WRITE-JSON('JsonArray', oJsonLanguages ).
  532. oJsonResponse:ADD('companies', oJsonCompanies).
  533. oJsonResponse:ADD('users' , oJsonUsers ).
  534. oJsonResponse:ADD('languages', oJsonLanguages).
  535. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  536. lRetVal = TRUE.
  537. LEAVE.
  538. END.
  539. DO WHILE cFunction = 'load':
  540. lRetVal = fillFileDict(
  541. INPUT oJsonIdent
  542. ).
  543. cFileNames = oJsonIdent:GetCharacter('tables').
  544. cFileNames = REPLACE(cFileNames, ',', ';').
  545. EMPTY TEMP-TABLE tConfig.
  546. FOR EACH htmldokumente NO-LOCK
  547. WHERE htmldokumente.company = ccompany
  548. AND htmldokumente.user_name = cuser_name
  549. AND htmldokumente.language_id = ilanguage_id:
  550. iMatches = 0.
  551. DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
  552. cFileName = ENTRY(ii, cFileNames, ';').
  553. IF INDEX(htmldokumente.Tables, cFileName) = 0 THEN NEXT.
  554. IF htmldokumente.updated_at = ? THEN
  555. DO:
  556. dDateTime = htmldokumente.created_at.
  557. cDateTime = STRING(htmldokumente.created_at,'99-99-9999THH:MM:SS').
  558. END.
  559. ELSE
  560. DO:
  561. dDateTime = htmldokumente.updated_at.
  562. cDateTime = STRING(htmldokumente.updated_at,'99-99-9999THH:MM:SS').
  563. END.
  564. iMatches = iMatches + 1.
  565. END.
  566. IF iMatches <> NUM-ENTRIES(cFileNames, ';') OR
  567. iMatches <> NUM-ENTRIES(htmldokumente.tables, ',') THEN NEXT.
  568. CREATE tConfig.
  569. ASSIGN
  570. tConfig.cId = htmldokumente.formId
  571. tConfig.cFormTitle = htmldokumente.formtitle
  572. tConfig.cCreated = STRING(YEAR(dDateTime),'9999')
  573. + '-'
  574. + STRING(MONTH(dDateTime),'99')
  575. + '-'
  576. + STRING(DAY(dDateTime),'99')
  577. + SUBSTRING(cDateTime,11).
  578. END.
  579. htFileDict = TEMP-TABLE tFileDict :DEFAULT-BUFFER-HANDLE.
  580. htConfig = TEMP-TABLE tConfig :DEFAULT-BUFFER-HANDLE.
  581. hdsResponse = DATASET dsResponse:HANDLE.
  582. oJsonResponse = NEW JsonObject().
  583. oJsonResponse:READ(hdsResponse).
  584. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  585. // oJsonResponse:WriteFile('C:\TEMP\Dataset_loaddata_formdesigner.json', TRUE).
  586. LEAVE.
  587. END.
  588. DO WHILE cFunction = 'loaddetail':
  589. cConfig_id = oJsonIdent:GetCharacter('config_id').
  590. FIND FIRST htmldokumente NO-LOCK
  591. WHERE htmldokumente.company = ccompany
  592. AND htmldokumente.user_name = cuser_name
  593. AND htmldokumente.language_id = ilanguage_id
  594. AND htmldokumente.formId = cConfig_id NO-ERROR.
  595. lcJsonInhalt = htmldokumente.htmltext.
  596. lRetVal = TRUE.
  597. LEAVE.
  598. END.
  599. DO WHILE cFunction = 'delete':
  600. lRetVal = FALSE.
  601. cConfig_id = oJsonIdent:GetCharacter('config_id').
  602. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  603. FIND FIRST htmldokumente
  604. WHERE htmldokumente.company = ccompany
  605. AND htmldokumente.user_name = cuser_name
  606. AND htmldokumente.language_id = ilanguage_id
  607. AND htmldokumente.formId = cConfig_id NO-ERROR.
  608. IF NOT AVAILABLE htmldokumente THEN LEAVE.
  609. DELETE htmldokumente.
  610. lRetVal = TRUE.
  611. LEAVE.
  612. END.
  613. oJsonResponse = NEW JsonObject().
  614. oJsonResponse:ADD("success", lRetVal).
  615. IF lRetVal THEN oJsonResponse:ADD('message', 'Konfiguration erfolreich gelöscht').
  616. ELSE oJsonResponse:ADD('error' , 'Konfiguration nicht gefunden' ).
  617. oJsonResponse:write(lcJsonInhalt, FALSE).
  618. LEAVE.
  619. END.
  620. IF NOT lRetVal THEN
  621. DO:
  622. oJsonResponse = NEW JsonObject().
  623. oJsonResponse:ADD('success', FALSE).
  624. oJsonResponse:WRITE(lcJsonInhalt, FALSE).
  625. END.
  626. cContent-Type = "application/json".
  627. cDefautlCharSet = 'utf-8'.
  628. oBody = NEW STRING(lcJsonInhalt).
  629. WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
  630. oWriter = NEW WebResponseWriter(oResponse).
  631. oWriter:Open().
  632. oWriter:Close().
  633. RETURN 0.
  634. CATCH e AS Progress.Lang.Error:
  635. END CATCH.
  636. FINALLY:
  637. END FINALLY.
  638. END METHOD.
  639. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest):
  640. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  641. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX.
  642. RETURN result.
  643. END METHOD.
  644. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest):
  645. DEFINE VARIABLE result AS INTEGER NO-UNDO.
  646. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX.
  647. RETURN result.
  648. END METHOD.
  649. /*------------------------------------------------------------------------------
  650. Purpose:
  651. Notes:
  652. ------------------------------------------------------------------------------*/
  653. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
  654. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
  655. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO.
  656. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  657. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  658. DEFINE VARIABLE oFelder AS JsonArray NO-UNDO.
  659. DEFINE VARIABLE oFeld AS JsonObject NO-UNDO.
  660. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  661. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  662. DEFINE VARIABLE cJSON AS LONGCHAR NO-UNDO.
  663. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  664. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  665. DEFINE VARIABLE oJsonConfig AS JsonObject NO-UNDO.
  666. DEFINE VARIABLE oJsonFields AS JsonArray NO-UNDO.
  667. DEFINE VARIABLE ctables AS CHARACTER NO-UNDO.
  668. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  669. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  670. DEFINE VARIABLE ilanguage_id AS INTEGER NO-UNDO.
  671. DEFINE VARIABLE cformtitle AS CHARACTER NO-UNDO.
  672. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  673. DEFINE VARIABLE cFormColumns AS CHARACTER NO-UNDO.
  674. DEFINE VARIABLE lcJsonConfig AS LONGCHAR NO-UNDO.
  675. DEFINE VARIABLE iItemsPerPage AS INTEGER NO-UNDO.
  676. DEFINE VARIABLE ctableMaxHeight AS CHARACTER NO-UNDO.
  677. DEFINE VARIABLE htTable AS HANDLE NO-UNDO.
  678. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  679. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  680. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  681. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO.
  682. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  683. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  684. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  685. DEFINE VARIABLE cBoxfields AS CHARACTER NO-UNDO.
  686. DEFINE VARIABLE cBoxfieldsFix AS CHARACTER NO-UNDO.
  687. DEFINE VARIABLE lBoxField AS LOGICAL NO-UNDO.
  688. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  689. DEFINE VARIABLE cAlign AS CHARACTER NO-UNDO.
  690. DEFINE VARIABLE cadminLabel AS CHARACTER NO-UNDO.
  691. DEFINE VARIABLE cadminAlign AS CHARACTER NO-UNDO.
  692. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
  693. // MESSAGE 'getJsonFromRequest = ' lRetVal.
  694. cFunction = poRequest:URI:GetQueryValue("function").
  695. // MESSAGE 'Funktion = ' cFunction.
  696. oJsonData:WRITE(lcJsonString, FALSE).
  697. // MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
  698. outilitiesHandler = NEW utilitiesHandler().
  699. ccompany = oJsonData:GetCharacter('company' ).
  700. cuser_name = oJsonData:GetCharacter('user_name' ).
  701. ilanguage_id = INTEGER(oJsonData:GetCharacter('language_id')).
  702. ctables = oJsonData:GetCharacter('tables').
  703. MESSAGE ccompany '-' cuser_name '-' ilanguage_id '-' ctables.
  704. oJsonConfig = NEW JsonObject().
  705. oJsonConfig = oJsonData:GetJsonObject ('config' ).
  706. cformtitle = oJsonConfig:GetCharacter('formTitle' ).
  707. cFormId = oJsonConfig:GetCharacter('formId' ).
  708. iItemsPerPage = oJsonConfig:Getinteger ('itemsPerPage' ).
  709. ctableMaxHeight = oJsonConfig:GetCharacter('tableMaxHeight').
  710. cFormColumns = oJsonConfig:GetCharacter('formColumns' ).
  711. oJsonFields = NEW JsonArray().
  712. oJsonFields = oJsonConfig:GetJsonArray('selectedFields').
  713. oJsonConfig:WRITE(lcJsonConfig, FALSE).
  714. // oJsonConfig:WriteFile('C:\TEMP\FormDesignerConfig.json', TRUE).
  715. // oJsonFields:WriteFile('C:\TEMP\FormDesignerFields.json', TRUE).
  716. createTemptable (
  717. INPUT oJsonFields,
  718. OUTPUT htTable ,
  719. OUTPUT hBuffer ).
  720. // hBuffer:WRITE-JSON ('file', 'C:\TEMP\FeldAttributeAusFormdesigner.csv', TRUE).
  721. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  722. FIND htmldokumente
  723. WHERE htmldokumente.company = ccompany
  724. AND htmldokumente.user_name = cuser_name
  725. AND htmldokumente.formId = cFormId
  726. AND htmldokumente.language_id = ilanguage_id NO-ERROR.
  727. IF NOT AVAILABLE htmldokumente THEN
  728. DO:
  729. CREATE htmldokumente.
  730. ASSIGN
  731. htmldokumente.company = ccompany
  732. htmldokumente.user_name = cuser_name
  733. htmldokumente.formId = cFormId
  734. htmldokumente.language_id = ilanguage_id
  735. htmldokumente.created_at = NOW.
  736. END.
  737. ASSIGN
  738. htmldokumente.tables = ctables
  739. htmldokumente.formtitle = cformtitle
  740. htmldokumente.itemsPerPage = iItemsPerPage
  741. htmldokumente.tableMaxHeight = ctableMaxHeight
  742. Htmldokumente.formColumns = cFormColumns.
  743. htmltext = STRING(lcJsonConfig).
  744. // MESSAGE 'htmldokument gschrieben mit config ' STRING(lcJsonConfig).
  745. RELEASE htmldokumente.
  746. LEAVE.
  747. END.
  748. cBoxfields = ''.
  749. cBoxfieldsFix = ''.
  750. CREATE QUERY hQuery.
  751. hQuery:SET-BUFFERS(hBuffer).
  752. hQuery:QUERY-PREPARE ('FOR EACH ttTemp NO-LOCK').
  753. hQuery:QUERY-OPEN ().
  754. hQuery:GET-FIRST ().
  755. DO WHILE NOT hQuery:QUERY-OFF-END TRANSACTION:
  756. cFieldName = hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE.
  757. cFileName = ENTRY(1, cFieldName, '_').
  758. cField = REPLACE(cFieldName, cFileName + '_', '').
  759. //
  760. // Standard-Label-Text für admin und table
  761. //
  762. clabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE.
  763. calign = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
  764. // MESSAGE 'cFileName =' cFileName 'FieldName =' cField 'cLabel =' cLabel 'cAlign =' cAlign.
  765. FIND FIRST labeltexte
  766. WHERE labeltexte.company = ccompany
  767. AND labeltexte.user_name = 'admin'
  768. AND labeltexte.program = 'program'
  769. AND labeltexte.table_name = 'table'
  770. AND labeltexte.field_name = cField
  771. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  772. IF NOT AVAILABLE labeltexte THEN
  773. DO:
  774. CREATE labeltexte.
  775. ASSIGN
  776. labeltexte.company = ccompany
  777. labeltexte.user_name = 'admin'
  778. labeltexte.program = 'program'
  779. labeltexte.table_name = 'table'
  780. labeltexte.field_name = cField
  781. labeltexte.language_id = ilanguage_id
  782. labeltexte.created_at = NOW
  783. labeltexte.sidelabel = cLabel
  784. labeltexte.headlabel = cLabel
  785. labeltexte.alignment = cAlign.
  786. END.
  787. ELSE
  788. DO:
  789. IF cuser_name = 'admin' THEN
  790. DO:
  791. ASSIGN
  792. labeltexte.updated_at = NOW
  793. labeltexte.sidelabel = cLabel
  794. labeltexte.headlabel = cLabel
  795. labeltexte.alignment = cAlign.
  796. END.
  797. END.
  798. cadminlabel = labeltexte.headlabel.
  799. cadminalign = labeltexte.alignment.
  800. DO WHILE TRUE:
  801. IF cLabel = cadminlabel AND
  802. cAlign = cadminalign THEN LEAVE.
  803. FIND FIRST labeltexte
  804. WHERE labeltexte.company = ccompany
  805. AND labeltexte.user_name = 'admin'
  806. AND labeltexte.program = 'program'
  807. AND labeltexte.table_name = cFileName
  808. AND labeltexte.field_name = cField
  809. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  810. IF NOT AVAILABLE labeltexte THEN
  811. DO:
  812. CREATE labeltexte.
  813. ASSIGN
  814. labeltexte.company = ccompany
  815. labeltexte.user_name = 'admin'
  816. labeltexte.program = 'program'
  817. labeltexte.table_name = cFileName
  818. labeltexte.field_name = cField
  819. labeltexte.language_id = ilanguage_id
  820. labeltexte.created_at = NOW
  821. labeltexte.sidelabel = cLabel
  822. labeltexte.headlabel = cLabel
  823. labeltexte.alignment = cAlign.
  824. END.
  825. IF cuser_name = 'admin' THEN LEAVE.
  826. cadminlabel = labeltexte.headlabel.
  827. cadminalign = labeltexte.alignment.
  828. IF cLabel = cadminlabel AND
  829. cAlign = cadminalign THEN LEAVE.
  830. FIND FIRST labeltexte
  831. WHERE labeltexte.company = ccompany
  832. AND labeltexte.user_name = cuser_name
  833. AND labeltexte.program = 'program'
  834. AND labeltexte.table_name = cFileName
  835. AND labeltexte.field_name = cField
  836. AND labeltexte.language_id = ilanguage_id NO-ERROR.
  837. IF NOT AVAILABLE labeltexte THEN
  838. DO:
  839. CREATE labeltexte.
  840. ASSIGN
  841. labeltexte.company = ccompany
  842. labeltexte.user_name = cuser_name
  843. labeltexte.program = 'program'
  844. labeltexte.table_name = cFileName
  845. labeltexte.field_name = cField
  846. labeltexte.language_id = ilanguage_id
  847. labeltexte.created_at = NOW.
  848. END.
  849. ELSE
  850. DO:
  851. ASSIGN
  852. labeltexte.updated_at = NOW.
  853. END.
  854. ASSIGN
  855. labeltexte.sidelabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  856. labeltexte.headlabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
  857. labeltexte.alignment = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
  858. LEAVE.
  859. END.
  860. RELEASE labeltexte.
  861. hField = hBuffer:BUFFER-FIELD('id'):HANDLE NO-ERROR.
  862. IF hField:BUFFER-VALUE = 'addresses_salutation_code' THEN
  863. DO:
  864. hField = hBuffer:BUFFER-FIELD('type'):HANDLE.
  865. // MESSAGE 'addresses_salutation_code type' hField:BUFFER-VALUE.
  866. hField = hBuffer:BUFFER-FIELD('selectOptionsType'):HANDLE NO-ERROR.
  867. // MESSAGE 'addresses_salutation_code selectOptionsType =' hField:BUFFER-VALUE.
  868. END.
  869. lBoxField = (IF hBuffer:BUFFER-FIELD('type'):BUFFER-VALUE = 'select' THEN TRUE ELSE FALSE).
  870. DO WHILE lBoxField:
  871. hField = hBuffer:BUFFER-FIELD('selectOptionsType'):HANDLE NO-ERROR.
  872. // IF outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE) THEN LEAVE.
  873. // MESSAGE 'Selectboxfeld ->' hField:NAME '-' hField:BUFFER-VALUE.
  874. IF VALID-HANDLE(hField) AND hField:BUFFER-VALUE BEGINS 'variable' THEN
  875. cBoxFields = cBoxfields
  876. + (IF cBoxfields = '' THEN '' ELSE ';')
  877. + hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE.
  878. ELSE
  879. cBoxFieldsFix = cBoxfieldsFix
  880. + (IF cBoxfieldsFix = '' THEN '' ELSE ';')
  881. + hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE.
  882. // MESSAGE 'Feldname =' hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE VALID-HANDLE(hField).
  883. LEAVE.
  884. END.
  885. hQuery:GET-NEXT ().
  886. END.
  887. IF cBoxfields <> '' OR
  888. cBoxFieldsFix <> '' THEN
  889. DO:
  890. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  891. FIND FIRST selectboxfields
  892. WHERE selectboxfields.company = ccompany
  893. AND selectboxfields.program = cFormId
  894. AND selectboxfields.user_name = cuser_name
  895. AND selectboxfields.table_Name = 'table' NO-ERROR.
  896. IF NOT AVAILABLE selectboxfields THEN
  897. DO:
  898. CREATE selectboxfields.
  899. ASSIGN
  900. selectboxfields.company = ccompany
  901. selectboxfields.program = cFormId
  902. selectboxfields.user_name = cuser_name
  903. selectboxfields.table_Name = 'table'.
  904. END.
  905. ASSIGN
  906. selectboxfields.boxfields = cBoxFields
  907. selectboxfields.boxfieldsFix = cBoxfieldsFix.
  908. RELEASE selectboxfields.
  909. LEAVE.
  910. END.
  911. END.
  912. // MESSAGE 'geschrieben ' ccompany '-' cuser_name '-' cFormId '-' ilanguage_id.
  913. oResponse = NEW OpenEdge.Web.WebResponse().
  914. oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
  915. oResponse:ContentType = "application/json;charset=utf-8".
  916. oWriter = NEW WebResponseWriter(oResponse).
  917. oJsonMessage = NEW JsonObject().
  918. oJsonMessage:ADD('id', cFormId).
  919. oJsonMessage:ADD('message', 'erfolgreich gespeichert').
  920. oJsonMessage:WRITE(lcJsonString, TRUE).
  921. // MESSAGE 'Rueckmeldung ' STRING(lcJsonString).
  922. oWriter:Open().
  923. oWriter:Write(lcJsonString).
  924. oWriter:Close().
  925. CATCH e AS Progress.Lang.Error:
  926. END CATCH.
  927. FINALLY:
  928. /* DELETE OBJECT oJsonConfig NO-ERROR.*/
  929. /* DELETE OBJECT oJsonMessage NO-ERROR.*/
  930. /* DELETE OBJECT oJsonFields NO-ERROR.*/
  931. END FINALLY.
  932. END METHOD.
  933. END CLASS.