adminprogsHandler.cls 62 KB

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