utilitiesHandler.cls 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018
  1. /*------------------------------------------------------------------------
  2. File : queryHandler
  3. Purpose :
  4. Syntax :
  5. Description :
  6. Author(s) : walter.riechsteiner
  7. Created : Wed Jul 10 18:09:37 CEST 2024
  8. Notes :
  9. ----------------------------------------------------------------------*/
  10. USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
  11. USING OpenEdge.Web.IWebRequest FROM PROPATH.
  12. CLASS utilities.utilitiesHandler:
  13. PROCEDURE GetUserNameA EXTERNAL "advapi32.dll":
  14. DEFINE OUTPUT PARAMETER lpUserName AS MEMPTR.
  15. DEFINE INPUT-OUTPUT PARAMETER nChars AS LONG.
  16. DEFINE RETURN PARAMETER bool AS SHORT.
  17. END PROCEDURE.
  18. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  19. DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
  20. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  21. // DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  22. /*------------------------------------------------------------------------------
  23. Purpose:
  24. Notes:
  25. ------------------------------------------------------------------------------*/
  26. METHOD PUBLIC VOID createErrorBox(
  27. INPUT oJsonIdent AS JsonObject,
  28. INPUT cErrorNumber AS CHARACTER ,
  29. INPUT cParameter AS CHARACTER ,
  30. OUTPUT oJsonMessageBox AS JsonObject
  31. ):
  32. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  33. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  34. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  35. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  36. getErrorMessage(
  37. INPUT '2012' ,
  38. INPUT ilanguage_id ,
  39. INPUT '' ,
  40. OUTPUT lcTitle
  41. ).
  42. getErrorMessage(
  43. INPUT cErrorNumber,
  44. INPUT ilanguage_id,
  45. INPUT cParameter ,
  46. OUTPUT lcMessage
  47. ).
  48. oJsonMessageBox = NEW JsonObject().
  49. oJsonMessageBox:ADD('type' , 'info').
  50. oJsonMessageBox:ADD('title', lcTitle ).
  51. oJsonMessageBox:ADD('text' , lcMessage ).
  52. RETURN.
  53. END METHOD.
  54. /*------------------------------------------------------------------------------
  55. Purpose:
  56. Notes:
  57. ------------------------------------------------------------------------------*/
  58. METHOD PUBLIC VOID createInfoBox(
  59. INPUT oJsonIdent AS JsonObject,
  60. INPUT cErrorNumber AS CHARACTER ,
  61. INPUT cParameter AS CHARACTER ,
  62. OUTPUT oJsonMessageBox AS JsonObject
  63. ):
  64. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  65. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  66. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  67. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  68. getErrorMessage(
  69. INPUT '2013' ,
  70. INPUT ilanguage_id ,
  71. INPUT '' ,
  72. OUTPUT lcTitle
  73. ).
  74. getErrorMessage(
  75. INPUT cErrorNumber,
  76. INPUT ilanguage_id,
  77. INPUT cParameter ,
  78. OUTPUT lcMessage
  79. ).
  80. oJsonMessageBox = NEW JsonObject().
  81. oJsonMessageBox:ADD('type' , 'info').
  82. oJsonMessageBox:ADD('title', lcTitle ).
  83. oJsonMessageBox:ADD('text' , lcMessage ).
  84. RETURN.
  85. END METHOD.
  86. /*------------------------------------------------------------------------------
  87. Purpose:
  88. Notes:
  89. ------------------------------------------------------------------------------*/
  90. METHOD PUBLIC VOID createLockMessage(
  91. INPUT oJsonIdent AS JsonObject,
  92. INPUT rRecid AS RECID ,
  93. OUTPUT oJsonMessageBox AS JsonObject
  94. ):
  95. DEFINE VARIABLE lFound AS LOGICAL NO-UNDO INIT FALSE.
  96. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  97. DEFINE VARIABLE cLockName AS CHARACTER NO-UNDO.
  98. DEFINE VARIABLE cLockUser AS INTEGER NO-UNDO.
  99. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  100. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  101. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  102. DO WHILE NOT lFound:
  103. FIND FIRST Ge_MIS._Lock NO-LOCK
  104. WHERE Ge_MIS._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
  105. IF NOT AVAILABLE Ge_MIS._Lock THEN LEAVE.
  106. FIND Ge_MIS._File NO-LOCK
  107. WHERE Ge_MIS._File._File-Number = Ge_MIS._Lock._Lock-Table.
  108. ASSIGN
  109. cFileName = Ge_MIS._File._File-Name
  110. cLockName = Ge_MIS._Lock._Lock-Name
  111. cLockUser = Ge_MIS._Lock._Lock-Usr.
  112. lFound = TRUE.
  113. LEAVE.
  114. END.
  115. DO WHILE NOT lFound:
  116. FIND FIRST FRAMEWORK._Lock NO-LOCK
  117. WHERE FRAMEWORK._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
  118. IF NOT AVAILABLE FRAMEWORK._Lock THEN LEAVE.
  119. FIND FRAMEWORK._File NO-LOCK
  120. WHERE FRAMEWORK._File._File-Number = FRAMEWORK._Lock._Lock-Table.
  121. ASSIGN
  122. cFileName = FRAMEWORK._File._File-Name
  123. cLockName = FRAMEWORK._Lock._Lock-Name
  124. cLockUser = FRAMEWORK._Lock._Lock-Usr.
  125. lFound = TRUE.
  126. LEAVE.
  127. END.
  128. iLanguage_id = oJsonIdent:GetInteger('language_id').
  129. getErrorMessage(
  130. INPUT '2013' ,
  131. INPUT ilanguage_id ,
  132. INPUT '' ,
  133. OUTPUT lcTitle
  134. ).
  135. getErrorMessage(
  136. INPUT '2006',
  137. INPUT ilanguage_id,
  138. INPUT SUBSTITUTE('&1;&2;&3', cFileName, cLockName, cLockUser),
  139. OUTPUT lcMessage
  140. ).
  141. oJsonMessageBox = NEW JsonObject().
  142. oJsonMessageBox:ADD('type' , 'info').
  143. oJsonMessageBox:ADD('title', lcTitle ).
  144. oJsonMessageBox:ADD('text' , lcMessage ).
  145. RETURN.
  146. END METHOD.
  147. /*------------------------------------------------------------------------------
  148. Purpose:
  149. Notes:
  150. ------------------------------------------------------------------------------*/
  151. METHOD PUBLIC VOID createQuestionBox(
  152. INPUT oJsonIdent AS JsonObject,
  153. INPUT cErrorNumber AS CHARACTER ,
  154. INPUT cParameter AS CHARACTER ,
  155. INPUT cFields AS CHARACTER ,
  156. INPUT cValues AS CHARACTER ,
  157. INPUT hBuffer AS HANDLE ,
  158. OUTPUT oJsonMessageBox AS JsonObject
  159. ):
  160. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  161. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  162. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  163. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  164. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  165. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  166. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  167. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  168. DEFINE VARIABLE oJsonUpdate AS JsonObject.
  169. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  170. getErrorMessage(
  171. INPUT '2011' ,
  172. INPUT ilanguage_id ,
  173. INPUT '' ,
  174. OUTPUT lcTitle
  175. ).
  176. getErrorMessage(
  177. INPUT cErrorNumber,
  178. INPUT ilanguage_id,
  179. INPUT cParameter ,
  180. OUTPUT lcMessage
  181. ).
  182. oJsonMessageBox = NEW JsonObject().
  183. oJsonMessageBox:ADD('type' , 'question').
  184. oJsonMessageBox:ADD('title', lcTitle ).
  185. oJsonMessageBox:ADD('text' , lcMessage ).
  186. oJsonUpdate = NEW JsonObject().
  187. DO ii = 1 TO NUM-ENTRIES(cFields, ';'):
  188. cField = ENTRY(ii, cFields, ';') .
  189. cValue = ENTRY(ii, cValues, CHR(01)).
  190. hField = hBuffer:BUFFER-FIELD(cField):HANDLE.
  191. cType = hField:DATA-TYPE.
  192. CASE ctype:
  193. WHEN 'logical' THEN oJsonUpdate:ADD(cField, LOGICAL(cValue) ).
  194. WHEN 'integer' THEN oJsonUpdate:ADD(cField, INTEGER(cValue) ).
  195. WHEN 'decimal' THEN oJsonUpdate:ADD(cField, DECIMAL(cValue) ).
  196. WHEN 'date' THEN oJsonUpdate:ADD(cField, STRING(DATE(cValue),'99.99.9999') ).
  197. OTHERWISE oJsonUpdate:ADD(cField, cValue ).
  198. END CASE.
  199. END.
  200. oJsonMessageBox:ADD('fieldUpdate', oJsonUpdate).
  201. RETURN.
  202. END METHOD.
  203. /*------------------------------------------------------------------------------
  204. Purpose:
  205. Notes:
  206. ------------------------------------------------------------------------------*/
  207. METHOD PUBLIC LONGCHAR createWordindex(
  208. INPUT hBuffer AS HANDLE
  209. ):
  210. DEFINE VARIABLE cWordIndex AS LONGCHAR NO-UNDO.
  211. DEFINE VARIABLE cWords AS CHARACTER NO-UNDO.
  212. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  213. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  214. DEFINE VARIABLE cWord AS CHARACTER NO-UNDO.
  215. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  216. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  217. DEFINE VARIABLE iNumerisch AS INT64 NO-UNDO.
  218. DEFINE VARIABLE cBuffValue AS CHARACTER NO-UNDO.
  219. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  220. DEFINE VARIABLE dDate AS DATE NO-UNDO.
  221. DEFINE VARIABLE nValue AS DECIMAL NO-UNDO.
  222. cWords = ''.
  223. DO ii = 1 TO hBuffer:NUM-FIELDS:
  224. hField = hBuffer:BUFFER-FIELD(ii):HANDLE.
  225. IF hField:EXTENT > 0 THEN NEXT.
  226. IF INDEX(hField:NAME, 'SHA') > 0 THEN NEXT.
  227. IF INDEX(hField:NAME, 'word') > 0 THEN NEXT.
  228. IF INDEX(hField:NAME, 'updated_') > 0 THEN NEXT.
  229. IF INDEX(hField:NAME, 'created_') > 0 THEN NEXT.
  230. cDatatype = hField:DATA-TYPE.
  231. IF cDatatype = 'logical' THEN NEXT.
  232. cBuffValue = hField:BUFFER-VALUE.
  233. IF cBuffValue = '' OR
  234. cBuffValue = '0' OR
  235. cBuffValue = ? THEN NEXT.
  236. DO i1 = 1 TO NUM-ENTRIES(cBuffValue, ' '):
  237. cWord = ENTRY(i1, cBuffValue, ' ').
  238. CASE cDatatype:
  239. WHEN 'date' THEN
  240. DO:
  241. dDate = DATE(cWord) NO-ERROR.
  242. IF ERROR-STATUS:ERROR THEN NEXT.
  243. cWord = STRING(dDate,'99.99.9999').
  244. END.
  245. WHEN 'integer' OR
  246. WHEN 'in64' OR
  247. WHEN 'decimal' THEN
  248. DO:
  249. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  250. END.
  251. OTHERWISE
  252. DO:
  253. nValue = DECIMAL(cWord) NO-ERROR.
  254. IF NOT ERROR-STATUS:ERROR THEN
  255. DO:
  256. cWord = TRIM(STRING(nValue,'->>>>>>>>>9.999999')).
  257. cWord = REPLACE(cWord, '.000000', '').
  258. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  259. END.
  260. END.
  261. END.
  262. IF LOOKUP(cWord, cWords, ' ') > 0 THEN NEXT.
  263. cWords = cWords + (IF cWords = '' THEN '' ELSE ' ') + cWord.
  264. END.
  265. END.
  266. cWords = TRIM(cWords).
  267. cWords = REPLACE(cWords, ' ', ' ').
  268. cWordIndex = TRIM(cWords).
  269. RETURN cWordIndex.
  270. END METHOD.
  271. /*------------------------------------------------------------------------------
  272. Purpose:
  273. Notes:
  274. ------------------------------------------------------------------------------*/
  275. METHOD PUBLIC CHARACTER createWordindexFromTable(
  276. INPUT hBuffer AS HANDLE
  277. ):
  278. DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
  279. DEFINE VARIABLE cWords AS CHARACTER NO-UNDO.
  280. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  281. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  282. DEFINE VARIABLE cWord AS CHARACTER NO-UNDO.
  283. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  284. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  285. DEFINE VARIABLE iNumerisch AS INT64 NO-UNDO.
  286. DEFINE VARIABLE cBuffValue AS CHARACTER NO-UNDO.
  287. DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
  288. DEFINE VARIABLE dDate AS DATE NO-UNDO.
  289. DEFINE VARIABLE nValue AS DECIMAL NO-UNDO.
  290. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  291. CREATE QUERY hQuery.
  292. hQuery:SET-BUFFERS(hBuffer).
  293. hQuery:QUERY-PREPARE ('FOR EACH ttWordIndexTable NO-LOCK ').
  294. hQuery:QUERY-OPEN ().
  295. hQuery:GET-FIRST () NO-ERROR.
  296. cWords = ''.
  297. DO WHILE NOT hQuery:QUERY-OFF-END:
  298. cDatatype = hBuffer::cDataType.
  299. cBuffValue = hBuffer::cValue.
  300. cField = hBuffer::cFieldName.
  301. DO WHILE TRUE:
  302. IF cBuffValue = '' OR
  303. cBuffValue = '0' OR
  304. cBuffValue = ? THEN LEAVE.
  305. cBuffValue = REPLACE(cBuffValue, ' ' , ' ').
  306. cBuffValue = REPLACE(cBuffValue, CHR(10), ' ').
  307. cBuffValue = REPLACE(cBuffValue, CHR(13), ' ').
  308. DO i1 = 1 TO NUM-ENTRIES(cBuffValue, ' '):
  309. cWord = ENTRY(i1, cBuffValue, ' ').
  310. CASE cDatatype:
  311. WHEN 'date' THEN
  312. DO:
  313. dDate = DATE(cWord) NO-ERROR.
  314. IF ERROR-STATUS:ERROR THEN NEXT.
  315. cWord = STRING(dDate,'99.99.9999').
  316. END.
  317. WHEN 'integer' OR
  318. WHEN 'in64' OR
  319. WHEN 'decimal' THEN
  320. DO:
  321. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  322. END.
  323. OTHERWISE
  324. DO:
  325. nValue = DECIMAL(cWord) NO-ERROR.
  326. IF NOT ERROR-STATUS:ERROR THEN
  327. DO:
  328. cWord = TRIM(STRING(nValue,'->>>>>>>>>9.999999')).
  329. cWord = REPLACE(cWord, '.000000', '').
  330. cWord = SUBSTITUTE('&1&2&1', CHR(01), cWord).
  331. END.
  332. END.
  333. END CASE.
  334. IF LOOKUP(cWord, cWords, ' ') > 0 THEN NEXT.
  335. cWords = cWords + (IF cWords = '' THEN '' ELSE ' ') + cWord.
  336. END.
  337. LEAVE.
  338. END.
  339. hQuery:GET-NEXT ().
  340. END.
  341. cWords = TRIM(cWords).
  342. cWords = REPLACE(cWords, ' ', ' ').
  343. cWordIndex = TRIM(cWords).
  344. DELETE OBJECT hQuery.
  345. RETURN cWordIndex.
  346. END METHOD.
  347. /*------------------------------------------------------------------------------
  348. Purpose:
  349. Notes:
  350. ------------------------------------------------------------------------------*/
  351. METHOD PUBLIC CHARACTER date2iso(
  352. INPUT dDate AS DATE
  353. ):
  354. DEFINE VARIABLE cisoDate AS CHARACTER NO-UNDO.
  355. cisoDate = SUBSTITUTE('&1-&2-&3', STRING(YEAR(dDate),'9999'), STRING(MONTH(dDate),'99'), STRING(DAY(dDate),'99')).
  356. RETURN cisoDate.
  357. END METHOD.
  358. /*------------------------------------------------------------------------------
  359. Purpose:
  360. Notes:
  361. ------------------------------------------------------------------------------*/
  362. METHOD PUBLIC LOGICAL evaluateErrorStatus(
  363. INPUT hError AS HANDLE
  364. ):
  365. DEFINE VARIABLE iNumMessages AS INTEGER NO-UNDO.
  366. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  367. IF NOT hError:ERROR THEN RETURN FALSE.
  368. cMessage = 'ERROR: '.
  369. DO iNumMessages = 1 TO hError:NUM-MESSAGES :
  370. cMessage = cMessage + hError:GET-MESSAGE(iNumMessages) + CHR(10) + ' '.
  371. END.
  372. MESSAGE cMessage.
  373. RETURN TRUE.
  374. END METHOD.
  375. /*------------------------------------------------------------------------------
  376. Purpose:
  377. Notes:
  378. ------------------------------------------------------------------------------*/
  379. METHOD PUBLIC VOID evaluateFile(
  380. INPUT-OUTPUT oJsonIdent AS JsonObject,
  381. OUTPUT cFileName AS CHARACTER,
  382. OUTPUT lCompany AS LOGICAL ,
  383. OUTPUT lActive AS LOGICAL ,
  384. OUTPUT lWordindex AS LOGICAL ,
  385. INPUT-OUTPUT httKeyFields AS HANDLE ,
  386. INPUT-OUTPUT httPrimaryIndex AS HANDLE
  387. ):
  388. DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
  389. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  390. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  391. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  392. DEFINE VARIABLE hDictFile AS HANDLE NO-UNDO.
  393. DEFINE VARIABLE hDictField AS HANDLE NO-UNDO.
  394. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  395. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  396. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  397. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  398. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  399. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  400. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  401. DEFINE VARIABLE rPrimeIndex AS RECID NO-UNDO.
  402. DEFINE VARIABLE rField AS RECID NO-UNDO.
  403. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  404. DEFINE VARIABLE cKeyField AS CHARACTER NO-UNDO.
  405. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  406. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  407. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  408. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  409. DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
  410. ccompany = oJsonIdent:GetCharacter('company' ) NO-ERROR.
  411. cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
  412. cprogram = oJsonIdent:GetCharacter('program' ) NO-ERROR.
  413. cFormId = oJsonIdent:GetCharacter('formId' ) NO-ERROR.
  414. IF oJsonIdent:HAS('file_name') THEN cFileName = oJsonIdent:GetCharacter('file_name').
  415. ELSE
  416. DO:
  417. cFileName = ENTRY(1, cFormId, '_').
  418. oJsonIdent:ADD('file_name', cFileName).
  419. END.
  420. ASSIGN
  421. lCompany = FALSE
  422. lActive = FALSE
  423. lWordIndex = FALSE.
  424. DO WHILE TRUE:
  425. cDBName = 'Ge_MIS'.
  426. cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
  427. CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
  428. IF VALID-HANDLE(hBuffer) THEN LEAVE.
  429. cDBName = 'FRAMEWORK'.
  430. DELETE OBJECT hBuffer NO-ERROR.
  431. cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
  432. CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
  433. IF VALID-HANDLE(hBuffer) THEN LEAVE.
  434. RETURN.
  435. END.
  436. oJsonIdent:ADD('DBName', cDBName).
  437. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  438. IF NOT ERROR-STATUS:ERROR AND
  439. VALID-HANDLE(hField) THEN lActive = TRUE.
  440. DELETE OBJECT hField NO-ERROR.
  441. hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
  442. IF NOT ERROR-STATUS:ERROR AND
  443. VALID-HANDLE(hField) THEN lWordIndex = TRUE.
  444. DELETE OBJECT hField NO-ERROR.
  445. hField = hBuffer:BUFFER-FIELD('company') NO-ERROR.
  446. IF NOT ERROR-STATUS:ERROR AND
  447. VALID-HANDLE(hField) THEN lCompany = TRUE.
  448. //
  449. // Dictionary _File Buffer ermitteln
  450. //
  451. cDBFileName = SUBSTITUTE('&1._File', cDBName).
  452. CREATE BUFFER hDictFile FOR TABLE cDBFileName NO-ERROR.
  453. cWhere = SUBSTITUTE('WHERE _File-Name = &1 ', QUOTER(cFileName)).
  454. lOK = hDictFile:FIND-FIRST (cWhere) NO-ERROR.
  455. rRecid = hDictFile:RECID.
  456. rPrimeIndex = hDictFile::_Prime-Index.
  457. DO WHILE lCompany:
  458. //
  459. // ermitteln RECID von Field company
  460. //
  461. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  462. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  463. cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = "company" ', rRecid) .
  464. lOK = hDictField:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  465. rField = hDictField:RECID.
  466. DELETE OBJECT hDictField NO-ERROR.
  467. //
  468. // is Field company ein Index-Feld ? -> Wenn nicht, Flag lCompany auf FALSE setzen
  469. //
  470. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  471. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  472. cWhere = SUBSTITUTE('WHERE _Field-Recid = &1 ', rField) .
  473. lOK = hDictField:FIND-FIRST(cWhere) NO-ERROR.
  474. IF NOT lOK THEN lCompany = FALSE.
  475. DELETE OBJECT hDictField.
  476. LEAVE.
  477. END.
  478. IF lCompany THEN
  479. DO:
  480. httKeyFields:BUFFER-CREATE ().
  481. ASSIGN
  482. httKeyFields::iIndex = 1
  483. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'company')
  484. httKeyFields::cFieldName = 'company'
  485. httKeyFields::cFileName = cFileName
  486. httKeyFields::cValue = ccompany
  487. httKeyFields::cDataType = 'character'
  488. httKeyFields::lKeyfield = TRUE.
  489. END.
  490. IF lActive THEN
  491. DO:
  492. getActiveSelection(
  493. INPUT oJsonIdent,
  494. INPUT cFileName ,
  495. OUTPUT cActiveSelection
  496. ) NO-ERROR.
  497. CASE cActiveSelection:
  498. WHEN 'activeOnly' THEN
  499. cActiveSelection = 'true'.
  500. WHEN 'inactiveOnly' THEN
  501. cActiveSelection = 'false'.
  502. OTHERWISE
  503. cActiveSelection = ''.
  504. END CASE.
  505. httKeyFields:BUFFER-CREATE ().
  506. ASSIGN
  507. httKeyFields::iIndex = 99
  508. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'active')
  509. httKeyFields::cFieldName = 'active'
  510. httKeyFields::cFileName = cFileName
  511. httKeyFields::cValue = cActiveSelection
  512. httKeyFields::cDataType = 'logical'
  513. httKeyFields::lKeyfield = TRUE.
  514. END.
  515. //
  516. // restlichen Keyfelder in Tabelle schreiben
  517. //
  518. CREATE BUFFER hField FOR TABLE SUBSTITUTE('&1._Field', cDBName).
  519. cFieldNames = oJsonIdent:getNames().
  520. cKeyFieldReplace = SUBSTITUTE ('keyField_&1_', cFileName).
  521. DO i1 = 1 TO EXTENT(cFieldNames):
  522. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  523. cFieldName = cFieldNames[i1].
  524. IF NOT ENTRY(2, cFieldName, '_') = cFileName THEN ENTRY(2, cFieldName, '_') = cFileName.
  525. cKeyField = cFieldNames[i1].
  526. cField = REPLACE(cFieldName, cKeyFieldReplace, '').
  527. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
  528. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  529. IF lOK THEN
  530. DO:
  531. cValue = oJsonIdent:GetCharacter(cKeyField) NO-ERROR.
  532. httKeyFields::cvalue = cValue.
  533. NEXT.
  534. END.
  535. cValue = oJsonIdent:GetCharacter(cKeyField) NO-ERROR.
  536. cWhere = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
  537. hField:FIND-FIRST(cWhere, NO-LOCK).
  538. httKeyFields:BUFFER-CREATE().
  539. ASSIGN
  540. httKeyFields::iIndex = i1 + 1
  541. httKeyFields::cLongName = cKeyField
  542. httKeyFields::cFieldName = cField
  543. httKeyFields::cFileName = cFileName
  544. httKeyFields::cValue = cValue
  545. httKeyFields::cDataType = hField::_Data-Type
  546. httKeyFields::lKeyfield = TRUE.
  547. END.
  548. //
  549. // Filterfelder
  550. //
  551. cKeyFieldReplace = SUBSTITUTE ('filter_&1_', cFileName).
  552. DO i1 = 1 TO EXTENT(cFieldNames):
  553. IF NOT cFieldNames[i1] BEGINS 'filter_' THEN NEXT.
  554. cKeyField = cFieldNames[i1].
  555. cField = REPLACE(cKeyField, cKeyFieldReplace, '').
  556. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
  557. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  558. IF lOK THEN NEXT.
  559. cValue = oJsonIdent:GetCharacter(cKeyField).
  560. cWhere = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
  561. hField:FIND-FIRST(cWhere, NO-LOCK).
  562. httKeyFields:BUFFER-CREATE().
  563. ASSIGN
  564. httKeyFields::iIndex = i1 + 20
  565. httKeyFields::cLongName = cKeyField
  566. httKeyFields::cFieldName = cField
  567. httKeyFields::cFileName = cFileName
  568. httKeyFields::cValue = cValue
  569. httKeyFields::cDataType = hField::_Data-Type
  570. httKeyFields::lKeyfield = FALSE.
  571. END.
  572. //
  573. // Primary Index Felder ermitteln
  574. //
  575. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  576. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  577. CREATE QUERY hQuery.
  578. hQuery:SET-BUFFERS(hDictField).
  579. cWhere = SUBSTITUTE('FOR EACH _Index-Field WHERE _Index-Recid = &1 BY _Index-Field._Index-Seq ', rPrimeIndex) .
  580. hQuery:QUERY-PREPARE (cWhere).
  581. hQuery:QUERY-OPEN ().
  582. hQuery:GET-FIRST () NO-ERROR.
  583. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  584. CREATE BUFFER hField FOR TABLE cDBFileName.
  585. DO WHILE NOT hQuery:QUERY-OFF-END:
  586. rRecid = hDictField::_Field-Recid.
  587. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hField:NAME, rRecid).
  588. hField:FIND-UNIQUE (cWhere, NO-LOCK).
  589. httPrimaryIndex:BUFFER-CREATE().
  590. ASSIGN
  591. httPrimaryIndex::iIndex = hDictField::_Index-Seq
  592. httPrimaryIndex::cFileName = cFileName
  593. httPrimaryIndex::cFieldName = hField::_Field-Name
  594. httPrimaryIndex::cDataType = hField::_DATA-TYPE
  595. .
  596. hQuery:GET-NEXT().
  597. END.
  598. hQuery:QUERY-CLOSE ().
  599. DELETE OBJECT hBuffer NO-ERROR.
  600. DELETE OBJECT hField NO-ERROR.
  601. DELETE OBJECT hDictField NO-ERROR.
  602. DELETE OBJECT hDictFile NO-ERROR.
  603. httKeyFields :WRITE-JSON('File', 'C:\TEMP\ttKeyFields.json' , TRUE).
  604. httPrimaryIndex:WRITE-JSON('File', 'C:\TEMP\ttPrimaryIndex.json', TRUE).
  605. RETURN.
  606. END METHOD.
  607. /*------------------------------------------------------------------------------
  608. Purpose:
  609. Notes:
  610. ------------------------------------------------------------------------------*/
  611. METHOD PUBLIC LOGICAL evaluatePageNumber(
  612. INPUT-OUTPUT oJsonIdent AS JsonObject,
  613. INPUT cWhere AS CHARACTER,
  614. INPUT rRecid AS RECID ,
  615. INPUT cStatus AS CHARACTER
  616. ):
  617. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  618. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  619. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  620. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO.
  621. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  622. DEFINE VARIABLE iCurrentPos AS INTEGER NO-UNDO.
  623. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  624. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  625. DEFINE VARIABLE iTotalRecords AS INTEGER NO-UNDO.
  626. DEFINE VARIABLE rBefore AS RECID NO-UNDO.
  627. cFileName = oJsonIdent:GetCharacter('file_name').
  628. iPage = 1.
  629. iMaxRecords = 25.
  630. iCurrentPos = 0.
  631. IF oJsonIdent:HAS('limit') THEN
  632. DO:
  633. iMaxRecords = (IF oJsonIdent:getType('limit') = 1
  634. THEN INTEGER(oJsonIdent:GetCharacter('limit'))
  635. ELSE oJsonIdent:GetInteger('limit')) NO-ERROR.
  636. END.
  637. cWhere = SUBSTITUTE(' PRESELECT EACH &1 &2 NO-LOCK ', cFileName, cWhere).
  638. //MESSAGE 'cWhere =' cWhere 'Filename =' cFileName.
  639. CREATE QUERY hQuery.
  640. CREATE BUFFER hBuffer FOR TABLE cFileName.
  641. hQuery:SET-BUFFERS (hBuffer).
  642. hQuery:QUERY-PREPARE (cWhere).
  643. hQuery:QUERY-OPEN ().
  644. iTotalRecords = hQuery:NUM-RESULTS.
  645. hQuery:GET-FIRST (NO-LOCK) NO-ERROR.
  646. DO WHILE NOT hQuery:QUERY-OFF-END:
  647. iCurrentPos = iCurrentPos + 1.
  648. IF hBuffer:RECID = rRecid THEN LEAVE.
  649. rBefore = hBuffer:RECID.
  650. hQuery:GET-NEXT (NO-LOCK) NO-ERROR.
  651. END.
  652. hQuery:QUERY-CLOSE ().
  653. DELETE OBJECT hBuffer.
  654. DELETE OBJECT hQuery.
  655. IF cStatus = 'before' THEN iCurrentPos = iCurrentPos - 1.
  656. IF cStatus = 'after' THEN iCurrentPos = iCurrentPos + 1.
  657. iIndex = (iCurrentPos MOD iMaxRecords).
  658. IF iIndex = 0 THEN
  659. DO:
  660. iPage = iCurrentPos / iMaxRecords.
  661. iIndex = iMaxRecords - 1. // Java ist Index 0 der erste Satz
  662. END.
  663. ELSE
  664. DO:
  665. iPage = ((iCurrentPos - iIndex) / iMaxRecords) + 1.
  666. iIndex = iIndex - 1.
  667. END.
  668. IF (iPage * iMaxRecords) > iTotalRecords THEN iMaxRecords = iMaxRecords - ((iPage * iMaxRecords) - iTotalRecords).
  669. IF oJsonIdent:HAS('recordCount')
  670. THEN oJsonIdent:SET('recordCount', iMaxRecords).
  671. ELSE oJsonIdent:ADD('recordCount', iMaxRecords).
  672. IF oJsonIdent:HAS('page')
  673. THEN oJsonIdent:SET('page', iPage).
  674. ELSE oJsonIdent:ADD('page', iPage).
  675. IF oJsonIdent:HAS('index')
  676. THEN oJsonIdent:SET('index', iIndex).
  677. ELSE oJsonIdent:ADD('index', iIndex).
  678. IF oJsonIdent:HAS('totalRecords')
  679. THEN oJsonIdent:SET('totalRecords', iTotalRecords).
  680. ELSE oJsonIdent:ADD('totalRecords', iTotalRecords).
  681. // MESSAGE 'page =' iPage 'index =' iIndex 'totalRecords =' iTotalRecords 'Max Records =' iMaxRecords 'Current Pos =' iCurrentPos.
  682. // oJsonIdent:WriteFile('C:\TEMP\evaluatePageNumber_jsonIdent.json', TRUE).
  683. lRetVal = TRUE.
  684. RETURN lRetVal.
  685. END METHOD.
  686. /*------------------------------------------------------------------------------
  687. Purpose:
  688. Notes:
  689. ------------------------------------------------------------------------------*/
  690. METHOD PUBLIC VOID generateHash(
  691. INPUT ipAlgorithm AS CHARACTER,
  692. INPUT ipPhrase AS CHARACTER,
  693. INPUT ipKey AS CHARACTER,
  694. OUTPUT opERROR AS LOGICAL,
  695. OUTPUT opMESSAGE AS CHARACTER,
  696. OUTPUT opHash AS CHARACTER
  697. ):
  698. ASSIGN
  699. opERROR = FALSE
  700. opMessage = ''
  701. opHash = ''.
  702. IF ipPhrase = '' OR ipPhrase = ? THEN
  703. DO:
  704. ASSIGN
  705. opERROR = TRUE
  706. opMESSAGE = 'Input Error. Value not correct'.
  707. RETURN.
  708. END.
  709. opHash = HEX-ENCODE (MESSAGE-DIGEST (ipAlgorithm, ipPhrase, ipKey)).
  710. RETURN.
  711. END METHOD.
  712. /*------------------------------------------------------------------------------
  713. Purpose:
  714. Notes:
  715. ------------------------------------------------------------------------------*/
  716. METHOD PUBLIC VOID getActiveSelection(
  717. INPUT oJsonIdent AS JsonObject,
  718. INPUT cFileName AS CHARACTER ,
  719. OUTPUT cActiveSelection AS CHARACTER
  720. ):
  721. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  722. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  723. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  724. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO.
  725. ASSIGN
  726. ccompany = oJsonIdent:GetCharacter('company')
  727. cuser_name = oJsonIdent:GetCharacter('user_name')
  728. cProgram = oJsonIdent:GetCharacter('program').
  729. FIND userdata NO-LOCK
  730. WHERE userdata.user_name = cuser_name
  731. AND userdata.company = ccompany
  732. AND userdata.branch = '0000'
  733. AND userdata.record_type = 'active'
  734. AND userdata.section = cFileName
  735. AND userdata.key_type = cProgram NO-ERROR.
  736. IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
  737. ELSE cActiveSelection = ''.
  738. RELEASE userdata.
  739. RETURN.
  740. END METHOD.
  741. /*------------------------------------------------------------------------------
  742. Purpose:
  743. Notes:
  744. ------------------------------------------------------------------------------*/
  745. METHOD PUBLIC CHARACTER getBoxFieldText(
  746. INPUT oJsonIdent AS JsonObject,
  747. INPUT cField AS CHARACTER ,
  748. INPUT cFieldValue AS CHARACTER
  749. ):
  750. DEFINE VARIABLE cText AS CHARACTER NO-UNDO.
  751. FIND selections NO-LOCK
  752. WHERE selections.company = oJsonIdent:GetCharacter('company')
  753. AND selections.table_name = 'table'
  754. AND selections.user_name = oJsonIdent:GetCharacter('user_name')
  755. AND selections.language_id = oJsonIdent:GetInteger('language_id')
  756. AND selections.field_name = cField
  757. AND selections.field_value = cFieldValue NO-ERROR.
  758. cText = (IF AVAILABLE selections THEN selections.field_show ELSE '').
  759. RETURN cText.
  760. END METHOD.
  761. /*------------------------------------------------------------------------------
  762. Purpose:
  763. Notes:
  764. ------------------------------------------------------------------------------*/
  765. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphfield_name AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  766. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO.
  767. cfield_nameInhalt = ''.
  768. oplQuoter = FALSE.
  769. CASE iphfield_name:DATA-TYPE:
  770. WHEN 'CHARACTER' THEN
  771. ASSIGN
  772. cfield_nameInhalt = iphfield_name:BUFFER-VALUE(0)
  773. oplQuoter = TRUE.
  774. WHEN 'DECIMAL' OR
  775. WHEN 'INTEGER' THEN
  776. cfield_nameInhalt = TRIM(STRING(INTEGER(iphfield_name:BUFFER-VALUE),'>>>>>>>>9')).
  777. WHEN 'DATE' THEN
  778. cfield_nameInhalt = STRING(DATE(iphfield_name:BUFFER-VALUE),'99.99.9999').
  779. OTHERWISE
  780. cfield_nameInhalt = iphfield_name:BUFFER-VALUE.
  781. END CASE.
  782. IF cfield_nameInhalt = ? THEN cfield_nameInhalt = ''.
  783. RETURN cfield_nameInhalt.
  784. END METHOD.
  785. /*------------------------------------------------------------------------------
  786. Purpose:
  787. Notes:
  788. ------------------------------------------------------------------------------*/
  789. METHOD PUBLIC CHARACTER getCharDateTime(
  790. INPUT ipdDateTime AS DATETIME
  791. ):
  792. DEFINE VARIABLE cReturnValue AS CHARACTER NO-UNDO.
  793. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  794. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  795. dDateTime = ipdDateTime.
  796. cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS').
  797. cReturnValue =
  798. STRING(YEAR(dDateTime),'9999')
  799. + '-'
  800. + STRING(MONTH(dDateTime),'99')
  801. + '-'
  802. + STRING(DAY(dDateTime),'99')
  803. + SUBSTRING(cDateTime,11).
  804. RETURN cReturnValue.
  805. END METHOD.
  806. /*------------------------------------------------------------------------------
  807. Purpose:
  808. Notes:
  809. ------------------------------------------------------------------------------*/
  810. METHOD PUBLIC HANDLE getData(
  811. INPUT ipoJsonIdent AS JsonObject,
  812. INPUT ipcFileName AS CHARACTER,
  813. INPUT ipcWherePaires AS CHARACTER
  814. ):
  815. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  816. DEFINE VARIABLE cWherePaire AS CHARACTER NO-UNDO.
  817. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  818. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  819. DEFINE VARIABLE lWhere AS LOGICAL NO-UNDO INIT TRUE.
  820. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  821. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  822. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  823. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  824. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  825. lOK = FALSE.
  826. DO WHILE TRUE:
  827. FIND FIRST Ge_MIS._File NO-LOCK
  828. WHERE Ge_MIS._File._File-Name = ipcFileName NO-ERROR.
  829. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  830. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  831. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  832. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  833. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  834. lOK = TRUE.
  835. LEAVE.
  836. END.
  837. DO WHILE NOT lOK:
  838. FIND FIRST FRAMEWORK._File NO-LOCK
  839. WHERE FRAMEWORK._File._File-Name = ipcFileName NO-ERROR.
  840. IF NOT AVAILABLE FRAMEWORK._File THEN LEAVE.
  841. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  842. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  843. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  844. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  845. lOK = TRUE.
  846. LEAVE.
  847. END.
  848. CREATE BUFFER hBuffer FOR TABLE ipcFileName.
  849. CREATE TEMP-TABLE ttTable.
  850. ttTable:CREATE-LIKE (hBuffer).
  851. ttTable:TEMP-TABLE-PREPARE ('ttTable').
  852. httBuffer = ttTable:DEFAULT-BUFFER-HANDLE.
  853. DO i1 = 1 TO httBuffer:NUM-FIELDS:
  854. httBuffer:BUFFER-FIELD(i1):SERIALIZE-NAME = SUBSTITUTE('&1_&2', ipcFileName, hBuffer:BUFFER-FIELD(i1):NAME).
  855. END.
  856. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', ipcFileName).
  857. IF lCompany THEN
  858. DO:
  859. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  860. cWhere = cWhere + SUBSTITUTE('&1.company = &2 ', ipcFileName, QUOTER(ipoJsonIdent:GetCharacter('company'))).
  861. lWhere = FALSE.
  862. END.
  863. DO i1 = 1 TO NUM-ENTRIES(ipcWherePaires, ';'):
  864. cWherePaire = ENTRY(i1, ipcWherePaires, ';').
  865. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ) + cWherePaire + ' '.
  866. lWhere = FALSE.
  867. END.
  868. IF lActive THEN
  869. DO:
  870. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  871. cWhere = cWhere + SUBSTITUTE('&1.active = &2 ', ipcFileName, 'TRUE').
  872. lWhere = FALSE.
  873. END.
  874. MESSAGE 'cWhere = ' cWhere.
  875. CREATE QUERY hQuery.
  876. hQuery:SET-BUFFERS(hBuffer).
  877. hQuery:QUERY-PREPARE (cWhere).
  878. hQuery:QUERY-OPEN ().
  879. hQuery:GET-FIRST ().
  880. DO WHILE NOT hQuery:QUERY-OFF-END:
  881. httBuffer:BUFFER-CREATE ().
  882. httBuffer:BUFFER-COPY(hBuffer).
  883. hQuery:GET-NEXT ().
  884. END.
  885. hQuery:QUERY-CLOSE ().
  886. DELETE OBJECT hQuery NO-ERROR.
  887. DELETE OBJECT hBuffer NO-ERROR.
  888. RETURN httBuffer.
  889. END METHOD.
  890. /*------------------------------------------------------------------------------
  891. Purpose:
  892. Notes:
  893. ------------------------------------------------------------------------------*/
  894. METHOD PUBLIC VOID getErrorMessage(
  895. INPUT cFehlerNo AS CHARACTER,
  896. INPUT ilanguage_id AS INTEGER,
  897. INPUT cParam AS CHARACTER,
  898. OUTPUT cMessage AS LONGCHAR
  899. ):
  900. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  901. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  902. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  903. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  904. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  905. cParam = REPLACE(cParam, ',', ';').
  906. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  907. cParameter[ii] = ENTRY(ii, cParam, ';').
  908. IF ii = 5 THEN LEAVE.
  909. END.
  910. lcJsonString = '(&1) -> &2'.
  911. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  912. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  913. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  914. FIND messages NO-LOCK
  915. WHERE messages.message_no = iNo
  916. AND messages.language_id = ilanguage_id NO-ERROR.
  917. IF NOT AVAILABLE messages THEN
  918. DO:
  919. FIND FIRST messages NO-LOCK
  920. WHERE messages.message_no = iNo NO-ERROR.
  921. END.
  922. IF NOT AVAILABLE messages THEN
  923. DO:
  924. cString = cString
  925. + (IF cString = '' THEN '' ELSE ' ')
  926. + 'Systemfehler, Administrator benachrichtigen !'.
  927. END.
  928. ELSE
  929. DO:
  930. cString = cString
  931. + (IF cString = '' THEN '' ELSE ' ')
  932. + messages.message_text.
  933. END.
  934. END.
  935. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  936. cMessage = cString.
  937. RETURN.
  938. END METHOD.
  939. /*------------------------------------------------------------------------------
  940. Purpose:
  941. Notes:
  942. ------------------------------------------------------------------------------*/
  943. METHOD PUBLIC CHARACTER getHeader(
  944. INPUT httInput AS HANDLE
  945. ):
  946. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  947. FIND FIRST labeltexte NO-LOCK
  948. WHERE labeltexte.company = httInput::company
  949. AND labeltexte.user_name = httInput::user_name
  950. AND labeltexte.program = httInput::program
  951. AND labeltexte.field_name = 'KOPF'
  952. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  953. IF NOT AVAILABLE labeltexte THEN
  954. DO:
  955. FIND FIRST labeltexte NO-LOCK
  956. WHERE labeltexte.company = httInput::company
  957. AND labeltexte.program = httInput::program
  958. AND labeltexte.field_name = 'KOPF'
  959. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  960. END.
  961. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::program).
  962. RETURN cHeader.
  963. END METHOD.
  964. /*------------------------------------------------------------------------------
  965. Purpose:
  966. Notes:
  967. ------------------------------------------------------------------------------*/
  968. METHOD PUBLIC LOGICAL getHeaderData(
  969. INPUT poRequest AS IWebRequest ,
  970. OUTPUT ccompany AS CHARACTER ,
  971. OUTPUT cuser_name AS CHARACTER ,
  972. OUTPUT cAnzeigeName AS CHARACTER ,
  973. OUTPUT iLanguage_id AS INTEGER ,
  974. OUTPUT cSessionToken AS CHARACTER ,
  975. OUTPUT cFunction AS CHARACTER ,
  976. OUTPUT oJsonIdent AS JsonObject
  977. ):
  978. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  979. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  980. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  981. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  982. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  983. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  984. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  985. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  986. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  987. DEFINE VARIABLE cFilename AS CHARACTER NO-UNDO.
  988. oHeader = poRequest:GetHeader('X-COMPANY').
  989. ccompany = oHeader:VALUE.
  990. oHeader = poRequest:GetHeader('X-USER-NAME').
  991. cuser_name = oHeader:VALUE.
  992. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  993. cAnzeigeName = oHeader:VALUE.
  994. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  995. ilanguage_id = INTEGER(oHeader:VALUE).
  996. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  997. cSessionToken = oHeader:VALUE.
  998. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  999. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  1000. // MESSAGE 'cQueryYString =' cQueryString.
  1001. oJsonIdent = NEW JsonObject().
  1002. oJsonIdent:ADD('H_company' , ccompany ) NO-ERROR.
  1003. oJsonIdent:ADD('H_user_name' , cuser_name ) NO-ERROR.
  1004. oJsonIdent:ADD('H_language_id' , iLanguage_id ) NO-ERROR.
  1005. oJsonIdent:ADD('H_display_name', cAnzeigeName ) NO-ERROR.
  1006. oJsonIdent:ADD('sessionToken' , cSessionToken) NO-ERROR.
  1007. //
  1008. // Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
  1009. //
  1010. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  1011. cQueryPairs = ENTRY(ii, cQueryString, '&').
  1012. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  1013. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  1014. IF oJsonIdent:HAS(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  1015. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  1016. END.
  1017. IF NOT oJsonIdent:HAS('company' ) THEN oJsonIdent:ADD('company' , oJsonIdent:GetCharacter('H_company' )).
  1018. IF NOT oJsonIdent:HAS('user_name' ) THEN oJsonIdent:ADD('user_name' , oJsonIdent:GetCharacter('H_user_name' )).
  1019. IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetJsonText ('H_language_id')).
  1020. // language_id soll immer ein Interger-Wert sein
  1021. oJsonIdent:SET('language_id', INTEGER(oJsonIdent:GetJsonText('language_id'))).
  1022. IF oJsonIdent:HAS('formId') THEN
  1023. DO:
  1024. cFormId = oJsonIdent:GetCharacter('formId').
  1025. cFileName = ENTRY(1, cFormId, '_').
  1026. IF NOT oJsonIdent:HAS('file_name') THEN oJsonIdent:ADD('file_name', cFileName).
  1027. // cFileName = SUBSTITUTE ('C:\TEMP\oJsonIdent_getHeaderData_&1.log', cFormId).
  1028. // oJsonIdent:WriteFile(cFileName, TRUE).
  1029. FIND FIRST programs NO-LOCK
  1030. WHERE programs.FormId = cFormId NO-ERROR.
  1031. IF AVAILABLE programs THEN
  1032. DO:
  1033. oJsonIdent:ADD('class_name', programs.program_class).
  1034. cProgram = programs.program.
  1035. // MESSAGE 'programm gefunden mit FormId' cFormId.
  1036. END.
  1037. END.
  1038. ccompany = oJsonIdent:GetCharacter('company').
  1039. cuser_name = oJsonIdent:GetCharacter('user_name').
  1040. ilanguage_id = oJsonIdent:GetInteger ('language_id').
  1041. IF oJsonIdent:HAS('function') THEN cFunction = oJsonIdent:GetCharacter('function').
  1042. lRetVal = TRUE.
  1043. RETURN lRetVal.
  1044. END METHOD.
  1045. /*------------------------------------------------------------------------------
  1046. Purpose:
  1047. Notes:
  1048. ------------------------------------------------------------------------------*/
  1049. METHOD PUBLIC LOGICAL getKeyFields(
  1050. INPUT oJsonIdent AS JsonObject,
  1051. OUTPUT cKeyFields AS CHARACTER ,
  1052. OUTPUT cKeyValues AS CHARACTER
  1053. ):
  1054. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1055. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1056. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1057. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1058. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1059. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1060. cKeyFields = ''.
  1061. cKeyValues = ''.
  1062. cFieldNames = oJsonIdent:getNames().
  1063. DO i1 = 1 TO EXTENT(cFieldNames):
  1064. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  1065. cKeyFields = cKeyFields
  1066. + (IF cKeyFields = '' THEN '' ELSE ';')
  1067. + REPLACE(cFieldNames[i1], 'keyfield_', '').
  1068. cValue = oJsonIdent:GetCharacter(cFieldNames[i1]).
  1069. cKeyValues = cKeyValues
  1070. + (IF cKeyValues = '' THEN '' ELSE CHR(01))
  1071. + cValue.
  1072. END.
  1073. lOK = TRUE.
  1074. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  1075. cString = ENTRY(i1, cKeyFields, ';').
  1076. cString = ENTRY(1, cString, '_') + '_'.
  1077. cFieldName = REPLACE(ENTRY(i1, cKeyFields, ';'), cString, '').
  1078. DO WHILE lOK:
  1079. FIND FIRST Ge_MIS._Field NO-LOCK
  1080. WHERE Ge_MIS._Field._Field-Name = cFieldname NO-ERROR.
  1081. IF NOT AVAILABLE Ge_MIS._Field THEN
  1082. DO:
  1083. lOK = FALSE.
  1084. LEAVE.
  1085. END.
  1086. CASE Ge_MIS._Field._Data-Type:
  1087. WHEN 'character' THEN
  1088. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1089. WHEN 'logical' THEN
  1090. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1091. END CASE.
  1092. LEAVE.
  1093. END.
  1094. DO WHILE NOT lOK:
  1095. FIND FIRST FRAMEWORK._Field NO-LOCK
  1096. WHERE FRAMEWORK._Field._Field-Name = cFieldname NO-ERROR.
  1097. IF NOT AVAILABLE FRAMEWORK._Field THEN
  1098. DO:
  1099. lOK = FALSE.
  1100. LEAVE.
  1101. END.
  1102. CASE FRAMEWORK._Field._Data-Type:
  1103. WHEN 'character' THEN
  1104. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1105. WHEN 'logical' THEN
  1106. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1107. END CASE.
  1108. LEAVE.
  1109. END.
  1110. END.
  1111. lRetVal = TRUE.
  1112. RETURN lRetVal.
  1113. END METHOD.
  1114. /*------------------------------------------------------------------------------
  1115. Purpose:
  1116. Notes:
  1117. ------------------------------------------------------------------------------*/
  1118. METHOD PUBLIC CHARACTER getLogicalDBName(
  1119. INPUT ipcFilename AS CHARACTER
  1120. ):
  1121. DEFINE VARIABLE cLogicalDBName AS CHARACTER NO-UNDO.
  1122. DEFINE VARIABLE hDictBuffer AS HANDLE NO-UNDO.
  1123. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1124. cFileName = SUBSTITUTE('Ge_MIS.&1', ipcFilename) NO-ERROR.
  1125. CREATE BUFFER hDictBuffer FOR TABLE cFileName NO-ERROR.
  1126. cLogicalDBName = (IF VALID-HANDLE(hDictBuffer) THEN 'Ge_MIS' ELSE 'FRAMEWORK').
  1127. DELETE OBJECT hDictBuffer NO-ERROR.
  1128. RETURN cLogicalDBName.
  1129. END METHOD.
  1130. /*------------------------------------------------------------------------------
  1131. Purpose:
  1132. Notes:
  1133. ------------------------------------------------------------------------------*/
  1134. METHOD PUBLIC CHARACTER getProgramName(
  1135. INPUT oJsonIdent AS JsonObject,
  1136. INPUT cUsers AS CHARACTER ,
  1137. OUTPUT cFormUser AS CHARACTER ,
  1138. OUTPUT cFormColumns AS CHARACTER ,
  1139. INPUT-OUTPUT iItemsPerPage AS INTEGER ,
  1140. INPUT-OUTPUT cMaxHeight AS CHARACTER
  1141. ):
  1142. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1143. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  1144. DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
  1145. cProgram = ''.
  1146. ccompany = oJsonIdent:GetCharacter('company').
  1147. cFormId = oJsonIdent:GetCharacter('formId' ).
  1148. DO i1 = 1 TO NUM-ENTRIES(cUsers, ','):
  1149. cProgramUser = ENTRY(i1, cUsers).
  1150. FIND FIRST htmldokumente NO-LOCK
  1151. WHERE htmldokumente.company = ccompany
  1152. AND htmldokumente.user_name = cProgramUser
  1153. AND htmldokumente.FormId = cFormId NO-ERROR.
  1154. IF NOT AVAILABLE htmldokumente THEN NEXT.
  1155. ASSIGN
  1156. cProgram = htmldokumente.program
  1157. cFormUser = cProgramUser
  1158. iItemsPerPage = htmldokumente.itemsPerPage
  1159. cMaxHeight = htmldokumente.tableMaxHeight
  1160. cFormColumns = htmldokumente.formColumns.
  1161. LEAVE.
  1162. END.
  1163. RETURN cProgram.
  1164. END METHOD.
  1165. /*------------------------------------------------------------------------------
  1166. Purpose:
  1167. Notes:
  1168. ------------------------------------------------------------------------------*/
  1169. METHOD PUBLIC CHARACTER iso2date(
  1170. INPUT cIsoDate AS CHARACTER
  1171. ):
  1172. DEFINE VARIABLE cDate AS CHARACTER NO-UNDO.
  1173. IF cIsoDate = '' OR
  1174. cIsoDate = ? THEN RETURN cDate.
  1175. cDate = SUBSTITUTE('&1/&2/&3', ENTRY(2, cIsoDate, '-'), ENTRY(3, cIsoDate, '-'), ENTRY(1, cIsoDate, '-') ).
  1176. RETURN cDate.
  1177. END METHOD.
  1178. /*------------------------------------------------------------------------------
  1179. Purpose:
  1180. Notes:
  1181. ------------------------------------------------------------------------------*/
  1182. METHOD PUBLIC VOID readLastcWhere(
  1183. INPUT oJsonIdent AS JsonObject,
  1184. INPUT cFileName AS CHARACTER ,
  1185. OUTPUT cWhere AS CHARACTER
  1186. ):
  1187. FIND userdata
  1188. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1189. AND userdata.company = oJsonIdent:GetCharacter('company')
  1190. AND userdata.branch = '0000'
  1191. AND userdata.record_type = 'where'
  1192. AND userdata.section = cFileName
  1193. AND userdata.key_type = 'last' NO-ERROR.
  1194. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1195. RELEASE userdata.
  1196. RETURN.
  1197. END METHOD.
  1198. /*------------------------------------------------------------------------------
  1199. Purpose:
  1200. Notes:
  1201. ------------------------------------------------------------------------------*/
  1202. METHOD PUBLIC LOGICAL readLastRecord(
  1203. INPUT oJsonIdent AS JsonObject,
  1204. OUTPUT cWhere AS CHARACTER
  1205. ):
  1206. FIND userdata NO-LOCK
  1207. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1208. AND userdata.company = oJsonIdent:GetCharacter('company')
  1209. AND userdata.branch = '0000'
  1210. AND userdata.record_type = 'lastrecord'
  1211. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1212. AND userdata.key_type = '' NO-ERROR.
  1213. IF NOT AVAILABLE userdata THEN RETURN FALSE.
  1214. cWhere = userdata.cfield_1.
  1215. RELEASE userdata.
  1216. RETURN TRUE.
  1217. END METHOD.
  1218. /*------------------------------------------------------------------------------
  1219. Purpose:
  1220. Notes:
  1221. ------------------------------------------------------------------------------*/
  1222. METHOD PUBLIC VOID readSortFields(
  1223. INPUT oJsonIdent AS JsonObject,
  1224. INPUT cFileName AS CHARACTER ,
  1225. OUTPUT cSortField AS CHARACTER ,
  1226. OUTPUT cDirection AS CHARACTER
  1227. ):
  1228. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1229. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1230. cSortField = ''.
  1231. cDirection = ''.
  1232. cCompany = oJsonIdent:GetCharacter('company' ).
  1233. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1234. FIND userdata NO-LOCK
  1235. WHERE userdata.user_name = cUser_Name
  1236. AND userdata.company = cCompany
  1237. AND userdata.branch = '0000'
  1238. AND userdata.record_type = 'sortField'
  1239. AND userdata.section = cFileName
  1240. AND userdata.key_type = '' NO-ERROR.
  1241. IF AVAILABLE userdata THEN
  1242. ASSIGN
  1243. cSortField = userdata.cfield_1
  1244. cDirection = (IF userdata.cfield_2 BEGINS 'asc' THEN '' ELSE userdata.cfield_2).
  1245. RETURN.
  1246. END METHOD.
  1247. /*------------------------------------------------------------------------------
  1248. Purpose:
  1249. Notes:
  1250. ------------------------------------------------------------------------------*/
  1251. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  1252. INPUT ipctable AS CHARACTER
  1253. ):
  1254. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  1255. DEFINE VARIABLE cDBNames AS CHARACTER NO-UNDO INIT 'Ge_MIS;FRAMEWORK'.
  1256. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1257. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1258. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1259. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  1260. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1261. DO ix = 1 TO NUM-ENTRIES(cDBNames, ';'):
  1262. cDBName = ENTRY(ix, cDBNames, ';').
  1263. cFileName = SUBSTITUTE('&1.&2', cDBName, ipcTable).
  1264. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  1265. IF NOT ERROR-STATUS:ERROR AND
  1266. VALID-HANDLE(hBuffer) THEN LEAVE.
  1267. DELETE OBJECT hBuffer NO-ERROR.
  1268. cDBName = ''.
  1269. END.
  1270. DELETE OBJECT hBuffer NO-ERROR.
  1271. cFields = ''.
  1272. CASE cDBName:
  1273. WHEN 'Ge_MIS' THEN
  1274. DO:
  1275. FIND FIRST Ge_MIS._File NO-LOCK
  1276. WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
  1277. FOR EACH Ge_MIS._Index-Field NO-LOCK
  1278. WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
  1279. FIRST Ge_MIS._Field NO-LOCK
  1280. WHERE RECID(Ge_MIS._Field) = Ge_MIS._index-Field._Field-recid
  1281. BY Ge_MIS._Index-Field._Index-Seq:
  1282. cFields = cFields
  1283. + (IF cFields = '' THEN '' ELSE ';')
  1284. + Ge_MIS._Field._Field-Name.
  1285. END.
  1286. END.
  1287. WHEN 'FRAMEWORK' THEN
  1288. DO:
  1289. FIND FIRST FRAMEWORK._File NO-LOCK
  1290. WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
  1291. FOR EACH FRAMEWORK._Index-Field NO-LOCK
  1292. WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
  1293. FIRST FRAMEWORK._Field NO-LOCK
  1294. WHERE RECID(FRAMEWORK._Field) = FRAMEWORK._index-Field._Field-recid
  1295. BY FRAMEWORK._Index-Field._Index-Seq:
  1296. cFields = cFields
  1297. + (IF cFields = '' THEN '' ELSE ';')
  1298. + FRAMEWORK._Field._Field-Name.
  1299. END.
  1300. END.
  1301. END CASE.
  1302. RETURN cFields.
  1303. END METHOD.
  1304. /*------------------------------------------------------------------------------
  1305. Purpose:
  1306. Notes:
  1307. ------------------------------------------------------------------------------*/
  1308. METHOD PUBLIC CHARACTER getSysUser( ):
  1309. DEFINE VARIABLE mBen AS MEMPTR NO-UNDO.
  1310. DEFINE VARIABLE iLeng AS INTEGER INIT 100 NO-UNDO.
  1311. DEFINE VARIABLE fok AS INTEGER NO-UNDO.
  1312. DEFINE VARIABLE cBen AS CHARACTER NO-UNDO.
  1313. SET-SIZE(mBen) = iLeng.
  1314. RUN GetUserNameA( OUTPUT mBen, INPUT-OUTPUT iLeng, OUTPUT fok ) NO-ERROR.
  1315. ASSIGN
  1316. cBen = GET-STRING(mBen,1) NO-ERROR.
  1317. SET-SIZE(mBen) = 0.
  1318. RETURN cBen.
  1319. END METHOD.
  1320. /*------------------------------------------------------------------------------
  1321. Purpose:
  1322. Notes:
  1323. ------------------------------------------------------------------------------*/
  1324. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  1325. INPUT oJsonObject AS JsonObject,
  1326. INPUT hbttInput AS HANDLE,
  1327. INPUT-OUTPUT hbttTemp AS HANDLE
  1328. ):
  1329. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  1330. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  1331. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  1332. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  1333. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  1334. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1335. jsonttTemp = NEW JsonObject().
  1336. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  1337. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  1338. hbttTemp:FIND-FIRST ().
  1339. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  1340. // MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  1341. lRetVal = TRUE.
  1342. RETURN lRetVal.
  1343. END METHOD.
  1344. /*------------------------------------------------------------------------------
  1345. Purpose:
  1346. Notes:
  1347. ------------------------------------------------------------------------------*/
  1348. METHOD PUBLIC VOID readPosition(
  1349. INPUT oJsonIdent AS JsonObject ,
  1350. INPUT cFileName AS CHARACTER ,
  1351. OUTPUT iCurrentPosition AS INTEGER ,
  1352. OUTPUT iStartPage AS INTEGER ,
  1353. OUTPUT iMaxRecords AS INTEGER
  1354. ):
  1355. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1356. FIND userdata
  1357. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1358. AND userdata.company = oJsonIdent:GetCharacter('company')
  1359. AND userdata.branch = '0000'
  1360. AND userdata.record_type = 'position'
  1361. AND userdata.section = cFileName
  1362. AND userdata.key_type = '' NO-ERROR.
  1363. IF AVAILABLE userdata THEN
  1364. DO:
  1365. ASSIGN
  1366. iCurrentPosition = userdata.ifield_1
  1367. iStartPage = userdata.ifield_2
  1368. iMaxRecords = userdata.ifield_3.
  1369. END.
  1370. ELSE
  1371. DO:
  1372. ASSIGN
  1373. iCurrentPosition = 1
  1374. iStartPage = 1
  1375. iMaxRecords = 25.
  1376. END.
  1377. RELEASE userdata.
  1378. LEAVE.
  1379. END.
  1380. RETURN.
  1381. END METHOD.
  1382. /*------------------------------------------------------------------------------
  1383. Purpose:
  1384. Notes:
  1385. ------------------------------------------------------------------------------*/
  1386. METHOD PUBLIC VOID readStartcWhere(
  1387. INPUT oJsonIdent AS JsonObject,
  1388. INPUT cFileName AS CHARACTER ,
  1389. OUTPUT cWhere AS CHARACTER
  1390. ):
  1391. FIND userdata
  1392. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1393. AND userdata.company = oJsonIdent:GetCharacter('company')
  1394. AND userdata.branch = '0000'
  1395. AND userdata.record_type = 'where'
  1396. AND userdata.section = cFileName
  1397. AND userdata.key_type = 'start' NO-ERROR.
  1398. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1399. RELEASE userdata.
  1400. RETURN.
  1401. END METHOD.
  1402. /*------------------------------------------------------------------------------
  1403. Purpose:
  1404. Notes:
  1405. ------------------------------------------------------------------------------*/
  1406. METHOD PUBLIC VOID setActiveSelection(
  1407. INPUT oJsonIdent AS JsonObject,
  1408. INPUT cFileName AS CHARACTER ,
  1409. INPUT cActiveSelection AS CHARACTER
  1410. ):
  1411. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1412. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  1413. ASSIGN
  1414. ccompany = oJsonIdent:GetCharacter('company')
  1415. cuser_name = oJsonIdent:GetCharacter('user_name')
  1416. cProgram = oJsonIdent:GetCharacter('program').
  1417. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1418. FIND userdata
  1419. WHERE userdata.user_name = cuser_name
  1420. AND userdata.company = ccompany
  1421. AND userdata.branch = '0000'
  1422. AND userdata.record_type = 'active'
  1423. AND userdata.section = cFileName
  1424. AND userdata.key_type = cProgram NO-ERROR.
  1425. IF NOT AVAILABLE userdata THEN
  1426. DO:
  1427. CREATE userdata.
  1428. ASSIGN
  1429. userdata.user_name = cuser_name
  1430. userdata.company = ccompany
  1431. userdata.branch = '0000'
  1432. userdata.record_type = 'active'
  1433. userdata.section = cFileName
  1434. userdata.key_type = cProgram
  1435. userdata.creation_date = NOW NO-ERROR.
  1436. END.
  1437. ELSE
  1438. DO:
  1439. userdata.access_date = NOW.
  1440. END.
  1441. userdata.cfield_1 = cActiveSelection.
  1442. RELEASE userdata.
  1443. LEAVE.
  1444. END.
  1445. RETURN.
  1446. END METHOD.
  1447. /*------------------------------------------------------------------------------
  1448. Purpose:
  1449. Notes:
  1450. ------------------------------------------------------------------------------*/
  1451. METHOD PUBLIC LONGCHAR trimStructure(
  1452. INPUT oJsonInput AS JsonObject
  1453. ):
  1454. DEFINE VARIABLE lcResult AS LONGCHAR NO-UNDO.
  1455. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1456. lcResult = TRIM(oJsonInput:GetJsonText()).
  1457. lcResult = SUBSTRING(lcResult,02).
  1458. ii = LENGTH(lcResult) - 1.
  1459. lcResult = SUBSTRING(lcResult,01, ii).
  1460. RETURN lcResult.
  1461. END METHOD.
  1462. /*------------------------------------------------------------------------------
  1463. Purpose:
  1464. Notes:
  1465. ------------------------------------------------------------------------------*/
  1466. METHOD PUBLIC VOID writeLastcWhere(
  1467. INPUT oJsonIdent AS JsonObject,
  1468. INPUT cFileName AS CHARACTER ,
  1469. INPUT cWhere AS CHARACTER
  1470. ):
  1471. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1472. FIND userdata
  1473. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1474. AND userdata.company = oJsonIdent:GetCharacter('company')
  1475. AND userdata.branch = '0000'
  1476. AND userdata.record_type = 'where'
  1477. AND userdata.section = cFileName
  1478. AND userdata.key_type = 'last' NO-ERROR.
  1479. IF NOT AVAILABLE userdata THEN
  1480. DO:
  1481. CREATE userdata.
  1482. ASSIGN
  1483. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1484. userdata.company = oJsonIdent:GetCharacter('company')
  1485. userdata.branch = '0000'
  1486. userdata.record_type = 'where'
  1487. userdata.section = cFileName
  1488. userdata.key_type = 'last' NO-ERROR.
  1489. END.
  1490. ASSIGN
  1491. userdata.cfield_1 = cWhere.
  1492. RELEASE userdata.
  1493. LEAVE.
  1494. END.
  1495. RETURN.
  1496. END METHOD.
  1497. /*------------------------------------------------------------------------------
  1498. Purpose:
  1499. Notes:
  1500. ------------------------------------------------------------------------------*/
  1501. METHOD PUBLIC LOGICAL writeLastRecord(
  1502. INPUT oJsonIdent AS JsonObject,
  1503. INPUT cWhere AS CHARACTER
  1504. ):
  1505. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1506. FIND userdata
  1507. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1508. AND userdata.company = oJsonIdent:GetCharacter('company')
  1509. AND userdata.branch = '0000'
  1510. AND userdata.record_type = 'lastrecord'
  1511. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1512. AND userdata.key_type = '' NO-ERROR.
  1513. IF NOT AVAILABLE userdata THEN
  1514. DO:
  1515. CREATE userdata.
  1516. ASSIGN
  1517. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1518. userdata.company = oJsonIdent:GetCharacter('company')
  1519. userdata.branch = '0000'
  1520. userdata.record_type = 'lastrecord'
  1521. userdata.section = oJsonIdent:GetCharacter('file_name')
  1522. userdata.key_type = ''
  1523. userdata.creation_date = NOW NO-ERROR.
  1524. END.
  1525. ASSIGN
  1526. userdata.cfield_1 = cWhere
  1527. userdata.access_date = NOW.
  1528. RELEASE userdata.
  1529. LEAVE.
  1530. END.
  1531. RETURN TRUE.
  1532. END METHOD.
  1533. /*------------------------------------------------------------------------------
  1534. Purpose:
  1535. Notes:
  1536. ------------------------------------------------------------------------------*/
  1537. METHOD PUBLIC VOID writePosition(
  1538. INPUT oJsonIdent AS JsonObject,
  1539. INPUT cFileName AS CHARACTER ,
  1540. INPUT iCurrentPosition AS INTEGER ,
  1541. INPUT iStartPage AS INTEGER ,
  1542. INPUT iMaxRecords AS INTEGER
  1543. ):
  1544. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1545. FIND userdata
  1546. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1547. AND userdata.company = oJsonIdent:GetCharacter('company')
  1548. AND userdata.branch = '0000'
  1549. AND userdata.record_type = 'position'
  1550. AND userdata.section = cFileName
  1551. AND userdata.key_type = '' NO-ERROR.
  1552. IF NOT AVAILABLE userdata THEN
  1553. DO:
  1554. CREATE userdata.
  1555. ASSIGN
  1556. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1557. userdata.company = oJsonIdent:GetCharacter('company')
  1558. userdata.branch = '0000'
  1559. userdata.record_type = 'position'
  1560. userdata.section = cFileName
  1561. userdata.key_type = '' NO-ERROR.
  1562. END.
  1563. ASSIGN
  1564. userdata.ifield_1 = iCurrentPosition
  1565. userdata.iField_2 = iStartPage
  1566. userdata.ifield_3 = iMaxRecords.
  1567. RELEASE userdata.
  1568. LEAVE.
  1569. END.
  1570. RETURN.
  1571. END METHOD.
  1572. /*------------------------------------------------------------------------------
  1573. Purpose:
  1574. Notes:
  1575. ------------------------------------------------------------------------------*/
  1576. METHOD PUBLIC VOID writeSortfields(
  1577. INPUT oJsonIdent AS JsonObject,
  1578. INPUT cFileName AS CHARACTER ,
  1579. INPUT cSortField AS CHARACTER ,
  1580. INPUT cDirection AS CHARACTER
  1581. ):
  1582. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1583. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1584. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1585. cCompany = oJsonIdent:GetCharacter('company' ).
  1586. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1587. cReplace = SUBSTITUTE('&1_', cFileName).
  1588. cSortField = REPLACE(cSortField, cReplace, '').
  1589. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1590. FIND userdata
  1591. WHERE userdata.user_name = cUser_Name
  1592. AND userdata.company = cCompany
  1593. AND userdata.branch = '0000'
  1594. AND userdata.record_type = 'sortField'
  1595. AND userdata.section = cFileName
  1596. AND userdata.key_type = '' NO-ERROR.
  1597. IF NOT AVAILABLE userdata THEN
  1598. DO:
  1599. CREATE userdata.
  1600. ASSIGN
  1601. userdata.user_name = cUser_Name
  1602. userdata.company = cCompany
  1603. userdata.branch = '0000'
  1604. userdata.record_type = 'sortField'
  1605. userdata.section = cFileName
  1606. userdata.key_type = '' NO-ERROR.
  1607. END.
  1608. ASSIGN
  1609. userdata.cfield_1 = cSortfield
  1610. userdata.cfield_2 = cDirection.
  1611. RELEASE userdata.
  1612. LEAVE.
  1613. END.
  1614. RETURN.
  1615. END METHOD.
  1616. /*------------------------------------------------------------------------------
  1617. Purpose:
  1618. Notes:
  1619. ------------------------------------------------------------------------------*/
  1620. METHOD PUBLIC VOID writeStartcWhere(
  1621. INPUT oJsonIdent AS JsonObject,
  1622. INPUT cFileName AS CHARACTER ,
  1623. INPUT cWhere AS CHARACTER
  1624. ):
  1625. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1626. FIND userdata
  1627. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1628. AND userdata.company = oJsonIdent:GetCharacter('company')
  1629. AND userdata.branch = '0000'
  1630. AND userdata.record_type = 'where'
  1631. AND userdata.section = cFileName
  1632. AND userdata.key_type = 'start' NO-ERROR.
  1633. IF NOT AVAILABLE userdata THEN
  1634. DO:
  1635. CREATE userdata.
  1636. ASSIGN
  1637. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1638. userdata.company = oJsonIdent:GetCharacter('company')
  1639. userdata.branch = '0000'
  1640. userdata.record_type = 'where'
  1641. userdata.section = cFileName
  1642. userdata.key_type = 'start' NO-ERROR.
  1643. END.
  1644. ASSIGN
  1645. userdata.cfield_1 = cWhere.
  1646. RELEASE userdata.
  1647. LEAVE.
  1648. END.
  1649. RETURN.
  1650. END METHOD.
  1651. /*------------------------------------------------------------------------------
  1652. Purpose:
  1653. Notes:
  1654. ------------------------------------------------------------------------------*/
  1655. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  1656. /* MESSAGE 'Destructor utilitiesHandler '.*/
  1657. /* DELETE OBJECT hQuery NO-ERROR. */
  1658. /* DELETE OBJECT hBuffer NO-ERROR. */
  1659. END DESTRUCTOR.
  1660. END CLASS.