utilitiesHandler.cls 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012
  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. ):
  616. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  617. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  618. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  619. DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO.
  620. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  621. DEFINE VARIABLE iCurrentPos AS INTEGER NO-UNDO.
  622. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  623. DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
  624. DEFINE VARIABLE iTotalRecords AS INTEGER NO-UNDO.
  625. cFileName = oJsonIdent:GetCharacter('file_name').
  626. iPage = 1.
  627. iMaxRecords = 25.
  628. iCurrentPos = 0.
  629. IF oJsonIdent:HAS('limit') THEN
  630. DO:
  631. iMaxRecords = (IF oJsonIdent:getType('limit') = 1
  632. THEN INTEGER(oJsonIdent:GetCharacter('limit'))
  633. ELSE oJsonIdent:GetInteger('limit')) NO-ERROR.
  634. END.
  635. cWhere = REPLACE(cWhere, 'FOR', 'PRESELECT').
  636. //MESSAGE 'cWhere =' cWhere 'Filename =' cFileName.
  637. CREATE QUERY hQuery.
  638. CREATE BUFFER hBuffer FOR TABLE cFileName.
  639. hQuery:SET-BUFFERS (hBuffer).
  640. hQuery:QUERY-PREPARE (cWhere).
  641. hQuery:QUERY-OPEN ().
  642. iTotalRecords = hQuery:NUM-RESULTS.
  643. hQuery:GET-FIRST (NO-LOCK) NO-ERROR.
  644. DO WHILE NOT hQuery:QUERY-OFF-END:
  645. iCurrentPos = iCurrentPos + 1.
  646. IF hBuffer:RECID = rRecid THEN LEAVE.
  647. hQuery:GET-NEXT (NO-LOCK) NO-ERROR.
  648. END.
  649. hQuery:QUERY-CLOSE ().
  650. DELETE OBJECT hBuffer.
  651. DELETE OBJECT hQuery.
  652. iIndex = (iCurrentPos MOD iMaxRecords).
  653. IF iIndex = 0 THEN
  654. DO:
  655. iPage = iCurrentPos / iMaxRecords.
  656. iIndex = iMaxRecords - 1. // Java ist Index 0 der erste Satz
  657. END.
  658. ELSE
  659. DO:
  660. iPage = ((iCurrentPos - iIndex) / iMaxRecords) + 1.
  661. iIndex = iIndex - 1.
  662. END.
  663. IF (iPage * iMaxRecords) > iTotalRecords THEN iMaxRecords = iMaxRecords - ((iPage * iMaxRecords) - iTotalRecords).
  664. IF oJsonIdent:HAS('recordCount')
  665. THEN oJsonIdent:SET('recordCount', iMaxRecords).
  666. ELSE oJsonIdent:ADD('recordCount', iMaxRecords).
  667. IF oJsonIdent:HAS('page')
  668. THEN oJsonIdent:SET('page', iPage).
  669. ELSE oJsonIdent:ADD('page', iPage).
  670. IF oJsonIdent:HAS('index')
  671. THEN oJsonIdent:SET('index', iIndex).
  672. ELSE oJsonIdent:ADD('index', iIndex).
  673. IF oJsonIdent:HAS('totalRecords')
  674. THEN oJsonIdent:SET('totalRecords', iTotalRecords).
  675. ELSE oJsonIdent:ADD('totalRecords', iTotalRecords).
  676. // MESSAGE 'page =' iPage 'index =' iIndex 'totalRecords =' iTotalRecords 'Max Records =' iMaxRecords 'Current Pos =' iCurrentPos.
  677. // oJsonIdent:WriteFile('C:\TEMP\evaluatePageNumber_jsonIdent.json', TRUE).
  678. lRetVal = TRUE.
  679. RETURN lRetVal.
  680. END METHOD.
  681. /*------------------------------------------------------------------------------
  682. Purpose:
  683. Notes:
  684. ------------------------------------------------------------------------------*/
  685. METHOD PUBLIC VOID generateHash(
  686. INPUT ipAlgorithm AS CHARACTER,
  687. INPUT ipPhrase AS CHARACTER,
  688. INPUT ipKey AS CHARACTER,
  689. OUTPUT opERROR AS LOGICAL,
  690. OUTPUT opMESSAGE AS CHARACTER,
  691. OUTPUT opHash AS CHARACTER
  692. ):
  693. ASSIGN
  694. opERROR = FALSE
  695. opMessage = ''
  696. opHash = ''.
  697. IF ipPhrase = '' OR ipPhrase = ? THEN
  698. DO:
  699. ASSIGN
  700. opERROR = TRUE
  701. opMESSAGE = 'Input Error. Value not correct'.
  702. RETURN.
  703. END.
  704. opHash = HEX-ENCODE (MESSAGE-DIGEST (ipAlgorithm, ipPhrase, ipKey)).
  705. RETURN.
  706. END METHOD.
  707. /*------------------------------------------------------------------------------
  708. Purpose:
  709. Notes:
  710. ------------------------------------------------------------------------------*/
  711. METHOD PUBLIC VOID getActiveSelection(
  712. INPUT oJsonIdent AS JsonObject,
  713. INPUT cFileName AS CHARACTER ,
  714. OUTPUT cActiveSelection AS CHARACTER
  715. ):
  716. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  717. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  718. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  719. DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO.
  720. ASSIGN
  721. ccompany = oJsonIdent:GetCharacter('company')
  722. cuser_name = oJsonIdent:GetCharacter('user_name')
  723. cProgram = oJsonIdent:GetCharacter('program').
  724. FIND userdata NO-LOCK
  725. WHERE userdata.user_name = cuser_name
  726. AND userdata.company = ccompany
  727. AND userdata.branch = '0000'
  728. AND userdata.record_type = 'active'
  729. AND userdata.section = cFileName
  730. AND userdata.key_type = cProgram NO-ERROR.
  731. IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
  732. ELSE cActiveSelection = ''.
  733. RELEASE userdata.
  734. RETURN.
  735. END METHOD.
  736. /*------------------------------------------------------------------------------
  737. Purpose:
  738. Notes:
  739. ------------------------------------------------------------------------------*/
  740. METHOD PUBLIC CHARACTER getBoxFieldText(
  741. INPUT oJsonIdent AS JsonObject,
  742. INPUT cField AS CHARACTER ,
  743. INPUT cFieldValue AS CHARACTER
  744. ):
  745. DEFINE VARIABLE cText AS CHARACTER NO-UNDO.
  746. FIND selections NO-LOCK
  747. WHERE selections.company = oJsonIdent:GetCharacter('company')
  748. AND selections.table_name = 'table'
  749. AND selections.user_name = oJsonIdent:GetCharacter('user_name')
  750. AND selections.language_id = oJsonIdent:GetInteger('language_id')
  751. AND selections.field_name = cField
  752. AND selections.field_value = cFieldValue NO-ERROR.
  753. cText = (IF AVAILABLE selections THEN selections.field_show ELSE '').
  754. RETURN cText.
  755. END METHOD.
  756. /*------------------------------------------------------------------------------
  757. Purpose:
  758. Notes:
  759. ------------------------------------------------------------------------------*/
  760. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphfield_name AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  761. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO.
  762. cfield_nameInhalt = ''.
  763. oplQuoter = FALSE.
  764. CASE iphfield_name:DATA-TYPE:
  765. WHEN 'CHARACTER' THEN
  766. ASSIGN
  767. cfield_nameInhalt = iphfield_name:BUFFER-VALUE(0)
  768. oplQuoter = TRUE.
  769. WHEN 'DECIMAL' OR
  770. WHEN 'INTEGER' THEN
  771. cfield_nameInhalt = TRIM(STRING(INTEGER(iphfield_name:BUFFER-VALUE),'>>>>>>>>9')).
  772. WHEN 'DATE' THEN
  773. cfield_nameInhalt = STRING(DATE(iphfield_name:BUFFER-VALUE),'99.99.9999').
  774. OTHERWISE
  775. cfield_nameInhalt = iphfield_name:BUFFER-VALUE.
  776. END CASE.
  777. IF cfield_nameInhalt = ? THEN cfield_nameInhalt = ''.
  778. RETURN cfield_nameInhalt.
  779. END METHOD.
  780. /*------------------------------------------------------------------------------
  781. Purpose:
  782. Notes:
  783. ------------------------------------------------------------------------------*/
  784. METHOD PUBLIC CHARACTER getCharDateTime(
  785. INPUT ipdDateTime AS DATETIME
  786. ):
  787. DEFINE VARIABLE cReturnValue AS CHARACTER NO-UNDO.
  788. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  789. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  790. dDateTime = ipdDateTime.
  791. cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS').
  792. cReturnValue =
  793. STRING(YEAR(dDateTime),'9999')
  794. + '-'
  795. + STRING(MONTH(dDateTime),'99')
  796. + '-'
  797. + STRING(DAY(dDateTime),'99')
  798. + SUBSTRING(cDateTime,11).
  799. RETURN cReturnValue.
  800. END METHOD.
  801. /*------------------------------------------------------------------------------
  802. Purpose:
  803. Notes:
  804. ------------------------------------------------------------------------------*/
  805. METHOD PUBLIC HANDLE getData(
  806. INPUT ipoJsonIdent AS JsonObject,
  807. INPUT ipcFileName AS CHARACTER,
  808. INPUT ipcWherePaires AS CHARACTER
  809. ):
  810. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  811. DEFINE VARIABLE cWherePaire AS CHARACTER NO-UNDO.
  812. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  813. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  814. DEFINE VARIABLE lWhere AS LOGICAL NO-UNDO INIT TRUE.
  815. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  816. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  817. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  818. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  819. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  820. lOK = FALSE.
  821. DO WHILE TRUE:
  822. FIND FIRST Ge_MIS._File NO-LOCK
  823. WHERE Ge_MIS._File._File-Name = ipcFileName NO-ERROR.
  824. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  825. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  826. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  827. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  828. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  829. lOK = TRUE.
  830. LEAVE.
  831. END.
  832. DO WHILE NOT lOK:
  833. FIND FIRST FRAMEWORK._File NO-LOCK
  834. WHERE FRAMEWORK._File._File-Name = ipcFileName NO-ERROR.
  835. IF NOT AVAILABLE FRAMEWORK._File THEN LEAVE.
  836. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  837. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  838. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  839. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  840. lOK = TRUE.
  841. LEAVE.
  842. END.
  843. CREATE BUFFER hBuffer FOR TABLE ipcFileName.
  844. CREATE TEMP-TABLE ttTable.
  845. ttTable:CREATE-LIKE (hBuffer).
  846. ttTable:TEMP-TABLE-PREPARE ('ttTable').
  847. httBuffer = ttTable:DEFAULT-BUFFER-HANDLE.
  848. DO i1 = 1 TO httBuffer:NUM-FIELDS:
  849. httBuffer:BUFFER-FIELD(i1):SERIALIZE-NAME = SUBSTITUTE('&1_&2', ipcFileName, hBuffer:BUFFER-FIELD(i1):NAME).
  850. END.
  851. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', ipcFileName).
  852. IF lCompany THEN
  853. DO:
  854. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  855. cWhere = cWhere + SUBSTITUTE('&1.company = &2 ', ipcFileName, QUOTER(ipoJsonIdent:GetCharacter('company'))).
  856. lWhere = FALSE.
  857. END.
  858. DO i1 = 1 TO NUM-ENTRIES(ipcWherePaires, ';'):
  859. cWherePaire = ENTRY(i1, ipcWherePaires, ';').
  860. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ) + cWherePaire + ' '.
  861. lWhere = FALSE.
  862. END.
  863. IF lActive THEN
  864. DO:
  865. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  866. cWhere = cWhere + SUBSTITUTE('&1.active = &2 ', ipcFileName, 'TRUE').
  867. lWhere = FALSE.
  868. END.
  869. MESSAGE 'cWhere = ' cWhere.
  870. CREATE QUERY hQuery.
  871. hQuery:SET-BUFFERS(hBuffer).
  872. hQuery:QUERY-PREPARE (cWhere).
  873. hQuery:QUERY-OPEN ().
  874. hQuery:GET-FIRST ().
  875. DO WHILE NOT hQuery:QUERY-OFF-END:
  876. httBuffer:BUFFER-CREATE ().
  877. httBuffer:BUFFER-COPY(hBuffer).
  878. hQuery:GET-NEXT ().
  879. END.
  880. hQuery:QUERY-CLOSE ().
  881. DELETE OBJECT hQuery NO-ERROR.
  882. DELETE OBJECT hBuffer NO-ERROR.
  883. RETURN httBuffer.
  884. END METHOD.
  885. /*------------------------------------------------------------------------------
  886. Purpose:
  887. Notes:
  888. ------------------------------------------------------------------------------*/
  889. METHOD PUBLIC VOID getErrorMessage(
  890. INPUT cFehlerNo AS CHARACTER,
  891. INPUT ilanguage_id AS INTEGER,
  892. INPUT cParam AS CHARACTER,
  893. OUTPUT cMessage AS LONGCHAR
  894. ):
  895. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  896. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  897. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  898. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  899. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  900. cParam = REPLACE(cParam, ',', ';').
  901. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  902. cParameter[ii] = ENTRY(ii, cParam, ';').
  903. IF ii = 5 THEN LEAVE.
  904. END.
  905. lcJsonString = '(&1) -> &2'.
  906. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  907. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  908. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  909. FIND messages NO-LOCK
  910. WHERE messages.message_no = iNo
  911. AND messages.language_id = ilanguage_id NO-ERROR.
  912. IF NOT AVAILABLE messages THEN
  913. DO:
  914. FIND FIRST messages NO-LOCK
  915. WHERE messages.message_no = iNo NO-ERROR.
  916. END.
  917. IF NOT AVAILABLE messages THEN
  918. DO:
  919. cString = cString
  920. + (IF cString = '' THEN '' ELSE ' ')
  921. + 'Systemfehler, Administrator benachrichtigen !'.
  922. END.
  923. ELSE
  924. DO:
  925. cString = cString
  926. + (IF cString = '' THEN '' ELSE ' ')
  927. + messages.message_text.
  928. END.
  929. END.
  930. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  931. cMessage = cString.
  932. RETURN.
  933. END METHOD.
  934. /*------------------------------------------------------------------------------
  935. Purpose:
  936. Notes:
  937. ------------------------------------------------------------------------------*/
  938. METHOD PUBLIC CHARACTER getHeader(
  939. INPUT httInput AS HANDLE
  940. ):
  941. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  942. FIND FIRST labeltexte NO-LOCK
  943. WHERE labeltexte.company = httInput::company
  944. AND labeltexte.user_name = httInput::user_name
  945. AND labeltexte.program = httInput::program
  946. AND labeltexte.field_name = 'KOPF'
  947. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  948. IF NOT AVAILABLE labeltexte THEN
  949. DO:
  950. FIND FIRST labeltexte NO-LOCK
  951. WHERE labeltexte.company = httInput::company
  952. AND labeltexte.program = httInput::program
  953. AND labeltexte.field_name = 'KOPF'
  954. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  955. END.
  956. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::program).
  957. RETURN cHeader.
  958. END METHOD.
  959. /*------------------------------------------------------------------------------
  960. Purpose:
  961. Notes:
  962. ------------------------------------------------------------------------------*/
  963. METHOD PUBLIC LOGICAL getHeaderData(
  964. INPUT poRequest AS IWebRequest ,
  965. OUTPUT ccompany AS CHARACTER ,
  966. OUTPUT cuser_name AS CHARACTER ,
  967. OUTPUT cAnzeigeName AS CHARACTER ,
  968. OUTPUT iLanguage_id AS INTEGER ,
  969. OUTPUT cSessionToken AS CHARACTER ,
  970. OUTPUT cFunction AS CHARACTER ,
  971. OUTPUT oJsonIdent AS JsonObject
  972. ):
  973. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  974. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  975. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  976. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  977. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  978. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  979. DEFINE VARIABLE cQueryString AS CHARACTER NO-UNDO.
  980. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  981. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  982. DEFINE VARIABLE cFilename AS CHARACTER NO-UNDO.
  983. oHeader = poRequest:GetHeader('X-COMPANY').
  984. ccompany = oHeader:VALUE.
  985. oHeader = poRequest:GetHeader('X-USER-NAME').
  986. cuser_name = oHeader:VALUE.
  987. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  988. cAnzeigeName = oHeader:VALUE.
  989. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  990. ilanguage_id = INTEGER(oHeader:VALUE).
  991. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  992. cSessionToken = oHeader:VALUE.
  993. cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
  994. cQueryString = OpenEdge.Net.URI:Decode(cQueryString).
  995. // MESSAGE 'cQueryYString =' cQueryString.
  996. oJsonIdent = NEW JsonObject().
  997. oJsonIdent:ADD('H_company' , ccompany ) NO-ERROR.
  998. oJsonIdent:ADD('H_user_name' , cuser_name ) NO-ERROR.
  999. oJsonIdent:ADD('H_language_id' , iLanguage_id ) NO-ERROR.
  1000. oJsonIdent:ADD('H_display_name', cAnzeigeName ) NO-ERROR.
  1001. oJsonIdent:ADD('sessionToken' , cSessionToken) NO-ERROR.
  1002. //
  1003. // Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
  1004. //
  1005. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  1006. cQueryPairs = ENTRY(ii, cQueryString, '&').
  1007. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  1008. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  1009. IF oJsonIdent:HAS(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  1010. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  1011. END.
  1012. IF NOT oJsonIdent:HAS('company' ) THEN oJsonIdent:ADD('company' , oJsonIdent:GetCharacter('H_company' )).
  1013. IF NOT oJsonIdent:HAS('user_name' ) THEN oJsonIdent:ADD('user_name' , oJsonIdent:GetCharacter('H_user_name' )).
  1014. IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetJsonText ('H_language_id')).
  1015. // language_id soll immer ein Interger-Wert sein
  1016. oJsonIdent:SET('language_id', INTEGER(oJsonIdent:GetJsonText('language_id'))).
  1017. IF oJsonIdent:HAS('formId') THEN
  1018. DO:
  1019. cFormId = oJsonIdent:GetCharacter('formId').
  1020. cFileName = ENTRY(1, cFormId, '_').
  1021. IF NOT oJsonIdent:HAS('file_name') THEN oJsonIdent:ADD('file_name', cFileName).
  1022. // cFileName = SUBSTITUTE ('C:\TEMP\oJsonIdent_getHeaderData_&1.log', cFormId).
  1023. // oJsonIdent:WriteFile(cFileName, TRUE).
  1024. FIND FIRST programs NO-LOCK
  1025. WHERE programs.FormId = cFormId NO-ERROR.
  1026. IF AVAILABLE programs THEN
  1027. DO:
  1028. oJsonIdent:ADD('class_name', programs.program_class).
  1029. cProgram = programs.program.
  1030. // MESSAGE 'programm gefunden mit FormId' cFormId.
  1031. END.
  1032. END.
  1033. ccompany = oJsonIdent:GetCharacter('company').
  1034. cuser_name = oJsonIdent:GetCharacter('user_name').
  1035. ilanguage_id = oJsonIdent:GetInteger ('language_id').
  1036. IF oJsonIdent:HAS('function') THEN cFunction = oJsonIdent:GetCharacter('function').
  1037. lRetVal = TRUE.
  1038. RETURN lRetVal.
  1039. END METHOD.
  1040. /*------------------------------------------------------------------------------
  1041. Purpose:
  1042. Notes:
  1043. ------------------------------------------------------------------------------*/
  1044. METHOD PUBLIC LOGICAL getKeyFields(
  1045. INPUT oJsonIdent AS JsonObject,
  1046. OUTPUT cKeyFields AS CHARACTER ,
  1047. OUTPUT cKeyValues AS CHARACTER
  1048. ):
  1049. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1050. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1051. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1052. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1053. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1054. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1055. cKeyFields = ''.
  1056. cKeyValues = ''.
  1057. cFieldNames = oJsonIdent:getNames().
  1058. DO i1 = 1 TO EXTENT(cFieldNames):
  1059. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  1060. cKeyFields = cKeyFields
  1061. + (IF cKeyFields = '' THEN '' ELSE ';')
  1062. + REPLACE(cFieldNames[i1], 'keyfield_', '').
  1063. cValue = oJsonIdent:GetCharacter(cFieldNames[i1]).
  1064. cKeyValues = cKeyValues
  1065. + (IF cKeyValues = '' THEN '' ELSE CHR(01))
  1066. + cValue.
  1067. END.
  1068. lOK = TRUE.
  1069. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  1070. cString = ENTRY(i1, cKeyFields, ';').
  1071. cString = ENTRY(1, cString, '_') + '_'.
  1072. cFieldName = REPLACE(ENTRY(i1, cKeyFields, ';'), cString, '').
  1073. DO WHILE lOK:
  1074. FIND FIRST Ge_MIS._Field NO-LOCK
  1075. WHERE Ge_MIS._Field._Field-Name = cFieldname NO-ERROR.
  1076. IF NOT AVAILABLE Ge_MIS._Field THEN
  1077. DO:
  1078. lOK = FALSE.
  1079. LEAVE.
  1080. END.
  1081. CASE Ge_MIS._Field._Data-Type:
  1082. WHEN 'character' THEN
  1083. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1084. WHEN 'logical' THEN
  1085. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1086. END CASE.
  1087. LEAVE.
  1088. END.
  1089. DO WHILE NOT lOK:
  1090. FIND FIRST FRAMEWORK._Field NO-LOCK
  1091. WHERE FRAMEWORK._Field._Field-Name = cFieldname NO-ERROR.
  1092. IF NOT AVAILABLE FRAMEWORK._Field THEN
  1093. DO:
  1094. lOK = FALSE.
  1095. LEAVE.
  1096. END.
  1097. CASE FRAMEWORK._Field._Data-Type:
  1098. WHEN 'character' THEN
  1099. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1100. WHEN 'logical' THEN
  1101. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1102. END CASE.
  1103. LEAVE.
  1104. END.
  1105. END.
  1106. lRetVal = TRUE.
  1107. RETURN lRetVal.
  1108. END METHOD.
  1109. /*------------------------------------------------------------------------------
  1110. Purpose:
  1111. Notes:
  1112. ------------------------------------------------------------------------------*/
  1113. METHOD PUBLIC CHARACTER getLogicalDBName(
  1114. INPUT ipcFilename AS CHARACTER
  1115. ):
  1116. DEFINE VARIABLE cLogicalDBName AS CHARACTER NO-UNDO.
  1117. DEFINE VARIABLE hDictBuffer AS HANDLE NO-UNDO.
  1118. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1119. cFileName = SUBSTITUTE('Ge_MIS.&1', ipcFilename) NO-ERROR.
  1120. CREATE BUFFER hDictBuffer FOR TABLE cFileName NO-ERROR.
  1121. cLogicalDBName = (IF VALID-HANDLE(hDictBuffer) THEN 'Ge_MIS' ELSE 'FRAMEWORK').
  1122. DELETE OBJECT hDictBuffer NO-ERROR.
  1123. RETURN cLogicalDBName.
  1124. END METHOD.
  1125. /*------------------------------------------------------------------------------
  1126. Purpose:
  1127. Notes:
  1128. ------------------------------------------------------------------------------*/
  1129. METHOD PUBLIC CHARACTER getProgramName(
  1130. INPUT oJsonIdent AS JsonObject,
  1131. INPUT cUsers AS CHARACTER ,
  1132. OUTPUT cFormUser AS CHARACTER ,
  1133. OUTPUT cFormColumns AS CHARACTER ,
  1134. INPUT-OUTPUT iItemsPerPage AS INTEGER ,
  1135. INPUT-OUTPUT cMaxHeight AS CHARACTER
  1136. ):
  1137. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1138. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  1139. DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
  1140. cProgram = ''.
  1141. ccompany = oJsonIdent:GetCharacter('company').
  1142. cFormId = oJsonIdent:GetCharacter('formId' ).
  1143. DO i1 = 1 TO NUM-ENTRIES(cUsers, ','):
  1144. cProgramUser = ENTRY(i1, cUsers).
  1145. FIND FIRST htmldokumente NO-LOCK
  1146. WHERE htmldokumente.company = ccompany
  1147. AND htmldokumente.user_name = cProgramUser
  1148. AND htmldokumente.FormId = cFormId NO-ERROR.
  1149. IF NOT AVAILABLE htmldokumente THEN NEXT.
  1150. ASSIGN
  1151. cProgram = htmldokumente.program
  1152. cFormUser = cProgramUser
  1153. iItemsPerPage = htmldokumente.itemsPerPage
  1154. cMaxHeight = htmldokumente.tableMaxHeight
  1155. cFormColumns = htmldokumente.formColumns.
  1156. LEAVE.
  1157. END.
  1158. RETURN cProgram.
  1159. END METHOD.
  1160. /*------------------------------------------------------------------------------
  1161. Purpose:
  1162. Notes:
  1163. ------------------------------------------------------------------------------*/
  1164. METHOD PUBLIC CHARACTER iso2date(
  1165. INPUT cIsoDate AS CHARACTER
  1166. ):
  1167. DEFINE VARIABLE cDate AS CHARACTER NO-UNDO.
  1168. IF cIsoDate = '' OR
  1169. cIsoDate = ? THEN RETURN cDate.
  1170. cDate = SUBSTITUTE('&1/&2/&3', ENTRY(2, cIsoDate, '-'), ENTRY(3, cIsoDate, '-'), ENTRY(1, cIsoDate, '-') ).
  1171. RETURN cDate.
  1172. END METHOD.
  1173. /*------------------------------------------------------------------------------
  1174. Purpose:
  1175. Notes:
  1176. ------------------------------------------------------------------------------*/
  1177. METHOD PUBLIC VOID readLastcWhere(
  1178. INPUT oJsonIdent AS JsonObject,
  1179. INPUT cFileName AS CHARACTER ,
  1180. OUTPUT cWhere AS CHARACTER
  1181. ):
  1182. FIND userdata
  1183. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1184. AND userdata.company = oJsonIdent:GetCharacter('company')
  1185. AND userdata.branch = '0000'
  1186. AND userdata.record_type = 'where'
  1187. AND userdata.section = cFileName
  1188. AND userdata.key_type = 'last' NO-ERROR.
  1189. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1190. RELEASE userdata.
  1191. RETURN.
  1192. END METHOD.
  1193. /*------------------------------------------------------------------------------
  1194. Purpose:
  1195. Notes:
  1196. ------------------------------------------------------------------------------*/
  1197. METHOD PUBLIC LOGICAL readLastRecord(
  1198. INPUT oJsonIdent AS JsonObject,
  1199. OUTPUT cWhere AS CHARACTER
  1200. ):
  1201. FIND userdata NO-LOCK
  1202. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1203. AND userdata.company = oJsonIdent:GetCharacter('company')
  1204. AND userdata.branch = '0000'
  1205. AND userdata.record_type = 'lastrecord'
  1206. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1207. AND userdata.key_type = '' NO-ERROR.
  1208. IF NOT AVAILABLE userdata THEN RETURN FALSE.
  1209. cWhere = userdata.cfield_1.
  1210. RELEASE userdata.
  1211. RETURN TRUE.
  1212. END METHOD.
  1213. /*------------------------------------------------------------------------------
  1214. Purpose:
  1215. Notes:
  1216. ------------------------------------------------------------------------------*/
  1217. METHOD PUBLIC VOID readSortFields(
  1218. INPUT oJsonIdent AS JsonObject,
  1219. INPUT cFileName AS CHARACTER ,
  1220. OUTPUT cSortField AS CHARACTER ,
  1221. OUTPUT cDirection AS CHARACTER
  1222. ):
  1223. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1224. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1225. cSortField = ''.
  1226. cDirection = ''.
  1227. cCompany = oJsonIdent:GetCharacter('company' ).
  1228. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1229. FIND userdata NO-LOCK
  1230. WHERE userdata.user_name = cUser_Name
  1231. AND userdata.company = cCompany
  1232. AND userdata.branch = '0000'
  1233. AND userdata.record_type = 'sortField'
  1234. AND userdata.section = cFileName
  1235. AND userdata.key_type = '' NO-ERROR.
  1236. IF AVAILABLE userdata THEN
  1237. ASSIGN
  1238. cSortField = userdata.cfield_1
  1239. cDirection = (IF userdata.cfield_2 BEGINS 'asc' THEN '' ELSE userdata.cfield_2).
  1240. RETURN.
  1241. END METHOD.
  1242. /*------------------------------------------------------------------------------
  1243. Purpose:
  1244. Notes:
  1245. ------------------------------------------------------------------------------*/
  1246. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  1247. INPUT ipctable AS CHARACTER
  1248. ):
  1249. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  1250. DEFINE VARIABLE cDBNames AS CHARACTER NO-UNDO INIT 'Ge_MIS;FRAMEWORK'.
  1251. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1252. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1253. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1254. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  1255. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1256. DO ix = 1 TO NUM-ENTRIES(cDBNames, ';'):
  1257. cDBName = ENTRY(ix, cDBNames, ';').
  1258. cFileName = SUBSTITUTE('&1.&2', cDBName, ipcTable).
  1259. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  1260. IF NOT ERROR-STATUS:ERROR AND
  1261. VALID-HANDLE(hBuffer) THEN LEAVE.
  1262. DELETE OBJECT hBuffer NO-ERROR.
  1263. cDBName = ''.
  1264. END.
  1265. DELETE OBJECT hBuffer NO-ERROR.
  1266. cFields = ''.
  1267. CASE cDBName:
  1268. WHEN 'Ge_MIS' THEN
  1269. DO:
  1270. FIND FIRST Ge_MIS._File NO-LOCK
  1271. WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
  1272. FOR EACH Ge_MIS._Index-Field NO-LOCK
  1273. WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
  1274. FIRST Ge_MIS._Field NO-LOCK
  1275. WHERE RECID(Ge_MIS._Field) = Ge_MIS._index-Field._Field-recid
  1276. BY Ge_MIS._Index-Field._Index-Seq:
  1277. cFields = cFields
  1278. + (IF cFields = '' THEN '' ELSE ';')
  1279. + Ge_MIS._Field._Field-Name.
  1280. END.
  1281. END.
  1282. WHEN 'FRAMEWORK' THEN
  1283. DO:
  1284. FIND FIRST FRAMEWORK._File NO-LOCK
  1285. WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
  1286. FOR EACH FRAMEWORK._Index-Field NO-LOCK
  1287. WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
  1288. FIRST FRAMEWORK._Field NO-LOCK
  1289. WHERE RECID(FRAMEWORK._Field) = FRAMEWORK._index-Field._Field-recid
  1290. BY FRAMEWORK._Index-Field._Index-Seq:
  1291. cFields = cFields
  1292. + (IF cFields = '' THEN '' ELSE ';')
  1293. + FRAMEWORK._Field._Field-Name.
  1294. END.
  1295. END.
  1296. END CASE.
  1297. RETURN cFields.
  1298. END METHOD.
  1299. /*------------------------------------------------------------------------------
  1300. Purpose:
  1301. Notes:
  1302. ------------------------------------------------------------------------------*/
  1303. METHOD PUBLIC CHARACTER getSysUser( ):
  1304. DEFINE VARIABLE mBen AS MEMPTR NO-UNDO.
  1305. DEFINE VARIABLE iLeng AS INTEGER INIT 100 NO-UNDO.
  1306. DEFINE VARIABLE fok AS INTEGER NO-UNDO.
  1307. DEFINE VARIABLE cBen AS CHARACTER NO-UNDO.
  1308. SET-SIZE(mBen) = iLeng.
  1309. RUN GetUserNameA( OUTPUT mBen, INPUT-OUTPUT iLeng, OUTPUT fok ) NO-ERROR.
  1310. ASSIGN
  1311. cBen = GET-STRING(mBen,1) NO-ERROR.
  1312. SET-SIZE(mBen) = 0.
  1313. RETURN cBen.
  1314. END METHOD.
  1315. /*------------------------------------------------------------------------------
  1316. Purpose:
  1317. Notes:
  1318. ------------------------------------------------------------------------------*/
  1319. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  1320. INPUT oJsonObject AS JsonObject,
  1321. INPUT hbttInput AS HANDLE,
  1322. INPUT-OUTPUT hbttTemp AS HANDLE
  1323. ):
  1324. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  1325. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  1326. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  1327. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  1328. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  1329. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1330. jsonttTemp = NEW JsonObject().
  1331. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  1332. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  1333. hbttTemp:FIND-FIRST ().
  1334. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  1335. // MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  1336. lRetVal = TRUE.
  1337. RETURN lRetVal.
  1338. END METHOD.
  1339. /*------------------------------------------------------------------------------
  1340. Purpose:
  1341. Notes:
  1342. ------------------------------------------------------------------------------*/
  1343. METHOD PUBLIC VOID readPosition(
  1344. INPUT oJsonIdent AS JsonObject ,
  1345. INPUT cFileName AS CHARACTER ,
  1346. OUTPUT iCurrentPosition AS INTEGER ,
  1347. OUTPUT iStartPage AS INTEGER ,
  1348. OUTPUT iMaxRecords AS INTEGER
  1349. ):
  1350. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1351. FIND userdata
  1352. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1353. AND userdata.company = oJsonIdent:GetCharacter('company')
  1354. AND userdata.branch = '0000'
  1355. AND userdata.record_type = 'position'
  1356. AND userdata.section = cFileName
  1357. AND userdata.key_type = '' NO-ERROR.
  1358. IF AVAILABLE userdata THEN
  1359. DO:
  1360. ASSIGN
  1361. iCurrentPosition = userdata.ifield_1
  1362. iStartPage = userdata.ifield_2
  1363. iMaxRecords = userdata.ifield_3.
  1364. END.
  1365. ELSE
  1366. DO:
  1367. ASSIGN
  1368. iCurrentPosition = 1
  1369. iStartPage = 1
  1370. iMaxRecords = 25.
  1371. END.
  1372. RELEASE userdata.
  1373. LEAVE.
  1374. END.
  1375. RETURN.
  1376. END METHOD.
  1377. /*------------------------------------------------------------------------------
  1378. Purpose:
  1379. Notes:
  1380. ------------------------------------------------------------------------------*/
  1381. METHOD PUBLIC VOID readStartcWhere(
  1382. INPUT oJsonIdent AS JsonObject,
  1383. INPUT cFileName AS CHARACTER ,
  1384. OUTPUT cWhere AS CHARACTER
  1385. ):
  1386. FIND userdata
  1387. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1388. AND userdata.company = oJsonIdent:GetCharacter('company')
  1389. AND userdata.branch = '0000'
  1390. AND userdata.record_type = 'where'
  1391. AND userdata.section = cFileName
  1392. AND userdata.key_type = 'start' NO-ERROR.
  1393. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1394. RELEASE userdata.
  1395. RETURN.
  1396. END METHOD.
  1397. /*------------------------------------------------------------------------------
  1398. Purpose:
  1399. Notes:
  1400. ------------------------------------------------------------------------------*/
  1401. METHOD PUBLIC VOID setActiveSelection(
  1402. INPUT oJsonIdent AS JsonObject,
  1403. INPUT cFileName AS CHARACTER ,
  1404. INPUT cActiveSelection AS CHARACTER
  1405. ):
  1406. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1407. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  1408. ASSIGN
  1409. ccompany = oJsonIdent:GetCharacter('company')
  1410. cuser_name = oJsonIdent:GetCharacter('user_name')
  1411. cProgram = oJsonIdent:GetCharacter('program').
  1412. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1413. FIND userdata
  1414. WHERE userdata.user_name = cuser_name
  1415. AND userdata.company = ccompany
  1416. AND userdata.branch = '0000'
  1417. AND userdata.record_type = 'active'
  1418. AND userdata.section = cFileName
  1419. AND userdata.key_type = cProgram NO-ERROR.
  1420. IF NOT AVAILABLE userdata THEN
  1421. DO:
  1422. CREATE userdata.
  1423. ASSIGN
  1424. userdata.user_name = cuser_name
  1425. userdata.company = ccompany
  1426. userdata.branch = '0000'
  1427. userdata.record_type = 'active'
  1428. userdata.section = cFileName
  1429. userdata.key_type = cProgram
  1430. userdata.creation_date = NOW NO-ERROR.
  1431. END.
  1432. ELSE
  1433. DO:
  1434. userdata.access_date = NOW.
  1435. END.
  1436. userdata.cfield_1 = cActiveSelection.
  1437. RELEASE userdata.
  1438. LEAVE.
  1439. END.
  1440. RETURN.
  1441. END METHOD.
  1442. /*------------------------------------------------------------------------------
  1443. Purpose:
  1444. Notes:
  1445. ------------------------------------------------------------------------------*/
  1446. METHOD PUBLIC LONGCHAR trimStructure(
  1447. INPUT oJsonInput AS JsonObject
  1448. ):
  1449. DEFINE VARIABLE lcResult AS LONGCHAR NO-UNDO.
  1450. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1451. lcResult = TRIM(oJsonInput:GetJsonText()).
  1452. lcResult = SUBSTRING(lcResult,02).
  1453. ii = LENGTH(lcResult) - 1.
  1454. lcResult = SUBSTRING(lcResult,01, ii).
  1455. RETURN lcResult.
  1456. END METHOD.
  1457. /*------------------------------------------------------------------------------
  1458. Purpose:
  1459. Notes:
  1460. ------------------------------------------------------------------------------*/
  1461. METHOD PUBLIC VOID writeLastcWhere(
  1462. INPUT oJsonIdent AS JsonObject,
  1463. INPUT cFileName AS CHARACTER ,
  1464. INPUT cWhere AS CHARACTER
  1465. ):
  1466. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1467. FIND userdata
  1468. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1469. AND userdata.company = oJsonIdent:GetCharacter('company')
  1470. AND userdata.branch = '0000'
  1471. AND userdata.record_type = 'where'
  1472. AND userdata.section = cFileName
  1473. AND userdata.key_type = 'last' NO-ERROR.
  1474. IF NOT AVAILABLE userdata THEN
  1475. DO:
  1476. CREATE userdata.
  1477. ASSIGN
  1478. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1479. userdata.company = oJsonIdent:GetCharacter('company')
  1480. userdata.branch = '0000'
  1481. userdata.record_type = 'where'
  1482. userdata.section = cFileName
  1483. userdata.key_type = 'last' NO-ERROR.
  1484. END.
  1485. ASSIGN
  1486. userdata.cfield_1 = cWhere.
  1487. RELEASE userdata.
  1488. LEAVE.
  1489. END.
  1490. RETURN.
  1491. END METHOD.
  1492. /*------------------------------------------------------------------------------
  1493. Purpose:
  1494. Notes:
  1495. ------------------------------------------------------------------------------*/
  1496. METHOD PUBLIC LOGICAL writeLastRecord(
  1497. INPUT oJsonIdent AS JsonObject,
  1498. INPUT cWhere AS CHARACTER
  1499. ):
  1500. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1501. FIND userdata
  1502. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1503. AND userdata.company = oJsonIdent:GetCharacter('company')
  1504. AND userdata.branch = '0000'
  1505. AND userdata.record_type = 'lastrecord'
  1506. AND userdata.section = oJsonIdent:GetCharacter('file_name')
  1507. AND userdata.key_type = '' NO-ERROR.
  1508. IF NOT AVAILABLE userdata THEN
  1509. DO:
  1510. CREATE userdata.
  1511. ASSIGN
  1512. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1513. userdata.company = oJsonIdent:GetCharacter('company')
  1514. userdata.branch = '0000'
  1515. userdata.record_type = 'lastrecord'
  1516. userdata.section = oJsonIdent:GetCharacter('file_name')
  1517. userdata.key_type = ''
  1518. userdata.creation_date = NOW NO-ERROR.
  1519. END.
  1520. ASSIGN
  1521. userdata.cfield_1 = cWhere
  1522. userdata.access_date = NOW.
  1523. RELEASE userdata.
  1524. LEAVE.
  1525. END.
  1526. RETURN TRUE.
  1527. END METHOD.
  1528. /*------------------------------------------------------------------------------
  1529. Purpose:
  1530. Notes:
  1531. ------------------------------------------------------------------------------*/
  1532. METHOD PUBLIC VOID writePosition(
  1533. INPUT oJsonIdent AS JsonObject,
  1534. INPUT cFileName AS CHARACTER ,
  1535. INPUT iCurrentPosition AS INTEGER ,
  1536. INPUT iStartPage AS INTEGER ,
  1537. INPUT iMaxRecords AS INTEGER
  1538. ):
  1539. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1540. FIND userdata
  1541. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1542. AND userdata.company = oJsonIdent:GetCharacter('company')
  1543. AND userdata.branch = '0000'
  1544. AND userdata.record_type = 'position'
  1545. AND userdata.section = cFileName
  1546. AND userdata.key_type = '' NO-ERROR.
  1547. IF NOT AVAILABLE userdata THEN
  1548. DO:
  1549. CREATE userdata.
  1550. ASSIGN
  1551. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1552. userdata.company = oJsonIdent:GetCharacter('company')
  1553. userdata.branch = '0000'
  1554. userdata.record_type = 'position'
  1555. userdata.section = cFileName
  1556. userdata.key_type = '' NO-ERROR.
  1557. END.
  1558. ASSIGN
  1559. userdata.ifield_1 = iCurrentPosition
  1560. userdata.iField_2 = iStartPage
  1561. userdata.ifield_3 = iMaxRecords.
  1562. RELEASE userdata.
  1563. LEAVE.
  1564. END.
  1565. RETURN.
  1566. END METHOD.
  1567. /*------------------------------------------------------------------------------
  1568. Purpose:
  1569. Notes:
  1570. ------------------------------------------------------------------------------*/
  1571. METHOD PUBLIC VOID writeSortfields(
  1572. INPUT oJsonIdent AS JsonObject,
  1573. INPUT cFileName AS CHARACTER ,
  1574. INPUT cSortField AS CHARACTER ,
  1575. INPUT cDirection AS CHARACTER
  1576. ):
  1577. DEFINE VARIABLE cCompany AS CHARACTER NO-UNDO.
  1578. DEFINE VARIABLE cUser_Name AS CHARACTER NO-UNDO.
  1579. DEFINE VARIABLE cReplace AS CHARACTER NO-UNDO.
  1580. cCompany = oJsonIdent:GetCharacter('company' ).
  1581. cUser_Name = oJsonIdent:GetCharacter('user_name').
  1582. cReplace = SUBSTITUTE('&1_', cFileName).
  1583. cSortField = REPLACE(cSortField, cReplace, '').
  1584. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1585. FIND userdata
  1586. WHERE userdata.user_name = cUser_Name
  1587. AND userdata.company = cCompany
  1588. AND userdata.branch = '0000'
  1589. AND userdata.record_type = 'sortField'
  1590. AND userdata.section = cFileName
  1591. AND userdata.key_type = '' NO-ERROR.
  1592. IF NOT AVAILABLE userdata THEN
  1593. DO:
  1594. CREATE userdata.
  1595. ASSIGN
  1596. userdata.user_name = cUser_Name
  1597. userdata.company = cCompany
  1598. userdata.branch = '0000'
  1599. userdata.record_type = 'sortField'
  1600. userdata.section = cFileName
  1601. userdata.key_type = '' NO-ERROR.
  1602. END.
  1603. ASSIGN
  1604. userdata.cfield_1 = cSortfield
  1605. userdata.cfield_2 = cDirection.
  1606. RELEASE userdata.
  1607. LEAVE.
  1608. END.
  1609. RETURN.
  1610. END METHOD.
  1611. /*------------------------------------------------------------------------------
  1612. Purpose:
  1613. Notes:
  1614. ------------------------------------------------------------------------------*/
  1615. METHOD PUBLIC VOID writeStartcWhere(
  1616. INPUT oJsonIdent AS JsonObject,
  1617. INPUT cFileName AS CHARACTER ,
  1618. INPUT cWhere AS CHARACTER
  1619. ):
  1620. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1621. FIND userdata
  1622. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1623. AND userdata.company = oJsonIdent:GetCharacter('company')
  1624. AND userdata.branch = '0000'
  1625. AND userdata.record_type = 'where'
  1626. AND userdata.section = cFileName
  1627. AND userdata.key_type = 'start' NO-ERROR.
  1628. IF NOT AVAILABLE userdata THEN
  1629. DO:
  1630. CREATE userdata.
  1631. ASSIGN
  1632. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1633. userdata.company = oJsonIdent:GetCharacter('company')
  1634. userdata.branch = '0000'
  1635. userdata.record_type = 'where'
  1636. userdata.section = cFileName
  1637. userdata.key_type = 'start' NO-ERROR.
  1638. END.
  1639. ASSIGN
  1640. userdata.cfield_1 = cWhere.
  1641. RELEASE userdata.
  1642. LEAVE.
  1643. END.
  1644. RETURN.
  1645. END METHOD.
  1646. /*------------------------------------------------------------------------------
  1647. Purpose:
  1648. Notes:
  1649. ------------------------------------------------------------------------------*/
  1650. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  1651. /* MESSAGE 'Destructor utilitiesHandler '.*/
  1652. /* DELETE OBJECT hQuery NO-ERROR. */
  1653. /* DELETE OBJECT hBuffer NO-ERROR. */
  1654. END DESTRUCTOR.
  1655. END CLASS.