adminprogsHandler.cls 73 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849
  1. /*------------------------------------------------------------------------
  2. File : adminprogsHandler
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Fri Nov 21 11:31:01 CET 2025
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. BLOCK-LEVEL ON ERROR UNDO, THROW.
  11. USING OpenEdge.DataAdmin.IIndex FROM PROPATH.
  12. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  13. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  14. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  15. USING Progress.Json.ObjectModel.JsonConstruct FROM PROPATH.
  16. USING utilities.selectboxHandler FROM PROPATH.
  17. USING utilities.utilitiesHandler FROM PROPATH.
  18. USING src.ch.adprime.api.yourbarmate.beans.Response FROM PROPATH.
  19. CLASS admin.adminprogsHandler FINAL:
  20. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  21. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  22. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  23. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  24. DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
  25. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  26. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  27. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  29. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  30. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  31. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  33. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  34. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  35. DEFINE VARIABLE lWordIndex AS LOGICAL NO-UNDO.
  36. DEFINE VARIABLE lBoxFields AS LOGICAL NO-UNDO.
  37. DEFINE VARIABLE iFormTabIndex AS INTEGER NO-UNDO.
  38. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  39. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  40. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO INIT ''.
  41. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  42. DEFINE VARIABLE cFieldReplace AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
  44. DEFINE VARIABLE cFilterReplace AS CHARACTER NO-UNDO.
  45. DEFINE VARIABLE cFileReplace AS CHARACTER NO-UNDO.
  46. DEFINE VARIABLE cKeyFields AS CHARACTER NO-UNDO.
  47. DEFINE VARIABLE cKeyValues AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  50. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  51. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  52. DEFINE VARIABLE hError AS HANDLE NO-UNDO.
  53. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  54. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  55. DEFINE VARIABLE iAnzahlRecords AS INTEGER NO-UNDO.
  56. DEFINE VARIABLE iActualPage AS INTEGER NO-UNDO.
  57. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO INIT 20.
  58. DEFINE VARIABLE iStartPage AS INTEGER NO-UNDO.
  59. DEFINE VARIABLE iStartRecord AS INTEGER NO-UNDO.
  60. DEFINE VARIABLE iPageCounter AS INTEGER NO-UNDO.
  61. DEFINE VARIABLE iCurrentPosition AS INTEGER NO-UNDO.
  62. DEFINE VARIABLE cPrimaryKey AS CHARACTER NO-UNDO.
  63. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  64. DEFINE VARIABLE iStartIndex AS INTEGER NO-UNDO.
  65. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  66. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  67. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  68. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  69. DEFINE TEMP-TABLE ttKeyFields
  70. FIELD iIndex AS INTEGER
  71. FIELD cLongName AS CHARACTER
  72. FIELD cFieldName AS CHARACTER
  73. FIELD cFileName AS CHARACTER
  74. FIELD cValue AS CHARACTER
  75. FIELD cDataType AS CHARACTER
  76. FIELD lKeyfield AS LOGICAL
  77. INDEX ttKeyFields-k1 IS PRIMARY
  78. iIndex
  79. cFieldName
  80. .
  81. DEFINE VARIABLE httKeyFields AS HANDLE NO-UNDO.
  82. DEFINE TEMP-TABLE ttPrimaryIndex
  83. FIELD iIndex AS INTEGER
  84. FIELD cFieldName AS CHARACTER
  85. FIELD cFileName AS CHARACTER
  86. FIELD cValue AS CHARACTER
  87. FIELD cDataType AS CHARACTER
  88. INDEX ttPrimaryIndex-k1 IS PRIMARY
  89. iIndex
  90. cFieldName
  91. .
  92. DEFINE VARIABLE httPrimaryIndex AS HANDLE NO-UNDO.
  93. DEFINE TEMP-TABLE ttWordIndexTable
  94. FIELD cFileName AS CHARACTER
  95. FIELD cFieldName AS CHARACTER
  96. FIELD cDataType AS CHARACTER
  97. FIELD cValue AS CHARACTER
  98. .
  99. DEFINE VARIABLE ttJsonIdent AS HANDLE NO-UNDO.
  100. DEFINE VARIABLE htt AS HANDLE NO-UNDO.
  101. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  102. DEFINE VARIABLE oselectboxHandler AS selectboxHandler NO-UNDO.
  103. /*------------------------------------------------------------------------------
  104. Purpose:
  105. Notes:
  106. ------------------------------------------------------------------------------*/
  107. CONSTRUCTOR PUBLIC adminprogsHandler ( ):
  108. SUPER ().
  109. hError = ERROR-STATUS:HANDLE.
  110. END CONSTRUCTOR.
  111. /*------------------------------------------------------------------------------
  112. Purpose:
  113. Notes:
  114. ------------------------------------------------------------------------------*/
  115. CONSTRUCTOR PUBLIC adminprogsHandler ( INPUT lcInput AS LONGCHAR, INPUT ipcFunction AS CHARACTER ):
  116. SUPER ().
  117. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  118. DEFINE VARIABLE oJsonCon AS JsonConstruct NO-UNDO.
  119. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO.
  120. DEFINE VARIABLE iItemsPage AS INTEGER NO-UNDO.
  121. DEFINE VARIABLE cMaxHeight AS CHARACTER NO-UNDO.
  122. hError = ERROR-STATUS:HANDLE.
  123. outilitiesHandler = NEW utilitiesHandler().
  124. oselectboxHandler = NEW selectboxHandler().
  125. oParser = NEW ObjectModelParser().
  126. oJsonCon = oParser:Parse(lcInput).
  127. oJsonIdent = CAST(oJsonCon, JsonObject).
  128. cProgram = oJsonIdent:GetCharacter('program').
  129. cUsers = oJsonIdent:GetCharacter('cUsers').
  130. iItemsPage = oJsonIdent:GetInteger ('itemsPerPage').
  131. cMaxHeight = oJsonIdent:GetCharacter('tableMaxHeight').
  132. httKeyFields = TEMP-TABLE ttKeyFields :DEFAULT-BUFFER-HANDLE.
  133. httPrimaryIndex = TEMP-TABLE ttPrimaryIndex:DEFAULT-BUFFER-HANDLE.
  134. IF oJsonIdent:HAS('limit') THEN oJsonIdent:SET('limit', iItemsPage).
  135. ELSE oJsonIdent:ADD('limit', iItemsPage).
  136. //
  137. // Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
  138. //
  139. outilitiesHandler:evaluateFile(
  140. INPUT-OUTPUT oJsonIdent ,
  141. OUTPUT cFileName ,
  142. OUTPUT lCompany ,
  143. OUTPUT lActive ,
  144. OUTPUT lWordIndex ,
  145. INPUT-OUTPUT httKeyFields ,
  146. INPUT-OUTPUT httPrimaryIndex
  147. ).
  148. oJsonIdent:write(lcString).
  149. //
  150. // erstellen TEMP-TABLE aus oJsonObject mit dem HADLE htt
  151. //
  152. oJsonIdent:WRITE(lcInput, FALSE).
  153. // MESSAGE STRING(lcInput).
  154. CREATE TEMP-TABLE ttJsonIdent.
  155. ttJsonIdent:READ-JSON('longchar', lcInput, 'EMPTY').
  156. ttJsonIdent:SERIALIZE-NAME = 'oJsonData'.
  157. htt = ttJsonIdent:DEFAULT-BUFFER-HANDLE.
  158. htt:FIND-FIRST ('', NO-LOCK).
  159. ASSIGN
  160. cCompany = htt::company
  161. cUser_Name = htt::user_name
  162. iLanguage_id = htt::language_id
  163. cFileName = htt::file_name
  164. cFormId = htt::formId
  165. .
  166. CATCH e AS Progress.Lang.Error:
  167. END CATCH.
  168. FINALLY:
  169. END FINALLY.
  170. END CONSTRUCTOR.
  171. /*------------------------------------------------------------------------------
  172. Purpose:
  173. Notes:
  174. ------------------------------------------------------------------------------*/
  175. METHOD PUBLIC VOID buildWhere(
  176. ):
  177. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  178. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  179. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  180. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  181. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  182. DEFINE VARIABLE iNumerisch AS INTEGER NO-UNDO.
  183. DEFINE VARIABLE cSearchChars AS CHARACTER NO-UNDO INIT ''.
  184. DEFINE VARIABLE lSearch AS LOGICAL NO-UNDO.
  185. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO EXTENT.
  186. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  187. DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
  188. DEFINE VARIABLE cFilter AS CHARACTER NO-UNDO.
  189. DEFINE VARIABLE cDBField AS CHARACTER NO-UNDO.
  190. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  191. CREATE BUFFER hBuffer FOR TABLE cFileName.
  192. cSortField = ''.
  193. cDirection = ''.
  194. cWhere = ''.
  195. iStartPage = 1.
  196. iMaxRecords = 25.
  197. IF oJsonIdent:HAS('page') THEN iStartPage = INTEGER(oJsonIdent:GetCharacter('page')) NO-ERROR.
  198. IF oJsonIdent:HAS('limit') THEN iMaxRecords = INTEGER(oJsonIdent:GetCharacter('limit')) NO-ERROR.
  199. IF oJsonIdent:HAS('search') THEN
  200. DO:
  201. cSearchChars = oJsonIdent:GetCharacter('search').
  202. cSearchChars = REPLACE(cSearchChars, '+', ' ').
  203. lSearch = TRUE.
  204. iMaxRecords = 100.
  205. END.
  206. iStartRecord = ((iStartPage - 1) * iMaxRecords) + 1.
  207. cString = 'WHERE'.
  208. FOR EACH ttKeyFields NO-LOCK:
  209. IF lSearch THEN
  210. DO:
  211. IF ttKeyFields.iIndex > 1 AND
  212. ttKeyFields.iIndex < 99 THEN NEXT.
  213. END.
  214. IF ttKeyFields.cDataType = 'logical' AND ttKeyFields.cValue = '' THEN NEXT.
  215. CASE ttKeyFields.cDataType:
  216. WHEN 'integer' THEN
  217. cValue = ttKeyFields.cValue.
  218. WHEN 'int64' THEN
  219. cValue = ttKeyFields.cValue.
  220. WHEN 'decimal' THEN
  221. cValue = ttKeyFields.cValue.
  222. WHEN 'date' THEN
  223. cValue = STRING(DATE(ttKeyFields.cValue),'99.99.9999').
  224. WHEN 'logical' THEN
  225. cValue = STRING(LOGICAL(ttKeyFields.cValue),'true/false').
  226. WHEN 'character' THEN
  227. cValue = QUOTER(ttKeyFields.cValue).
  228. END CASE.
  229. IF ttKeyFields.lKeyfield OR ttKeyFields.cDataType = 'logical' THEN
  230. cWhere = cWhere + SUBSTITUTE('&1 &2.&3 = &4 ', cString, ttKeyFields.cFileName, ttKeyFields.cFieldName, cValue).
  231. ELSE
  232. DO:
  233. cWhere = cWhere + SUBSTITUTE('&1 INDEX(STRING(&2.&3), &4) > 0 ', cString, ttKeyFields.cFileName, ttKeyFields.cFieldName, QUOTER(STRING(cValue))).
  234. END.
  235. cString = 'AND'.
  236. END.
  237. //
  238. // Suche aus dem Suchfeld --> geht dann über Wordindex
  239. //
  240. IF lSearch THEN
  241. DO:
  242. DO ii = 1 TO NUM-ENTRIES(cSearchChars, ' '):
  243. cValue = ENTRY(ii, cSearchChars, ' ').
  244. iNumerisch = INTEGER(cValue) NO-ERROR.
  245. IF NOT ERROR-STATUS:ERROR THEN cValue = SUBSTITUTE('&1&2&1', CHR(01), TRIM(STRING(iNumerisch,'>>>>>>>>9-'))).
  246. cWhere = cWhere + (IF cWhere = '' THEN ' WHERE ' ELSE 'AND ').
  247. cWhere = cWhere + 'LOOKUP(' + QUOTER(cValue) + ', ' + cFileName + '.wordindex, " ") > 0 '.
  248. END.
  249. END.
  250. //
  251. // hat es Sortierfelder ?
  252. //
  253. outilitiesHandler:readSortFields(
  254. INPUT oJsonIdent ,
  255. INPUT cFileName ,
  256. OUTPUT cSortField ,
  257. OUTPUT cDirection
  258. ).
  259. IF cSortField <> '' THEN
  260. DO:
  261. IF cDirection BEGINS 'asc' THEN cDirection = ''.
  262. cWhere = cWhere + SUBSTITUTE(' BY &1 &2', cSortField, cDirection).
  263. END.
  264. // MESSAGE 'cWhere am Ende von BuildWhere =' cWhere.
  265. outilitiesHandler:writeLastcWhere(
  266. INPUT oJsonIdent ,
  267. INPUT cFileName ,
  268. INPUT cWhere
  269. ).
  270. createTempTable().
  271. RETURN.
  272. END METHOD.
  273. /*------------------------------------------------------------------------------
  274. Purpose:
  275. Notes:
  276. ------------------------------------------------------------------------------*/
  277. METHOD PUBLIC LOGICAL createBegin(
  278. INPUT oJsonData AS JsonObject ,
  279. OUTPUT oJsonReturn AS JsonObject
  280. ):
  281. MESSAGE "create begin".
  282. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  283. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  284. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  285. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  286. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  287. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  288. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  289. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  290. DEFINE VARIABLE cBufferField AS CHARACTER NO-UNDO.
  291. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  292. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  293. DEFINE VARIABLE iType AS INTEGER NO-UNDO.
  294. DEFINE VARIABLE iValue AS INTEGER NO-UNDO.
  295. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  296. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  297. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  298. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  299. oJsonRecord = NEW JsonObject().
  300. oJsonRecord = oJsonData:GetJsonObject('record').
  301. oMasterKeyFields = NEW JsonObject().
  302. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyfields') NO-ERROR.
  303. CREATE BUFFER hBuffer FOR TABLE cFileName.
  304. createTempTable().
  305. oJsonRecord:Write(lcttTable, FALSE).
  306. MESSAGE STRING(lcttTable).
  307. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  308. outilitiesHandler:evaluateErrorStatus(hError).
  309. httTable:FIND-FIRST('', NO-LOCK).
  310. IF lCompany THEN
  311. DO:
  312. httTable::company = cCompany.
  313. oJsonRecord:SET(SUBSTITUTE('&1_&2', cFileName, 'company'), oJsonIdent:GetCharacter('company')).
  314. END.
  315. hField = httTable:BUFFER-FIELD('created_at') NO-ERROR.
  316. IF NOT ERROR-STATUS:ERROR AND
  317. VALID-HANDLE(hField) THEN
  318. DO:
  319. hField:BUFFER-VALUE = NOW.
  320. IF INDEX(lcttTable, 'created_at') > 0 THEN oJsonRecord:SET(SUBSTITUTE('&1_&2', cFileName, 'created_at'), outilitiesHandler:date2iso(TODAY)).
  321. END.
  322. hField = httTable:BUFFER-FIELD('created_by') NO-ERROR.
  323. IF NOT ERROR-STATUS:ERROR AND
  324. VALID-HANDLE(hField) THEN
  325. DO:
  326. hField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  327. IF INDEX(lcttTable, 'created_by') > 0 THEN oJsonRecord:SET(SUBSTITUTE('&1_&2', cFileName, 'created_by'), oJsonIdent:GetCharacter('H_display_name')).
  328. END.
  329. EXTENT(cFieldNames) = ?.
  330. cFieldNames = oMasterKeyFields:GetNames() NO-ERROR.
  331. DO ii = 1 TO EXTENT(cFieldNames):
  332. cField = cFieldNames[ii].
  333. cBufferField = cField.
  334. ENTRY(1, cBufferField, '_') = ''.
  335. cBufferField = SUBSTRING(cBufferField,02).
  336. hField = httTable:BUFFER-FIELD(cBufferField):HANDLE NO-ERROR.
  337. cType = hField:DATA-TYPE.
  338. lcString = oMasterKeyFields:GetJsonText(cField).
  339. CASE cType:
  340. WHEN 'integer' THEN
  341. hField:BUFFER-VALUE = INTEGER(lcString).
  342. WHEN 'int64' THEN
  343. hField:BUFFER-VALUE = INT64(lcString).
  344. WHEN 'logical' THEN
  345. hField:BUFFER-VALUE = LOGICAL(lcString).
  346. OTHERWISE
  347. hField:BUFFER-VALUE = lcString.
  348. END CASE.
  349. END.
  350. DELETE OBJECT oJsonRecord.
  351. oJsonRecord = NEW JsonObject().
  352. oJsonArray = NEW JsonArray().
  353. httTable:WRITE-JSON ('JsonObject', oJsonRecord).
  354. oJsonArray = oJsonRecord:GetJsonArray('record').
  355. oJsonRecord = oJsonArray:GetJsonObject(1).
  356. oJsonReturn = NEW JsonObject().
  357. oJsonReturn:ADD('success', TRUE).
  358. oJsonReturn:add('record', oJsonRecord).
  359. // oJsonReturn:WriteFile('C:\TEMP\createBegin_jsonreturn_response.json', TRUE).
  360. lRetVal = TRUE.
  361. RETURN lRetVal.
  362. END METHOD.
  363. /*------------------------------------------------------------------------------
  364. Purpose:
  365. Notes:
  366. ------------------------------------------------------------------------------*/
  367. METHOD PUBLIC LOGICAL createData(
  368. INPUT oJsonData AS jsonObject,
  369. OUTPUT oJsonReturn AS JsonObject
  370. ):
  371. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  372. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  373. DEFINE VARIABLE oJsonFieldErrors AS JsonObject NO-UNDO.
  374. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  375. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  376. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  377. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  378. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  379. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  380. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  381. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  382. DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  383. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  384. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  385. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  386. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  387. DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
  388. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  389. oJsonRecord = NEW JsonObject().
  390. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  391. // oJsonRecord:WriteFile('C:\TEMP\createData_record.json', TRUE).
  392. oMasterKeyFields = NEW JsonObject().
  393. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  394. CREATE BUFFER hBuffer FOR TABLE cFileName.
  395. createTempTable().
  396. oJsonRecord:Write(lcttTable, FALSE).
  397. // MESSAGE STRING(lcttTable).
  398. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  399. outilitiesHandler:evaluateErrorStatus(hError).
  400. httTable:FIND-FIRST('', NO-LOCK).
  401. createUniqueWhere(
  402. INPUT httTable,
  403. OUTPUT cUniqueWhere
  404. ).
  405. lRetVal = FALSE.
  406. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  407. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  408. //
  409. // Wenn gefunden, dann Fehler weil doppelte ID
  410. //
  411. IF lOK THEN
  412. DO:
  413. outilitiesHandler:createErrorBox(
  414. INPUT oJsonIdent ,
  415. INPUT '2007' ,
  416. INPUT '' ,
  417. OUTPUT oJsonMessageBox
  418. ).
  419. oJsonReturn = NEW JsonObject().
  420. oJsonReturn:ADD('success' , FALSE ).
  421. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  422. oJsonFieldErrors = NEW JsonObject().
  423. FOR EACH ttPrimaryIndex NO-LOCK:
  424. cField = SUBSTITUTE('&1_&2', ttPrimaryIndex.cFileName, ttPrimaryIndex.cFieldName).
  425. oJsonFieldErrors:ADD(cField, 'Doppelt').
  426. END.
  427. oJsonReturn:ADD('fieldErrors', oJsonFieldErrors).
  428. RETURN TRUE.
  429. END.
  430. //
  431. // Datensatz erstellen / active setzen
  432. //
  433. hBuffer:BUFFER-CREATE().
  434. hBuffer:BUFFER-COPY(httTable) NO-ERROR.
  435. htField = hBuffer:BUFFER-FIELD('active'):HANDLE NO-ERROR.
  436. IF NOT ERROR-STATUS:ERROR AND
  437. VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = TRUE.
  438. htField = hBuffer:BUFFER-FIELD('created_at'):HANDLE NO-ERROR.
  439. IF NOT ERROR-STATUS:ERROR AND
  440. VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = NOW.
  441. htField = hBuffer:BUFFER-FIELD('created_by'):HANDLE NO-ERROR.
  442. IF NOT ERROR-STATUS:ERROR AND
  443. VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  444. rBuffer = hBuffer:RECID.
  445. oJsonIdent:ADD('rBuffer', INT64(rBuffer)) NO-ERROR.
  446. hBuffer:BUFFER-RELEASE ().
  447. outilitiesHandler:writeLastRecord(
  448. INPUT oJsonIdent ,
  449. INPUT cUniqueWhere
  450. ).
  451. lRetVal = TRUE.
  452. LEAVE.
  453. END.
  454. IF lRetVal THEN
  455. DO:
  456. IF lWordIndex THEN fillWordIndexTable().
  457. END.
  458. //
  459. // Datensatz anhand der RECID und den letzten Kriterien in der Tabelle finden und Pagination ermitteln
  460. //
  461. DO WHILE lRetVal:
  462. outilitiesHandler:readLastcWhere(
  463. INPUT oJsonIdent,
  464. INPUT cFileName ,
  465. OUTPUT cWhere
  466. ).
  467. // MESSAGE 'cWhere nach add von Datensatz' cWhere.
  468. outilitiesHandler:evaluatePageNumber(
  469. INPUT-OUTPUT oJsonIdent ,
  470. INPUT cWhere ,
  471. INPUT rBuffer ,
  472. INPUT 'current'
  473. ).
  474. createTempTable().
  475. iAnzRec = fillTemptableFromTable(
  476. OUTPUT oJsonReturn
  477. ).
  478. CREATE BUFFER hUniqueBuffer FOR TABLE cFileName.
  479. hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
  480. outilitiesHandler:evaluateErrorStatus(hError).
  481. hField = hUniqueBuffer:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  482. IF VALID-HANDLE(hField) AND
  483. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', hField:BUFFER-VALUE).
  484. oselectboxHandler:getVariableSelectBoxes(
  485. INPUT oJsonIdent ,
  486. OUTPUT oJsonSelectBoxes
  487. ).
  488. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  489. lRetVal = TRUE.
  490. LEAVE.
  491. END.
  492. DELETE OBJECT hBuffer NO-ERROR.
  493. DELETE OBJECT hUniqueBuffer NO-ERROR.
  494. IF lRetVal THEN
  495. DO:
  496. oJsonReturn:ADD('success', TRUE ).
  497. outilitiesHandler:createInfoBox(
  498. INPUT oJsonIdent ,
  499. INPUT '2008' ,
  500. INPUT '' ,
  501. OUTPUT oJsonMessageBox
  502. ) NO-ERROR.
  503. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  504. RETURN TRUE.
  505. END.
  506. IF NOT lRetVal THEN
  507. DO:
  508. oJsonMessage = NEW JsonObject().
  509. oJsonMessage:ADD('success', FALSE).
  510. oJsonMessage:ADD('message', lcMessage).
  511. oJsonMessage:WRITE(lcJsonString, FALSE).
  512. oJsonReturn = oJsonMessage.
  513. RETURN TRUE.
  514. END.
  515. CATCH e AS Progress.Lang.Error:
  516. END CATCH.
  517. FINALLY:
  518. END FINALLY.
  519. END METHOD.
  520. /*------------------------------------------------------------------------------
  521. Purpose:
  522. Notes:
  523. ------------------------------------------------------------------------------*/
  524. METHOD PUBLIC VOID createTempTable(
  525. ):
  526. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  527. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  528. DEFINE VARIABLE cSerializeName AS CHARACTER NO-UNDO.
  529. DEFINE VARIABLE cttName AS CHARACTER NO-UNDO.
  530. DEFINE VARIABLE cBoxfields AS CHARACTER NO-UNDO.
  531. DEFINE VARIABLE cAddField AS CHARACTER NO-UNDO.
  532. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  533. // MESSAGE cCompany '-' cFormId '-' htt::FormId.
  534. FIND FIRST selectboxfields NO-LOCK
  535. WHERE selectboxfields.company = cCompany
  536. AND selectboxfields.user_name = 'admin'
  537. AND selectboxfields.program = cFormId
  538. AND selectboxfields.table_name = 'table' NO-ERROR.
  539. cBoxfields = ''.
  540. lBoxFields = FALSE.
  541. IF AVAILABLE selectboxfields THEN
  542. DO:
  543. cBoxfields = selectboxfields.boxfields.
  544. cBoxfields = cBoxfields
  545. + (IF cBoxfields = '' THEN '' ELSE ',')
  546. + selectboxfields.boxfieldsFix.
  547. cBoxFields = REPLACE(cBoxfields, ',', ';').
  548. lBoxFields = TRUE.
  549. // MESSAGE 'Alle Boxfields für' cFormId '->' cBoxfields.
  550. END.
  551. IF VALID-HANDLE(ttTable) THEN DELETE OBJECT ttTable NO-ERROR.
  552. httTable = ?.
  553. CREATE TEMP-TABLE ttTable.
  554. ttTable:ADD-FIELDS-FROM (cFileName, 'wordindex'). /* Alle Felder aus dem Buffer, ausser wordindex */
  555. ttTable:ADD-NEW-FIELD ('color', 'character', 0, 'x(20)').
  556. ttTable:ADD-NEW-FIELD ('fieldColors', 'character', 5, 'x(20)').
  557. IF lBoxFields THEN
  558. DO:
  559. DO ii = 1 TO NUM-ENTRIES(cBoxFields, ';'):
  560. cField = ENTRY(ii, cBoxFields, ';').
  561. i1 = INDEX(cField, '_') + 1.
  562. cField = SUBSTRING(cField,i1) + '_BoxField'.
  563. ttTable:ADD-NEW-FIELD (cField, 'character', 0, 'x(100)').
  564. END.
  565. END.
  566. IF cSortField <> '' THEN
  567. DO:
  568. ttTable:ADD-NEW-INDEX ('ttTable-k1', FALSE, TRUE). /* UNIQUE, PRIMARY */
  569. IF cDirection BEGINS 'des' THEN ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField, 'desc').
  570. ELSE ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField).
  571. END.
  572. cFunction = htt::FUNCTION NO-ERROR.
  573. CASE cFunction:
  574. WHEN 'delete' THEN
  575. cttName = 'record'.
  576. WHEN 'update' THEN
  577. cttName = 'record'.
  578. WHEN 'change' THEN
  579. cttName = 'record'.
  580. WHEN 'create' THEN
  581. cttName = 'record'.
  582. WHEN 'loaddataunique' THEN
  583. cttName = 'record'.
  584. OTHERWISE
  585. cttName = 'records'.
  586. END CASE.
  587. ttTable:TEMP-TABLE-PREPARE (cttName).
  588. httTable = ttTable:DEFAULT-BUFFER-HANDLE.
  589. //
  590. // Den Feldnamen wird für das Front-End der Tabellenname vorangestellt (Serialize-Name)
  591. //
  592. DO ii = 1 TO httTable:NUM-FIELDS:
  593. CASE httTable:BUFFER-FIELD(ii):NAME:
  594. WHEN 'active' THEN
  595. cSerializeName = 'active'.
  596. WHEN 'color' THEN
  597. cSerializeName = 'color'.
  598. WHEN 'fieldColors' THEN
  599. cSerializeName = 'fieldColors'.
  600. OTHERWISE
  601. cSerializeName = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME.
  602. END CASE.
  603. httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cSerializeName NO-ERROR.
  604. // MESSAGE 'NEU ' httTable:BUFFER-FIELD(ii):NAME httTable:BUFFER-FIELD(ii):EXTENT.
  605. END.
  606. END METHOD.
  607. /*------------------------------------------------------------------------------
  608. Purpose:
  609. Notes:
  610. ------------------------------------------------------------------------------*/
  611. METHOD PUBLIC VOID createUniqueWhere(
  612. INPUT hBuffer AS HANDLE,
  613. OUTPUT cUniqueWhere AS CHARACTER
  614. ):
  615. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  616. DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO.
  617. cUniqueWhere = ''.
  618. cString = 'WHERE'.
  619. FOR EACH ttPrimaryIndex NO-LOCK:
  620. hField = hBuffer:BUFFER-FIELD(ttPrimaryIndex.cFieldName):HANDLE.
  621. CASE ttPrimaryIndex.cDataType:
  622. WHEN 'character' THEN
  623. cValue = QUOTER(hField:BUFFER-VALUE).
  624. WHEN 'logical' THEN
  625. cValue = STRING(hField:BUFFER-VALUE,"true/false").
  626. WHEN 'date' THEN
  627. cValue = STRING(DATE(hField:BUFFER-VALUE)).
  628. OTHERWISE
  629. cValue = hField:BUFFER-VALUE.
  630. END CASE.
  631. cUniqueWhere = cUniqueWhere + cString
  632. + SUBSTITUTE(' &1.&2 = &3 ', ttPrimaryIndex.cFileName, ttPrimaryIndex.cFieldName, cValue).
  633. cString = 'AND'.
  634. END.
  635. RETURN.
  636. END METHOD.
  637. /*------------------------------------------------------------------------------
  638. Purpose:
  639. Notes:
  640. ------------------------------------------------------------------------------*/
  641. METHOD PUBLIC LOGICAL deleteData(
  642. INPUT oJsonData AS jsonObject,
  643. OUTPUT oJsonReturn AS JsonObject
  644. ):
  645. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  646. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  647. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  648. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  649. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  650. DEFINE VARIABLE oRecord AS JsonObject NO-UNDO.
  651. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  652. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  653. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  654. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  655. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  656. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  657. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  658. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  659. // oJsonData:writefile(SUBSTITUTE('C:\TEMP\delete_jsondata_&1.json', cFileName), TRUE).
  660. oJsonRecord = NEW JsonObject().
  661. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  662. oMasterKeyFields = NEW JsonObject().
  663. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  664. CREATE BUFFER hBuffer FOR TABLE cFileName.
  665. createTempTable().
  666. oJsonRecord:Write(lcttTable, FALSE).
  667. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  668. outilitiesHandler:evaluateErrorStatus(hError).
  669. httTable:FIND-FIRST('', NO-LOCK).
  670. //
  671. // Erzeugen von Where-Statement für UNIQUE-Find
  672. //
  673. createUniqueWhere(
  674. INPUT httTable,
  675. OUTPUT cUniqueWhere
  676. ).
  677. lRetVal = FALSE.
  678. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  679. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  680. IF NOT lOK THEN
  681. DO:
  682. outilitiesHandler:createErrorBox(
  683. INPUT oJsonIdent ,
  684. INPUT '2000' ,
  685. INPUT '' ,
  686. OUTPUT oJsonMessageBox
  687. ).
  688. oJsonReturn = NEW JsonObject().
  689. oJsonReturn:ADD('success' , FALSE ).
  690. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  691. RETURN TRUE.
  692. END.
  693. rBuffer = hBuffer:RECID.
  694. hBuffer:BUFFER-RELEASE ().
  695. cActiveSelection = (IF oJsonIdent:HAS('activeFilter') THEN oJsonIdent:GetCharacter('activeFilter') ELSE '').
  696. IF cActiveSelection = 'LBL_FILTER_ACTIVE' THEN
  697. DO:
  698. outilitiesHandler:evaluatePageNumber(
  699. INPUT-OUTPUT oJsonIdent ,
  700. INPUT cWhere ,
  701. INPUT rBuffer ,
  702. INPUT 'before'
  703. ).
  704. END.
  705. iStartPage = INTEGER(oJsonIdent:GetCharacter('page')) NO-ERROR.
  706. iIndex = INTEGER(oJsonIdent:GetCharacter('index')) NO-ERROR.
  707. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, EXCLUSIVE-LOCK, NO-WAIT) NO-ERROR.
  708. IF hBuffer:LOCKED THEN
  709. DO:
  710. hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  711. rBuffer = hBuffer:RECID.
  712. outilitiesHandler:createLockMessage(
  713. INPUT oJsonIdent,
  714. INPUT rBuffer ,
  715. OUTPUT oJsonMessageBox
  716. ).
  717. oJsonReturn = NEW JsonObject().
  718. oJsonReturn:ADD('success' , FALSE ).
  719. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  720. RETURN TRUE.
  721. END.
  722. DO WHILE lActive :
  723. hField = hBuffer:BUFFER-FIELD('active'):HANDLE NO-ERROR.
  724. IF ERROR-STATUS:ERROR OR
  725. NOT VALID-HANDLE(hField) THEN LEAVE.
  726. hField:BUFFER-VALUE = FALSE NO-ERROR.
  727. hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
  728. IF NOT ERROR-STATUS:ERROR AND
  729. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = NOW.
  730. hField = hBuffer:BUFFER-FIELD('updated_by'):HANDLE NO-ERROR.
  731. IF NOT ERROR-STATUS:ERROR AND
  732. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  733. httTable:BUFFER-COPY(hBuffer).
  734. hBuffer:BUFFER-RELEASE ().
  735. lRetVal = TRUE.
  736. LEAVE.
  737. END.
  738. DO WHILE NOT lRetVal:
  739. lRetVal = hBuffer:BUFFER-DELETE ().
  740. hBuffer:BUFFER-RELEASE ().
  741. LEAVE.
  742. END.
  743. IF lActive THEN fillWordIndexTable().
  744. //
  745. // Letzte Abfrage wiederholen und Temp-Tabelle füllen
  746. //
  747. outilitiesHandler:readLastcWhere(
  748. INPUT oJsonIdent,
  749. INPUT cFileName,
  750. OUTPUT cWhere
  751. ) NO-ERROR.
  752. outilitiesHandler:evaluateErrorStatus(hError).
  753. // MESSAGE 'cWhere nach Löschung ' cWhere.
  754. createTempTable().
  755. fillTemptableFromTable(
  756. OUTPUT oJsonReturn
  757. ).
  758. oRecords = NEW JsonArray().
  759. oRecords = oJsonReturn:GetJsonArray('records').
  760. oRecord = NEW JsonObject().
  761. oRecord = (IF iIndex = oRecords:LENGTH THEN oRecords:GetJsonObject(iIndex) ELSE oRecords:GetJsonObject(iIndex + 1) ).
  762. oselectboxHandler:getVariableSelectBoxes(
  763. INPUT oJsonIdent,
  764. OUTPUT oJsonSelectBoxes
  765. ).
  766. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  767. LEAVE.
  768. END.
  769. IF lRetVal THEN
  770. DO:
  771. oJsonReturn:ADD('success', TRUE).
  772. RETURN lRetVal.
  773. END.
  774. IF NOT lRetVal THEN
  775. DO:
  776. oJsonMessage = NEW JsonObject().
  777. oJsonMessage:ADD('success', FALSE).
  778. oJsonMessage:ADD('message', lcMessage).
  779. oJsonMessage:WRITE(lcJsonString, FALSE).
  780. oJsonReturn = oJsonMessage.
  781. END.
  782. RETURN lRetVal.
  783. CATCH e AS Progress.Lang.Error:
  784. END CATCH.
  785. FINALLY:
  786. DELETE OBJECT oJsonArray NO-ERROR.
  787. DELETE OBJECT oJsonData NO-ERROR.
  788. END FINALLY.
  789. END METHOD.
  790. /*------------------------------------------------------------------------------
  791. Purpose:
  792. Notes:
  793. ------------------------------------------------------------------------------*/
  794. METHOD PUBLIC INTEGER fillTemptableFromTable(
  795. OUTPUT oJsonReturn AS JsonObject
  796. ):
  797. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO INIT -1.
  798. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  799. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  800. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  801. DEFINE VARIABLE iTotalRecords AS INTEGER NO-UNDO.
  802. DEFINE VARIABLE cAddress AS CHARACTER NO-UNDO.
  803. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  804. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  805. DEFINE VARIABLE lFound AS LOGICAL NO-UNDO.
  806. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  807. DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
  808. DEFINE VARIABLE cPreWhere AS CHARACTER NO-UNDO.
  809. DEFINE VARIABLE rBefore AS RECID NO-UNDO.
  810. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  811. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  812. iStartPage = 1.
  813. iMaxRecords = 25.
  814. iIndex = 0.
  815. rBuffer = (IF oJsonIdent:HAS('rBuffer') THEN oJsonIdent:GetInt64('rBuffer') ELSE ?).
  816. //
  817. // Manchmal kommen die Werte als Integer, manchmal als character
  818. //
  819. IF oJsonIdent:HAS('limit') THEN
  820. DO:
  821. iMaxRecords = (IF oJsonIdent:getType('limit') = 1 THEN INTEGER(oJsonIdent:GetCharacter('limit')) ELSE oJsonIdent:GetInteger('limit')).
  822. END.
  823. IF oJsonIdent:HAS('page') THEN
  824. DO:
  825. iStartPage = (IF oJsonIdent:getType('page') = 1 THEN INTEGER(oJsonIdent:GetCharacter('page')) ELSE oJsonIdent:GetInteger('page')).
  826. END.
  827. IF oJsonIdent:HAS('index') THEN
  828. DO:
  829. iIndex = (IF oJsonIdent:getType('index') = 1 THEN INTEGER(oJsonIdent:GetCharacter('index')) ELSE oJsonIdent:GetInteger('index')).
  830. END.
  831. iStartRecord = ((iStartPage - 1) * iMaxRecords) + 1.
  832. //
  833. // Für das Dynamische Query wird PRESELECT verwendet für die Pagination
  834. //
  835. // MESSAGE '-> MaxRecords =' iMaxRecords SKIP 'Startpage =' iStartPage SKIP 'Index =' iIndex SKIP 'Startrecord =' iStartRecord.
  836. // MESSAGE 'cWhere in fillTempTable =' cFileName '->' cWhere.
  837. cPreWhere = SUBSTITUTE(' PRESELECT EACH &1 &2 NO-LOCK ', cFileName, cWhere) NO-ERROR.
  838. // MESSAGE 'cPreWhere in fillTempTable =' cPreWhere.
  839. CREATE QUERY hQuery.
  840. CREATE BUFFER hBuffer FOR TABLE cFileName.
  841. hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
  842. outilitiesHandler:evaluateErrorStatus(hError).
  843. hQuery:QUERY-PREPARE (cPreWhere) NO-ERROR.
  844. outilitiesHandler:evaluateErrorStatus(hError).
  845. hQuery:QUERY-OPEN ().
  846. iTotalRecords = hQuery:NUM-RESULTS.
  847. hQuery:REPOSITION-FORWARD(iStartRecord - 1) NO-ERROR.
  848. hQuery:GET-NEXT ().
  849. iCurrentPosition = 0.
  850. iAnzahlRecords = 0.
  851. // MESSAGE 'Start query mit StartRecord ' iStartRecord 'und cWhere ' cPreWhere.
  852. ttTable:EMPTY-TEMP-TABLE ().
  853. DO WHILE NOT hQuery:QUERY-OFF-END:
  854. IF iCurrentPosition = 0 THEN iCurrentPosition = iStartRecord.
  855. iAnzahlRecords = iAnzahlRecords + 1.
  856. httTable:BUFFER-CREATE().
  857. httTable:BUFFER-COPY(hBuffer).
  858. /* IF cFileName = 'users' AND hBuffer::ROLE BEGINS 'admin' THEN */
  859. /* ASSIGN */
  860. /* */
  861. /* httTable:BUFFER-FIELD ('color'):BUFFER-VALUE() = 'green' */
  862. /* httTable:BUFFER-FIELD ('fieldColors'):BUFFER-VALUE(1) = "'users_firstname':'blue'".*/
  863. rBefore = hBuffer:RECID.
  864. IF rBuffer <> ? AND hBuffer:RECID = rBuffer THEN iIndex = iAnzahlRecords - 1.
  865. IF iAnzahlRecords >= iMaxRecords THEN LEAVE.
  866. hQuery:GET-NEXT ().
  867. END.
  868. hQuery:QUERY-CLOSE ().
  869. DELETE OBJECT hQuery NO-ERROR.
  870. DELETE OBJECT hBuffer NO-ERROR.
  871. IF lBoxFields THEN
  872. DO:
  873. lFound = FALSE.
  874. CREATE QUERY hQuery.
  875. hQuery:SET-BUFFERS(httTable).
  876. hQuery:QUERY-PREPARE (SUBSTITUTE('FOR EACH &1', httTable:NAME )).
  877. hQuery:QUERY-OPEN ().
  878. hQuery:GET-FIRST () NO-ERROR.
  879. DO WHILE NOT hQuery:QUERY-OFF-END:
  880. DO i1 = 1 TO httTable:NUM-FIELDS:
  881. IF INDEX(httTable:BUFFER-FIELD(i1):NAME, 'BoxField') = 0 THEN NEXT.
  882. lFound = TRUE.
  883. cField = httTable:BUFFER-FIELD(i1):NAME.
  884. cField = REPLACE(cField, '_BoxField', '').
  885. hField = httTable:BUFFER-FIELD(cField):HANDLE NO-ERROR.
  886. IF ERROR-STATUS:ERROR THEN NEXT.
  887. IF NOT VALID-HANDLE(hField) THEN NEXT.
  888. cFieldValue = hField:BUFFER-VALUE.
  889. httTable:BUFFER-FIELD(i1):BUFFER-VALUE =
  890. outilitiesHandler:getBoxFieldText(
  891. INPUT oJsonIdent ,
  892. INPUT cField ,
  893. INPUT cFieldValue
  894. ) NO-ERROR.
  895. END.
  896. IF lFound = FALSE THEN LEAVE.
  897. hQuery:GET-NEXT () NO-ERROR.
  898. END.
  899. hQuery:QUERY-CLOSE ().
  900. DELETE OBJECT hQuery NO-ERROR.
  901. END.
  902. oRecords = NEW JsonArray().
  903. httTable:WRITE-JSON('JsonArray', oRecords).
  904. // MESSAGE 'ttTable gefüllt ' iANzahlRecords.
  905. // oRecords:WriteFile(SUBSTITUTE('C:\TEMP\fillTempTable_&1_records.json', htt::FormId), TRUE).
  906. iPageCounter = iTotalRecords / iMaxRecords.
  907. IF (iPageCounter * iMaxRecords) < iTotalRecords THEN iPageCounter = iPageCounter + 1.
  908. oJsonReturn = NEW JsonObject().
  909. oJsonReturn:ADD('records' , oRecords ).
  910. oJsonReturn:ADD('currentPage' , iStartPage ).
  911. oJsonReturn:ADD('maxRecords' , iTotalRecords ).
  912. oJsonReturn:ADD('pageCount' , iPageCounter ).
  913. oJsonReturn:ADD('recordCount' , iAnzahlRecords).
  914. oJsonReturn:ADD('currentIndex', iIndex ).
  915. IF iAnzahlRecords > 0 AND
  916. rBuffer = ? THEN
  917. DO:
  918. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  919. createUniqueWhere(
  920. INPUT httTable ,
  921. OUTPUT cUniqueWhere
  922. ).
  923. // MESSAGE 'writeLastRecord ' cUniqueWhere.
  924. outilitiesHandler:writeLastRecord(
  925. INPUT oJsonIdent,
  926. INPUT cUniqueWhere
  927. ).
  928. END.
  929. iRetVal = iAnzahlRecords.
  930. // oJsonReturn:WriteFile(SUBSTITUTE('C:\TEMP\fillTempTable_return_&1.json', cFormId), TRUE).
  931. // MESSAGE 'ende filltable'.
  932. RETURN iRetVal.
  933. END METHOD.
  934. /*------------------------------------------------------------------------------
  935. Purpose:
  936. Notes:
  937. ------------------------------------------------------------------------------*/
  938. METHOD PUBLIC VOID fillWordIndexTable(
  939. ):
  940. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  941. DEFINE VARIABLE hwibuffer AS HANDLE NO-UNDO.
  942. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  943. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  944. EMPTY TEMP-TABLE ttWordIndexTable.
  945. MESSAGE 'Filename =' cFileName.
  946. CREATE BUFFER hwibuffer FOR TABLE cFileName.
  947. hwibuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK).
  948. DO i1 = 1 TO hwibuffer:NUM-FIELDS:
  949. hField = hwibuffer:BUFFER-FIELD(i1):HANDLE NO-ERROR.
  950. IF INDEX(hField:NAME, 'SHA') > 0 THEN NEXT.
  951. IF INDEX(hField:NAME, 'word') > 0 THEN NEXT.
  952. IF INDEX(hField:NAME, 'updated_') > 0 THEN NEXT.
  953. IF INDEX(hField:NAME, 'created_') > 0 THEN NEXT.
  954. IF INDEX(hField:NAME, '_display') > 0 THEN NEXT.
  955. IF hField:EXTENT > 0 THEN NEXT.
  956. IF hField:DATA-TYPE = 'logical' THEN NEXT.
  957. cValue = hField:BUFFER-VALUE NO-ERROR.
  958. IF cValue = ? THEN NEXT.
  959. IF hField:NAME BEGINS 'phone' OR
  960. hField:NAME BEGINS 'mobile' OR
  961. hField:NAME BEGINS 'Fax' THEN
  962. DO:
  963. cValue = hField:BUFFER-VALUE.
  964. cValue = REPLACE(cValue, ' ', '').
  965. cValue = REPLACE(cValue, '.', '').
  966. cValue = REPLACE(cValue, "'", '').
  967. cValue = REPLACE(cValue, '-', '').
  968. END.
  969. CREATE ttWordIndexTable.
  970. ASSIGN
  971. ttWordIndexTable.cFileName = hwibuffer:NAME
  972. ttWordIndexTable.cFieldName = hField:NAME
  973. ttWordIndexTable.cDataType = hField:DATA-TYPE
  974. ttWordIndexTable.cValue = cValue
  975. .
  976. END.
  977. DELETE OBJECT hwibuffer NO-ERROR.
  978. hwibuffer = ?.
  979. hwibuffer = TEMP-TABLE ttWordIndexTable:DEFAULT-BUFFER-HANDLE.
  980. cValue = outilitiesHandler:createWordindexFromTable(
  981. INPUT hwibuffer
  982. ).
  983. MESSAGE cFileName '-' cUniqueWhere '- wordIndex ' cValue.
  984. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  985. CREATE BUFFER hwiBuffer FOR TABLE cFileName.
  986. hwiBuffer:FIND-UNIQUE (cUniqueWhere, EXCLUSIVE-LOCK).
  987. hwibuffer::wordIndex = cValue.
  988. hwibuffer:BUFFER-RELEASE ().
  989. LEAVE.
  990. END.
  991. RETURN.
  992. END METHOD.
  993. /*------------------------------------------------------------------------------
  994. Purpose:
  995. Notes:
  996. ------------------------------------------------------------------------------*/
  997. METHOD PUBLIC LOGICAL getChanges(
  998. INPUT oJsonIdent AS JsonObject,
  999. OUTPUT oJsonResult AS JsonObject
  1000. ):
  1001. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  1002. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1003. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1004. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1005. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1006. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1007. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  1008. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  1009. DEFINE VARIABLE cBufferField AS CHARACTER NO-UNDO.
  1010. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1011. DEFINE VARIABLE iValue AS INTEGER NO-UNDO.
  1012. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  1013. DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
  1014. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1015. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1016. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1017. DEFINE VARIABLE lNew AS LOGICAL NO-UNDO.
  1018. DEFINE VARIABLE iType AS INTEGER NO-UNDO.
  1019. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  1020. DEFINE VARIABLE cChangeAction AS CHARACTER NO-UNDO.
  1021. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  1022. DEFINE VARIABLE oJsonReturn AS JsonObject NO-UNDO.
  1023. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1024. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  1025. DEFINE VARIABLE oJsonAction AS JsonArray NO-UNDO.
  1026. outilitiesHandler = NEW utilitiesHandler().
  1027. httKeyFields = TEMP-TABLE ttKeyFields :DEFAULT-BUFFER-HANDLE.
  1028. httPrimaryIndex = TEMP-TABLE ttPrimaryIndex:DEFAULT-BUFFER-HANDLE.
  1029. //
  1030. // Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
  1031. //
  1032. MESSAGE 'getChanges'.
  1033. outilitiesHandler:evaluateFile(
  1034. INPUT-OUTPUT oJsonIdent ,
  1035. OUTPUT cFileName ,
  1036. OUTPUT lCompany ,
  1037. OUTPUT lActive ,
  1038. OUTPUT lWordIndex ,
  1039. INPUT-OUTPUT httKeyFields ,
  1040. INPUT-OUTPUT httPrimaryIndex
  1041. ).
  1042. cFunction = oJsonIdent:GetCharacter('function').
  1043. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1044. createTempTable().
  1045. httTable:BUFFER-CREATE().
  1046. cReplace = SUBSTITUTE('&1_', cFileName).
  1047. cFieldNames = oJsonIdent:GetNames().
  1048. DO ii = 1 TO EXTENT(cFieldNames):
  1049. cField = cFieldNames[ii].
  1050. IF NOT cField BEGINS cFileName THEN NEXT.
  1051. cBufferField = REPLACE(cField, cReplace, '').
  1052. cValue = oJsonIdent:GetCharacter(cField).
  1053. hField = httTable:BUFFER-FIELD(cBufferField):HANDLE NO-ERROR.
  1054. IF ERROR-STATUS:ERROR THEN NEXT.
  1055. IF NOT VALID-HANDLE (hField) THEN NEXT.
  1056. IF hField:DATA-TYPE = 'date' THEN cValue = outilitiesHandler:iso2date(INPUT cValue).
  1057. iType = oJsonRecord:getType(cField).
  1058. CASE iType:
  1059. WHEN 2 THEN
  1060. DO:
  1061. iValue = oJsonRecord:GetInteger(cField).
  1062. hField:BUFFER-VALUE = iValue NO-ERROR.
  1063. END.
  1064. WHEN 3 THEN
  1065. DO:
  1066. lValue = oJsonRecord:GetLogical(cField).
  1067. hField:BUFFER-VALUE = lValue NO-ERROR.
  1068. END.
  1069. OTHERWISE
  1070. DO:
  1071. cValue = oJsonRecord:GetCharacter(cField).
  1072. IF hField:DATA-TYPE = 'character' THEN hField:BUFFER-VALUE = cValue NO-ERROR.
  1073. IF hField:DATA-TYPE = 'date' THEN hField:BUFFER-VALUE = DATE(outilitiesHandler:iso2date(cValue)).
  1074. END.
  1075. END CASE.
  1076. lOk = outilitiesHandler:evaluateErrorStatus(hError).
  1077. IF lOk THEN NEXT.
  1078. END.
  1079. // httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_Inhalt.json', TRUE).
  1080. //
  1081. // Erzeugen von Where-Statement für UNIQUE-Find
  1082. //
  1083. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1084. createUniqueWhere(
  1085. INPUT httTable,
  1086. OUTPUT cWhere
  1087. ).
  1088. cUniqueWhere = cWhere.
  1089. lOK = hBuffer:FIND-UNIQUE(cWhere, NO-LOCK) NO-ERROR.
  1090. IF NOT lOK THEN lNew = TRUE.
  1091. oJsonReturn = NEW JsonObject().
  1092. oJsonReturn:ADD('success', TRUE).
  1093. cChangeAction = oJsonIdent:GetCharacter('changeAction').
  1094. // MESSAGE 'ChangeAction =' cChangeAction.
  1095. CASE cChangeAction:
  1096. /* WHEN 'changeFixedAddress' THEN */
  1097. /* DO: */
  1098. /* lAddressFix = LOGICAL(oJsonIdent:GetCharacter('changedValue')). */
  1099. /*// MESSAGE httTable::ADDress_fix '-' oJsonIdent:GetCharacter('changedValue'). */
  1100. /* oJsonAction = NEW JsonArray(). */
  1101. /* oJsonAction:ADD('addresses_address'). */
  1102. /* IF lAddressFix THEN oJsonReturn:ADD('editableFields', oJsonAction).*/
  1103. /* ELSE oJsonReturn:ADD('disabledFields', oJsonAction).*/
  1104. /* httTable::Address_fix = oJsonIdent:GetCharacter('changedValue'). */
  1105. /* END. */
  1106. END CASE.
  1107. oJsonRecord = NEW JsonObject().
  1108. oJsonArray = NEW JsonArray ().
  1109. httTable:WRITE-JSON('JsonObject', oJsonRecord).
  1110. oJsonArray = oJsonRecord:GetJsonArray('record').
  1111. oJsonRecord = oJsonArray:GetJsonObject(1).
  1112. oJsonReturn:ADD('record', oJsonRecord).
  1113. oJsonResult = oJsonReturn.
  1114. lRetVal = TRUE.
  1115. RETURN lRetVal.
  1116. END METHOD.
  1117. /*------------------------------------------------------------------------------
  1118. Purpose:
  1119. Notes:
  1120. ------------------------------------------------------------------------------*/
  1121. METHOD PUBLIC LOGICAL getData(
  1122. OUTPUT oJsonReturn AS JsonObject
  1123. ):
  1124. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1125. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  1126. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  1127. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1128. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
  1129. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1130. DEFINE VARIABLE cAddress AS CHARACTER NO-UNDO.
  1131. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1132. DEFINE VARIABLE cFormUser AS CHARACTER NO-UNDO.
  1133. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  1134. DEFINE VARIABLE oJsonEditable AS JsonArray NO-UNDO.
  1135. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  1136. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1137. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1138. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1139. iIndex = 0.
  1140. buildWhere().
  1141. MESSAGE 'cWhere nach buildwhere in getdata' cWhere.
  1142. ii = 0.
  1143. iAnzRec = 0.
  1144. ttTable:EMPTY-TEMP-TABLE ().
  1145. CREATE QUERY hQuery.
  1146. // cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere) NO-ERROR.
  1147. // MESSAGE 'cWhere loaddate for ' cFileName '->' cWhere.
  1148. oJsonIdent:WriteFile('C:\TEMP\getData_oJsonIdent.json', TRUE ).
  1149. /* IF NOT oJsonIdent:HAS('search') THEN */
  1150. /* DO: */
  1151. /* outilitiesHandler:writeLastcWhere(*/
  1152. /* INPUT oJsonIdent , */
  1153. /* INPUT cFileName , */
  1154. /* INPUT cWhere */
  1155. /* ). */
  1156. /* END. */
  1157. //
  1158. // Für das Dynamische Query wird PRESELECT verwendet für die Pagination
  1159. //
  1160. iRetVal = fillTemptableFromTable(
  1161. OUTPUT oJsonReturn
  1162. ).
  1163. IF iRetVal <= 0 THEN
  1164. DO:
  1165. outilitiesHandler:createInfoBox(
  1166. INPUT oJsonIdent ,
  1167. INPUT '2009' ,
  1168. INPUT '' ,
  1169. OUTPUT oJsonMessageBox
  1170. ).
  1171. oJsonReturn:ADD('success', (IF iRetVal < 0 THEN FALSE ELSE TRUE)).
  1172. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  1173. // oJsonReturn:WriteFile('C:\TEMP\getData_nullRecords_return.json', TRUE).
  1174. RETURN lRetVal.
  1175. END.
  1176. lRetVal = httTable:FIND-FIRST('', NO-LOCK).
  1177. hFeld = httTable:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  1178. IF VALID-HANDLE(hFeld) AND
  1179. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', hFeld:BUFFER-VALUE).
  1180. oselectboxHandler:getVariableSelectBoxes(
  1181. INPUT oJsonIdent ,
  1182. OUTPUT oJsonSelectBoxes
  1183. ).
  1184. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1185. outilitiesHandler:writePosition(
  1186. INPUT oJsonIdent ,
  1187. INPUT cFileName ,
  1188. INPUT iCurrentPosition ,
  1189. INPUT iStartPage ,
  1190. INPUT iMaxRecords
  1191. ).
  1192. // oJsonReturn:WriteFile('C:\TEMP\addresses_getData_messages.json', TRUE).
  1193. lRetVal = TRUE.
  1194. RETURN lRetVal.
  1195. END METHOD.
  1196. /*------------------------------------------------------------------------------
  1197. Purpose:
  1198. Notes:
  1199. ------------------------------------------------------------------------------*/
  1200. METHOD PUBLIC LOGICAL getDataUnique(
  1201. OUTPUT oJsonReturn AS JsonObject
  1202. ):
  1203. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1204. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  1205. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1206. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1207. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1208. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1209. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1210. createTempTable().
  1211. MESSAGE cFileName.
  1212. outilitiesHandler:readLastRecord(
  1213. INPUT oJsonIdent ,
  1214. OUTPUT cUniqueWhere
  1215. ).
  1216. lOk = hBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
  1217. httTable:BUFFER-CREATE ().
  1218. httTable:BUFFER-COPY(hBuffer).
  1219. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1220. oJsonReturn = NEW JsonObject().
  1221. oJsonData = NEW JsonObject().
  1222. oJsonRecord = NEW JsonObject().
  1223. oJsonArray = NEW JsonArray ().
  1224. //
  1225. // den ersten Datensatz in der TEMP-TABLE lesen
  1226. //
  1227. hField = httTable:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  1228. IF VALID-HANDLE(hField) AND
  1229. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', httTable::language_id).
  1230. httTable:WRITE-JSON('JsonObject', oJsonData).
  1231. oJsonArray = oJsonData:GetJsonArray('record').
  1232. oJsonRecord = oJsonArray:GetJsonObject(1).
  1233. oselectboxHandler:getVariableSelectBoxes(
  1234. INPUT oJsonIdent ,
  1235. OUTPUT oJsonSelectBoxes
  1236. ).
  1237. lOk = TRUE.
  1238. oJsonReturn = NEW JsonObject().
  1239. oJsonReturn:ADD('success', lOK ).
  1240. oJsonReturn:ADD('record' , oJsonRecord).
  1241. IF VALID-OBJECT(oInfoRecord) THEN oJsonReturn:ADD('infoRecord' , oInfoRecord ).
  1242. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1243. DELETE OBJECT oJsonArray NO-ERROR.
  1244. DELETE OBJECT hBuffer NO-ERROR.
  1245. DELETE OBJECT ttTable NO-ERROR.
  1246. RETURN lOK.
  1247. END METHOD.
  1248. /*------------------------------------------------------------------------------
  1249. Purpose:
  1250. Notes:
  1251. ------------------------------------------------------------------------------*/
  1252. METHOD PUBLIC LOGICAL rebuildData(
  1253. OUTPUT oJsonReturn AS JsonObject
  1254. ):
  1255. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  1256. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1257. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
  1258. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1259. DEFINE VARIABLE cAddress AS CHARACTER NO-UNDO.
  1260. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1261. DEFINE VARIABLE cFormUser AS CHARACTER NO-UNDO.
  1262. DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  1263. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1264. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  1265. DEFINE VARIABLE oJsonEditable AS JsonArray NO-UNDO.
  1266. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  1267. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1268. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1269. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1270. outilitiesHandler:readLastRecord(
  1271. INPUT oJsonIdent ,
  1272. OUTPUT cUniqueWhere
  1273. ).
  1274. CREATE BUFFER hUniqueBuffer FOR TABLE cFileName.
  1275. hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK).
  1276. rBuffer = hUniqueBuffer:RECID.
  1277. oJsonIdent:ADD('rBuffer', INT64(rBuffer)).
  1278. IF oJsonIdent:HAS('search') THEN
  1279. DO:
  1280. oJsonIdent:Remove('search') NO-ERROR.
  1281. oJsonIdent:SET('lSearch', FALSE) NO-ERROR.
  1282. END.
  1283. buildWhere().
  1284. MESSAGE 'cWhere nach buildwhere in rebuilddate' cWhere.
  1285. outilitiesHandler:evaluatePageNumber(
  1286. INPUT-OUTPUT oJsonIdent ,
  1287. INPUT cWhere ,
  1288. INPUT rBuffer ,
  1289. INPUT 'current'
  1290. ).
  1291. MESSAGE 'cWhere bei Rebuild' cWhere.
  1292. // createTempTable().
  1293. iAnzRec = fillTemptableFromTable(
  1294. OUTPUT oJsonReturn
  1295. ).
  1296. /* hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.*/
  1297. /* outilitiesHandler:evaluateErrorStatus(hError).*/
  1298. oJsonIdent:SET('language_id', hUniqueBuffer::language_id).
  1299. oselectboxHandler:getVariableSelectBoxes(
  1300. INPUT oJsonIdent ,
  1301. OUTPUT oJsonSelectBoxes
  1302. ).
  1303. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1304. lRetVal = TRUE.
  1305. RETURN lRetVal.
  1306. END METHOD.
  1307. /*------------------------------------------------------------------------------
  1308. Purpose:
  1309. Notes:
  1310. ------------------------------------------------------------------------------*/
  1311. METHOD PUBLIC LOGICAL recordChange(
  1312. INPUT oJsonData AS JsonObject ,
  1313. OUTPUT oJsonReturn AS JsonObject
  1314. ):
  1315. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1316. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  1317. DEFINE VARIABLE cBufferField AS CHARACTER NO-UNDO.
  1318. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1319. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1320. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1321. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1322. // DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  1323. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1324. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1325. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  1326. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1327. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1328. createTempTable().
  1329. oJsonRecord = NEW JsonObject().
  1330. oJsonRecord = oJsonData:GetJsonObject('record').
  1331. // oJsonRecord:WriteFile('C:\Temp\RecordChange_record.json', TRUE).
  1332. httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
  1333. outilitiesHandler:evaluateErrorStatus(hError).
  1334. //
  1335. // den ersten Datensatz in der TEMP-TABLE lesen
  1336. //
  1337. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1338. hField = httTable:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  1339. IF VALID-HANDLE(hField) AND
  1340. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', httTable::language_id).
  1341. //
  1342. // Erzeugen von Where-Statement für UNIQUE-Find
  1343. //
  1344. createUniqueWhere(
  1345. INPUT httTable,
  1346. OUTPUT cUniqueWhere
  1347. ).
  1348. outilitiesHandler:writeLastRecord(
  1349. INPUT oJsonIdent ,
  1350. INPUT cUniqueWhere
  1351. ).
  1352. hBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK).
  1353. httTable:EMPTY-TEMP-TABLE ().
  1354. httTable:BUFFER-CREATE ().
  1355. httTable:BUFFER-COPY (hBuffer).
  1356. DELETE OBJECT oJsonRecord.
  1357. oJsonRecord = NEW JsonObject().
  1358. oJsonArray = NEW JsonArray().
  1359. httTable:WRITE-JSON('JsonObject', oJsonRecord).
  1360. oJsonArray = oJsonRecord:GetJsonArray('record').
  1361. oJsonRecord = oJsonArray:GetJsonObject(1).
  1362. oselectboxHandler:getVariableSelectBoxes(
  1363. INPUT oJsonIdent ,
  1364. OUTPUT oJsonSelectBoxes
  1365. ).
  1366. lOk = TRUE.
  1367. oJsonReturn = NEW JsonObject().
  1368. oJsonReturn:ADD('success', lOK ).
  1369. oJsonReturn:ADD('record' , oJsonRecord).
  1370. IF VALID-OBJECT(oInfoRecord) THEN oJsonReturn:ADD('infoRecord', oInfoRecord ).
  1371. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1372. // oJsonReturn:WriteFile(SUBSTITUTE('C:\Temp\RecordChange_&1_return.json', cFileName), TRUE).
  1373. DELETE OBJECT ttTable NO-ERROR.
  1374. DELETE OBJECT hBuffer NO-ERROR.
  1375. DELETE OBJECT oJsonArray NO-ERROR.
  1376. RETURN lOK.
  1377. END METHOD.
  1378. /*------------------------------------------------------------------------------
  1379. Purpose:
  1380. Notes:
  1381. ------------------------------------------------------------------------------*/
  1382. METHOD PUBLIC LOGICAL updateBegin(
  1383. INPUT oJsonData AS JsonObject ,
  1384. OUTPUT oJsonReturn AS JsonObject
  1385. ):
  1386. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1387. DEFINE VARIABLE lAddressFix AS LOGICAL NO-UNDO.
  1388. DEFINE VARIABLE oJsonAction AS JsonArray NO-UNDO.
  1389. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1390. iFormTabIndex = (IF oJsonIdent:HAS('formTabIndex') THEN INTEGER(oJsonIdent:GetCharacter('formTabIndex')) ELSE 1).
  1391. cFileName = oJsonIdent:GetCharacter('file_name').
  1392. oJsonRecord = NEW JsonObject().
  1393. oJsonRecord = oJsonData:GetJsonObject('record').
  1394. oJsonReturn = NEW JsonObject().
  1395. oJsonReturn:ADD('success', TRUE).
  1396. oJsonReturn:ADD('record', oJsonRecord).
  1397. oJsonAction = NEW JsonArray().
  1398. FOR EACH ttPrimaryIndex NO-LOCK:
  1399. oJsonAction:ADD(SUBSTITUTE('&1_&2', cFileName, ttPrimaryIndex.cFieldName)).
  1400. END.
  1401. oJsonReturn:ADD('disabledFields', oJsonAction).
  1402. lRetVal = TRUE.
  1403. RETURN lRetVal.
  1404. END METHOD.
  1405. /*------------------------------------------------------------------------------
  1406. Purpose:
  1407. Notes:
  1408. ------------------------------------------------------------------------------*/
  1409. METHOD PUBLIC LOGICAL updateData(
  1410. INPUT oJsonData AS jsonObject,
  1411. OUTPUT oJsonReturn AS JsonObject
  1412. ):
  1413. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  1414. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1415. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1416. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  1417. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1418. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1419. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1420. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  1421. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1422. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  1423. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  1424. oJsonRecord = NEW JsonObject().
  1425. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  1426. // oJsonRecord:WriteFile('C:\TEMP\createAnschrift_record.json', TRUE).
  1427. oMasterKeyFields = NEW JsonObject().
  1428. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  1429. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1430. createTempTable().
  1431. oJsonRecord:Write(lcttTable, FALSE).
  1432. // MESSAGE STRING(lcttTable).
  1433. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  1434. outilitiesHandler:evaluateErrorStatus(hError).
  1435. httTable:FIND-FIRST('', NO-LOCK).
  1436. // MESSAGE 'e'.
  1437. //
  1438. // Erzeugen von Where-Statement für UNIQUE-Find
  1439. //
  1440. createUniqueWhere(
  1441. INPUT httTable,
  1442. OUTPUT cUniqueWhere
  1443. ).
  1444. // MESSAGE cUniqueWhere.
  1445. lRetVal = FALSE.
  1446. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1447. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, EXCLUSIVE-LOCK, NO-WAIT) NO-ERROR.
  1448. IF hBuffer:LOCKED THEN
  1449. DO:
  1450. hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  1451. rBuffer = hBuffer:RECID.
  1452. outilitiesHandler:createLockMessage(
  1453. INPUT oJsonIdent,
  1454. INPUT rBuffer ,
  1455. OUTPUT oJsonMessageBox
  1456. ).
  1457. oJsonReturn = NEW JsonObject().
  1458. oJsonReturn:ADD('success' , TRUE ).
  1459. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  1460. RETURN TRUE.
  1461. END.
  1462. IF NOT lOK THEN
  1463. DO:
  1464. outilitiesHandler:createErrorBox(
  1465. INPUT oJsonIdent ,
  1466. INPUT '2000' ,
  1467. INPUT '' ,
  1468. OUTPUT oJsonMessageBox
  1469. ).
  1470. oJsonReturn = NEW JsonObject().
  1471. oJsonReturn:ADD('success' , TRUE ).
  1472. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  1473. RETURN TRUE.
  1474. END.
  1475. rBuffer = hBuffer:RECID.
  1476. DO WHILE lActive :
  1477. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  1478. IF NOT VALID-HANDLE(hField) THEN LEAVE.
  1479. IF hField:BUFFER-VALUE = TRUE THEN LEAVE.
  1480. htField = httTable:BUFFER-FIELD('active') NO-ERROR.
  1481. IF NOT VALID-HANDLE(htField) THEN LEAVE.
  1482. IF hField:BUFFER-VALUE = FALSE AND htField:BUFFER-VALUE = TRUE THEN LEAVE.
  1483. outilitiesHandler:createQuestionBox(
  1484. INPUT oJsonIdent ,
  1485. INPUT '2000' ,
  1486. INPUT '' ,
  1487. INPUT 'active' ,
  1488. INPUT 'true' ,
  1489. INPUT hBuffer ,
  1490. OUTPUT oJsonMessageBox
  1491. ) NO-ERROR.
  1492. oJsonReturn = NEW JsonObject().
  1493. oJsonReturn:ADD('success' , TRUE ).
  1494. oJsonReturn:ADD('record' , oJsonRecord ).
  1495. oJsonReturn:ADD('askQuestion' , oJsonMessageBox ).
  1496. RETURN TRUE.
  1497. END.
  1498. lOK = hBuffer:BUFFER-COMPARE(httTable, 'case-sensitive') NO-ERROR.
  1499. hBuffer:BUFFER-COPY(httTable) NO-ERROR.
  1500. outilitiesHandler:evaluateErrorStatus(hError).
  1501. // MESSAGE 'compare ergab' lOK.
  1502. hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
  1503. IF NOT ERROR-STATUS:ERROR AND
  1504. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = NOW.
  1505. hField = hBuffer:BUFFER-FIELD('updated_by'):HANDLE NO-ERROR.
  1506. IF NOT ERROR-STATUS:ERROR AND
  1507. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  1508. oJsonData = NEW JsonObject().
  1509. oJsonArray = NEW JsonArray ().
  1510. httTable:BUFFER-COPY(hBuffer).
  1511. httTable:WRITE-JSON('JsonObject', oJsonData).
  1512. oJsonArray = oJsonData:GetJsonArray('record').
  1513. oJsonData = oJsonArray:GetJsonObject(1).
  1514. hBuffer:BUFFER-RELEASE ().
  1515. lRetVal = TRUE.
  1516. LEAVE.
  1517. END.
  1518. IF lWordIndex THEN fillWordIndexTable().
  1519. IF lRetVal THEN
  1520. DO:
  1521. oJsonReturn = NEW JsonObject().
  1522. oJsonReturn:ADD('success', TRUE ).
  1523. oJsonReturn:ADD('record' , oJsonData).
  1524. outilitiesHandler:createInfoBox(
  1525. INPUT oJsonIdent ,
  1526. INPUT '2003' ,
  1527. INPUT '' ,
  1528. OUTPUT oJsonMessageBox
  1529. ) NO-ERROR.
  1530. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  1531. RETURN TRUE.
  1532. END.
  1533. IF NOT lRetVal THEN
  1534. DO:
  1535. oJsonMessage = NEW JsonObject().
  1536. oJsonMessage:ADD('success', FALSE).
  1537. oJsonMessage:ADD('message', lcMessage).
  1538. oJsonMessage:WRITE(lcJsonString, FALSE).
  1539. oJsonReturn = oJsonMessage.
  1540. RETURN TRUE.
  1541. END.
  1542. CATCH e AS Progress.Lang.Error:
  1543. END CATCH.
  1544. FINALLY:
  1545. END FINALLY.
  1546. END METHOD.
  1547. DESTRUCTOR PUBLIC adminprogsHandler ( ):
  1548. END DESTRUCTOR.
  1549. END CLASS.