usersHandler.cls 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
  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 Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  15. USING OpenEdge.DataAdmin.IIndex FROM PROPATH.
  16. CLASS admin.usersHandler FINAL:
  17. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
  18. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  19. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  20. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  21. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  22. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  23. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO INIT 5.
  24. DEFINE VARIABLE iStartPage AS INTEGER NO-UNDO.
  25. DEFINE VARIABLE iStartRecord AS INTEGER NO-UNDO.
  26. DEFINE VARIABLE iPageCounter AS INTEGER NO-UNDO.
  27. DEFINE VARIABLE httusers AS HANDLE NO-UNDO.
  28. DEFINE VARIABLE ttusers AS HANDLE NO-UNDO.
  29. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  30. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  31. DEFINE BUFFER busers FOR users.
  32. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  33. /*------------------------------------------------------------------------------
  34. Purpose:
  35. Notes:
  36. ------------------------------------------------------------------------------*/
  37. METHOD PUBLIC LOGICAL createData(
  38. INPUT oJsonIdent AS JsonObject,
  39. INPUT oJsonRecord AS jsonObject,
  40. OUTPUT oJsonReturn AS JsonObject
  41. ):
  42. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  43. DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
  44. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  45. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  46. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  47. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  48. DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  50. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  51. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  52. outilitiesHandler = NEW utilitiesHandler().
  53. CREATE TEMP-TABLE ttusers.
  54. ttusers:ADD-FIELDS-FROM ('users', 'wordindex'). /* except Field wordindex */
  55. ttusers:TEMP-TABLE-PREPARE ('record').
  56. httusers = ttusers:DEFAULT-BUFFER-HANDLE.
  57. DO ii = 1 TO httusers:NUM-FIELDS:
  58. httusers:BUFFER-FIELD(ii):SERIALIZE-NAME = 'users_' + httusers:BUFFER-FIELD(ii):NAME NO-ERROR.
  59. END.
  60. httusers:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
  61. httusers:FIND-FIRST('', NO-LOCK).
  62. hBuffer = BUFFER busers:HANDLE.
  63. cuser_name = httusers:BUFFER-FIELD('user_name'):BUFFER-VALUE.
  64. lRetVal = FALSE.
  65. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  66. FIND FIRST users NO-LOCK
  67. WHERE users.user_name = cuser_name NO-ERROR.
  68. IF AVAILABLE users THEN LEAVE.
  69. CREATE busers.
  70. hBuffer = BUFFER busers:HANDLE.
  71. DO ii = 1 TO httusers:NUM-FIELDS:
  72. // IF httusers:BUFFER-FIELD(ii):BUFFER-VALUE = hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE THEN NEXT.
  73. hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = httusers:BUFFER-FIELD(ii):BUFFER-VALUE.
  74. END.
  75. busers.created_at = NOW.
  76. cWordIndex = outilitiesHandler:createWordindex(
  77. INPUT hBuffer
  78. ).
  79. busers.wordindex = cWordIndex.
  80. oJsonReturn = NEW JsonObject().
  81. oJsonData = NEW JsonObject().
  82. oJsonArray = NEW JsonArray ().
  83. httusers:BUFFER-COPY(hBuffer).
  84. httusers:WRITE-JSON('JsonObject', oJsonData).
  85. oJsonArray = oJsonData:GetJsonArray('record').
  86. oJsonData = oJsonArray:GetJsonObject(1).
  87. oJsonReturn:ADD('record', oJsonData).
  88. RELEASE busers.
  89. FIND userdata
  90. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  91. AND userdata.company = oJsonIdent:GetCharacter('company')
  92. AND userdata.branch = '0000'
  93. AND userdata.record_type = 'sortField'
  94. AND userdata.section = 'users'
  95. AND userdata.key_type = '' NO-ERROR.
  96. IF AVAILABLE userdata THEN
  97. DO:
  98. ASSIGN
  99. cSortField = userdata.cfield_1
  100. cDirection = userdata.cfield_2.
  101. END.
  102. IF cDirection BEGINS 'asc' THEN cDirection = ''.
  103. hBuffer = BUFFER users:HANDLE.
  104. CREATE QUERY hQuery.
  105. hQuery:SET-BUFFERS (hBuffer).
  106. cWhere = 'FOR EACH users NO-LOCK '.
  107. IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
  108. hQuery:QUERY-PREPARE(cWhere).
  109. hQuery:QUERY-OPEN().
  110. hQuery:GET-FIRST().
  111. ii = 0.
  112. i1 = 0.
  113. DO WHILE NOT hQuery:QUERY-OFF-END:
  114. ii = ii + 1.
  115. IF hBuffer:BUFFER-FIELD('user_name'):BUFFER-VALUE = cuser_name THEN i1 = ii.
  116. hQuery:GET-NEXT ().
  117. END.
  118. hQuery:QUERY-CLOSE ().
  119. iPageCounter = i1 / iMaxRecords.
  120. IF (iPageCounter * iMaxRecords) < i1 THEN iPageCounter = iPageCounter + 1.
  121. iIndex = i1 MOD iMaxRecords.
  122. IF iIndex = 0 THEN iIndex = iMaxRecords.
  123. oJsonPosition = NEW JsonObject().
  124. oJsonPosition:ADD('page', iPageCounter).
  125. oJsonPosition:ADD('index', iIndex - 1). /* -1 weil in Java beginnt Index bei 0 */
  126. oJsonPosition:ADD('totalRecords', ii).
  127. oJsonReturn:ADD('position', oJsonPosition).
  128. lRetVal = TRUE.
  129. LEAVE.
  130. END.
  131. IF NOT lRetVal THEN
  132. DO:
  133. oJsonMessage = NEW JsonObject().
  134. oJsonMessage:ADD('success', FALSE).
  135. oJsonMessage:WRITE(lcJsonString, FALSE).
  136. END.
  137. RETURN lRetVal.
  138. CATCH e AS Progress.Lang.Error:
  139. END CATCH.
  140. FINALLY:
  141. END FINALLY.
  142. END METHOD.
  143. /*------------------------------------------------------------------------------
  144. Purpose:
  145. Notes:
  146. ------------------------------------------------------------------------------*/
  147. METHOD PUBLIC LOGICAL deleteData(
  148. INPUT oJsonIdent AS JsonObject,
  149. INPUT oJsonRecord AS jsonObject,
  150. OUTPUT oJsonReturn AS JsonObject
  151. ):
  152. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  153. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  154. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  155. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  156. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  157. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  158. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  159. DEFINE VARIABLE rUsers AS RECID NO-UNDO.
  160. DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
  161. outilitiesHandler = NEW utilitiesHandler().
  162. CREATE TEMP-TABLE ttusers.
  163. ttusers:ADD-FIELDS-FROM ('users', 'wordindex'). /* except Field wordindex */
  164. ttusers:TEMP-TABLE-PREPARE ('record').
  165. httusers = ttusers:DEFAULT-BUFFER-HANDLE.
  166. DO ii = 1 TO httusers:NUM-FIELDS:
  167. httusers:BUFFER-FIELD(ii):SERIALIZE-NAME = 'users_' + httusers:BUFFER-FIELD(ii):NAME NO-ERROR.
  168. END.
  169. httusers:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
  170. httusers:FIND-FIRST('', NO-LOCK).
  171. hBuffer = BUFFER busers:HANDLE.
  172. cuser_name = httusers:BUFFER-FIELD('user_name'):BUFFER-VALUE.
  173. lRetVal = FALSE.
  174. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  175. FIND FIRST users NO-LOCK
  176. WHERE users.user_name = cuser_name NO-ERROR.
  177. IF NOT AVAILABLE users THEN LEAVE.
  178. rUsers = RECID(users).
  179. FIND userdata
  180. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  181. AND userdata.company = oJsonIdent:GetCharacter('company')
  182. AND userdata.branch = '0000'
  183. AND userdata.record_type = 'sortField'
  184. AND userdata.section = 'users'
  185. AND userdata.key_type = '' NO-ERROR.
  186. IF AVAILABLE userdata THEN
  187. DO:
  188. ASSIGN
  189. cSortField = userdata.cfield_1
  190. cDirection = userdata.cfield_2.
  191. END.
  192. IF cDirection BEGINS 'asc' THEN cDirection = ''.
  193. hBuffer = BUFFER users:HANDLE.
  194. CREATE QUERY hQuery.
  195. hQuery:SET-BUFFERS (hBuffer).
  196. cWhere = 'FOR EACH users NO-LOCK '.
  197. IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
  198. hQuery:QUERY-PREPARE(cWhere).
  199. hQuery:QUERY-OPEN().
  200. hQuery:GET-FIRST().
  201. ii = 0.
  202. i1 = 0.
  203. DO WHILE NOT hQuery:QUERY-OFF-END:
  204. ii = ii + 1.
  205. IF hBuffer:BUFFER-FIELD('user_name'):BUFFER-VALUE = cuser_name THEN i1 = ii.
  206. hQuery:GET-NEXT ().
  207. END.
  208. hQuery:QUERY-CLOSE ().
  209. iPageCounter = i1 / iMaxRecords.
  210. IF (iPageCounter * iMaxRecords) < i1 THEN iPageCounter = iPageCounter + 1.
  211. iIndex = i1 MOD iMaxRecords.
  212. IF iIndex = 0 THEN iIndex = iMaxRecords.
  213. FIND users WHERE RECID(users) = rUsers.
  214. DELETE users.
  215. RELEASE users.
  216. lRetVal = TRUE.
  217. oJsonReturn = NEW JsonObject().
  218. oJsonReturn:ADD('success', lRetVal).
  219. oJsonPosition = NEW JsonObject().
  220. oJsonPosition:ADD('page', iPageCounter).
  221. oJsonPosition:ADD('index', iIndex - 1). /* -1 weil in Java beginnt Index bei 0 */
  222. oJsonPosition:ADD('totalRecords', ii).
  223. oJsonReturn:ADD('position', oJsonPosition).
  224. LEAVE.
  225. END.
  226. RETURN lRetVal.
  227. CATCH e AS Progress.Lang.Error:
  228. END CATCH.
  229. FINALLY:
  230. END FINALLY.
  231. END METHOD.
  232. /*------------------------------------------------------------------------------
  233. Purpose:
  234. Notes:
  235. ------------------------------------------------------------------------------*/
  236. METHOD PUBLIC LOGICAL getChanges(
  237. INPUT oJsonIdent AS JsonObject,
  238. OUTPUT oJsonResult AS JsonObject
  239. ):
  240. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  241. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  242. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  243. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  244. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  245. DEFINE VARIABLE cKeyFields AS CHARACTER NO-UNDO.
  246. DEFINE VARIABLE cKeyValues AS CHARACTER NO-UNDO.
  247. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  248. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  249. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  250. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  251. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  252. DEFINE VARIABLE oJsonfieldUpdates AS JsonObject NO-UNDO.
  253. outilitiesHandler = NEW utilitiesHandler().
  254. cField = oJsonIdent:GetCharacter('field').
  255. cAction = oJsonIdent:GetCharacter('action').
  256. cValue = REPLACE(oJsonIdent:GetCharacter('value'), '+', ' ').
  257. oJsonResult = NEW JsonObject().
  258. oJsonFieldUpdates = NEW JsonObject().
  259. lRetVal = outilitiesHandler:getKeyFields(
  260. INPUT oJsonIdent ,
  261. OUTPUT cKeyFields ,
  262. OUTPUT cKeyValues
  263. ).
  264. cWhere = ''.
  265. lRetVal = FALSE.
  266. DO WHILE TRUE:
  267. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  268. cWhere = cWhere
  269. + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ' )
  270. + SUBSTITUTE('busers.&1 = &2 ',
  271. REPLACE(ENTRY(i1, cKeyFields, ';'), 'users_', ''),
  272. ENTRY(i1, cKeyValues, CHR(01))).
  273. END.
  274. MESSAGE cWhere.
  275. hBuffer = BUFFER busers:HANDLE.
  276. lRetVal = hBuffer:FIND-UNIQUE(cWhere, NO-LOCK) NO-ERROR.
  277. IF lRetVal THEN
  278. DO:
  279. CASE cField:
  280. WHEN 'users_firstname' THEN
  281. DO:
  282. IF hBuffer::display_Name = '' THEN
  283. DO:
  284. cString = cValue + ' ' + hBuffer::lastname.
  285. oJsonfieldUpdates:ADD('users_display_name', cString).
  286. END.
  287. IF hBuffer::initials = '' THEN
  288. DO:
  289. cString = TRIM(SUBSTRING(cValue,01,02)) + TRIM(SUBSTRING(hBuffer::lastname,01,02)).
  290. oJsonfieldUpdates:ADD('users_initials', cString).
  291. END.
  292. END.
  293. END CASE.
  294. oJsonResult:ADD('fieldUpdates', oJsonfieldUpdates).
  295. END.
  296. lRetVal = TRUE.
  297. LEAVE.
  298. END.
  299. IF NOT lRetVal THEN
  300. DO:
  301. oJsonResult = NEW JsonObject().
  302. oJsonResult:ADD('success', FALSE).
  303. oJsonResult:ADD('message', 'Fehler beim change').
  304. END.
  305. RETURN lRetVal.
  306. END METHOD.
  307. /*------------------------------------------------------------------------------
  308. Purpose:
  309. Notes:
  310. ------------------------------------------------------------------------------*/
  311. METHOD PUBLIC LOGICAL getData(
  312. INPUT oJsonIdent AS JsonObject,
  313. OUTPUT oJsonReturn AS JsonObject
  314. ):
  315. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  316. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  317. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  318. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO INIT ''.
  319. DEFINE VARIABLE cSearchChars AS CHARACTER NO-UNDO INIT ''.
  320. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  321. DEFINE VARIABLE lWordIndex AS LOGICAL NO-UNDO INIT FALSE.
  322. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  323. DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO.
  324. DEFINE VARIABLE cFilter AS CHARACTER NO-UNDO.
  325. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO EXTENT.
  326. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  327. DEFINE VARIABLE cDBField AS CHARACTER NO-UNDO.
  328. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  329. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  330. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  331. CREATE BUFFER hBuffer FOR TABLE 'users'.
  332. cuser_name = oJsonIdent:GetCharacter('user_name').
  333. ccompany = oJsonIdent:GetCharacter('company').
  334. cSortField = ''.
  335. cDirection = ''.
  336. iStartPage = 1.
  337. IF oJsonIdent:HAS('page') THEN iStartPage = INTEGER(oJsonIdent:GetCharacter('page')) NO-ERROR.
  338. iStartRecord = ((iStartPage - 1) * iMaxRecords) + 1.
  339. IF oJsonIdent:HAS('search') THEN
  340. DO:
  341. cSearchChars = oJsonIdent:GetCharacter('search').
  342. lWordIndex = TRUE.
  343. /* iMaxRecords = 100.*/
  344. /* cSortField = ''. */
  345. iStartRecord = 1.
  346. END.
  347. IF lWordIndex THEN
  348. DO:
  349. DO ii = 1 TO NUM-ENTRIES(cSearchChars):
  350. cValue = ENTRY(ii, cSearchChars, ' ').
  351. cWhere = cWhere + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
  352. + 'LOOKUP(' + QUOTER(cValue) + ', users.wordindex, " ") > 0 '.
  353. END.
  354. END.
  355. ELSE
  356. DO:
  357. IF oJsonIdent:HAS('sortField') THEN
  358. DO:
  359. cSortField = REPLACE(oJsonIdent:GetCharacter('sortField'), 'users_', '').
  360. cDirection = oJsonIdent:GetCharacter('sortDirection').
  361. END.
  362. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  363. FIND userdata
  364. WHERE userdata.user_name = cuser_name
  365. AND userdata.company = ccompany
  366. AND userdata.branch = '0000'
  367. AND userdata.record_type = 'sortField'
  368. AND userdata.section = 'users'
  369. AND userdata.key_type = '' NO-ERROR.
  370. IF NOT AVAILABLE userdata THEN
  371. DO:
  372. CREATE userdata.
  373. ASSIGN
  374. userdata.user_name = cuser_name
  375. userdata.company = ccompany
  376. userdata.branch = '0000'
  377. userdata.record_type = 'sortField'
  378. userdata.section = 'users'
  379. userdata.key_type = '' NO-ERROR.
  380. END.
  381. ASSIGN
  382. userdata.cfield_1 = cSortfield
  383. userdata.cfield_2 = cDirection.
  384. RELEASE userdata.
  385. LEAVE.
  386. END.
  387. cFields = oJsonIdent:GetNames().
  388. cWhere = ''.
  389. DO i1 = 1 TO EXTENT(cFields):
  390. cField = cFields[i1].
  391. IF NOT cField BEGINS 'filter_' THEN NEXT.
  392. cFilter = oJsonIdent:GetCharacter(cField).
  393. cField = REPLACE(cField, 'filter_users_', '').
  394. cType = hBuffer:BUFFER-FIELD(cField):DATA-TYPE.
  395. CASE cType:
  396. WHEN 'character' THEN
  397. cFilter = QUOTER(cFilter).
  398. WHEN 'logical' THEN
  399. cFilter = STRING(cFilter,'yes/no').
  400. WHEN 'date' THEN
  401. cFilter = STRING(DATE(cFilter),'99.99.9999').
  402. END CASE.
  403. cDBField = SUBSTITUTE('users.&1', cField).
  404. cWhere = cWhere
  405. + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
  406. + 'INDEX(' + cDBField + ', ' + cFilter + ') > 0 '.
  407. END.
  408. END.
  409. IF NOT cDirection BEGINS 'des' THEN cDirection = ''.
  410. IF cSortField <> '' THEN cWhere = cWhere + 'BY ' + cSortField + ' ' + cDirection.
  411. CREATE TEMP-TABLE ttusers.
  412. ttusers:ADD-FIELDS-FROM ('users', 'wordindex').
  413. IF cSortField <> '' THEN
  414. DO:
  415. ttusers:ADD-NEW-INDEX ('ttuser-k1', FALSE, TRUE). /* UNIQUE, PRIMARY */
  416. IF cDirection BEGINS 'des' THEN ttusers:ADD-INDEX-FIELD ('ttUser-k1', cSortField, 'desc').
  417. ELSE ttusers:ADD-INDEX-FIELD ('ttUser-k1', cSortField).
  418. END.
  419. ttusers:TEMP-TABLE-PREPARE ('records').
  420. httusers = ttusers:DEFAULT-BUFFER-HANDLE.
  421. DO ii = 1 TO httusers:NUM-FIELDS:
  422. httusers:BUFFER-FIELD(ii):SERIALIZE-NAME = 'users_' + httusers:BUFFER-FIELD(ii):NAME NO-ERROR.
  423. END.
  424. ii = 0.
  425. i1 = 0.
  426. ttusers:EMPTY-TEMP-TABLE ().
  427. CREATE QUERY hQuery.
  428. hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
  429. hQuery:QUERY-PREPARE (SUBSTITUTE('FOR EACH users NO-LOCK &1 ', cWhere)) NO-ERROR.
  430. hQuery:QUERY-OPEN ().
  431. hQuery:GET-FIRST ().
  432. DO WHILE NOT hQuery:QUERY-OFF-END:
  433. ii = ii + 1.
  434. IF ii < iStartRecord THEN
  435. DO:
  436. hQuery:GET-NEXT ().
  437. NEXT.
  438. END.
  439. i1 = i1 + 1.
  440. IF i1 <= iMaxRecords THEN
  441. DO:
  442. httusers:BUFFER-CREATE().
  443. httusers:BUFFER-COPY(hBuffer).
  444. END.
  445. hQuery:GET-NEXT ().
  446. END.
  447. hQuery:QUERY-CLOSE ().
  448. DELETE OBJECT hBuffer NO-ERROR.
  449. iPageCounter = ii / iMaxRecords.
  450. IF (iPageCounter * iMaxRecords) < ii THEN iPageCounter = iPageCounter + 1.
  451. oRecords = NEW JsonArray().
  452. httusers:WRITE-JSON('JsonArray', oRecords).
  453. oJsonReturn = NEW JsonObject().
  454. oJsonReturn:ADD('records' , oRecords).
  455. oJsonReturn:ADD('maxRecords', ii).
  456. oJsonReturn:ADD('pageCount' , iPageCounter).
  457. lRetVal = TRUE.
  458. RETURN lRetVal.
  459. END METHOD.
  460. /*------------------------------------------------------------------------------
  461. Purpose:
  462. Notes:
  463. ------------------------------------------------------------------------------*/
  464. METHOD PUBLIC LOGICAL updateData(
  465. INPUT oJsonIdent AS JsonObject,
  466. INPUT oJsonRecord AS jsonObject,
  467. OUTPUT oJsonReturn AS JsonObject
  468. ):
  469. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  470. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  471. DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
  472. outilitiesHandler = NEW utilitiesHandler().
  473. CREATE TEMP-TABLE ttusers.
  474. ttusers:ADD-FIELDS-FROM ('users', 'wordindex'). /* except Field wordindex */
  475. ttusers:TEMP-TABLE-PREPARE ('record').
  476. httusers = ttusers:DEFAULT-BUFFER-HANDLE.
  477. DO ii = 1 TO httusers:NUM-FIELDS:
  478. httusers:BUFFER-FIELD(ii):SERIALIZE-NAME = 'users_' + httusers:BUFFER-FIELD(ii):NAME NO-ERROR.
  479. END.
  480. httusers:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
  481. httusers:FIND-FIRST('', NO-LOCK).
  482. hBuffer = BUFFER busers:HANDLE.
  483. cuser_name = httusers:BUFFER-FIELD('user_name'):BUFFER-VALUE.
  484. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  485. FIND busers
  486. WHERE busers.user_name = cuser_name NO-ERROR.
  487. DO ii = 1 TO httusers:NUM-FIELDS:
  488. IF httusers:BUFFER-FIELD(ii):BUFFER-VALUE = hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE THEN NEXT.
  489. hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = httusers:BUFFER-FIELD(ii):BUFFER-VALUE.
  490. END.
  491. busers.updated_at = NOW.
  492. cWordIndex = outilitiesHandler:createWordindex(
  493. INPUT hBuffer
  494. ).
  495. busers.wordindex = cWordIndex.
  496. oJsonReturn = NEW JsonObject().
  497. oJsonData = NEW JsonObject().
  498. oJsonArray = NEW JsonArray ().
  499. httusers:BUFFER-COPY(hBuffer).
  500. httusers:WRITE-JSON('JsonObject', oJsonData).
  501. oJsonArray = oJsonData:GetJsonArray('record').
  502. oJsonData = oJsonArray:GetJsonObject(1).
  503. oJsonReturn:ADD('record', oJsonData).
  504. RELEASE busers.
  505. lRetVal = TRUE.
  506. LEAVE.
  507. END.
  508. RETURN lRetVal.
  509. CATCH e AS Progress.Lang.Error:
  510. END CATCH.
  511. FINALLY:
  512. END FINALLY.
  513. END METHOD.
  514. DESTRUCTOR PUBLIC usersHandler ( ):
  515. END DESTRUCTOR.
  516. END CLASS.