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