addressprogsHandler.cls 109 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615
  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 OpenEdge.DataAdmin.IIndex FROM PROPATH.
  12. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  13. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
  14. USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
  15. USING Progress.Json.ObjectModel.JsonConstruct FROM PROPATH.
  16. USING utilities.selectboxHandler FROM PROPATH.
  17. USING utilities.utilitiesHandler FROM PROPATH.
  18. USING src.ch.adprime.api.yourbarmate.beans.Response FROM PROPATH.
  19. CLASS 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 oRecords AS JsonArray NO-UNDO.
  24. DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
  25. DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
  26. DEFINE VARIABLE oJsonBoxContacts AS JsonObject NO-UNDO.
  27. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  28. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  29. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  30. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  31. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  32. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  33. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  34. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  35. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  36. DEFINE VARIABLE lWordIndex AS LOGICAL NO-UNDO.
  37. DEFINE VARIABLE lBoxFields AS LOGICAL NO-UNDO.
  38. DEFINE VARIABLE iFormTabIndex AS INTEGER NO-UNDO.
  39. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  40. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  41. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO INIT ''.
  42. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  43. DEFINE VARIABLE cFieldReplace AS CHARACTER NO-UNDO.
  44. DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
  45. DEFINE VARIABLE cFilterReplace AS CHARACTER NO-UNDO.
  46. DEFINE VARIABLE cFileReplace AS CHARACTER NO-UNDO.
  47. DEFINE VARIABLE cKeyFields AS CHARACTER NO-UNDO.
  48. DEFINE VARIABLE cKeyValues AS CHARACTER NO-UNDO.
  49. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  50. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  51. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  52. DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
  53. DEFINE VARIABLE iAddress_Id AS INT64 NO-UNDO.
  54. DEFINE VARIABLE hError AS HANDLE NO-UNDO.
  55. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  56. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  57. DEFINE VARIABLE cLastAddressWhere AS CHARACTER NO-UNDO.
  58. DEFINE VARIABLE hLastAddressBuff AS HANDLE NO-UNDO.
  59. DEFINE VARIABLE iAnzahlRecords AS INTEGER NO-UNDO.
  60. DEFINE VARIABLE iActualPage AS INTEGER NO-UNDO.
  61. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO INIT 20.
  62. DEFINE VARIABLE iStartPage AS INTEGER NO-UNDO.
  63. DEFINE VARIABLE iStartRecord AS INTEGER NO-UNDO.
  64. DEFINE VARIABLE iPageCounter AS INTEGER NO-UNDO.
  65. DEFINE VARIABLE iCurrentPosition AS INTEGER NO-UNDO.
  66. DEFINE VARIABLE cPrimaryKey AS CHARACTER NO-UNDO.
  67. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  68. DEFINE VARIABLE iStartIndex AS INTEGER NO-UNDO.
  69. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  70. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  71. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  72. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  73. DEFINE TEMP-TABLE ttKeyFields
  74. FIELD iIndex AS INTEGER
  75. FIELD cLongName AS CHARACTER
  76. FIELD cFieldName AS CHARACTER
  77. FIELD cFileName AS CHARACTER
  78. FIELD cValue AS CHARACTER
  79. FIELD cDataType AS CHARACTER
  80. FIELD lKeyfield AS LOGICAL
  81. INDEX ttKeyFields-k1 IS PRIMARY
  82. iIndex
  83. cFieldName
  84. .
  85. DEFINE VARIABLE httKeyFields AS HANDLE NO-UNDO.
  86. DEFINE TEMP-TABLE ttPrimaryIndex
  87. FIELD iIndex AS INTEGER
  88. FIELD cFieldName AS CHARACTER
  89. FIELD cFileName AS CHARACTER
  90. FIELD cValue AS CHARACTER
  91. FIELD cDataType AS CHARACTER
  92. INDEX ttPrimaryIndex-k1 IS PRIMARY
  93. iIndex
  94. cFieldName
  95. .
  96. DEFINE VARIABLE httPrimaryIndex AS HANDLE NO-UNDO.
  97. DEFINE TEMP-TABLE ttcommunication LIKE communication.
  98. DEFINE TEMP-TABLE ttWordIndexTable
  99. FIELD cFileName AS CHARACTER
  100. FIELD cFieldName AS CHARACTER
  101. FIELD cDataType AS CHARACTER
  102. FIELD cValue AS CHARACTER
  103. .
  104. DEFINE VARIABLE ttJsonIdent AS HANDLE NO-UNDO.
  105. DEFINE VARIABLE htt AS HANDLE NO-UNDO.
  106. DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
  107. DEFINE VARIABLE oselectboxHandler AS selectboxHandler NO-UNDO.
  108. /*------------------------------------------------------------------------------
  109. Purpose:
  110. Notes:
  111. ------------------------------------------------------------------------------*/
  112. CONSTRUCTOR PUBLIC addressprogsHandler ( ):
  113. SUPER ().
  114. hError = ERROR-STATUS:HANDLE.
  115. END CONSTRUCTOR.
  116. /*------------------------------------------------------------------------------
  117. Purpose:
  118. Notes:
  119. ------------------------------------------------------------------------------*/
  120. CONSTRUCTOR PUBLIC addressprogsHandler ( INPUT lcInput AS LONGCHAR, INPUT ipcFunction AS CHARACTER ):
  121. SUPER ().
  122. DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
  123. DEFINE VARIABLE oJsonCon AS JsonConstruct NO-UNDO.
  124. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO.
  125. DEFINE VARIABLE iItemsPage AS INTEGER NO-UNDO.
  126. DEFINE VARIABLE cMaxHeight AS CHARACTER NO-UNDO.
  127. DEFINE VARIABLE cOrigFileName AS CHARACTER NO-UNDO.
  128. hError = ERROR-STATUS:HANDLE.
  129. outilitiesHandler = NEW utilitiesHandler().
  130. oselectboxHandler = NEW selectboxHandler().
  131. oParser = NEW ObjectModelParser().
  132. oJsonCon = oParser:Parse(lcInput).
  133. oJsonIdent = CAST(oJsonCon, JsonObject).
  134. cProgram = oJsonIdent:GetCharacter('program').
  135. cUsers = oJsonIdent:GetCharacter('cUsers').
  136. iItemsPage = oJsonIdent:GetInteger ('itemsPerPage').
  137. cMaxHeight = oJsonIdent:GetCharacter('tableMaxHeight').
  138. httKeyFields = TEMP-TABLE ttKeyFields :DEFAULT-BUFFER-HANDLE.
  139. httPrimaryIndex = TEMP-TABLE ttPrimaryIndex:DEFAULT-BUFFER-HANDLE.
  140. IF oJsonIdent:HAS('limit') THEN oJsonIdent:SET('limit', iItemsPage).
  141. ELSE oJsonIdent:ADD('limit', iItemsPage).
  142. //
  143. // Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
  144. //
  145. IF oJsonIdent:HAS('file_name') THEN cFileName = oJsonIdent:GetCharacter('file_name').
  146. IF ipcFunction = 'loaddata' AND
  147. cFileName <> 'addresses' THEN
  148. DO:
  149. cOrigFileName = cFileName.
  150. oJsonIdent:SET('file_name', 'addresses') NO-ERROR .
  151. outilitiesHandler:readLastRecord(
  152. INPUT oJsonIdent,
  153. OUTPUT cLastAddressWhere
  154. ).
  155. CREATE BUFFER hLastAddressBuff FOR TABLE 'addresses'.
  156. hLastAddressBuff:FIND-UNIQUE(cLastAddressWhere, NO-LOCK).
  157. oJsonIdent:ADD(SUBSTITUTE('keyfield_&1_address_id', cFileName), STRING(hLastAddressBuff::address_id)).
  158. oJsonIdent:set('file_name', cOrigFileName).
  159. END.
  160. outilitiesHandler:evaluateFile(
  161. INPUT-OUTPUT oJsonIdent ,
  162. OUTPUT cFileName ,
  163. OUTPUT lCompany ,
  164. OUTPUT lActive ,
  165. OUTPUT lWordIndex ,
  166. INPUT-OUTPUT httKeyFields ,
  167. INPUT-OUTPUT httPrimaryIndex
  168. ).
  169. //
  170. // erstellen TEMP-TABLE aus oJsonObject mit dem HADLE htt
  171. //
  172. MESSAGE 'CONSTRUCTOR ipcFunction =' ipcFunction SKIP
  173. 'CONSTRUCTOR cFileName =' oJsonIdent:GetCharacter('file_name') '/' cFileName.
  174. /* IF ipcFunction = 'loaddata' AND */
  175. /* cFileName <> 'addresses' THEN DO: */
  176. /* cOrigFileName = cFileName. */
  177. /* oJsonIdent:SET('file_name', 'addresses') NO-ERROR . */
  178. /* outilitiesHandler:readLastRecord( */
  179. /* INPUT oJsonIdent, */
  180. /* OUTPUT cLastAddressWhere */
  181. /* ). */
  182. /* CREATE BUFFER hLastAddressBuff FOR TABLE 'addresses'. */
  183. /* hLastAddressBuff:FIND-UNIQUE(cLastAddressWhere, NO-LOCK). */
  184. /* oJsonIdent:ADD('keyfield_addresses_address_id', hLastAddressBuff::address_id).*/
  185. /* oJsonIdent:set('file_name', cOrigFileName). */
  186. /* END. */
  187. oJsonIdent:WriteFile(SUBSTITUTE('C:\TEMP\adressprogsHandler_contructore_&1_&2.json', ipcFunction, cFileName), TRUE).
  188. oJsonIdent:WRITE(lcInput, FALSE).
  189. // MESSAGE STRING(lcInput).
  190. CREATE TEMP-TABLE ttJsonIdent.
  191. ttJsonIdent:READ-JSON('longchar', lcInput, 'EMPTY').
  192. ttJsonIdent:SERIALIZE-NAME = 'oJsonData'.
  193. htt = ttJsonIdent:DEFAULT-BUFFER-HANDLE.
  194. htt:FIND-FIRST ('', NO-LOCK).
  195. ASSIGN
  196. cCompany = htt::company
  197. cUser_Name = htt::user_name
  198. iLanguage_id = htt::language_id
  199. cFileName = htt::file_name
  200. cFormId = htt::formId
  201. .
  202. CATCH e AS Progress.Lang.Error:
  203. END CATCH.
  204. FINALLY:
  205. END FINALLY.
  206. END CONSTRUCTOR.
  207. /*------------------------------------------------------------------------------
  208. Purpose:
  209. Notes:
  210. ------------------------------------------------------------------------------*/
  211. METHOD PUBLIC VOID buildWhere(
  212. ):
  213. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  214. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  215. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  216. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  217. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  218. DEFINE VARIABLE iNumerisch AS INTEGER NO-UNDO.
  219. DEFINE VARIABLE cSearchChars AS CHARACTER NO-UNDO INIT ''.
  220. DEFINE VARIABLE lSearch AS LOGICAL NO-UNDO.
  221. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO EXTENT.
  222. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  223. DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
  224. DEFINE VARIABLE cFilter AS CHARACTER NO-UNDO.
  225. DEFINE VARIABLE cDBField AS CHARACTER NO-UNDO.
  226. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  227. MESSAGE 'FileName in BuildWhere' cFileName.
  228. CREATE BUFFER hBuffer FOR TABLE cFileName.
  229. cSortField = ''.
  230. cDirection = ''.
  231. cWhere = ''.
  232. iStartPage = 1.
  233. iMaxRecords = 25.
  234. IF oJsonIdent:HAS('page') THEN iStartPage = INTEGER(oJsonIdent:GetCharacter('page')) NO-ERROR.
  235. IF oJsonIdent:HAS('limit') THEN iMaxRecords = INTEGER(oJsonIdent:GetCharacter('limit')) NO-ERROR.
  236. IF oJsonIdent:HAS('search') THEN
  237. DO:
  238. cSearchChars = oJsonIdent:GetCharacter('search').
  239. cSearchChars = REPLACE(cSearchChars, '+', ' ').
  240. lSearch = TRUE.
  241. iMaxRecords = 100.
  242. END.
  243. iStartRecord = ((iStartPage - 1) * iMaxRecords) + 1.
  244. cString = 'WHERE'.
  245. FOR EACH ttKeyFields NO-LOCK:
  246. IF lSearch THEN
  247. DO:
  248. IF ttKeyFields.iIndex > 1 AND
  249. ttKeyFields.iIndex < 99 THEN NEXT.
  250. END.
  251. IF ttKeyFields.cDataType = 'logical' AND ttKeyFields.cValue = '' THEN NEXT.
  252. CASE ttKeyFields.cDataType:
  253. WHEN 'integer' THEN
  254. cValue = ttKeyFields.cValue.
  255. WHEN 'int64' THEN
  256. cValue = ttKeyFields.cValue.
  257. WHEN 'decimal' THEN
  258. cValue = ttKeyFields.cValue.
  259. WHEN 'date' THEN
  260. cValue = STRING(DATE(ttKeyFields.cValue),'99.99.9999').
  261. WHEN 'logical' THEN
  262. cValue = STRING(LOGICAL(ttKeyFields.cValue),'true/false').
  263. WHEN 'character' THEN
  264. cValue = QUOTER(ttKeyFields.cValue).
  265. END CASE.
  266. IF ttKeyFields.lKeyfield OR ttKeyFields.cDataType = 'logical' THEN
  267. cWhere = cWhere + SUBSTITUTE('&1 &2.&3 = &4 ', cString, ttKeyFields.cFileName, ttKeyFields.cFieldName, cValue).
  268. ELSE
  269. DO:
  270. cWhere = cWhere + SUBSTITUTE('&1 INDEX(STRING(&2.&3), &4) > 0 ', cString, ttKeyFields.cFileName, ttKeyFields.cFieldName, QUOTER(STRING(cValue))).
  271. END.
  272. cString = 'AND'.
  273. END.
  274. //
  275. // Suche aus dem Suchfeld --> geht dann über Wordindex
  276. //
  277. IF lSearch THEN
  278. DO:
  279. DO ii = 1 TO NUM-ENTRIES(cSearchChars, ' '):
  280. cValue = ENTRY(ii, cSearchChars, ' ').
  281. iNumerisch = INTEGER(cValue) NO-ERROR.
  282. IF NOT ERROR-STATUS:ERROR THEN cValue = SUBSTITUTE('&1&2&1', CHR(01), TRIM(STRING(iNumerisch,'>>>>>>>>9-'))).
  283. cWhere = cWhere + (IF cWhere = '' THEN ' WHERE ' ELSE 'AND ').
  284. cWhere = cWhere + 'LOOKUP(' + QUOTER(cValue) + ', ' + cFileName + '.wordindex, " ") > 0 '.
  285. END.
  286. END.
  287. //
  288. // hat es Sortierfelder ?
  289. //
  290. outilitiesHandler:readSortFields(
  291. INPUT oJsonIdent ,
  292. INPUT cFileName ,
  293. OUTPUT cSortField ,
  294. OUTPUT cDirection
  295. ).
  296. IF cSortField <> '' THEN
  297. DO:
  298. IF cDirection BEGINS 'asc' THEN cDirection = ''.
  299. cWhere = cWhere + SUBSTITUTE(' BY &1 &2', cSortField, cDirection).
  300. END.
  301. // MESSAGE 'cWhere am Ende von BuildWhere =' cWhere.
  302. outilitiesHandler:writeLastcWhere(
  303. INPUT oJsonIdent ,
  304. INPUT cFileName ,
  305. INPUT cWhere
  306. ).
  307. createTempTable().
  308. RETURN.
  309. END METHOD.
  310. /*------------------------------------------------------------------------------
  311. Purpose:
  312. Notes:
  313. ------------------------------------------------------------------------------*/
  314. METHOD PUBLIC LOGICAL changeAnschrift(
  315. INPUT oJsonData AS JsonObject ,
  316. OUTPUT oJsonReturn AS JsonObject
  317. ):
  318. // MESSAGE 'START changeAnschrift'.
  319. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  320. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  321. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  322. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  323. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  324. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  325. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  326. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  327. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  328. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  329. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  330. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  331. oJsonRecord = NEW JsonObject().
  332. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  333. // oJsonRecord:WriteFile('C:\TEMP\createAnschrift_record.json', TRUE).
  334. oMasterKeyFields = NEW JsonObject().
  335. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  336. //
  337. // Input-Recors-Daten in ttTable lesen
  338. //
  339. createTempTable().
  340. oJsonRecord:Write(lcttTable, FALSE).
  341. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  342. outilitiesHandler:evaluateErrorStatus(hError).
  343. //
  344. // den ersten Datensatz in der TEMP-TABLE lesen
  345. //
  346. httTable:FIND-FIRST('', NO-LOCK).
  347. // httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_changeAnschrift_Inhalt.json', TRUE).
  348. IF oJsonIdent:HAS('formTabIndex') THEN iFormTabIndex = INTEGER(oJsonIdent:GetJsonText('formTabIndex')).
  349. // MESSAGE iFormTabIndex '-' cFileName '-' httTable::address_fix '-' httTable::first_name.
  350. IF iFormTabIndex = 1 AND
  351. cFileName = 'addresses' AND
  352. NOT httTable::address_fix THEN
  353. DO:
  354. oJsonIdent:SET('language_id', httTable::language_id).
  355. createAnschrift(
  356. INPUT-OUTPUT httTable
  357. ).
  358. END.
  359. lOK = httTable:WRITE-JSON ('JsonObject', oJsonRecord).
  360. lOk = TRUE.
  361. oJsonReturn = NEW JsonObject().
  362. oJsonReturn:ADD('success', lOK).
  363. oJsonArray = NEW JsonArray().
  364. oJsonArray = oJsonRecord:GetJsonArray('record').
  365. oJsonRecord = oJsonArray:GetJsonObject(1).
  366. oJsonReturn:ADD('record', oJsonRecord).
  367. oselectboxHandler:getVariableSelectBoxes(
  368. INPUT oJsonIdent,
  369. OUTPUT oJsonSelectBoxes
  370. ).
  371. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  372. //oJsonReturn:WriteFile('C:\Temp\changeAnschrift_return.json', TRUE).
  373. RETURN lOK.
  374. END METHOD.
  375. /*------------------------------------------------------------------------------
  376. Purpose:
  377. Notes:
  378. ------------------------------------------------------------------------------*/
  379. METHOD PUBLIC LOGICAL changeFixedAddress(
  380. INPUT oJsonData AS JsonObject ,
  381. OUTPUT oJsonReturn AS JsonObject
  382. ):
  383. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  384. DEFINE VARIABLE lAddressFix AS LOGICAL NO-UNDO.
  385. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  386. DEFINE VARIABLE oJsonAction AS JsonArray NO-UNDO.
  387. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  388. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  389. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  390. lAddressFix = LOGICAL(oJsonData:GetCharacter('changedValue')).
  391. oJsonAction = NEW JsonArray().
  392. oJsonAction:ADD('addresses_address').
  393. oJsonReturn = NEW JsonObject().
  394. IF lAddressFix THEN oJsonReturn:ADD('editableFields', oJsonAction).
  395. ELSE oJsonReturn:ADD('disabledFields', oJsonAction).
  396. lRetVal = TRUE.
  397. IF lAddressFix THEN RETURN lRetVal.
  398. cFunction = oJsonIdent:GetCharacter('function').
  399. cFileName = oJsonIdent:GetCharacter('file_name').
  400. createTempTable().
  401. oJsonRecord = NEW JsonObject().
  402. oJsonRecord = oJsonData:GetJsonObject('record').
  403. // oJsonRecord:WriteFile('C:\Temp\changefixedAddressoJsonRecord.json', TRUE).
  404. httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
  405. outilitiesHandler:evaluateErrorStatus(hError).
  406. // httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_changeFixedAddresses_Inhalt.json', TRUE).
  407. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  408. createAnschrift(
  409. INPUT-OUTPUT httTable
  410. ).
  411. lOK = httTable:WRITE-JSON ('JsonObject', oJsonRecord).
  412. lOk = TRUE.
  413. oJsonReturn:ADD('success', lOK).
  414. oJsonArray = NEW JsonArray().
  415. oJsonArray = oJsonRecord:GetJsonArray('record').
  416. oJsonRecord = oJsonArray:GetJsonObject(1).
  417. oJsonReturn:ADD('record', oJsonRecord).
  418. /* httTable:FIND-FIRST('', NO-LOCK). */
  419. /* oJsonIdent:SET('language_id', httTable::language_id).*/
  420. /* oselectboxHandler:getVariableSelectBoxes( */
  421. /* INPUT oJsonIdent, */
  422. /* OUTPUT oJsonSelectBoxes */
  423. /* ). */
  424. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  425. RETURN lRetVal.
  426. END METHOD.
  427. /*------------------------------------------------------------------------------
  428. Purpose:
  429. Notes:
  430. ------------------------------------------------------------------------------*/
  431. METHOD PUBLIC VOID createAnschrift(
  432. INPUT-OUTPUT hRecord AS HANDLE
  433. ):
  434. DEFINE VARIABLE cAdresse AS CHARACTER NO-UNDO EXTENT 12.
  435. DEFINE VARIABLE cBriefAnrede AS CHARACTER NO-UNDO.
  436. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  437. DEFINE VARIABLE iSalutationCode AS INTEGER NO-UNDO.
  438. DEFINE VARIABLE cCountryCode AS CHARACTER NO-UNDO.
  439. DEFINE VARIABLE cAdressDisplay AS CHARACTER NO-UNDO.
  440. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  441. IF hRecord::address_fix THEN RETURN.
  442. // MESSAGE 'start'.
  443. iLanguage_id = hRecord::language_id.
  444. iSalutationCode = hRecord::salutation_code.
  445. cCountryCode = hRecord::country_code.
  446. cAdresse = ''.
  447. cAdressDisplay = ''.
  448. FIND salutations NO-LOCK
  449. WHERE salutations.language_id = iLanguage_id
  450. AND salutations.salutation_code = iSalutationCode NO-ERROR.
  451. IF NOT AVAILABLE salutations AND
  452. iLanguage_id <> 1 THEN
  453. DO:
  454. FIND salutations NO-LOCK
  455. WHERE salutations.language_id = 1
  456. AND salutations.salutation_code = iSalutationCode NO-ERROR.
  457. END.
  458. FIND countries NO-LOCK
  459. WHERE countries.language_id = iLanguage_id
  460. AND countries.country_code = cCountryCode NO-ERROR.
  461. IF NOT AVAILABLE countries AND
  462. iLanguage_id <> 1 THEN
  463. DO:
  464. FIND countries NO-LOCK
  465. WHERE countries.language_id = 1
  466. AND countries.country_code = cCountryCode NO-ERROR.
  467. END.
  468. IF AVAILABLE countries THEN
  469. DO:
  470. DO ii = 1 TO 3:
  471. IF countries.country_code_pos = ii THEN
  472. DO:
  473. cAdresse[11] = cAdresse[11] + hRecord::country_code.
  474. IF ii = 1 THEN cAdresse[11] = cAdresse[11] + '-'.
  475. ELSE cAdresse[11] = cAdresse[11] + ' '.
  476. END.
  477. IF countries.postal_code_pos = ii THEN
  478. DO:
  479. cAdresse[11] = cAdresse[11] + hRecord::postal_code + ' '.
  480. END.
  481. IF countries.city_pos = ii THEN
  482. DO:
  483. cAdresse[11] = cAdresse[11] + hRecord::city + ' '.
  484. END.
  485. END.
  486. cAdresse[11] = TRIM(cAdresse[11]).
  487. IF countries.country_code_pos = 9 THEN cAdresse[12] = TRIM(countries.country_name).
  488. END.
  489. ii = 10.
  490. IF hRecord::po_box <> '' THEN cAdresse[ii] = hRecord::po_box.
  491. ELSE cAdresse[ii] = TRIM(hRecord::street + ' ' + hRecord::street_no).
  492. IF cAdresse[ii] <> '' THEN ii = ii - 1.
  493. cAdresse[ii] = TRIM(hRecord::additional_2).
  494. IF cAdresse[ii] <> '' THEN ii = ii - 1.
  495. cAdresse[ii] = TRIM(hRecord::additional_1).
  496. IF cAdresse[ii] <> '' THEN ii = ii - 1.
  497. cAdresse[ii] = TRIM(hRecord::address_title + ' ' + hRecord::first_name + ' ' + hRecord::last_name).
  498. IF cAdresse[ii] <> '' THEN
  499. DO:
  500. IF AVAILABLE salutations THEN
  501. DO:
  502. IF hRecord::company_name_1 <> '' THEN
  503. ASSIGN
  504. cAdresse[ii] = salutations.to_attention_of + ' ' + cAdresse[ii]
  505. cAdresse[ii] = TRIM(cAdresse[ii]).
  506. END.
  507. ii = ii - 1.
  508. END.
  509. cAdresse[ii] = TRIM(hRecord::company_name_2).
  510. IF cAdresse[ii] <> '' THEN ii = ii - 1.
  511. cAdresse[ii] = TRIM(hRecord::company_name_1).
  512. IF cAdresse[ii] <> '' THEN ii = ii - 1.
  513. IF hRecord::company_name_1 = '' AND AVAILABLE salutations THEN cAdresse[ii] = salutations.salutation.
  514. //hRecord::Address = ''.
  515. hField = hRecord:BUFFER-FIELD('address'):HANDLE.
  516. DO ii = 1 TO 12:
  517. // hRecord::address = hRecord::address + cAdresse[ii].
  518. hField:BUFFER-VALUE(ii) = cAdresse[ii].
  519. // IF ii < 12 THEN hRecord::address = hRecord::address + CHR(10).
  520. END.
  521. cBriefanrede = (IF AVAILABLE salutations THEN salutations.letterhead_business ELSE '').
  522. IF hRecord::last_name <> '' THEN cBriefanrede = TRIM(cBriefanrede + ' ' + hRecord::address_title + ' ' + hRecord::last_name).
  523. hRecord::letter_salutation = cBriefanrede.
  524. IF hRecord::company_name_1 <> ''
  525. THEN cAdressDisplay = cAdressDisplay
  526. + (IF cAdressDisplay = '' THEN '' ELSE ',' )
  527. + TRIM(hRecord::company_name_1 + ' ' + hRecord::company_name_2).
  528. IF hRecord::last_name <> ''
  529. THEN cAdressDisplay = cAdressDisplay
  530. + (IF cAdressDisplay = '' THEN '' ELSE ',' )
  531. + TRIM(hRecord::last_name + ' ' + hRecord::first_name).
  532. IF hRecord::street <> ''
  533. THEN cAdressDisplay = cAdressDisplay
  534. + (IF cAdressDisplay = '' THEN '' ELSE ',' )
  535. + TRIM(hRecord::street + ' ' + hRecord::street_no).
  536. cAdressDisplay = cAdressDisplay
  537. + (IF cAdressDisplay = '' THEN '' ELSE ',' )
  538. + TRIM(hRecord::country_code + '-' + hRecord::postal_code + ' ' + hRecord::city).
  539. hRecord::address_display = cAdressDisplay.
  540. RETURN.
  541. END METHOD.
  542. /*------------------------------------------------------------------------------
  543. Purpose:
  544. Notes:
  545. ------------------------------------------------------------------------------*/
  546. METHOD PUBLIC LOGICAL createBegin(
  547. INPUT oJsonData AS JsonObject ,
  548. OUTPUT oJsonReturn AS JsonObject
  549. ):
  550. MESSAGE "create begin".
  551. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  552. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  553. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  554. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  555. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  556. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  557. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  558. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  559. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  560. DEFINE VARIABLE cBufferField AS CHARACTER NO-UNDO.
  561. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  562. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  563. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  564. DEFINE VARIABLE iType AS INTEGER NO-UNDO.
  565. DEFINE VARIABLE iValue AS INTEGER NO-UNDO.
  566. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  567. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  568. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  569. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  570. // oJsonData:WriteFile('C:\TEMP\createBegin_jsondata_request.json', TRUE).
  571. oJsonRecord = NEW JsonObject().
  572. oJsonRecord = oJsonData:GetJsonObject('record').
  573. // oJsonRecord:WriteFile('C:\TEMP\createBegin_jsonrecord_request.json', TRUE).
  574. oMasterKeyFields = NEW JsonObject().
  575. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyfields') NO-ERROR.
  576. oMasterKeyFields:WriteFile(SUBSTITUTE('C:\TEMP\createBegin_MasterKeyFields_&1.json', cFileName), TRUE).
  577. CREATE BUFFER hBuffer FOR TABLE cFileName.
  578. createTempTable().
  579. oJsonRecord:Write(lcttTable, FALSE).
  580. // MESSAGE STRING(lcttTable).
  581. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  582. outilitiesHandler:evaluateErrorStatus(hError).
  583. httTable:FIND-FIRST('', NO-LOCK).
  584. IF lCompany THEN
  585. DO:
  586. httTable::company = cCompany.
  587. oJsonRecord:SET(SUBSTITUTE('&1_&2', cFileName, 'company'), oJsonIdent:GetCharacter('company')).
  588. END.
  589. hField = httTable:BUFFER-FIELD('created_at') NO-ERROR.
  590. IF NOT ERROR-STATUS:ERROR AND
  591. VALID-HANDLE(hField) THEN
  592. DO:
  593. hField:BUFFER-VALUE = NOW.
  594. IF INDEX(lcttTable, 'created_at') > 0 THEN oJsonRecord:SET(SUBSTITUTE('&1_&2', cFileName, 'created_at'), outilitiesHandler:date2iso(TODAY)).
  595. END.
  596. hField = httTable:BUFFER-FIELD('created_by') NO-ERROR.
  597. IF NOT ERROR-STATUS:ERROR AND
  598. VALID-HANDLE(hField) THEN
  599. DO:
  600. hField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  601. IF INDEX(lcttTable, 'created_by') > 0 THEN oJsonRecord:SET(SUBSTITUTE('&1_&2', cFileName, 'created_by'), oJsonIdent:GetCharacter('H_display_name')).
  602. END.
  603. /* oMasterKeyFields = NEW JsonObject(). */
  604. /* oMasterKeyFields = oJsonData:GetJsonObject('masterKeyfields').*/
  605. EXTENT(cFieldNames) = ?.
  606. cFieldNames = oMasterKeyFields:GetNames() NO-ERROR.
  607. DO ii = 1 TO EXTENT(cFieldNames):
  608. cField = cFieldNames[ii].
  609. cBufferField = cField.
  610. ENTRY(1, cBufferField, '_') = ''.
  611. cBufferField = SUBSTRING(cBufferField,02).
  612. hField = httTable:BUFFER-FIELD(cBufferField):HANDLE NO-ERROR.
  613. cType = hField:DATA-TYPE.
  614. lcString = oMasterKeyFields:GetJsonText(cField).
  615. CASE cType:
  616. WHEN 'integer' THEN
  617. hField:BUFFER-VALUE = INTEGER(lcString).
  618. WHEN 'int64' THEN
  619. hField:BUFFER-VALUE = INT64(lcString).
  620. WHEN 'logical' THEN
  621. hField:BUFFER-VALUE = LOGICAL(lcString).
  622. OTHERWISE
  623. hField:BUFFER-VALUE = lcString.
  624. END CASE.
  625. END.
  626. DELETE OBJECT oJsonRecord.
  627. oJsonRecord = NEW JsonObject().
  628. oJsonArray = NEW JsonArray().
  629. httTable:WRITE-JSON ('JsonObject', oJsonRecord).
  630. oJsonArray = oJsonRecord:GetJsonArray('record').
  631. oJsonRecord = oJsonArray:GetJsonObject(1).
  632. // oJsonRecord:WriteFile('C:\TEMP\createBegin_jsonrecord_response.json', TRUE).
  633. createInfoRecord(
  634. OUTPUT oInfoRecord
  635. ).
  636. oJsonReturn = NEW JsonObject().
  637. oJsonReturn:ADD('success', TRUE).
  638. oJsonReturn:add('record', oJsonRecord).
  639. IF VALID-OBJECT(oInfoRecord) THEN oJsonReturn:ADD('infoRecord', oInfoRecord).
  640. // oJsonReturn:WriteFile('C:\TEMP\createBegin_jsonreturn_response.json', TRUE).
  641. lRetVal = TRUE.
  642. RETURN lRetVal.
  643. END METHOD.
  644. /*------------------------------------------------------------------------------
  645. Purpose:
  646. Notes:
  647. ------------------------------------------------------------------------------*/
  648. METHOD PUBLIC LOGICAL createData(
  649. INPUT oJsonData AS jsonObject,
  650. OUTPUT oJsonReturn AS JsonObject
  651. ):
  652. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  653. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  654. DEFINE VARIABLE oJsonFieldErrors AS JsonObject NO-UNDO.
  655. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  656. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  657. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  658. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  659. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  660. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  661. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  662. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  663. DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  664. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  665. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  666. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  667. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  668. DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
  669. DEFINE VARIABLE hContact AS HANDLE NO-UNDO.
  670. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  671. oJsonRecord = NEW JsonObject().
  672. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  673. // oJsonRecord:WriteFile('C:\TEMP\createData_record.json', TRUE).
  674. oMasterKeyFields = NEW JsonObject().
  675. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  676. CREATE BUFFER hBuffer FOR TABLE cFileName.
  677. createTempTable().
  678. oJsonRecord:Write(lcttTable, FALSE).
  679. // MESSAGE STRING(lcttTable).
  680. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  681. outilitiesHandler:evaluateErrorStatus(hError).
  682. httTable:FIND-FIRST('', NO-LOCK).
  683. //
  684. // Anschrift und Briefanrede erstellen
  685. //
  686. iFormTabIndex = htt::FormTabIndex.
  687. IF iFormTabIndex = 1 AND
  688. cFileName = 'addresses' AND
  689. NOT httTable::address_fix THEN
  690. DO:
  691. createAnschrift(
  692. INPUT-OUTPUT httTable
  693. ).
  694. END.
  695. CASE cFileName:
  696. WHEN 'addresses' THEN
  697. DO:
  698. iAddress_Id = NEXT-VALUE(masterdata_id).
  699. httTable::address_id = iAddress_Id.
  700. FIND contact_persons
  701. WHERE contact_persons.company = cCompany
  702. AND contact_persons.address_Id = iAddress_Id
  703. AND contact_persons.contact_id = 0 NO-ERROR.
  704. IF NOT AVAILABLE contact_persons THEN
  705. DO:
  706. CREATE contact_persons.
  707. ASSIGN
  708. contact_persons.company = cCompany
  709. contact_persons.address_id = iAddress_Id
  710. contact_persons.contact_id = 0.
  711. END.
  712. hContact = BUFFER contact_persons:HANDLE.
  713. hContact:BUFFER-COPY(httTable, 'commpany,address_id,contact_id,created_at,created_by,updated_at,updated_by').
  714. contact_persons.created_at = NOW.
  715. contact_persons.created_by = oJsonIdent:GetCharacter('H_display_name').
  716. END.
  717. WHEN 'contact_persons' THEN
  718. DO:
  719. FIND LAST contact_persons NO-LOCK
  720. WHERE contact_persons.company = cCompany
  721. AND contact_persons.address_Id = oJsonRecord:GetInt64('address_id').
  722. iContact_Id = (IF AVAILABLE contact_persons THEN contact_persons.contact_id + 1 ELSE 1).
  723. httTable::contact_id = iContact_Id.
  724. httTable::company = cCompany.
  725. END.
  726. END CASE.
  727. createUniqueWhere(
  728. INPUT httTable,
  729. OUTPUT cUniqueWhere
  730. ).
  731. lRetVal = FALSE.
  732. REPEAT /*TRANSACTION*/ ON ERROR UNDO, LEAVE:
  733. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  734. //
  735. // Wenn gefunden, dann Fehler weil doppelte ID
  736. //
  737. IF lOK THEN
  738. DO:
  739. outilitiesHandler:createErrorBox(
  740. INPUT oJsonIdent ,
  741. INPUT '2007' ,
  742. INPUT '' ,
  743. OUTPUT oJsonMessageBox
  744. ).
  745. oJsonReturn = NEW JsonObject().
  746. oJsonReturn:ADD('success' , FALSE ).
  747. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  748. oJsonFieldErrors = NEW JsonObject().
  749. FOR EACH ttPrimaryIndex NO-LOCK:
  750. cField = SUBSTITUTE('&1_&2', ttPrimaryIndex.cFileName, ttPrimaryIndex.cFieldName).
  751. oJsonFieldErrors:ADD(cField, 'Doppelt').
  752. END.
  753. oJsonReturn:ADD('fieldErrors', oJsonFieldErrors).
  754. RETURN TRUE.
  755. END.
  756. //
  757. // Datensatz erstellen / active setzen / wordindex erstellen
  758. //
  759. hBuffer:BUFFER-CREATE().
  760. hBuffer:BUFFER-COPY(httTable) NO-ERROR.
  761. htField = hBuffer:BUFFER-FIELD('active'):HANDLE NO-ERROR.
  762. IF NOT ERROR-STATUS:ERROR AND
  763. VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = TRUE.
  764. htField = hBuffer:BUFFER-FIELD('created_at'):HANDLE NO-ERROR.
  765. IF NOT ERROR-STATUS:ERROR AND
  766. VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = NOW.
  767. htField = hBuffer:BUFFER-FIELD('created_by'):HANDLE NO-ERROR.
  768. IF NOT ERROR-STATUS:ERROR AND
  769. VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  770. rBuffer = hBuffer:RECID.
  771. oJsonIdent:ADD('rBuffer', INT64(rBuffer)) NO-ERROR.
  772. hBuffer:BUFFER-RELEASE ().
  773. outilitiesHandler:writeLastRecord(
  774. INPUT oJsonIdent ,
  775. INPUT cUniqueWhere
  776. ).
  777. lRetVal = TRUE.
  778. LEAVE.
  779. END.
  780. IF lRetVal THEN
  781. DO:
  782. IF cFileName = 'addresses' OR
  783. cFileName = 'communication' THEN
  784. DO:
  785. updateCommunication(
  786. INPUT iContact_Id
  787. ).
  788. END.
  789. fillWordIndexTable().
  790. END.
  791. //
  792. // Datensatz anhand der RECID und den letzten Kriterien in der Tabelle finden und Pagination ermitteln
  793. //
  794. DO WHILE lRetVal:
  795. outilitiesHandler:readLastcWhere(
  796. INPUT oJsonIdent,
  797. INPUT cFileName ,
  798. OUTPUT cWhere
  799. ).
  800. // MESSAGE 'cWhere nach add von Datensatz' cWhere.
  801. outilitiesHandler:evaluatePageNumber(
  802. INPUT-OUTPUT oJsonIdent ,
  803. INPUT cWhere ,
  804. INPUT rBuffer ,
  805. INPUT 'current'
  806. ).
  807. createTempTable().
  808. iAnzRec = fillTemptableFromTable(
  809. OUTPUT oJsonReturn
  810. ).
  811. CREATE BUFFER hUniqueBuffer FOR TABLE cFileName.
  812. hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
  813. outilitiesHandler:evaluateErrorStatus(hError).
  814. hField = hUniqueBuffer:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  815. IF VALID-HANDLE(hField) AND
  816. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', hField:BUFFER-VALUE).
  817. oselectboxHandler:getVariableSelectBoxes(
  818. INPUT oJsonIdent ,
  819. OUTPUT oJsonSelectBoxes
  820. ).
  821. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  822. lRetVal = TRUE.
  823. LEAVE.
  824. END.
  825. DELETE OBJECT hBuffer NO-ERROR.
  826. DELETE OBJECT hUniqueBuffer NO-ERROR.
  827. IF lRetVal THEN
  828. DO:
  829. oJsonReturn:ADD('success', TRUE ).
  830. outilitiesHandler:createInfoBox(
  831. INPUT oJsonIdent ,
  832. INPUT '2008' ,
  833. INPUT '' ,
  834. OUTPUT oJsonMessageBox
  835. ) NO-ERROR.
  836. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  837. RETURN TRUE.
  838. END.
  839. IF NOT lRetVal THEN
  840. DO:
  841. oJsonMessage = NEW JsonObject().
  842. oJsonMessage:ADD('success', FALSE).
  843. oJsonMessage:ADD('message', lcMessage).
  844. oJsonMessage:WRITE(lcJsonString, FALSE).
  845. oJsonReturn = oJsonMessage.
  846. RETURN TRUE.
  847. END.
  848. CATCH e AS Progress.Lang.Error:
  849. END CATCH.
  850. FINALLY:
  851. END FINALLY.
  852. END METHOD.
  853. /*------------------------------------------------------------------------------
  854. Purpose:
  855. Notes:
  856. ------------------------------------------------------------------------------*/
  857. METHOD PUBLIC VOID createInfoRecord(
  858. OUTPUT oInfoRecord AS JsonObject
  859. ):
  860. DEFINE VARIABLE cOrigFileName AS CHARACTER NO-UNDO.
  861. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  862. DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  863. cOrigFileName = oJsonIdent:GetCharacter('file_name').
  864. oJsonIdent:SET('file_name', 'addresses').
  865. outilitiesHandler:readLastRecord(
  866. INPUT oJsonIdent ,
  867. OUTPUT cUniqueWhere
  868. ).
  869. // MESSAGE 'uniquwhere bei createInfoRecord' cUniqueWhere.
  870. oJsonIdent:SET('file_name', cOrigFileName).
  871. CREATE BUFFER hUniqueBuffer FOR TABLE 'addresses'.
  872. hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
  873. iAddress_Id = hUniqueBuffer::address_id.
  874. // MESSAGE 'createInfoRecord address_id ' hUniqueBuffer:AVAILABLE hUniqueBuffer::address_id.
  875. oInfoRecord = NEW JsonObject().
  876. oInfoRecord:ADD('address_id' , hUniqueBuffer::address_id ).
  877. oInfoRecord:ADD('address_display', hUniqueBuffer::address_display).
  878. IF cFileName = 'addresses' THEN
  879. DO:
  880. FIND FIRST customers NO-LOCK
  881. WHERE customers.company = ccompany
  882. AND customers.address_id = hUniqueBuffer::address_id NO-ERROR.
  883. oInfoRecord:ADD('lcustomer', (IF AVAILABLE customers THEN TRUE ELSE FALSE)).
  884. oInfoRecord:SET('lcustomer', TRUE).
  885. /* FIND FIRST creditors NO-LOCK */
  886. /* WHERE creditors.company = ccompany */
  887. /* AND creditors.address_id = hUniqueBuffer::address_id NO-ERROR. */
  888. /* oInfoRecord:ADD('lcreditor', (IF available creditors THEN TRUE ELSE false)).*/
  889. /* FIND FIRST suppliers NO-LOCK */
  890. /* WHERE suppliers.company = ccompany */
  891. /* AND suppliers.address_id = hUniqueBuffer::address_id NO-ERROR. */
  892. /* oInfoRecord:ADD('lsupplier', (IF available suppliers THEN TRUE ELSE false)).*/
  893. END.
  894. /* IF cOrigFileName = 'contact_persons' THEN DO:*/
  895. /* httTable:find-first */
  896. /* END. */
  897. hUniqueBuffer:BUFFER-RELEASE ().
  898. DELETE OBJECT hUniqueBuffer.
  899. RETURN.
  900. END METHOD.
  901. /*------------------------------------------------------------------------------
  902. Purpose:
  903. Notes:
  904. ------------------------------------------------------------------------------*/
  905. METHOD PUBLIC VOID createTempTable(
  906. ):
  907. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  908. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  909. DEFINE VARIABLE cSerializeName AS CHARACTER NO-UNDO.
  910. DEFINE VARIABLE cttName AS CHARACTER NO-UNDO.
  911. DEFINE VARIABLE cBoxfields AS CHARACTER NO-UNDO.
  912. DEFINE VARIABLE cAddField AS CHARACTER NO-UNDO.
  913. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  914. // MESSAGE cCompany '-' cFormId '-' htt::FormId.
  915. FIND FIRST selectboxfields NO-LOCK
  916. WHERE selectboxfields.company = cCompany
  917. AND selectboxfields.user_name = 'admin'
  918. AND selectboxfields.program = cFormId
  919. AND selectboxfields.table_name = 'table' NO-ERROR.
  920. cBoxfields = ''.
  921. lBoxFields = FALSE.
  922. IF AVAILABLE selectboxfields THEN
  923. DO:
  924. cBoxfields = selectboxfields.boxfields.
  925. cBoxfields = cBoxfields
  926. + (IF cBoxfields = '' THEN '' ELSE ',')
  927. + selectboxfields.boxfieldsFix.
  928. cBoxFields = REPLACE(cBoxfields, ',', ';').
  929. lBoxFields = TRUE.
  930. // MESSAGE 'Alle Boxfields für' cFormId '->' cBoxfields.
  931. END.
  932. IF VALID-HANDLE(ttTable) THEN DELETE OBJECT ttTable NO-ERROR.
  933. httTable = ?.
  934. CREATE TEMP-TABLE ttTable.
  935. ttTable:ADD-FIELDS-FROM (cFileName, 'wordindex'). /* Alle Felder aus dem Buffer, ausser wordindex */
  936. ttTable:ADD-NEW-FIELD ('color', 'character', 0, 'x(20)').
  937. ttTable:ADD-NEW-FIELD ('fieldColors', 'character', 5, 'x(20)').
  938. IF lBoxFields THEN
  939. DO:
  940. DO ii = 1 TO NUM-ENTRIES(cBoxFields, ';'):
  941. cField = ENTRY(ii, cBoxFields, ';').
  942. i1 = INDEX(cField, '_') + 1.
  943. cField = SUBSTRING(cField,i1) + '_BoxField'.
  944. ttTable:ADD-NEW-FIELD (cField, 'character', 0, 'x(100)').
  945. END.
  946. END.
  947. IF cSortField <> '' THEN
  948. DO:
  949. ttTable:ADD-NEW-INDEX ('ttTable-k1', FALSE, TRUE). /* UNIQUE, PRIMARY */
  950. IF cDirection BEGINS 'des' THEN ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField, 'desc').
  951. ELSE ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField).
  952. END.
  953. cFunction = htt::FUNCTION NO-ERROR.
  954. CASE cFunction:
  955. WHEN 'delete' THEN
  956. cttName = 'record'.
  957. WHEN 'update' THEN
  958. cttName = 'record'.
  959. WHEN 'change' THEN
  960. cttName = 'record'.
  961. WHEN 'create' THEN
  962. cttName = 'record'.
  963. WHEN 'loaddataunique' THEN
  964. cttName = 'record'.
  965. OTHERWISE
  966. cttName = 'records'.
  967. END CASE.
  968. ttTable:TEMP-TABLE-PREPARE (cttName).
  969. httTable = ttTable:DEFAULT-BUFFER-HANDLE.
  970. // IF cFileName = 'addresses' THEN MESSAGE 'HALLO ->' httTable:BUFFER-FIELD('address'):NAME ' / ' httTable:BUFFER-FIELD('address'):EXTENT.
  971. //
  972. // Den Feldnamen wird für das Front-End der Tabellenname vorangestellt (Serialize-Name)
  973. //
  974. DO ii = 1 TO httTable:NUM-FIELDS:
  975. CASE httTable:BUFFER-FIELD(ii):NAME:
  976. WHEN 'active' THEN
  977. cSerializeName = 'active'.
  978. OTHERWISE
  979. cSerializeName = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME.
  980. END CASE.
  981. httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cSerializeName NO-ERROR.
  982. // MESSAGE 'NEU ' httTable:BUFFER-FIELD(ii):NAME httTable:BUFFER-FIELD(ii):EXTENT.
  983. END.
  984. END METHOD.
  985. /*------------------------------------------------------------------------------
  986. Purpose:
  987. Notes:
  988. ------------------------------------------------------------------------------*/
  989. METHOD PUBLIC VOID createUniqueWhere(
  990. INPUT hBuffer AS HANDLE,
  991. OUTPUT cUniqueWhere AS CHARACTER
  992. ):
  993. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  994. DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO.
  995. cUniqueWhere = ''.
  996. cString = 'WHERE'.
  997. FOR EACH ttPrimaryIndex NO-LOCK:
  998. hField = hBuffer:BUFFER-FIELD(ttPrimaryIndex.cFieldName):HANDLE.
  999. CASE ttPrimaryIndex.cDataType:
  1000. WHEN 'character' THEN
  1001. cValue = QUOTER(hField:BUFFER-VALUE).
  1002. WHEN 'logical' THEN
  1003. cValue = STRING(hField:BUFFER-VALUE,"true/false").
  1004. WHEN 'date' THEN
  1005. cValue = STRING(DATE(hField:BUFFER-VALUE)).
  1006. OTHERWISE
  1007. cValue = hField:BUFFER-VALUE.
  1008. END CASE.
  1009. cUniqueWhere = cUniqueWhere + cString
  1010. + SUBSTITUTE(' &1.&2 = &3 ', ttPrimaryIndex.cFileName, ttPrimaryIndex.cFieldName, cValue).
  1011. cString = 'AND'.
  1012. IF hField:NAME = 'address_id' THEN iAddress_Id = INT64(cValue).
  1013. END.
  1014. RETURN.
  1015. END METHOD.
  1016. /*------------------------------------------------------------------------------
  1017. Purpose:
  1018. Notes:
  1019. ------------------------------------------------------------------------------*/
  1020. METHOD PUBLIC LOGICAL deleteData(
  1021. INPUT oJsonData AS jsonObject,
  1022. OUTPUT oJsonReturn AS JsonObject
  1023. ):
  1024. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  1025. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1026. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1027. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  1028. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  1029. DEFINE VARIABLE oRecord AS JsonObject NO-UNDO.
  1030. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1031. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1032. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1033. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1034. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  1035. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1036. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  1037. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  1038. oJsonData:writefile(SUBSTITUTE('C:\TEMP\delete_jsondata_&1.json', cFileName), TRUE).
  1039. oJsonRecord = NEW JsonObject().
  1040. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  1041. oMasterKeyFields = NEW JsonObject().
  1042. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  1043. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1044. createTempTable().
  1045. oJsonRecord:Write(lcttTable, FALSE).
  1046. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  1047. outilitiesHandler:evaluateErrorStatus(hError).
  1048. httTable:FIND-FIRST('', NO-LOCK).
  1049. //
  1050. // Erzeugen von Where-Statement für UNIQUE-Find
  1051. //
  1052. createUniqueWhere(
  1053. INPUT httTable,
  1054. OUTPUT cUniqueWhere
  1055. ).
  1056. MESSAGE 'cUniqueWhere =' cUniqueWhere.
  1057. lRetVal = FALSE.
  1058. REPEAT /*TRANSACTION*/ ON ERROR UNDO, LEAVE:
  1059. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  1060. IF NOT lOK THEN
  1061. DO:
  1062. outilitiesHandler:createErrorBox(
  1063. INPUT oJsonIdent ,
  1064. INPUT '2000' ,
  1065. INPUT '' ,
  1066. OUTPUT oJsonMessageBox
  1067. ).
  1068. oJsonReturn = NEW JsonObject().
  1069. oJsonReturn:ADD('success' , FALSE ).
  1070. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  1071. RETURN TRUE.
  1072. END.
  1073. rBuffer = hBuffer:RECID.
  1074. hBuffer:BUFFER-RELEASE ().
  1075. cActiveSelection = (IF oJsonIdent:HAS('activeFilter') THEN oJsonIdent:GetCharacter('activeFilter') ELSE '').
  1076. IF cActiveSelection = 'LBL_FILTER_ACTIVE' THEN
  1077. DO:
  1078. outilitiesHandler:evaluatePageNumber(
  1079. INPUT-OUTPUT oJsonIdent ,
  1080. INPUT cWhere ,
  1081. INPUT rBuffer ,
  1082. INPUT 'before'
  1083. ).
  1084. END.
  1085. iStartPage = INTEGER(oJsonIdent:GetCharacter('page')) NO-ERROR.
  1086. iIndex = INTEGER(oJsonIdent:GetCharacter('index')) NO-ERROR.
  1087. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, EXCLUSIVE-LOCK, NO-WAIT) NO-ERROR.
  1088. IF hBuffer:LOCKED THEN
  1089. DO:
  1090. hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  1091. rBuffer = hBuffer:RECID.
  1092. outilitiesHandler:createLockMessage(
  1093. INPUT oJsonIdent,
  1094. INPUT rBuffer ,
  1095. OUTPUT oJsonMessageBox
  1096. ).
  1097. oJsonReturn = NEW JsonObject().
  1098. oJsonReturn:ADD('success' , FALSE ).
  1099. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  1100. RETURN TRUE.
  1101. END.
  1102. iAddress_Id = hBuffer::address_Id.
  1103. iContact_Id =
  1104. (IF cFileName = 'communication' OR cFileName = 'contact_persons' THEN
  1105. hBuffer::contact_id ELSE 0).
  1106. DO WHILE lActive :
  1107. hField = hBuffer:BUFFER-FIELD('active'):HANDLE NO-ERROR.
  1108. IF ERROR-STATUS:ERROR OR
  1109. NOT VALID-HANDLE(hField) THEN LEAVE.
  1110. hField:BUFFER-VALUE = FALSE NO-ERROR.
  1111. hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
  1112. IF NOT ERROR-STATUS:ERROR AND
  1113. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = NOW.
  1114. hField = hBuffer:BUFFER-FIELD('updated_by'):HANDLE NO-ERROR.
  1115. IF NOT ERROR-STATUS:ERROR AND
  1116. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  1117. httTable:BUFFER-COPY(hBuffer).
  1118. hBuffer:BUFFER-RELEASE ().
  1119. lRetVal = TRUE.
  1120. LEAVE.
  1121. END.
  1122. DO WHILE NOT lRetVal:
  1123. lRetVal = hBuffer:BUFFER-DELETE ().
  1124. hBuffer:BUFFER-RELEASE ().
  1125. LEAVE.
  1126. END.
  1127. IF cFileName = 'addresses' OR
  1128. cFileName = 'communication' THEN
  1129. DO:
  1130. updateCommunication(
  1131. INPUT iContact_Id
  1132. ).
  1133. END.
  1134. fillWordIndexTable().
  1135. //
  1136. // Letzte Abfrage wiederholen und Temp-Tabelle füllen
  1137. //
  1138. outilitiesHandler:readLastcWhere(
  1139. INPUT oJsonIdent,
  1140. INPUT cFileName,
  1141. OUTPUT cWhere
  1142. ) NO-ERROR.
  1143. outilitiesHandler:evaluateErrorStatus(hError).
  1144. MESSAGE 'cWhere nach Löschung ' cWhere.
  1145. createTempTable().
  1146. fillTemptableFromTable(
  1147. OUTPUT oJsonReturn
  1148. ).
  1149. oRecords = NEW JsonArray().
  1150. oRecords = oJsonReturn:GetJsonArray('records').
  1151. oRecord = NEW JsonObject().
  1152. oRecord = (IF iIndex = oRecords:LENGTH THEN oRecords:GetJsonObject(iIndex) ELSE oRecords:GetJsonObject(iIndex + 1) ).
  1153. oselectboxHandler:getVariableSelectBoxes(
  1154. INPUT oJsonIdent,
  1155. OUTPUT oJsonSelectBoxes
  1156. ).
  1157. /* IF cFileName = 'communication' THEN */
  1158. /* DO: */
  1159. /* oselectboxHandler:getSelectBoxContacts( */
  1160. /* INPUT iAddress_Id , */
  1161. /* INPUT oJsonIdent , */
  1162. /* OUTPUT oJsonBoxContacts */
  1163. /* ). */
  1164. /* IF VALID-HANDLE(oJsonContacts) THEN DO: */
  1165. /* IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).*/
  1166. /* END. */
  1167. IF lRetVal THEN
  1168. DO:
  1169. oJsonReturn:ADD('success', TRUE).
  1170. RETURN lRetVal.
  1171. END.
  1172. IF NOT lRetVal THEN
  1173. DO:
  1174. oJsonMessage = NEW JsonObject().
  1175. oJsonMessage:ADD('success', FALSE).
  1176. oJsonMessage:ADD('message', lcMessage).
  1177. oJsonMessage:WRITE(lcJsonString, FALSE).
  1178. oJsonReturn = oJsonMessage.
  1179. END.
  1180. RETURN lRetVal.
  1181. END.
  1182. CATCH e AS Progress.Lang.Error:
  1183. END CATCH.
  1184. FINALLY:
  1185. DELETE OBJECT oJsonArray NO-ERROR.
  1186. DELETE OBJECT oJsonData NO-ERROR.
  1187. END FINALLY.
  1188. END METHOD.
  1189. /*------------------------------------------------------------------------------
  1190. Purpose:
  1191. Notes:
  1192. ------------------------------------------------------------------------------*/
  1193. METHOD PUBLIC INTEGER fillTemptableFromTable(
  1194. OUTPUT oJsonReturn AS JsonObject
  1195. ):
  1196. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO INIT -1.
  1197. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  1198. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  1199. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1200. DEFINE VARIABLE iTotalRecords AS INTEGER NO-UNDO.
  1201. DEFINE VARIABLE cAddress AS CHARACTER NO-UNDO.
  1202. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1203. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1204. DEFINE VARIABLE lFound AS LOGICAL NO-UNDO.
  1205. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  1206. DEFINE VARIABLE cFieldValue AS CHARACTER NO-UNDO.
  1207. DEFINE VARIABLE cPreWhere AS CHARACTER NO-UNDO.
  1208. DEFINE VARIABLE rBefore AS RECID NO-UNDO.
  1209. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  1210. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1211. iStartPage = 1.
  1212. iMaxRecords = 25.
  1213. iIndex = 0.
  1214. rBuffer = (IF oJsonIdent:HAS('rBuffer') THEN oJsonIdent:GetInt64('rBuffer') ELSE ?).
  1215. //
  1216. // Manchmal kommen die Werte als Integer, manchmal als character
  1217. //
  1218. IF oJsonIdent:HAS('limit') THEN
  1219. DO:
  1220. iMaxRecords = (IF oJsonIdent:getType('limit') = 1 THEN INTEGER(oJsonIdent:GetCharacter('limit')) ELSE oJsonIdent:GetInteger('limit')).
  1221. END.
  1222. IF oJsonIdent:HAS('page') THEN
  1223. DO:
  1224. iStartPage = (IF oJsonIdent:getType('page') = 1 THEN INTEGER(oJsonIdent:GetCharacter('page')) ELSE oJsonIdent:GetInteger('page')).
  1225. END.
  1226. IF oJsonIdent:HAS('index') THEN
  1227. DO:
  1228. iIndex = (IF oJsonIdent:getType('index') = 1 THEN INTEGER(oJsonIdent:GetCharacter('index')) ELSE oJsonIdent:GetInteger('index')).
  1229. END.
  1230. iStartRecord = ((iStartPage - 1) * iMaxRecords) + 1.
  1231. //
  1232. // Für das Dynamische Query wird PRESELECT verwendet für die Pagination
  1233. //
  1234. // MESSAGE '-> MaxRecords =' iMaxRecords SKIP 'Startpage =' iStartPage SKIP 'Index =' iIndex SKIP 'Startrecord =' iStartRecord.
  1235. // MESSAGE 'cWhere in fillTempTable =' cFileName '->' cWhere.
  1236. cPreWhere = SUBSTITUTE(' PRESELECT EACH &1 &2 NO-LOCK ', cFileName, cWhere) NO-ERROR.
  1237. MESSAGE 'cPreWhere in fillTempTable =' cPreWhere.
  1238. CREATE QUERY hQuery.
  1239. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1240. hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
  1241. outilitiesHandler:evaluateErrorStatus(hError).
  1242. hQuery:QUERY-PREPARE (cPreWhere) NO-ERROR.
  1243. outilitiesHandler:evaluateErrorStatus(hError).
  1244. hQuery:QUERY-OPEN ().
  1245. iTotalRecords = hQuery:NUM-RESULTS.
  1246. hQuery:REPOSITION-FORWARD(iStartRecord - 1) NO-ERROR.
  1247. hQuery:GET-NEXT ().
  1248. iCurrentPosition = 0.
  1249. iAnzahlRecords = 0.
  1250. // MESSAGE 'Start query mit StartRecord ' iStartRecord 'und cWhere ' cPreWhere.
  1251. ttTable:EMPTY-TEMP-TABLE ().
  1252. DO WHILE NOT hQuery:QUERY-OFF-END:
  1253. IF iCurrentPosition = 0 THEN iCurrentPosition = iStartRecord.
  1254. iAnzahlRecords = iAnzahlRecords + 1.
  1255. httTable:BUFFER-CREATE().
  1256. httTable:BUFFER-COPY(hBuffer).
  1257. rBefore = hBuffer:RECID.
  1258. IF rBuffer <> ? AND hBuffer:RECID = rBuffer THEN iIndex = iAnzahlRecords - 1.
  1259. IF iAnzahlRecords >= iMaxRecords THEN LEAVE.
  1260. hQuery:GET-NEXT ().
  1261. END.
  1262. hQuery:QUERY-CLOSE ().
  1263. DELETE OBJECT hQuery NO-ERROR.
  1264. DELETE OBJECT hBuffer NO-ERROR.
  1265. IF lBoxFields THEN
  1266. DO:
  1267. lFound = FALSE.
  1268. CREATE QUERY hQuery.
  1269. hQuery:SET-BUFFERS(httTable).
  1270. hQuery:QUERY-PREPARE (SUBSTITUTE('FOR EACH &1', httTable:NAME )).
  1271. hQuery:QUERY-OPEN ().
  1272. hQuery:GET-FIRST () NO-ERROR.
  1273. DO WHILE NOT hQuery:QUERY-OFF-END:
  1274. DO i1 = 1 TO httTable:NUM-FIELDS:
  1275. IF INDEX(httTable:BUFFER-FIELD(i1):NAME, 'BoxField') = 0 THEN NEXT.
  1276. lFound = TRUE.
  1277. cField = httTable:BUFFER-FIELD(i1):NAME.
  1278. cField = REPLACE(cField, '_BoxField', '').
  1279. hField = httTable:BUFFER-FIELD(cField):HANDLE NO-ERROR.
  1280. IF ERROR-STATUS:ERROR THEN NEXT.
  1281. IF NOT VALID-HANDLE(hField) THEN NEXT.
  1282. cFieldValue = hField:BUFFER-VALUE.
  1283. httTable:BUFFER-FIELD(i1):BUFFER-VALUE =
  1284. outilitiesHandler:getBoxFieldText(
  1285. INPUT oJsonIdent ,
  1286. INPUT cField ,
  1287. INPUT cFieldValue
  1288. ) NO-ERROR.
  1289. END.
  1290. IF lFound = FALSE THEN LEAVE.
  1291. hQuery:GET-NEXT () NO-ERROR.
  1292. END.
  1293. hQuery:QUERY-CLOSE ().
  1294. DELETE OBJECT hQuery NO-ERROR.
  1295. END.
  1296. oRecords = NEW JsonArray().
  1297. httTable:WRITE-JSON('JsonArray', oRecords).
  1298. // MESSAGE 'ttTable gefüllt ' iANzahlRecords.
  1299. // oRecords:WriteFile(SUBSTITUTE('C:\TEMP\fillTempTable_&1_records.json', htt::FormId), TRUE).
  1300. iPageCounter = iTotalRecords / iMaxRecords.
  1301. IF (iPageCounter * iMaxRecords) < iTotalRecords THEN iPageCounter = iPageCounter + 1.
  1302. oJsonReturn = NEW JsonObject().
  1303. oJsonReturn:ADD('records' , oRecords ).
  1304. oJsonReturn:ADD('currentPage' , iStartPage ).
  1305. oJsonReturn:ADD('maxRecords' , iTotalRecords ).
  1306. oJsonReturn:ADD('pageCount' , iPageCounter ).
  1307. oJsonReturn:ADD('recordCount' , iAnzahlRecords).
  1308. oJsonReturn:ADD('currentIndex', iIndex ).
  1309. IF iAnzahlRecords > 0 AND
  1310. rBuffer = ? THEN
  1311. DO:
  1312. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1313. createUniqueWhere(
  1314. INPUT httTable ,
  1315. OUTPUT cUniqueWhere
  1316. ).
  1317. // MESSAGE 'writeLastRecord ' cUniqueWhere.
  1318. outilitiesHandler:writeLastRecord(
  1319. INPUT oJsonIdent,
  1320. INPUT cUniqueWhere
  1321. ).
  1322. END.
  1323. iRetVal = iAnzahlRecords.
  1324. // oJsonReturn:WriteFile(SUBSTITUTE('C:\TEMP\fillTempTable_return_&1.json', cFormId), TRUE).
  1325. // MESSAGE 'ende filltable'.
  1326. RETURN iRetVal.
  1327. END METHOD.
  1328. /*------------------------------------------------------------------------------
  1329. Purpose:
  1330. Notes:
  1331. ------------------------------------------------------------------------------*/
  1332. METHOD PUBLIC VOID fillWordIndexTable(
  1333. ):
  1334. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  1335. DEFINE VARIABLE hwibuffer AS HANDLE NO-UNDO.
  1336. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1337. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1338. DEFINE VARIABLE cPhoneTypes AS CHARACTER NO-UNDO
  1339. INIT '1,2,3,4,7'.
  1340. DEFINE VARIABLE cMailTypes AS CHARACTER NO-UNDO
  1341. INIT '5,6'.
  1342. EMPTY TEMP-TABLE ttWordIndexTable.
  1343. FIND addresses NO-LOCK
  1344. WHERE addresses.address_id = iAddress_id NO-ERROR.
  1345. hwibuffer = BUFFER addresses:HANDLE.
  1346. DO i1 = 1 TO hwibuffer:NUM-FIELDS:
  1347. hField = hwibuffer:BUFFER-FIELD(i1):HANDLE NO-ERROR.
  1348. IF INDEX(hField:NAME, 'SHA') > 0 THEN NEXT.
  1349. IF INDEX(hField:NAME, 'word') > 0 THEN NEXT.
  1350. IF INDEX(hField:NAME, 'updated_') > 0 THEN NEXT.
  1351. IF INDEX(hField:NAME, 'created_') > 0 THEN NEXT.
  1352. IF INDEX(hField:NAME, '_display') > 0 THEN NEXT.
  1353. IF hField:EXTENT > 0 THEN NEXT.
  1354. IF hField:DATA-TYPE = 'logical' THEN NEXT.
  1355. cValue = hField:BUFFER-VALUE NO-ERROR.
  1356. IF cValue = ? THEN NEXT.
  1357. IF hField:NAME BEGINS 'phone' OR
  1358. hField:NAME BEGINS 'mobile' OR
  1359. hField:NAME BEGINS 'Fax' THEN
  1360. DO:
  1361. cValue = hField:BUFFER-VALUE.
  1362. cValue = REPLACE(cValue, ' ', '').
  1363. cValue = REPLACE(cValue, '.', '').
  1364. cValue = REPLACE(cValue, "'", '').
  1365. cValue = REPLACE(cValue, '-', '').
  1366. END.
  1367. CREATE ttWordIndexTable.
  1368. ASSIGN
  1369. ttWordIndexTable.cFileName = hwibuffer:NAME
  1370. ttWordIndexTable.cFieldName = hField:NAME
  1371. ttWordIndexTable.cDataType = hField:DATA-TYPE
  1372. ttWordIndexTable.cValue = cValue
  1373. .
  1374. END.
  1375. hwibuffer = ?.
  1376. FOR EACH communication NO-LOCK
  1377. WHERE communication.company = cCompany
  1378. AND communication.address_id = iAddress_id:
  1379. IF NOT VALID-HANDLE(hwibuffer) THEN hwibuffer = BUFFER communication:HANDLE.
  1380. DO i1 = 1 TO hwibuffer:NUM-FIELDS:
  1381. hField = hwibuffer:BUFFER-FIELD(i1):HANDLE.
  1382. IF hField:NAME = 'address_id' THEN NEXT.
  1383. IF hField:NAME = 'company' THEN NEXT.
  1384. IF hField:NAME = 'comm_type' THEN NEXT.
  1385. IF INDEX(hField:NAME, 'updated_') > 0 THEN NEXT.
  1386. IF INDEX(hField:NAME, 'created_') > 0 THEN NEXT.
  1387. cValue = hField:BUFFER-VALUE ().
  1388. IF cValue = ? THEN NEXT.
  1389. IF LOOKUP(TRIM(STRING(communication.comm_type,'>>9')), cPhoneTypes, ',') > 0 THEN
  1390. DO:
  1391. cValue = REPLACE(cValue, ' ', '').
  1392. cValue = REPLACE(cValue, '.', '').
  1393. cValue = REPLACE(cValue, "'", '').
  1394. cValue = REPLACE(cValue, '-', '').
  1395. END.
  1396. IF LOOKUP(TRIM(STRING(communication.comm_type,'>>9')), cMailTypes, ',') > 0 THEN
  1397. DO:
  1398. cValue = REPLACE(cValue, ' ', '').
  1399. cValue = REPLACE(cValue, '-', '').
  1400. END.
  1401. CREATE ttWordIndexTable.
  1402. ASSIGN
  1403. ttWordIndexTable.cFileName = hwibuffer:NAME
  1404. ttWordIndexTable.cFieldName = hField:NAME
  1405. ttWordIndexTable.cDataType = hField:DATA-TYPE
  1406. ttWordIndexTable.cValue = cValue
  1407. .
  1408. END.
  1409. END.
  1410. hwibuffer = TEMP-TABLE ttWordIndexTable:DEFAULT-BUFFER-HANDLE.
  1411. cValue = outilitiesHandler:createWordindexFromTable(
  1412. INPUT hwibuffer
  1413. ).
  1414. // MESSAGE 'wordIndex =' cValue.
  1415. REPEAT /*TRANSACTION*/ ON ERROR UNDO, LEAVE:
  1416. FIND addresses
  1417. WHERE addresses.address_id = iAddress_id NO-ERROR.
  1418. addresses.wordIndex = cValue.
  1419. RELEASE addresses.
  1420. LEAVE.
  1421. END.
  1422. RETURN.
  1423. END METHOD.
  1424. /*------------------------------------------------------------------------------
  1425. Purpose:
  1426. Notes:
  1427. ------------------------------------------------------------------------------*/
  1428. METHOD PUBLIC LOGICAL getChanges(
  1429. INPUT oJsonIdent AS JsonObject,
  1430. OUTPUT oJsonResult AS JsonObject
  1431. ):
  1432. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  1433. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1434. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1435. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1436. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1437. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1438. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  1439. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  1440. DEFINE VARIABLE cBufferField AS CHARACTER NO-UNDO.
  1441. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1442. DEFINE VARIABLE iValue AS INTEGER NO-UNDO.
  1443. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  1444. DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
  1445. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1446. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1447. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1448. DEFINE VARIABLE lNew AS LOGICAL NO-UNDO.
  1449. DEFINE VARIABLE iType AS INTEGER NO-UNDO.
  1450. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  1451. DEFINE VARIABLE cChangeAction AS CHARACTER NO-UNDO.
  1452. DEFINE VARIABLE lAddressFix AS LOGICAL NO-UNDO.
  1453. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  1454. DEFINE VARIABLE oJsonReturn AS JsonObject NO-UNDO.
  1455. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1456. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
  1457. DEFINE VARIABLE oJsonAction AS JsonArray NO-UNDO.
  1458. outilitiesHandler = NEW utilitiesHandler().
  1459. httKeyFields = TEMP-TABLE ttKeyFields :DEFAULT-BUFFER-HANDLE.
  1460. httPrimaryIndex = TEMP-TABLE ttPrimaryIndex:DEFAULT-BUFFER-HANDLE.
  1461. //
  1462. // Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
  1463. //
  1464. MESSAGE 'getChanges'.
  1465. outilitiesHandler:evaluateFile(
  1466. INPUT-OUTPUT oJsonIdent ,
  1467. OUTPUT cFileName ,
  1468. OUTPUT lCompany ,
  1469. OUTPUT lActive ,
  1470. OUTPUT lWordIndex ,
  1471. INPUT-OUTPUT httKeyFields ,
  1472. INPUT-OUTPUT httPrimaryIndex
  1473. ).
  1474. cFunction = oJsonIdent:GetCharacter('function').
  1475. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1476. createTempTable().
  1477. httTable:BUFFER-CREATE().
  1478. cReplace = SUBSTITUTE('&1_', cFileName).
  1479. cFieldNames = oJsonIdent:GetNames().
  1480. DO ii = 1 TO EXTENT(cFieldNames):
  1481. cField = cFieldNames[ii].
  1482. IF NOT cField BEGINS cFileName THEN NEXT.
  1483. cBufferField = REPLACE(cField, cReplace, '').
  1484. cValue = oJsonIdent:GetCharacter(cField).
  1485. hField = httTable:BUFFER-FIELD(cBufferField):HANDLE NO-ERROR.
  1486. IF ERROR-STATUS:ERROR THEN NEXT.
  1487. IF NOT VALID-HANDLE (hField) THEN NEXT.
  1488. IF hField:DATA-TYPE = 'date' THEN cValue = outilitiesHandler:iso2date(INPUT cValue).
  1489. iType = oJsonRecord:getType(cField).
  1490. CASE iType:
  1491. WHEN 2 THEN
  1492. DO:
  1493. iValue = oJsonRecord:GetInteger(cField).
  1494. hField:BUFFER-VALUE = iValue NO-ERROR.
  1495. END.
  1496. WHEN 3 THEN
  1497. DO:
  1498. lValue = oJsonRecord:GetLogical(cField).
  1499. hField:BUFFER-VALUE = lValue NO-ERROR.
  1500. END.
  1501. OTHERWISE
  1502. DO:
  1503. cValue = oJsonRecord:GetCharacter(cField).
  1504. IF hField:DATA-TYPE = 'character' THEN hField:BUFFER-VALUE = cValue NO-ERROR.
  1505. IF hField:DATA-TYPE = 'date' THEN hField:BUFFER-VALUE = DATE(outilitiesHandler:iso2date(cValue)).
  1506. END.
  1507. END CASE.
  1508. lOk = outilitiesHandler:evaluateErrorStatus(hError).
  1509. IF lOk THEN NEXT.
  1510. END.
  1511. // httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_Inhalt.json', TRUE).
  1512. //
  1513. // Erzeugen von Where-Statement für UNIQUE-Find
  1514. //
  1515. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1516. createUniqueWhere(
  1517. INPUT httTable,
  1518. OUTPUT cWhere
  1519. ).
  1520. cUniqueWhere = cWhere.
  1521. lOK = hBuffer:FIND-UNIQUE(cWhere, NO-LOCK) NO-ERROR.
  1522. IF NOT lOK THEN lNew = TRUE.
  1523. oJsonReturn = NEW JsonObject().
  1524. oJsonReturn:ADD('success', TRUE).
  1525. cChangeAction = oJsonIdent:GetCharacter('changeAction').
  1526. // MESSAGE 'ChangeAction =' cChangeAction.
  1527. CASE cChangeAction:
  1528. WHEN 'changeFixedAddress' THEN
  1529. DO:
  1530. lAddressFix = LOGICAL(oJsonIdent:GetCharacter('changedValue')).
  1531. // MESSAGE httTable::ADDress_fix '-' oJsonIdent:GetCharacter('changedValue').
  1532. oJsonAction = NEW JsonArray().
  1533. oJsonAction:ADD('addresses_address').
  1534. IF lAddressFix THEN oJsonReturn:ADD('editableFields', oJsonAction).
  1535. ELSE oJsonReturn:ADD('disabledFields', oJsonAction).
  1536. httTable::Address_fix = oJsonIdent:GetCharacter('changedValue').
  1537. END.
  1538. END CASE.
  1539. oJsonRecord = NEW JsonObject().
  1540. oJsonArray = NEW JsonArray ().
  1541. httTable:WRITE-JSON('JsonObject', oJsonRecord).
  1542. oJsonArray = oJsonRecord:GetJsonArray('record').
  1543. oJsonRecord = oJsonArray:GetJsonObject(1).
  1544. oJsonReturn:ADD('record', oJsonRecord).
  1545. oJsonResult = oJsonReturn.
  1546. lRetVal = TRUE.
  1547. RETURN lRetVal.
  1548. END METHOD.
  1549. /*------------------------------------------------------------------------------
  1550. Purpose:
  1551. Notes:
  1552. ------------------------------------------------------------------------------*/
  1553. METHOD PUBLIC LOGICAL getData(
  1554. OUTPUT oJsonReturn AS JsonObject
  1555. ):
  1556. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1557. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  1558. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  1559. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1560. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
  1561. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1562. DEFINE VARIABLE cAddress AS CHARACTER NO-UNDO.
  1563. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1564. DEFINE VARIABLE cFormUser AS CHARACTER NO-UNDO.
  1565. DEFINE VARIABLE cContactField AS CHARACTER NO-UNDO.
  1566. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  1567. DEFINE VARIABLE oJsonEditable AS JsonArray NO-UNDO.
  1568. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  1569. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1570. DEFINE VARIABLE oJsonSelectContacts AS JsonArray NO-UNDO.
  1571. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1572. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1573. MESSAGE 'GETDATA START' cFileName.
  1574. iIndex = 0.
  1575. buildWhere().
  1576. MESSAGE 'NACH BUILDWHERE'.
  1577. ii = 0.
  1578. iAnzRec = 0.
  1579. ttTable:EMPTY-TEMP-TABLE ().
  1580. CREATE QUERY hQuery.
  1581. // cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere) NO-ERROR.
  1582. MESSAGE 'cWhere loaddate for ' cFileName '->' cWhere.
  1583. oJsonIdent:WriteFile(SUBSTITUTE('C:\TEMP\getData_&1_oJsonIdent.json', cFileName), TRUE ).
  1584. /* IF NOT oJsonIdent:HAS('search') THEN */
  1585. /* DO: */
  1586. /* outilitiesHandler:writeLastcWhere(*/
  1587. /* INPUT oJsonIdent , */
  1588. /* INPUT cFileName , */
  1589. /* INPUT cWhere */
  1590. /* ). */
  1591. /* END. */
  1592. //
  1593. // Für das Dynamische Query wird PRESELECT verwendet für die Pagination
  1594. //
  1595. iRetVal = fillTemptableFromTable(
  1596. OUTPUT oJsonReturn
  1597. ).
  1598. createInfoRecord(
  1599. OUTPUT oInfoRecord
  1600. ).
  1601. IF VALID-OBJECT(oInfoRecord) THEN oJsonReturn:ADD('infoRecord', oInfoRecord).
  1602. IF iRetVal <= 0 THEN
  1603. DO:
  1604. outilitiesHandler:createInfoBox(
  1605. INPUT oJsonIdent ,
  1606. INPUT '2009' ,
  1607. INPUT '' ,
  1608. OUTPUT oJsonMessageBox
  1609. ).
  1610. oJsonReturn:ADD('success', (IF iRetVal < 0 THEN FALSE ELSE TRUE)).
  1611. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  1612. // oJsonReturn:WriteFile('C:\TEMP\getData_nullRecords_return.json', TRUE).
  1613. RETURN lRetVal.
  1614. END.
  1615. lRetVal = httTable:FIND-FIRST('', NO-LOCK).
  1616. hFeld = httTable:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  1617. IF VALID-HANDLE(hFeld) AND
  1618. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', hFeld:BUFFER-VALUE).
  1619. oselectboxHandler:getVariableSelectBoxes(
  1620. INPUT oJsonIdent ,
  1621. OUTPUT oJsonSelectBoxes
  1622. ).
  1623. IF NOT VALID-OBJECT (oJsonSelectBoxes) THEN oJsonSelectBoxes = NEW JsonObject().
  1624. iAddress_Id = httTable::address_id.
  1625. cContactField = SUBSTITUTE('&1_contact_id', cFileName).
  1626. oselectboxHandler:getSelectBoxContacts(
  1627. INPUT iAddress_Id ,
  1628. INPUT oJsonIdent ,
  1629. OUTPUT oJsonSelectContacts
  1630. ).
  1631. IF VALID-OBJECT(oJsonSelectContacts) THEN DO:
  1632. oJsonSelectContacts:WriteFile('C:\TEMP\Selectboxes_contacts.json', TRUE).
  1633. IF oJsonSelectBoxes:HAS(cContactField) THEN oJsonSelectBoxes:Remove(cContactField).
  1634. oJsonSelectBoxes:WriteFile('C:\TEMP\Selectboxes_Boxes.json', TRUE).
  1635. oJsonSelectBoxes:ADD(cContactField, oJsonSelectContacts).
  1636. END.
  1637. oJsonSelectBoxes:WriteFile(SUBSTITUTE('C:\TEMP\SelectBoxes_&1.json', cFileName), TRUE).
  1638. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1639. oJsonReturn:WriteFile(SUBSTITUTE('C:\TEMP\getdata_&1_return.json', cFileName), TRUE).
  1640. outilitiesHandler:writePosition(
  1641. INPUT oJsonIdent ,
  1642. INPUT cFileName ,
  1643. INPUT iCurrentPosition ,
  1644. INPUT iStartPage ,
  1645. INPUT iMaxRecords
  1646. ).
  1647. // oJsonReturn:WriteFile('C:\TEMP\addresses_getData_messages.json', TRUE).
  1648. lRetVal = TRUE.
  1649. RETURN lRetVal.
  1650. END METHOD.
  1651. /*------------------------------------------------------------------------------
  1652. Purpose:
  1653. Notes:
  1654. ------------------------------------------------------------------------------*/
  1655. METHOD PUBLIC LOGICAL getDataUnique(
  1656. OUTPUT oJsonReturn AS JsonObject
  1657. ):
  1658. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1659. DEFINE VARIABLE cUniqueWhere AS CHARACTER NO-UNDO.
  1660. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1661. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1662. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1663. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1664. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1665. createTempTable().
  1666. MESSAGE cFileName.
  1667. outilitiesHandler:readLastRecord(
  1668. INPUT oJsonIdent ,
  1669. OUTPUT cUniqueWhere
  1670. ).
  1671. lOk = hBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
  1672. httTable:BUFFER-CREATE ().
  1673. httTable:BUFFER-COPY(hBuffer).
  1674. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1675. oJsonReturn = NEW JsonObject().
  1676. oJsonData = NEW JsonObject().
  1677. oJsonRecord = NEW JsonObject().
  1678. oJsonArray = NEW JsonArray ().
  1679. //
  1680. // den ersten Datensatz in der TEMP-TABLE lesen
  1681. //
  1682. hField = httTable:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  1683. IF VALID-HANDLE(hField) AND
  1684. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', httTable::language_id).
  1685. httTable:WRITE-JSON('JsonObject', oJsonData).
  1686. oJsonArray = oJsonData:GetJsonArray('record').
  1687. oJsonRecord = oJsonArray:GetJsonObject(1).
  1688. oselectboxHandler:getVariableSelectBoxes(
  1689. INPUT oJsonIdent ,
  1690. OUTPUT oJsonSelectBoxes
  1691. ).
  1692. createInfoRecord(
  1693. OUTPUT oInfoRecord
  1694. ).
  1695. lOk = TRUE.
  1696. oJsonReturn = NEW JsonObject().
  1697. oJsonReturn:ADD('success', lOK ).
  1698. oJsonReturn:ADD('record' , oJsonRecord).
  1699. IF VALID-OBJECT(oInfoRecord) THEN oJsonReturn:ADD('infoRecord' , oInfoRecord ).
  1700. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1701. DELETE OBJECT oJsonArray NO-ERROR.
  1702. DELETE OBJECT hBuffer NO-ERROR.
  1703. DELETE OBJECT ttTable NO-ERROR.
  1704. RETURN lOK.
  1705. END METHOD.
  1706. /*------------------------------------------------------------------------------
  1707. Purpose:
  1708. Notes:
  1709. ------------------------------------------------------------------------------*/
  1710. METHOD PUBLIC LOGICAL rebuildData(
  1711. OUTPUT oJsonReturn AS JsonObject
  1712. ):
  1713. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  1714. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1715. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
  1716. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1717. DEFINE VARIABLE cAddress AS CHARACTER NO-UNDO.
  1718. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO.
  1719. DEFINE VARIABLE cFormUser AS CHARACTER NO-UNDO.
  1720. DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  1721. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  1722. DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
  1723. DEFINE VARIABLE oJsonEditable AS JsonArray NO-UNDO.
  1724. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  1725. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1726. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  1727. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1728. outilitiesHandler:readLastRecord(
  1729. INPUT oJsonIdent ,
  1730. OUTPUT cUniqueWhere
  1731. ).
  1732. CREATE BUFFER hUniqueBuffer FOR TABLE cFileName.
  1733. hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK).
  1734. rBuffer = hUniqueBuffer:RECID.
  1735. oJsonIdent:ADD('rBuffer', INT64(rBuffer)).
  1736. IF oJsonIdent:HAS('search') THEN
  1737. DO:
  1738. oJsonIdent:Remove('search') NO-ERROR.
  1739. oJsonIdent:SET('lSearch', FALSE) NO-ERROR.
  1740. END.
  1741. buildWhere().
  1742. outilitiesHandler:evaluatePageNumber(
  1743. INPUT-OUTPUT oJsonIdent ,
  1744. INPUT cWhere ,
  1745. INPUT rBuffer ,
  1746. INPUT 'current'
  1747. ).
  1748. // createTempTable().
  1749. iAnzRec = fillTemptableFromTable(
  1750. OUTPUT oJsonReturn
  1751. ).
  1752. /* hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.*/
  1753. /* outilitiesHandler:evaluateErrorStatus(hError).*/
  1754. oJsonIdent:SET('language_id', hUniqueBuffer::language_id).
  1755. oselectboxHandler:getVariableSelectBoxes(
  1756. INPUT oJsonIdent ,
  1757. OUTPUT oJsonSelectBoxes
  1758. ).
  1759. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1760. lRetVal = TRUE.
  1761. RETURN lRetVal.
  1762. END METHOD.
  1763. /*------------------------------------------------------------------------------
  1764. Purpose:
  1765. Notes:
  1766. ------------------------------------------------------------------------------*/
  1767. METHOD PUBLIC LOGICAL recordChange(
  1768. INPUT oJsonData AS JsonObject ,
  1769. OUTPUT oJsonReturn AS JsonObject
  1770. ):
  1771. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1772. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  1773. DEFINE VARIABLE cBufferField AS CHARACTER NO-UNDO.
  1774. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1775. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1776. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1777. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  1778. // DEFINE VARIABLE hUniqueBuffer AS HANDLE NO-UNDO.
  1779. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1780. DEFINE VARIABLE oInfoRecord AS JsonObject NO-UNDO.
  1781. DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
  1782. DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
  1783. DEFINE VARIABLE cContactField AS CHARACTER NO-UNDO.
  1784. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1785. createTempTable().
  1786. oJsonRecord = NEW JsonObject().
  1787. oJsonRecord = oJsonData:GetJsonObject('record').
  1788. oJsonRecord:WriteFile(SUBSTITUTE('C:\Temp\RecordChange_&1.json', cFileName), TRUE).
  1789. httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
  1790. outilitiesHandler:evaluateErrorStatus(hError).
  1791. //
  1792. // den ersten Datensatz in der TEMP-TABLE lesen
  1793. //
  1794. httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
  1795. hField = httTable:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
  1796. IF VALID-HANDLE(hField) AND
  1797. NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', httTable::language_id).
  1798. //
  1799. // Erzeugen von Where-Statement für UNIQUE-Find
  1800. //
  1801. createUniqueWhere(
  1802. INPUT httTable,
  1803. OUTPUT cUniqueWhere
  1804. ).
  1805. MESSAGE 'recordChange uniquewhere' cUniqueWhere.
  1806. outilitiesHandler:writeLastRecord(
  1807. INPUT oJsonIdent ,
  1808. INPUT cUniqueWhere
  1809. ).
  1810. /* outilitiesHandler:readLastcWhere(*/
  1811. /* INPUT oJsonIdent , */
  1812. /* INPUT cFileName , */
  1813. /* OUTPUT cWhere */
  1814. /* ). */
  1815. /* */
  1816. createInfoRecord(
  1817. OUTPUT oInfoRecord
  1818. ).
  1819. hBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK).
  1820. httTable:EMPTY-TEMP-TABLE ().
  1821. httTable:BUFFER-CREATE ().
  1822. httTable:BUFFER-COPY (hBuffer).
  1823. DELETE OBJECT oJsonRecord.
  1824. oJsonRecord = NEW JsonObject().
  1825. oJsonArray = NEW JsonArray().
  1826. httTable:WRITE-JSON('JsonObject', oJsonRecord).
  1827. oJsonArray = oJsonRecord:GetJsonArray('record').
  1828. oJsonRecord = oJsonArray:GetJsonObject(1).
  1829. oselectboxHandler:getVariableSelectBoxes(
  1830. INPUT oJsonIdent ,
  1831. OUTPUT oJsonSelectBoxes
  1832. ).
  1833. lOk = TRUE.
  1834. oJsonReturn = NEW JsonObject().
  1835. oJsonReturn:ADD('success', lOK ).
  1836. oJsonReturn:ADD('record' , oJsonRecord).
  1837. IF VALID-OBJECT(oInfoRecord) THEN oJsonReturn:ADD('infoRecord', oInfoRecord ).
  1838. IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
  1839. // oJsonReturn:WriteFile(SUBSTITUTE('C:\Temp\RecordChange_&1_return.json', cFileName), TRUE).
  1840. DELETE OBJECT ttTable NO-ERROR.
  1841. DELETE OBJECT hBuffer NO-ERROR.
  1842. DELETE OBJECT oJsonArray NO-ERROR.
  1843. RETURN lOK.
  1844. END METHOD.
  1845. /*------------------------------------------------------------------------------
  1846. Purpose:
  1847. Notes:
  1848. ------------------------------------------------------------------------------*/
  1849. METHOD PUBLIC LOGICAL updateBegin(
  1850. INPUT oJsonData AS JsonObject ,
  1851. OUTPUT oJsonReturn AS JsonObject
  1852. ):
  1853. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1854. DEFINE VARIABLE lAddressFix AS LOGICAL NO-UNDO.
  1855. DEFINE VARIABLE oJsonAction AS JsonArray NO-UNDO.
  1856. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  1857. iFormTabIndex = (IF oJsonIdent:HAS('formTabIndex') THEN INTEGER(oJsonIdent:GetCharacter('formTabIndex')) ELSE 1).
  1858. cFileName = oJsonIdent:GetCharacter('file_name').
  1859. oJsonRecord = NEW JsonObject().
  1860. oJsonRecord = oJsonData:GetJsonObject('record').
  1861. oJsonData:WriteFile(SUBSTITUTE('C:\TEMP\updateBegin_&1.json', cFileName), TRUE).
  1862. IF cFileName = 'addresses' AND
  1863. iFormTabIndex = 1 THEN
  1864. DO:
  1865. lAddressFix = LOGICAL(oJsonRecord:GetJsonText('addresses_address_fix')).
  1866. oJsonAction = NEW JsonArray().
  1867. oJsonAction:ADD('addresses_address').
  1868. oJsonReturn = NEW JsonObject().
  1869. oJsonReturn:ADD('success', TRUE).
  1870. IF lAddressFix THEN oJsonReturn:ADD('editableFields', oJsonAction).
  1871. ELSE oJsonReturn:ADD('disabledFields', oJsonAction).
  1872. END.
  1873. IF cFileName = 'addresses' AND
  1874. iFormTabIndex = 2 THEN
  1875. DO:
  1876. oJsonAction = NEW JsonArray().
  1877. // oJsonAction:ADD('addresses_address').
  1878. oJsonReturn = NEW JsonObject().
  1879. oJsonReturn:ADD('success', TRUE).
  1880. // IF lAddressFix THEN oJsonReturn:ADD('editableFields', oJsonAction).
  1881. // ELSE oJsonReturn:ADD('disabledFields', oJsonAction).
  1882. END.
  1883. IF cFileName = 'communication' THEN
  1884. DO:
  1885. oJsonAction = NEW JsonArray().
  1886. oJsonAction:ADD('communication_comm_type').
  1887. oJsonReturn = NEW JsonObject().
  1888. oJsonReturn:ADD('success', TRUE).
  1889. oJsonReturn:ADD('disabledFields', oJsonAction).
  1890. END.
  1891. lRetVal = TRUE.
  1892. RETURN lRetVal.
  1893. END METHOD.
  1894. /*------------------------------------------------------------------------------
  1895. Purpose:
  1896. Notes:
  1897. ------------------------------------------------------------------------------*/
  1898. METHOD PUBLIC VOID updateCommunication(
  1899. INPUT iContact_Id AS INTEGER
  1900. ):
  1901. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1902. DEFINE VARIABLE cAddrWhere AS CHARACTER NO-UNDO.
  1903. IF iContact_Id > 0 THEN RETURN.
  1904. EMPTY TEMP-TABLE ttcommunication.
  1905. REPEAT /*TRANSACTION*/ ON ERROR UNDO, LEAVE:
  1906. CASE cFileName:
  1907. WHEN 'addresses' THEN
  1908. DO:
  1909. CREATE BUFFER hBuffer FOR TABLE cFileName.
  1910. cAddrWhere = SUBSTITUTE('WHERE &1.address_id = &2', cFileName, iAddress_Id).
  1911. hBuffer:FIND-UNIQUE (cAddrWhere, NO-LOCK).
  1912. EMPTY TEMP-TABLE ttcommunication.
  1913. CREATE ttcommunication.
  1914. ASSIGN
  1915. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1916. ttcommunication.address_id = hBuffer::address_id
  1917. ttcommunication.contact_id = iContact_Id
  1918. ttcommunication.comm_type = 1
  1919. ttcommunication.content = hBuffer::phone_business
  1920. .
  1921. CREATE ttcommunication.
  1922. ASSIGN
  1923. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1924. ttcommunication.address_id = hBuffer::address_id
  1925. ttcommunication.contact_id = iContact_Id
  1926. ttcommunication.comm_type = 2
  1927. ttcommunication.content = hBuffer::phone_private
  1928. .
  1929. CREATE ttcommunication.
  1930. ASSIGN
  1931. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1932. ttcommunication.address_id = hBuffer::address_id
  1933. ttcommunication.contact_id = iContact_Id
  1934. ttcommunication.comm_type = 3
  1935. ttcommunication.content = hBuffer::mobile_business
  1936. .
  1937. CREATE ttcommunication.
  1938. ASSIGN
  1939. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1940. ttcommunication.address_id = hBuffer::address_id
  1941. ttcommunication.contact_id = iContact_Id
  1942. ttcommunication.comm_type = 4
  1943. ttcommunication.content = hBuffer::mobile_private
  1944. .
  1945. CREATE ttcommunication.
  1946. ASSIGN
  1947. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1948. ttcommunication.address_id = hBuffer::address_id
  1949. ttcommunication.contact_id = iContact_Id
  1950. ttcommunication.comm_type = 5
  1951. ttcommunication.content = hBuffer::e-mail.
  1952. .
  1953. CREATE ttcommunication.
  1954. ASSIGN
  1955. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1956. ttcommunication.address_id = hBuffer::address_id
  1957. ttcommunication.contact_id = iContact_Id
  1958. ttcommunication.comm_type = 7
  1959. ttcommunication.content = hBuffer::fax.
  1960. .
  1961. CREATE ttcommunication.
  1962. ASSIGN
  1963. ttcommunication.company = oJsonIdent:GetCharacter('company')
  1964. ttcommunication.address_id = hBuffer::address_id
  1965. ttcommunication.contact_id = iContact_Id
  1966. ttcommunication.comm_type = 8
  1967. ttcommunication.content = hBuffer::homepage.
  1968. .
  1969. FOR EACH ttcommunication:
  1970. FIND communication OF ttcommunication NO-ERROR.
  1971. IF NOT AVAILABLE communication AND
  1972. ttcommunication.content <> '' THEN
  1973. DO:
  1974. CREATE communication.
  1975. BUFFER-COPY ttcommunication TO communication.
  1976. ASSIGN
  1977. communication.created_at = TODAY
  1978. communication.created_by = oJsonIdent:GetCharacter('H_display_name').
  1979. NEXT.
  1980. END.
  1981. IF ttcommunication.content = '' AND
  1982. AVAILABLE communication THEN
  1983. DO:
  1984. DELETE communication.
  1985. NEXT.
  1986. END.
  1987. IF ttcommunication.content = '' THEN NEXT.
  1988. IF ttcommunication.content = communication.content THEN NEXT.
  1989. ASSIGN
  1990. communication.content = ttcommunication.content
  1991. communication.updated_at = TODAY
  1992. communication.updated_by = oJsonIdent:GetCharacter('H_display_name').
  1993. RELEASE communication.
  1994. END.
  1995. END.
  1996. WHEN 'communication' THEN
  1997. DO:
  1998. FIND addresses EXCLUSIVE-LOCK
  1999. WHERE addresses.address_id = iAddress_Id NO-WAIT NO-ERROR.
  2000. IF NOT AVAILABLE addresses THEN LEAVE.
  2001. ASSIGN
  2002. addresses.homepage = ''
  2003. addresses.phone_business = ''
  2004. addresses.phone_private = ''
  2005. addresses.mobile_business = ''
  2006. addresses.mobile_private = ''
  2007. addresses.fax = ''
  2008. addresses.e-mail = ''
  2009. .
  2010. IF cFunction = 'delete' THEN
  2011. DO:
  2012. END.
  2013. FOR EACH communication NO-LOCK
  2014. WHERE communication.company = cCompany
  2015. AND communication.address_id = iAddress_Id
  2016. AND communication.contact_id = iContact_Id:
  2017. CASE communication.comm_type:
  2018. WHEN 1 THEN
  2019. addresses.phone_business = communication.content.
  2020. WHEN 2 THEN
  2021. addresses.phone_privat = communication.content.
  2022. WHEN 3 THEN
  2023. addresses.mobile_business = communication.content.
  2024. WHEN 4 THEN
  2025. addresses.mobile_privat = communication.content.
  2026. WHEN 5 THEN
  2027. addresses.e-mail = communication.content.
  2028. WHEN 7 THEN
  2029. addresses.fax = communication.content.
  2030. WHEN 8 THEN
  2031. addresses.homepage = communication.content.
  2032. END.
  2033. END.
  2034. RELEASE addresses.
  2035. END.
  2036. END CASE.
  2037. LEAVE.
  2038. END.
  2039. // DELETE OBJECT hBuffer.
  2040. RETURN.
  2041. END METHOD.
  2042. /*------------------------------------------------------------------------------
  2043. Purpose:
  2044. Notes:
  2045. ------------------------------------------------------------------------------*/
  2046. METHOD PUBLIC LOGICAL updateData(
  2047. INPUT oJsonData AS jsonObject,
  2048. OUTPUT oJsonReturn AS JsonObject
  2049. ):
  2050. DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
  2051. DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
  2052. DEFINE VARIABLE oJsonRecord AS JsonObject NO-UNDO.
  2053. DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
  2054. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  2055. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  2056. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  2057. DEFINE VARIABLE htField AS HANDLE NO-UNDO.
  2058. DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
  2059. DEFINE VARIABLE iContact_Id AS INTEGER NO-UNDO.
  2060. DEFINE VARIABLE hContact AS HANDLE NO-UNDO.
  2061. DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
  2062. oJsonRecord = NEW JsonObject().
  2063. oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
  2064. oJsonRecord:WriteFile(SUBSTitut('C:\TEMP\createAnschrift_&1.json', cFileName), TRUE).
  2065. oMasterKeyFields = NEW JsonObject().
  2066. oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
  2067. CREATE BUFFER hBuffer FOR TABLE cFileName.
  2068. createTempTable().
  2069. oJsonRecord:Write(lcttTable, FALSE).
  2070. // MESSAGE STRING(lcttTable).
  2071. lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
  2072. outilitiesHandler:evaluateErrorStatus(hError).
  2073. httTable:FIND-FIRST('', NO-LOCK).
  2074. // MESSAGE 'e'.
  2075. //
  2076. // Erzeugen von Where-Statement für UNIQUE-Find
  2077. //
  2078. createUniqueWhere(
  2079. INPUT httTable,
  2080. OUTPUT cUniqueWhere
  2081. ).
  2082. // MESSAGE cUniqueWhere.
  2083. lRetVal = FALSE.
  2084. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  2085. lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, EXCLUSIVE-LOCK, NO-WAIT) NO-ERROR.
  2086. IF hBuffer:LOCKED THEN
  2087. DO:
  2088. hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
  2089. rBuffer = hBuffer:RECID.
  2090. outilitiesHandler:createLockMessage(
  2091. INPUT oJsonIdent,
  2092. INPUT rBuffer ,
  2093. OUTPUT oJsonMessageBox
  2094. ).
  2095. oJsonReturn = NEW JsonObject().
  2096. oJsonReturn:ADD('success' , TRUE ).
  2097. oJsonReturn:ADD('showMessage', oJsonMessageBox).
  2098. RETURN TRUE.
  2099. END.
  2100. IF NOT lOK THEN
  2101. DO:
  2102. outilitiesHandler:createErrorBox(
  2103. INPUT oJsonIdent ,
  2104. INPUT '2000' ,
  2105. INPUT '' ,
  2106. OUTPUT oJsonMessageBox
  2107. ).
  2108. oJsonReturn = NEW JsonObject().
  2109. oJsonReturn:ADD('success' , TRUE ).
  2110. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  2111. RETURN TRUE.
  2112. END.
  2113. IF INDEX(lcttTable, 'address_id') > 0 THEN iAddress_Id = hBuffer::address_Id.
  2114. IF INDEX(lcttTable, 'contact_id') > 0 THEN iContact_Id = hBuffer::contact_id.
  2115. rBuffer = hBuffer:RECID.
  2116. DO WHILE lActive :
  2117. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  2118. IF NOT VALID-HANDLE(hField) THEN LEAVE.
  2119. IF hField:BUFFER-VALUE = TRUE THEN LEAVE.
  2120. htField = httTable:BUFFER-FIELD('active') NO-ERROR.
  2121. IF NOT VALID-HANDLE(htField) THEN LEAVE.
  2122. IF hField:BUFFER-VALUE = FALSE AND htField:BUFFER-VALUE = TRUE THEN LEAVE.
  2123. outilitiesHandler:createQuestionBox(
  2124. INPUT oJsonIdent ,
  2125. INPUT '2000' ,
  2126. INPUT '' ,
  2127. INPUT 'active' ,
  2128. INPUT 'true' ,
  2129. INPUT hBuffer ,
  2130. OUTPUT oJsonMessageBox
  2131. ) NO-ERROR.
  2132. oJsonReturn = NEW JsonObject().
  2133. oJsonReturn:ADD('success' , TRUE ).
  2134. oJsonReturn:ADD('record' , oJsonRecord ).
  2135. oJsonReturn:ADD('askQuestion' , oJsonMessageBox ).
  2136. RETURN TRUE.
  2137. END.
  2138. lOK = hBuffer:BUFFER-COMPARE(httTable, 'case-sensitive') NO-ERROR.
  2139. hBuffer:BUFFER-COPY(httTable) NO-ERROR.
  2140. outilitiesHandler:evaluateErrorStatus(hError).
  2141. // MESSAGE 'compare ergab' lOK.
  2142. hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
  2143. IF NOT ERROR-STATUS:ERROR AND
  2144. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = NOW.
  2145. hField = hBuffer:BUFFER-FIELD('updated_by'):HANDLE NO-ERROR.
  2146. IF NOT ERROR-STATUS:ERROR AND
  2147. VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = oJsonIdent:GetCharacter('H_display_name').
  2148. IF NOT lOK THEN
  2149. DO:
  2150. IF cFileName = 'addresses' OR
  2151. cFileName = 'communication' THEN
  2152. DO:
  2153. updateCommunication(
  2154. INPUT iContact_Id
  2155. ).
  2156. END.
  2157. IF cFileName = 'addresses' THEN
  2158. DO:
  2159. FIND contact_persons
  2160. WHERE contact_persons.company = cCompany
  2161. AND contact_persons.address_Id = iAddress_Id
  2162. AND contact_persons.contact_id = 0 NO-ERROR.
  2163. IF NOT AVAILABLE contact_persons THEN
  2164. DO:
  2165. CREATE contact_persons.
  2166. ASSIGN
  2167. contact_persons.company = cCompany
  2168. contact_persons.address_id = iAddress_Id
  2169. contact_persons.contact_id = 0.
  2170. END.
  2171. hContact = BUFFER contact_persons:HANDLE.
  2172. hContact:BUFFER-COPY(httTable, 'commpany,address_id,contact_id,created_at,created_by,updated_at,updated_by').
  2173. contact_persons.created_at = NOW.
  2174. contact_persons.created_by = oJsonIdent:GetCharacter('H_display_name').
  2175. END.
  2176. //
  2177. // Anschrift und Briefanrede erstellen
  2178. //
  2179. iFormTabIndex = 1.
  2180. IF oJsonIdent:HAS('formTabIndex') THEN iFormTabIndex = INTEGER(oJsonIdent:GetJsonText('formTabIndex')).
  2181. IF iFormTabIndex = 1 AND
  2182. cFileName = 'addresses' AND
  2183. NOT httTable::address_fix THEN
  2184. DO:
  2185. createAnschrift(
  2186. INPUT-OUTPUT httTable
  2187. ).
  2188. END.
  2189. END.
  2190. oJsonData = NEW JsonObject().
  2191. oJsonArray = NEW JsonArray ().
  2192. httTable:BUFFER-COPY(hBuffer).
  2193. httTable:WRITE-JSON('JsonObject', oJsonData).
  2194. oJsonArray = oJsonData:GetJsonArray('record').
  2195. oJsonData = oJsonArray:GetJsonObject(1).
  2196. hBuffer:BUFFER-RELEASE ().
  2197. lRetVal = TRUE.
  2198. LEAVE.
  2199. END.
  2200. fillWordIndexTable().
  2201. IF lRetVal THEN
  2202. DO:
  2203. oJsonReturn = NEW JsonObject().
  2204. oJsonReturn:ADD('success', TRUE ).
  2205. oJsonReturn:ADD('record' , oJsonData).
  2206. outilitiesHandler:createInfoBox(
  2207. INPUT oJsonIdent ,
  2208. INPUT '2003' ,
  2209. INPUT '' ,
  2210. OUTPUT oJsonMessageBox
  2211. ) NO-ERROR.
  2212. oJsonReturn:ADD('showMessage' , oJsonMessageBox).
  2213. RETURN TRUE.
  2214. END.
  2215. IF NOT lRetVal THEN
  2216. DO:
  2217. oJsonMessage = NEW JsonObject().
  2218. oJsonMessage:ADD('success', FALSE).
  2219. oJsonMessage:ADD('message', lcMessage).
  2220. oJsonMessage:WRITE(lcJsonString, FALSE).
  2221. oJsonReturn = oJsonMessage.
  2222. RETURN TRUE.
  2223. END.
  2224. CATCH e AS Progress.Lang.Error:
  2225. END CATCH.
  2226. FINALLY:
  2227. END FINALLY.
  2228. END METHOD.
  2229. DESTRUCTOR PUBLIC addressprogsHandler ( ):
  2230. DELETE OBJECT ttJsonIdent NO-ERROR.
  2231. END DESTRUCTOR.
  2232. END CLASS.