addressprogsHandler.cls 72 KB

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