addressprogsHandler.cls 110 KB

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