formdesignerImpl.cls 44 KB

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