utilitiesHandler.cls 105 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729
  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.Net.HTTP.IHttpRequest 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 cProgramm AS CHARACTER NO-UNDO.
  21. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  22. DEFINE TEMP-TABLE ttBrowserKo LIKE browser_ko.
  23. DEFINE TEMP-TABLE ttViewerKo LIKE viewer_ko.
  24. DEFINE TEMP-TABLE ttExternefield_nameer NO-UNDO
  25. FIELD ctable AS CHARACTER
  26. FIELD hBuffer AS HANDLE
  27. FIELD cKeyfield_nameer AS CHARACTER
  28. FIELD cWhere AS CHARACTER
  29. FIELD cfield_nameer AS CHARACTER
  30. FIELD cDataType AS CHARACTER
  31. .
  32. DEFINE TEMP-TABLE twebmenu
  33. SERIALIZE-NAME 'menuItems'
  34. FIELD level1 AS INTEGER SERIALIZE-NAME 'level1'
  35. FIELD level2 AS INTEGER SERIALIZE-NAME 'level2'
  36. FIELD level3 AS INTEGER SERIALIZE-NAME 'level3'
  37. FIELD menu_title AS CHARACTER SERIALIZE-NAME 'menu_title'
  38. FIELD menu_link AS CHARACTER SERIALIZE-NAME 'menu_link'
  39. .
  40. /*------------------------------------------------------------------------------
  41. Purpose:
  42. Notes:
  43. ------------------------------------------------------------------------------*/
  44. METHOD PUBLIC VOID createErrorBox(
  45. INPUT oJsonIdent AS JsonObject,
  46. INPUT cErrorNumber AS CHARACTER ,
  47. INPUT cParameter AS CHARACTER ,
  48. OUTPUT oJsonMessageBox AS JsonObject
  49. ):
  50. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  51. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  52. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  53. DEFINE VARIABLE oJsonUpdate AS JsonObject.
  54. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  55. getErrorMessage(
  56. INPUT '2012' ,
  57. INPUT ilanguage_id ,
  58. INPUT '' ,
  59. OUTPUT lcTitle
  60. ).
  61. getErrorMessage(
  62. INPUT cErrorNumber,
  63. INPUT ilanguage_id,
  64. INPUT cParameter ,
  65. OUTPUT lcMessage
  66. ).
  67. oJsonMessageBox = NEW JsonObject().
  68. oJsonMessageBox:ADD('type' , 'info').
  69. oJsonMessageBox:ADD('title', lcTitle ).
  70. oJsonMessageBox:ADD('text' , lcMessage ).
  71. RETURN.
  72. END METHOD.
  73. /*------------------------------------------------------------------------------
  74. Purpose:
  75. Notes:
  76. ------------------------------------------------------------------------------*/
  77. METHOD PUBLIC HANDLE createExterneFieldName(
  78. INPUT ipctable AS CHARACTER ,
  79. INPUT ipcfield_name AS CHARACTER ,
  80. INPUT ipcDatatype AS CHARACTER ,
  81. INPUT iphttInput AS HANDLE
  82. ):
  83. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  84. DEFINE VARIABLE cKeyfield_name AS CHARACTER NO-UNDO.
  85. DEFINE VARIABLE cKeyValue AS CHARACTER NO-UNDO.
  86. FIND FIRST ttExternefield_nameer
  87. WHERE ttExternefield_nameer.ctable = ipctable NO-ERROR.
  88. DO WHILE TRUE:
  89. IF AVAILABLE ttExternefield_nameer THEN LEAVE.
  90. FIND _File NO-LOCK WHERE _File._File-name = ipctable NO-ERROR.
  91. IF NOT AVAILABLE _File THEN RETURN hBuffer.
  92. FIND FIRST _Field NO-LOCK OF _File
  93. WHERE _Field._Field-Name = ipcfield_name NO-ERROR.
  94. IF NOT AVAILABLE _Field THEN RETURN hBuffer.
  95. CREATE BUFFER hBuffer FOR TABLE ipctable.
  96. CREATE ttExternefield_nameer.
  97. ASSIGN
  98. ttExternefield_nameer.ctable = ipctable
  99. ttExternefield_nameer.hBuffer = hBuffer.
  100. FIND FIRST _Index WHERE RECID(_Index) = _File._Prime-Index NO-LOCK.
  101. FOR EACH _Index-Field
  102. WHERE _Index-Field._Index-Recid = RECID(_Index):
  103. FIND _Field WHERE RECID(_Field) = _Index-Field._Field-Recid.
  104. cKeyfield_name = _Field._Field-Name.
  105. cKeyValue = ''.
  106. CASE cKeyfield_name:
  107. WHEN 'company' OR
  108. WHEN 'Mandant' OR
  109. WHEN 'Firma' THEN
  110. DO:
  111. cKeyValue = QUOTER(iphttInput::company).
  112. END.
  113. WHEN 'language_id' THEN
  114. DO:
  115. cKeyValue = iphttInput::language_id.
  116. END.
  117. WHEN 'user_name' THEN
  118. DO:
  119. cKeyValue = iphttInput::user_name.
  120. END.
  121. END CASE.
  122. IF cKeyValue <> '' THEN
  123. DO:
  124. CASE ipcDatatype:
  125. WHEN 'character' THEN
  126. cKeyValue = QUOTER(cKeyValue).
  127. END CASE.
  128. ttExternefield_nameer.cWhere = ttExternefield_nameer.cWhere
  129. + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
  130. + SUBSTITUTE('&1.&2 = &3':U, ipctable, cKeyfield_name, cKeyValue).
  131. NEXT.
  132. END.
  133. ttExternefield_nameer.cKeyfield_nameer = ttExternefield_nameer.cKeyfield_nameer
  134. + (IF ttExternefield_nameer.cKeyfield_nameer = '' THEN '' ELSE ';')
  135. + cKeyfield_name.
  136. END.
  137. IF LOOKUP(ipcfield_name, ttExternefield_nameer.cfield_nameer, ';') > 0 THEN NEXT.
  138. ttExternefield_nameer.cfield_nameer = ttExternefield_nameer.cfield_nameer
  139. + (IF ttExternefield_nameer.cfield_nameer = '' THEN '' ELSE ';')
  140. + ipcfield_name.
  141. ttExternefield_nameer.cDataType = ttExternefield_nameer.cDataType
  142. + (IF ttExternefield_nameer.cDataType = '' THEN '' ELSE ';')
  143. + ipcfield_name.
  144. END.
  145. // DELETE OBJECT hBuffer NO-ERROR.
  146. RETURN hBuffer.
  147. END METHOD.
  148. /*------------------------------------------------------------------------------
  149. Purpose:
  150. Notes:
  151. ------------------------------------------------------------------------------*/
  152. METHOD PUBLIC VOID createInfoBox(
  153. INPUT oJsonIdent AS JsonObject,
  154. INPUT cErrorNumber AS CHARACTER ,
  155. INPUT cParameter AS CHARACTER ,
  156. OUTPUT oJsonMessageBox AS JsonObject
  157. ):
  158. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  159. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  160. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  161. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  162. getErrorMessage(
  163. INPUT '2013' ,
  164. INPUT ilanguage_id ,
  165. INPUT '' ,
  166. OUTPUT lcTitle
  167. ).
  168. getErrorMessage(
  169. INPUT cErrorNumber,
  170. INPUT ilanguage_id,
  171. INPUT cParameter ,
  172. OUTPUT lcMessage
  173. ).
  174. oJsonMessageBox = NEW JsonObject().
  175. oJsonMessageBox:ADD('type' , 'info').
  176. oJsonMessageBox:ADD('title', lcTitle ).
  177. oJsonMessageBox:ADD('text' , lcMessage ).
  178. RETURN.
  179. END METHOD.
  180. /*------------------------------------------------------------------------------
  181. Purpose:
  182. Notes:
  183. ------------------------------------------------------------------------------*/
  184. METHOD PUBLIC VOID createLockMessage(
  185. INPUT oJsonIdent AS JsonObject,
  186. INPUT rRecid AS RECID ,
  187. OUTPUT oJsonMessageBox AS JsonObject
  188. ):
  189. DEFINE VARIABLE lFound AS LOGICAL NO-UNDO INIT FALSE.
  190. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  191. DEFINE VARIABLE cLockName AS CHARACTER NO-UNDO.
  192. DEFINE VARIABLE cLockUser AS INTEGER NO-UNDO.
  193. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  194. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  195. DO WHILE NOT lFound:
  196. FIND FIRST Ge_MIS._Lock NO-LOCK
  197. WHERE Ge_MIS._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
  198. IF NOT AVAILABLE Ge_MIS._Lock THEN LEAVE.
  199. FIND Ge_MIS._File NO-LOCK
  200. WHERE Ge_MIS._File._File-Number = Ge_MIS._Lock._Lock-Table.
  201. ASSIGN
  202. cFileName = Ge_MIS._File._File-Name
  203. cLockName = Ge_MIS._Lock._Lock-Name
  204. cLockUser = Ge_MIS._Lock._Lock-Usr.
  205. lFound = TRUE.
  206. LEAVE.
  207. END.
  208. DO WHILE NOT lFound:
  209. FIND FIRST FRAMEWORK._Lock NO-LOCK
  210. WHERE FRAMEWORK._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
  211. IF NOT AVAILABLE FRAMEWORK._Lock THEN LEAVE.
  212. FIND FRAMEWORK._File NO-LOCK
  213. WHERE FRAMEWORK._File._File-Number = FRAMEWORK._Lock._Lock-Table.
  214. ASSIGN
  215. cFileName = FRAMEWORK._File._File-Name
  216. cLockName = FRAMEWORK._Lock._Lock-Name
  217. cLockUser = FRAMEWORK._Lock._Lock-Usr.
  218. lFound = TRUE.
  219. LEAVE.
  220. END.
  221. iLanguage_id = oJsonIdent:GetInteger('language_id').
  222. getErrorMessage(
  223. INPUT '2006',
  224. INPUT ilanguage_id,
  225. INPUT SUBSTITUTE('&1;&2;&3', cFileName, cLockName, cLockUser),
  226. OUTPUT lcMessage
  227. ).
  228. oJsonMessageBox = NEW JsonObject().
  229. oJsonMessageBox:ADD('success', FALSE).
  230. oJsonMessageBox:add('message', lcMessage).
  231. RETURN.
  232. END METHOD.
  233. /*------------------------------------------------------------------------------
  234. Purpose:
  235. Notes:
  236. ------------------------------------------------------------------------------*/
  237. METHOD PUBLIC LOGICAL createQuery(
  238. INPUT httInput AS HANDLE,
  239. INPUT httBrowserKo AS HANDLE,
  240. OUTPUT hQuery AS HANDLE,
  241. OUTPUT hBuffer AS HANDLE
  242. ).
  243. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  244. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  245. DEFINE VARIABLE cAnd AS CHARACTER NO-UNDO INIT 'WHERE'.
  246. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  247. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  248. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  249. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  250. DEFINE VARIABLE iModulo AS INTEGER NO-UNDO.
  251. ctable = httInput::table_name.
  252. cSortField = httBrowserKo::sortfield.
  253. cDirection = ''.
  254. IF cSortField <> '' THEN
  255. DO:
  256. IF NUM-ENTRIES(cSortField, ':') > 1 THEN
  257. DO:
  258. cDirection = ENTRY(2, cSortField, ':').
  259. cSortField = ENTRY(1, cSortField, ':').
  260. END.
  261. IF cDirection = '' THEN cDirection = 'ASCENDING'.
  262. END.
  263. CREATE QUERY hQuery.
  264. CREATE BUFFER hBuffer FOR TABLE ctable.
  265. hQuery:SET-BUFFERS (hBuffer).
  266. IF httInput::action = 'last' THEN
  267. DO:
  268. cWhere = SUBSTITUTE('PRESELECT EACH &1 NO-LOCK ', httInput::table_name).
  269. IF httBrowserKo::lmandant THEN
  270. DO:
  271. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, httInput::table_name, httInput::company).
  272. END.
  273. hQuery:QUERY-PREPARE (cWhere).
  274. hQuery:QUERY-OPEN ().
  275. iAnzRec = hQuery:NUM-RESULTS.
  276. iModulo = iAnzRec MOD httBrowserKo::pagesize.
  277. IF iModulo > 0 THEN httBrowserKo::actualpage = (iAnzRec - (iAnzRec MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize.
  278. ELSE httBrowserKo::actualpage = (iAnzRec / httBrowserKo::pagesize) - 1.
  279. hQuery:QUERY-CLOSE ().
  280. END.
  281. i1 = 0.
  282. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', httInput::table_name).
  283. IF httBrowserKo::lmandant THEN
  284. DO:
  285. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, httInput::table_name, httInput::company).
  286. cAnd = 'AND'.
  287. END.
  288. IF cDirection = 'ASCENDING' THEN cDirection = ''.
  289. IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
  290. MESSAGE 'cWhere-Statement = ' cWhere.
  291. hQuery:QUERY-PREPARE (cWhere).
  292. lRetVal = TRUE.
  293. RETURN lRetVal.
  294. END METHOD.
  295. /*------------------------------------------------------------------------------
  296. Purpose:
  297. Notes:
  298. ------------------------------------------------------------------------------*/
  299. METHOD PUBLIC VOID createQuestionBox(
  300. INPUT oJsonIdent AS JsonObject,
  301. INPUT cErrorNumber AS CHARACTER ,
  302. INPUT cParameter AS CHARACTER ,
  303. INPUT cFields AS CHARACTER ,
  304. INPUT cValues AS CHARACTER ,
  305. INPUT hBuffer AS HANDLE ,
  306. OUTPUT oJsonMessageBox AS JsonObject
  307. ):
  308. DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
  309. DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
  310. DEFINE VARIABLE lcTitle AS LONGCHAR NO-UNDO.
  311. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  312. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  313. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  314. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  315. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  316. DEFINE VARIABLE oJsonUpdate AS JsonObject.
  317. iLanguage_Id = oJsonIdent:GetInteger('language_id').
  318. getErrorMessage(
  319. INPUT '2011' ,
  320. INPUT ilanguage_id ,
  321. INPUT '' ,
  322. OUTPUT lcTitle
  323. ).
  324. getErrorMessage(
  325. INPUT cErrorNumber,
  326. INPUT ilanguage_id,
  327. INPUT cParameter ,
  328. OUTPUT lcMessage
  329. ).
  330. oJsonMessageBox = NEW JsonObject().
  331. oJsonMessageBox:ADD('type' , 'question').
  332. oJsonMessageBox:ADD('title', lcTitle ).
  333. oJsonMessageBox:ADD('text' , lcMessage ).
  334. oJsonUpdate = NEW JsonObject().
  335. DO ii = 1 TO NUM-ENTRIES(cFields, ';'):
  336. cField = ENTRY(ii, cFields, ';') .
  337. cValue = ENTRY(ii, cValues, CHR(01)).
  338. hField = hBuffer:BUFFER-FIELD(cField):HANDLE.
  339. cType = hField:DATA-TYPE.
  340. CASE ctype:
  341. WHEN 'logical' THEN oJsonUpdate:ADD(cField, LOGICAL(cValue) ).
  342. WHEN 'integer' THEN oJsonUpdate:ADD(cField, INTEGER(cValue) ).
  343. WHEN 'decimal' THEN oJsonUpdate:ADD(cField, DECIMAL(cValue) ).
  344. WHEN 'date' THEN oJsonUpdate:ADD(cField, STRING(DATE(cValue),'99.99.9999') ).
  345. OTHERWISE oJsonUpdate:ADD(cField, cValue ).
  346. END CASE.
  347. END.
  348. oJsonMessageBox:ADD('fieldUpdate', oJsonUpdate).
  349. RETURN.
  350. END METHOD.
  351. /*------------------------------------------------------------------------------
  352. Purpose:
  353. Notes:
  354. ------------------------------------------------------------------------------*/
  355. METHOD PUBLIC LOGICAL createSearchQuery(
  356. INPUT httInput AS HANDLE,
  357. INPUT httBrowserKo AS HANDLE,
  358. OUTPUT hQuery AS HANDLE,
  359. OUTPUT hBuffer AS HANDLE
  360. ).
  361. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  362. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  363. DEFINE VARIABLE cAnd AS CHARACTER NO-UNDO INIT 'WHERE'.
  364. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  365. DEFINE VARIABLE cSuchfield_name AS CHARACTER NO-UNDO.
  366. DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
  367. DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
  368. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  369. DEFINE VARIABLE lcWortIndex AS LONGCHAR NO-UNDO.
  370. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  371. DEFINE VARIABLE ifield_nameer AS INTEGER NO-UNDO.
  372. DEFINE VARIABLE iFound AS INTEGER NO-UNDO.
  373. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  374. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  375. DEFINE VARIABLE httTemp AS HANDLE NO-UNDO.
  376. DEFINE VARIABLE hbtable AS HANDLE NO-UNDO.
  377. DEFINE VARIABLE hqtable AS HANDLE NO-UNDO.
  378. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  379. DEFINE VARIABLE hWortIndex AS HANDLE NO-UNDO.
  380. DEFINE VARIABLE hSuchfield_name AS HANDLE NO-UNDO.
  381. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  382. DEFINE VARIABLE hfield_nametable AS HANDLE NO-UNDO EXTENT 10.
  383. DEFINE VARIABLE cInhalttable AS CHARACTER NO-UNDO EXTENT 10.
  384. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  385. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  386. DEFINE VARIABLE iy AS INTEGER NO-UNDO.
  387. DEFINE VARIABLE lQuoter AS LOGICAL NO-UNDO.
  388. ctable = httInput::table_name.
  389. cSuchfield_name = httInput::suchfield_name.
  390. cSortField = httBrowserKo::sortfield.
  391. cDirection = ''.
  392. IF cSortField <> '' THEN
  393. DO:
  394. IF NUM-ENTRIES(cSortField, ':') > 1 THEN
  395. DO:
  396. cDirection = ENTRY(2, cSortField, ':').
  397. cSortField = ENTRY(1, cSortField, ':').
  398. END.
  399. IF cDirection = '' THEN cDirection = 'ASCENDING'.
  400. END.
  401. MESSAGE 'Suchfield_name = ' cSuchfield_name ' sortfield = ' cSortField ' Richtung = ' cDirection.
  402. CREATE TEMP-TABLE httTemp.
  403. httTemp:CREATE-LIKE (ctable).
  404. httTemp:ADD-NEW-FIELD ('ident', 'CHARACTER').
  405. httTemp:TEMP-TABLE-PREPARE('ttTemp').
  406. hBuffer = httTemp:DEFAULT-BUFFER-HANDLE.
  407. CREATE QUERY hqtable.
  408. CREATE BUFFER hbtable FOR TABLE ctable.
  409. hqtable:SET-BUFFERS ( hbtable ).
  410. hWortIndex = hbtable:BUFFER-FIELD('WortIndex') NO-ERROR.
  411. ifield_nameer = NUM-ENTRIES(cSuchfield_name, ' ').
  412. ASSIGN
  413. hfield_nametable = ?
  414. cInhalttable = ''
  415. ix = 0.
  416. IF NUM-ENTRIES(cSuchfield_name, '=') > 1 THEN
  417. DO:
  418. DO ii = 1 TO NUM-ENTRIES(cSuchfield_name, ' '):
  419. cString = ENTRY(ii, cSuchfield_name, ' ').
  420. IF NUM-ENTRIES(cString, '=') > 1 THEN
  421. DO:
  422. cfield_name = ENTRY(1, cString, '=').
  423. hSuchfield_name = hbtable:BUFFER-FIELD(cfield_name) NO-ERROR.
  424. IF NOT VALID-HANDLE(hSuchfield_name) THEN NEXT.
  425. ix = ix + 1.
  426. hfield_nametable [ix] = hSuchfield_name.
  427. cInhalttable[ix] = ENTRY(2, cString, '=').
  428. NEXT.
  429. END.
  430. IF NOT VALID-HANDLE(hSuchfield_name) THEN NEXT.
  431. cInhalttable[ix] = cInhalttable[ix] + ',' + cString.
  432. END.
  433. END.
  434. cWhere = SUBSTITUTE('PRESELECT EACH &1 NO-LOCK ', ctable).
  435. IF httBrowserKo::lmandant THEN
  436. DO:
  437. cWhere = cWhere + SUBSTITUTE('&1 &2.Firma = "&3" ', cAnd, ctable, httInput::company).
  438. cAnd = 'AND'.
  439. END.
  440. MESSAGE 'cWhere beim Suchen ' cWhere.
  441. hqtable:QUERY-PREPARE (cWhere).
  442. hqtable:QUERY-OPEN ().
  443. NEXTDATENSATZ:
  444. DO WHILE TRUE:
  445. hqtable:GET-NEXT() NO-ERROR.
  446. IF hqtable:QUERY-OFF-END THEN LEAVE.
  447. lcwortindex = ''.
  448. rRecid = hbtable:RECID.
  449. DO WHILE ix > 0:
  450. MESSAGE 'Suchen mit bestimmtenm field_nameern' ix.
  451. iFound = 0.
  452. DO ii = 1 TO ix:
  453. hfield_name = hfield_nametable [ii].
  454. cSuchfield_name = cInhalttable[ii].
  455. cInhalt = hfield_name:BUFFER-VALUE(0) NO-ERROR.
  456. IF ERROR-STATUS:ERROR THEN NEXT.
  457. IF cInhalt = ? THEN NEXT.
  458. DO iy = 1 TO NUM-ENTRIES(cSuchfield_name, ','):
  459. cString = ENTRY(iy, cSuchfield_name, ',').
  460. MESSAGE 'Kommt der Wert ' cString 'in' cInhalt 'vor?'.
  461. IF LOOKUP(cString, cInhalt, ' ') = 0 THEN NEXT.
  462. iFound = iFound + 1.
  463. LEAVE.
  464. END.
  465. END.
  466. IF iFound < ix THEN NEXT NEXTDATENSATZ.
  467. LEAVE.
  468. END.
  469. DO WHILE ix = 0:
  470. iFound = 0.
  471. IF VALID-HANDLE(hWortIndex) THEN
  472. DO:
  473. lcWortIndex = hWortIndex:BUFFER-VALUE(0).
  474. END.
  475. ELSE
  476. DO:
  477. DO ii = 1 TO hbtable:NUM-FIELDS:
  478. hfield_name = hbtable:BUFFER-FIELD(ii).
  479. IF hfield_name:EXTENT > 0 THEN NEXT.
  480. cInhalt = getBufferFieldValue(INPUT hfield_name, OUTPUT lQuoter).
  481. IF cInhalt = '' THEN NEXT.
  482. lcWortIndex = lcWortIndex
  483. + (IF lcWortindex = '' THEN '' ELSE ' ')
  484. + cInhalt.
  485. END.
  486. END.
  487. DO ii = 1 TO ifield_nameer:
  488. cInhalt = ENTRY(ii, cSuchfield_name, ' ').
  489. IF INDEX(lcWortIndex, cInhalt) = 0 THEN NEXT.
  490. iFound = iFound + 1.
  491. END.
  492. IF iFound < ifield_nameer THEN NEXT NEXTDATENSATZ.
  493. LEAVE.
  494. END.
  495. hBuffer:BUFFER-CREATE ().
  496. hBuffer:BUFFER-COPY (hbtable).
  497. hBuffer::ident = TRIM(STRING(rRecid,'>>>>>>>>9')).
  498. END.
  499. hqtable:QUERY-CLOSE ().
  500. DELETE OBJECT hqtable.
  501. CREATE QUERY hQuery.
  502. hQuery:SET-BUFFERS ( hBuffer ).
  503. cWhere = SUBSTITUTE('FOR EACH ttTemp NO-LOCK ').
  504. IF cDirection = 'ASCENDING' THEN cDirection = ''.
  505. IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
  506. hQuery:QUERY-PREPARE (cWhere).
  507. lRetVal = TRUE.
  508. RETURN lRetVal.
  509. END METHOD.
  510. /*------------------------------------------------------------------------------
  511. Purpose:
  512. Notes:
  513. ------------------------------------------------------------------------------*/
  514. METHOD PUBLIC VOID createTemptableBrowser(
  515. INPUT httInput AS HANDLE,
  516. INPUT httBrowserKo AS HANDLE,
  517. OUTPUT httBrowser AS HANDLE
  518. ):
  519. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  520. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  521. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  522. DEFINE VARIABLE hFremdBuff AS HANDLE NO-UNDO.
  523. EMPTY TEMP-TABLE ttExternefield_nameer.
  524. DEFINE BUFFER bbrowser_ze FOR browser_ze.
  525. FIND FIRST browser_ze NO-LOCK
  526. WHERE browser_ze.company = httInput::company
  527. AND browser_ze.user_name = httInput::user_name
  528. AND browser_ze.program = httInput::program NO-ERROR.
  529. IF NOT AVAILABLE browser_ze THEN
  530. DO:
  531. FIND FIRST browser_ze NO-LOCK
  532. WHERE browser_ze.company = httInput::company
  533. AND browser_ze.user_name = 'admin'
  534. AND browser_ze.program = httInput::program NO-ERROR.
  535. END.
  536. IF NOT AVAILABLE browser_ze THEN RETURN.
  537. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  538. IF browser_ze.user_name <> 'admin' THEN LEAVE.
  539. IF httInput::user_name = 'admin' THEN LEAVE.
  540. FOR EACH browser_ze NO-LOCK
  541. WHERE browser_ze.company = httInput::company
  542. AND browser_ze.user_name = 'admin'
  543. AND browser_ze.program = httInput::program:
  544. CREATE bbrowser_ze.
  545. BUFFER-COPY browser_ze
  546. EXCEPT browser_ze.user_name
  547. TO bbrowser_ze
  548. ASSIGN
  549. bbrowser_ze.user_name = httInput::user_name.
  550. RELEASE bbrowser_ze.
  551. END.
  552. LEAVE.
  553. END.
  554. CREATE TEMP-TABLE httTable.
  555. httTable:SERIALIZE-NAME = 'browser'.
  556. httTable:ADD-NEW-FIELD ('ident', 'CHARACTER').
  557. httTable:ADD-NEW-FIELD ('sel' , 'CHARACTER').
  558. FOR EACH browser_ze NO-LOCK
  559. WHERE browser_ze.company = httInput::company
  560. AND browser_ze.user_name = httInput::user_name
  561. AND browser_ze.program = httInput::program
  562. BY browser_ze.prior:
  563. httTable:ADD-NEW-FIELD (browser_ze.field_name, 'CHARACTER').
  564. IF browser_ze.table_name <> httInput::table_name THEN
  565. DO:
  566. hFremdBuff = createExterneFieldName (
  567. INPUT browser_ze.table_name,
  568. INPUT browser_ze.field_name,
  569. INPUT browser_ze.field_type,
  570. INPUT httInput
  571. ).
  572. END.
  573. END.
  574. httTable:TEMP-TABLE-PREPARE ('ttBrowser').
  575. httBrowser = httTable:DEFAULT-BUFFER-HANDLE.
  576. httBrowser:BUFFER-CREATE ().
  577. DO i1 = 1 TO httBrowser:NUM-FIELDS:
  578. IF i1 = 1 THEN
  579. DO:
  580. httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE = 'ident'.
  581. NEXT.
  582. END.
  583. IF i1 = 2 THEN
  584. DO:
  585. httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE = 'sel'.
  586. NEXT.
  587. END.
  588. cfield_name = httBrowser:BUFFER-FIELD(i1):NAME.
  589. FIND FIRST labeltexte NO-LOCK
  590. WHERE labeltexte.company = httInput::company
  591. AND labeltexte.user_name = httInput::user_name
  592. AND labeltexte.program = httInput::program
  593. AND labeltexte.table_name = httInput::table_name
  594. AND labeltexte.field_name = cfield_name
  595. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  596. IF NOT AVAILABLE labeltexte THEN
  597. DO:
  598. FIND FIRST labeltexte NO-LOCK
  599. WHERE labeltexte.company = httInput::company
  600. AND labeltexte.program = httInput::program
  601. AND labeltexte.table_name = httInput::table_name
  602. AND labeltexte.field_name = cfield_name
  603. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  604. END.
  605. IF NOT AVAILABLE labeltexte THEN
  606. DO:
  607. FIND FIRST labeltexte NO-LOCK
  608. WHERE labeltexte.company = httInput::company
  609. AND labeltexte.table_name = httInput::table_name
  610. AND labeltexte.field_name = cfield_name
  611. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  612. END.
  613. IF NOT AVAILABLE labeltexte THEN
  614. DO:
  615. FIND FIRST labeltexte NO-LOCK
  616. WHERE labeltexte.company = httInput::company
  617. AND labeltexte.field_name = cfield_name
  618. AND labeltexte.language_id = httInput::language_id NO-ERROR.
  619. END.
  620. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.headlabel ELSE cfield_name).
  621. httBrowser:BUFFER-FIELD(i1):buffer-VALUE(0) = cLabel + '/@/' + labeltexte.alignment.
  622. END.
  623. RETURN.
  624. END METHOD.
  625. /*------------------------------------------------------------------------------
  626. Purpose:
  627. Notes:
  628. ------------------------------------------------------------------------------*/
  629. METHOD PUBLIC VOID createTemptableViewer(
  630. INPUT httInput AS HANDLE,
  631. INPUT httViewerKo AS HANDLE,
  632. OUTPUT httViewer AS HANDLE
  633. ):
  634. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  635. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  636. DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
  637. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  638. DEFINE VARIABLE hBuftable AS HANDLE NO-UNDO.
  639. DEFINE BUFFER bviewer_ze FOR viewer_ze.
  640. FIND FIRST viewer_ze NO-LOCK
  641. WHERE viewer_ze.company = httInput::company
  642. AND viewer_ze.user_name = httInput::user_name
  643. AND viewer_ze.program = httInput::program
  644. AND viewer_ze.table_name = httInput::table_name NO-ERROR.
  645. IF NOT AVAILABLE viewer_ze THEN
  646. DO:
  647. FIND FIRST viewer_ze NO-LOCK
  648. WHERE viewer_ze.company = httInput::company
  649. AND viewer_ze.user_name = 'admin'
  650. AND viewer_ze.program = httInput::program
  651. AND viewer_ze.table_name = httInput::table_name NO-ERROR.
  652. END.
  653. IF NOT AVAILABLE viewer_ze THEN RETURN.
  654. ctable = viewer_ze.table_name.
  655. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  656. IF viewer_ze.user_name <> 'admin' THEN LEAVE.
  657. IF httInput::user_name = 'admin' THEN LEAVE.
  658. FOR EACH viewer_ze NO-LOCK
  659. WHERE viewer_ze.company = httInput::company
  660. AND viewer_ze.user_name = 'admin'
  661. AND viewer_ze.program = httInput::program
  662. AND viewer_ze.table_name = httInput::table_name:
  663. CREATE bviewer_ze.
  664. BUFFER-COPY viewer_ze
  665. EXCEPT viewer_ze.user_name
  666. TO bviewer_ze
  667. ASSIGN
  668. bviewer_ze.user_name = httInput::user_name.
  669. RELEASE bviewer_ze.
  670. END.
  671. LEAVE.
  672. END.
  673. CREATE BUFFER hBuftable FOR TABLE ctable.
  674. CREATE TEMP-TABLE httTable.
  675. httTable:SERIALIZE-NAME = 'viewerdaten'.
  676. FOR EACH viewer_ze NO-LOCK
  677. WHERE viewer_ze.company = httInput::company
  678. AND viewer_ze.user_name = httInput::user_name
  679. AND viewer_ze.program = httInput::program
  680. AND viewer_ze.table_name = httInput::table_name
  681. BY viewer_ze.prior:
  682. IF viewer_ze.addFieldtable = '' AND
  683. NOT viewer_ze.field_name BEGINS 'DUMMY' AND
  684. NOT viewer_ze.field_name BEGINS 'ident' THEN
  685. httTable:ADD-LIKE-FIELD (viewer_ze.field_name, hBuftable:BUFFER-FIELD(viewer_ze.field_name)).
  686. ELSE httTable:ADD-NEW-FIELD (viewer_ze.field_name, 'CHARACTER').
  687. /* MESSAGE viewer_ze.field_name ' hinzugef�gt'.*/
  688. END.
  689. httTable:TEMP-TABLE-PREPARE (ctable).
  690. httViewer = httTable:DEFAULT-BUFFER-HANDLE.
  691. DELETE OBJECT hBuftable.
  692. RETURN.
  693. END METHOD.
  694. /*------------------------------------------------------------------------------
  695. Purpose:
  696. Notes:
  697. ------------------------------------------------------------------------------*/
  698. METHOD PUBLIC LONGCHAR createWordindex(
  699. INPUT hBuffer AS HANDLE
  700. ):
  701. DEFINE VARIABLE cWordIndex AS LONGCHAR NO-UNDO.
  702. DEFINE VARIABLE cWords AS CHARACTER NO-UNDO.
  703. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  704. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  705. DEFINE VARIABLE cWord AS CHARACTER NO-UNDO.
  706. cWords = ''.
  707. DO ii = 1 TO hBuffer:NUM-FIELDS:
  708. IF hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = ? THEN NEXT.
  709. IF hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = '' THEN NEXT.
  710. IF hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE = '0' THEN NEXT.
  711. IF INDEX(hBuffer:BUFFER-FIELD(ii):NAME, 'SHA') > 0 THEN NEXT.
  712. IF INDEX(hBuffer:BUFFER-FIELD(ii):NAME, 'word') > 0 THEN NEXT.
  713. cDatatype = hBuffer:BUFFER-FIELD(ii):DATA-TYPE.
  714. CASE cDatatype:
  715. WHEN 'logical' THEN
  716. NEXT.
  717. WHEN 'character' THEN
  718. cWords = cWords + ' ' + hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE.
  719. WHEN 'integer' THEN
  720. DO:
  721. cWord = TRIM(STRING(INTEGER(hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE),'zzzzzzzz9-')).
  722. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  723. END.
  724. WHEN 'decimal' THEN
  725. DO:
  726. cWord = TRIM(STRING(DECIMAL(hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE),'zzzzzzzz9.9<<<-')).
  727. cWords = cWords + ' ' + CHR(01) + cWord + CHR(01).
  728. END.
  729. WHEN 'date' THEN
  730. DO:
  731. cWord = STRING(DATE(hBuffer:BUFFER-FIELD(ii):BUFFER-VALUE),'99.99.9999').
  732. cWords = cWords + ' ' + cWord.
  733. END.
  734. OTHERWISE
  735. NEXT.
  736. END CASE.
  737. END.
  738. cWordIndex = ''.
  739. cWords = TRIM(cWords).
  740. cWords = REPLACE(cWords, ' ', ' ').
  741. DO ii = 1 TO NUM-ENTRIES(cWords, ' '):
  742. cWord = TRIM(ENTRY(ii, cWords, ' ')).
  743. IF LOOKUP(cWord, cWordIndex, ' ') > 0 THEN NEXT.
  744. cWordIndex = cWordIndex + ' ' + cWord.
  745. END.
  746. cWordIndex = TRIM(cWordIndex).
  747. cWordIndex = REPLACE(cWordIndex, ' ', ' ').
  748. RETURN cWordIndex.
  749. END METHOD.
  750. /*------------------------------------------------------------------------------
  751. Purpose:
  752. Notes:
  753. ------------------------------------------------------------------------------*/
  754. METHOD PUBLIC VOID evaluateErrorStatus(
  755. hError AS HANDLE
  756. ):
  757. DEFINE VARIABLE iNumMessages AS INTEGER NO-UNDO.
  758. DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
  759. IF NOT hError:ERROR THEN RETURN.
  760. cMessage = 'ERROR: '.
  761. DO iNumMessages = 1 TO hError:NUM-MESSAGES :
  762. cMessage = cMessage + hError:GET-MESSAGE(iNumMessages) + CHR(10) + ' '.
  763. END.
  764. MESSAGE cMessage.
  765. RETURN.
  766. END METHOD.
  767. /*------------------------------------------------------------------------------
  768. Purpose:
  769. Notes:
  770. ------------------------------------------------------------------------------*/
  771. METHOD PUBLIC VOID evaluateFile(
  772. INPUT-OUTPUT oJsonIdent AS JsonObject,
  773. OUTPUT cFileName AS CHARACTER,
  774. OUTPUT lCompany AS LOGICAL ,
  775. OUTPUT lActive AS LOGICAL ,
  776. OUTPUT lWordindex AS LOGICAL ,
  777. INPUT-OUTPUT httKeyFields AS HANDLE ,
  778. INPUT-OUTPUT httPrimaryIndex AS HANDLE
  779. ):
  780. DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
  781. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  782. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  783. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  784. DEFINE VARIABLE hDictFile AS HANDLE NO-UNDO.
  785. DEFINE VARIABLE hDictField AS HANDLE NO-UNDO.
  786. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  787. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  788. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  789. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  790. DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
  791. DEFINE VARIABLE rPrimeIndex AS RECID NO-UNDO.
  792. DEFINE VARIABLE rField AS RECID NO-UNDO.
  793. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  794. DEFINE VARIABLE cKeyField AS CHARACTER NO-UNDO.
  795. DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
  796. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  797. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  798. DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
  799. cFileName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
  800. cClassName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
  801. IF oJsonIdent:HAS('file_name') THEN oJsonIdent:SET('file_name' , cFileName ).
  802. ELSE oJsonIdent:ADD('file_name' , cFileName ).
  803. IF oJsonIdent:HAS('class_name') THEN oJsonIdent:SET('class_name', cClassName).
  804. ELSE oJsonIdent:ADD('class_name', cClassName).
  805. ASSIGN
  806. lCompany = FALSE
  807. lActive = FALSE
  808. lWordIndex = FALSE.
  809. DO WHILE TRUE:
  810. cDBName = 'Ge_MIS'.
  811. cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
  812. CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
  813. IF VALID-HANDLE(hBuffer) THEN LEAVE.
  814. cDBName = 'FRAMEWORK'.
  815. DELETE OBJECT hBuffer NO-ERROR.
  816. cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
  817. CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
  818. IF VALID-HANDLE(hBuffer) THEN LEAVE.
  819. RETURN.
  820. END.
  821. oJsonIdent:ADD('DBName', cDBName).
  822. hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
  823. IF NOT ERROR-STATUS:ERROR AND
  824. VALID-HANDLE(hField) THEN lActive = TRUE.
  825. DELETE OBJECT hField NO-ERROR.
  826. hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
  827. IF NOT ERROR-STATUS:ERROR AND
  828. VALID-HANDLE(hField) THEN lWordIndex = TRUE.
  829. DELETE OBJECT hField NO-ERROR.
  830. hField = hBuffer:BUFFER-FIELD('company') NO-ERROR.
  831. IF NOT ERROR-STATUS:ERROR AND
  832. VALID-HANDLE(hField) THEN lCompany = TRUE.
  833. //
  834. // Dictionary _File Buffer ermitteln
  835. //
  836. cDBFileName = SUBSTITUTE('&1._File', cDBName).
  837. CREATE BUFFER hDictFile FOR TABLE cDBFileName NO-ERROR.
  838. cWhere = SUBSTITUTE('WHERE _File-Name = &1 ', QUOTER(cFileName)).
  839. lOK = hDictFile:FIND-FIRST (cWhere) NO-ERROR.
  840. rRecid = hDictFile:RECID.
  841. rPrimeIndex = hDictFile::_Prime-Index.
  842. DO WHILE lCompany:
  843. //
  844. // ermitteln RECID von Field company
  845. //
  846. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  847. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  848. cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = "company" ', rRecid) .
  849. lOK = hDictField:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  850. rField = hDictField:RECID.
  851. DELETE OBJECT hDictField NO-ERROR.
  852. //
  853. // is Field company ein Index-Feld ? -> Wenn nicht, Flag lCompany auf FALSE setzen
  854. //
  855. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  856. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  857. cWhere = SUBSTITUTE('WHERE _Field-Recid = &1 ', rField) .
  858. lOK = hDictField:FIND-FIRST(cWhere) NO-ERROR.
  859. IF NOT lOK THEN lCompany = FALSE.
  860. DELETE OBJECT hDictField.
  861. LEAVE.
  862. END.
  863. IF lCompany THEN
  864. DO:
  865. httKeyFields:BUFFER-CREATE ().
  866. ASSIGN
  867. httKeyFields::iIndex = 1
  868. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'company')
  869. httKeyFields::cFieldName = 'company'
  870. httKeyFields::cFileName = cFileName
  871. httKeyFields::cValue = oJsonIdent:GetCharacter('company')
  872. httKeyFields::cDataType = 'character'.
  873. END.
  874. IF lActive THEN
  875. DO:
  876. getActiveSelection(
  877. INPUT oJsonIdent,
  878. INPUT cFileName ,
  879. OUTPUT cActiveSelection
  880. ).
  881. CASE cActiveSelection:
  882. WHEN 'LBL_FILTER_ACTIVE' THEN
  883. cActiveSelection = 'true'.
  884. WHEN 'LBL_FILTER_INACTIVE' THEN
  885. cActiveSelection = 'false'.
  886. OTHERWISE
  887. cActiveSelection = ''.
  888. END CASE.
  889. httKeyFields:BUFFER-CREATE ().
  890. ASSIGN
  891. httKeyFields::iIndex = 99
  892. httKeyFields::cLongName = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'active')
  893. httKeyFields::cFieldName = 'active'
  894. httKeyFields::cFileName = cFileName
  895. httKeyFields::cValue = cActiveSelection
  896. httKeyFields::cDataType = 'logical'.
  897. END.
  898. //
  899. // restlichen Keyfelder in Tabelle schreiben
  900. //
  901. CREATE BUFFER hField FOR TABLE SUBSTITUTE('&1._Field', cDBName).
  902. cFieldNames = oJsonIdent:getNames().
  903. cKeyFieldReplace = SUBSTITUTE ('keyField_&1_', cFileName).
  904. DO i1 = 1 TO EXTENT(cFieldNames):
  905. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  906. cKeyField = cFieldNames[i1].
  907. cField = REPLACE(cKeyField, cKeyFieldReplace, '').
  908. cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
  909. lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
  910. IF lOK THEN NEXT.
  911. cValue = oJsonIdent:GetCharacter(cKeyField).
  912. cWhere = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
  913. hField:FIND-FIRST(cWhere, NO-LOCK).
  914. httKeyFields:BUFFER-CREATE().
  915. ASSIGN
  916. httKeyFields::iIndex = i1 + 1
  917. httKeyFields::cLongName = cKeyField
  918. httKeyFields::cFieldName = cField
  919. httKeyFields::cFileName = cFileName
  920. httKeyFields::cValue = cValue
  921. httKeyFields::cDataType = hField::_Data-Type.
  922. END.
  923. //
  924. // Primary Index Felder ermitteln
  925. //
  926. cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
  927. CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
  928. CREATE QUERY hQuery.
  929. hQuery:SET-BUFFERS(hDictField).
  930. cWhere = SUBSTITUTE('FOR EACH _Index-Field WHERE _Index-Recid = &1 BY _Index-Field._Index-Seq ', rPrimeIndex) .
  931. hQuery:QUERY-PREPARE (cWhere).
  932. hQuery:QUERY-OPEN ().
  933. hQuery:GET-FIRST () NO-ERROR.
  934. cDBFileName = SUBSTITUTE('&1._Field', cDBName).
  935. CREATE BUFFER hField FOR TABLE cDBFileName.
  936. DO WHILE NOT hQuery:QUERY-OFF-END:
  937. rRecid = hDictField::_Field-Recid.
  938. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hField:NAME, rRecid).
  939. hField:FIND-UNIQUE (cWhere, NO-LOCK).
  940. httPrimaryIndex:BUFFER-CREATE().
  941. ASSIGN
  942. httPrimaryIndex::iIndex = hDictField::_Index-Seq
  943. httPrimaryIndex::cFileName = cFileName
  944. httPrimaryIndex::cFieldName = hField::_Field-Name
  945. httPrimaryIndex::cDataType = hField::_DATA-TYPE
  946. .
  947. hQuery:GET-NEXT().
  948. END.
  949. hQuery:QUERY-CLOSE ().
  950. DELETE OBJECT hBuffer NO-ERROR.
  951. DELETE OBJECT hField NO-ERROR.
  952. DELETE OBJECT hDictField NO-ERROR.
  953. DELETE OBJECT hDictFile NO-ERROR.
  954. httKeyFields :WRITE-JSON('File', 'C:\TEMP\ttKeyFields.json' , TRUE).
  955. httPrimaryIndex:WRITE-JSON('File', 'C:\TEMP\ttPrimaryIndex.json', TRUE).
  956. RETURN.
  957. END METHOD.
  958. /*------------------------------------------------------------------------------
  959. Purpose:
  960. Notes:
  961. ------------------------------------------------------------------------------*/
  962. METHOD PUBLIC INTEGER fillBrowserTT(
  963. INPUT httBrowserKo AS HANDLE,
  964. INPUT hQuery AS HANDLE,
  965. INPUT hbttInput AS HANDLE,
  966. INPUT-OUTPUT httBrowser AS HANDLE
  967. ):
  968. DEFINE VARIABLE hbQuery AS HANDLE NO-UNDO.
  969. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  970. DEFINE VARIABLE hfield_nameRecid AS HANDLE NO-UNDO.
  971. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  972. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO.
  973. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO.
  974. DEFINE VARIABLE iSkip AS INTEGER NO-UNDO.
  975. DEFINE VARIABLE iPageSize AS INTEGER NO-UNDO.
  976. hQuery:QUERY-OPEN ().
  977. iSkip = httBrowserKo::actualpage * httBrowserKo::pagesize.
  978. hQuery:REPOSITION-FORWARD (iSkip).
  979. MESSAGE 'anzahl records skip = ' iSkip.
  980. iAnzRec = 0.
  981. hbQuery = hQuery:GET-BUFFER-HANDLE ().
  982. hfield_nameRecid = hbQuery:BUFFER-FIELD('ident') NO-ERROR.
  983. iPageSize = (IF hbttInput::suchfield_name = '' THEN httBrowserKo::pagesize ELSE 100).
  984. DO i1 = 1 TO iPageSize:
  985. hQuery:GET-NEXT() NO-ERROR.
  986. IF hQuery:QUERY-OFF-END THEN LEAVE.
  987. httBrowser:BUFFER-CREATE ().
  988. IF hbttInput::action = 'search' AND
  989. i1 = 1 THEN hbttInput::ident = TRIM(STRING(INT64(hbQuery::ident),'>>>>>>>>>9')).
  990. IF VALID-HANDLE(hfield_nameRecid) THEN httBrowser::ident = TRIM(STRING(INT64(hbQuery::ident),'>>>>>>>>>9')).
  991. ELSE httBrowser::Ident = TRIM(STRING(hbQuery:RECID)).
  992. IF httBrowser::ident = hbttInput::ident THEN httBrowser::sel = 'TRUE'.
  993. DO i2 = 3 TO httBrowser:NUM-FIELDS:
  994. cfield_name = httBrowser:BUFFER-FIELD(i2):NAME.
  995. hfield_name = hbQuery :BUFFER-FIELD(cfield_name) NO-ERROR.
  996. IF NOT VALID-HANDLE(hfield_name) OR
  997. ERROR-STATUS:ERROR THEN
  998. DO:
  999. cInhalt = getFieldValueExtern(INPUT cfield_name, INPUT hbttInput, INPUT httBrowser ).
  1000. httBrowser:BUFFER-FIELD(i2):BUFFER-VALUE = cInhalt.
  1001. NEXT.
  1002. END.
  1003. CASE hfield_name:DATA-TYPE:
  1004. WHEN 'INTEGER' OR
  1005. WHEN 'INT64' THEN
  1006. cInhalt = TRIM(STRING(INTEGER(hfield_name:BUFFER-VALUE(0)),'->>>,>>>,>>9')).
  1007. WHEN 'DECIMAL' THEN
  1008. cInhalt = TRIM(STRING(DECIMAL(hfield_name:BUFFER-VALUE(0)),'->>>,>>>,>>9.99<<<')).
  1009. WHEN 'DATE' THEN
  1010. cInhalt = STRING(DATE(hfield_name:BUFFER-VALUE(0)),'99.99.9999').
  1011. OTHERWISE
  1012. cInhalt = hfield_name:BUFFER-VALUE(0).
  1013. END CASE.
  1014. httBrowser:BUFFER-FIELD(i2):BUFFER-VALUE = cInhalt.
  1015. END.
  1016. iAnzRec = iAnzRec + 1.
  1017. END.
  1018. RETURN iAnzRec.
  1019. END METHOD.
  1020. /*------------------------------------------------------------------------------
  1021. Purpose:
  1022. Notes:
  1023. ------------------------------------------------------------------------------*/
  1024. METHOD PUBLIC VOID generateHash(
  1025. INPUT ipAlgorithm AS CHARACTER,
  1026. INPUT ipPhrase AS CHARACTER,
  1027. INPUT ipKey AS CHARACTER,
  1028. OUTPUT opERROR AS LOGICAL,
  1029. OUTPUT opMESSAGE AS CHARACTER,
  1030. OUTPUT opHash AS CHARACTER
  1031. ):
  1032. ASSIGN
  1033. opERROR = FALSE
  1034. opMessage = ''
  1035. opHash = ''.
  1036. IF ipPhrase = '' OR ipPhrase = ? THEN
  1037. DO:
  1038. ASSIGN
  1039. opERROR = TRUE
  1040. opMESSAGE = 'Input Error. Value not correct'.
  1041. RETURN.
  1042. END.
  1043. opHash = HEX-ENCODE (MESSAGE-DIGEST (ipAlgorithm, ipPhrase, ipKey)).
  1044. RETURN.
  1045. END METHOD.
  1046. /*------------------------------------------------------------------------------
  1047. Purpose:
  1048. Notes:
  1049. ------------------------------------------------------------------------------*/
  1050. METHOD PUBLIC VOID getActiveSelection(
  1051. INPUT oJsonIdent AS JsonObject,
  1052. INPUT cFileName AS CHARACTER ,
  1053. OUTPUT cActiveSelection AS CHARACTER
  1054. ):
  1055. FIND userdata NO-LOCK
  1056. WHERE userdata.user_name = oJsonIdent:GetCharacter('H_user_name')
  1057. AND userdata.company = oJsonIdent:GetCharacter('H_company')
  1058. AND userdata.branch = '0000'
  1059. AND userdata.record_type = 'active'
  1060. AND userdata.section = cFileName
  1061. AND userdata.key_type = oJsonIdent:GetCharacter('Program') NO-ERROR.
  1062. IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
  1063. ELSE cActiveSelection = 'LBL_FILTER_ALL'.
  1064. RELEASE userdata.
  1065. RETURN.
  1066. END METHOD.
  1067. /*------------------------------------------------------------------------------
  1068. Purpose:
  1069. Notes:
  1070. ------------------------------------------------------------------------------*/
  1071. METHOD PUBLIC LOGICAL getBrowserKopf(
  1072. INPUT httInput AS HANDLE,
  1073. OUTPUT httBrowserKo AS HANDLE
  1074. ):
  1075. MESSAGE 'getBrowserKopf mit ' httInput::company '/' httInput::user_name '/' httInput::program '/' httInput::table_name.
  1076. FIND FIRST browser_ko NO-LOCK
  1077. WHERE browser_ko.company = httInput::company
  1078. AND browser_ko.user_name = httInput::user_name
  1079. AND browser_ko.program = httInput::program
  1080. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  1081. IF NOT AVAILABLE browser_ko THEN
  1082. DO:
  1083. FIND FIRST browser_ko NO-LOCK
  1084. WHERE browser_ko.company = httInput::company
  1085. AND browser_ko.user_name = 'admin'
  1086. AND browser_ko.program = httInput::program
  1087. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  1088. END.
  1089. IF NOT AVAILABLE browser_ko THEN RETURN FALSE.
  1090. httBrowserKo = TEMP-TABLE ttBrowserKo:DEFAULT-BUFFER-HANDLE.
  1091. httBrowserKo:EMPTY-TEMP-TABLE ().
  1092. httBrowserKo:BUFFER-CREATE ().
  1093. httBrowserKo:BUFFER-COPY(BUFFER browser_ko:HANDLE).
  1094. RELEASE browser_ko.
  1095. RETURN TRUE.
  1096. END METHOD.
  1097. /*------------------------------------------------------------------------------
  1098. Purpose:
  1099. Notes:
  1100. ------------------------------------------------------------------------------*/
  1101. METHOD PUBLIC CHARACTER getBufferFieldValue( INPUT iphfield_name AS HANDLE, OUTPUT oplQuoter AS LOGICAL ):
  1102. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO.
  1103. cfield_nameInhalt = ''.
  1104. oplQuoter = FALSE.
  1105. CASE iphfield_name:DATA-TYPE:
  1106. WHEN 'CHARACTER' THEN
  1107. ASSIGN
  1108. cfield_nameInhalt = iphfield_name:BUFFER-VALUE(0)
  1109. oplQuoter = TRUE.
  1110. WHEN 'DECIMAL' OR
  1111. WHEN 'INTEGER' THEN
  1112. cfield_nameInhalt = TRIM(STRING(INTEGER(iphfield_name:BUFFER-VALUE),'>>>>>>>>9')).
  1113. WHEN 'DATE' THEN
  1114. cfield_nameInhalt = STRING(DATE(iphfield_name:BUFFER-VALUE),'99.99.9999').
  1115. OTHERWISE
  1116. cfield_nameInhalt = iphfield_name:BUFFER-VALUE.
  1117. END CASE.
  1118. IF cfield_nameInhalt = ? THEN cfield_nameInhalt = ''.
  1119. RETURN cfield_nameInhalt.
  1120. END METHOD.
  1121. /*------------------------------------------------------------------------------
  1122. Purpose:
  1123. Notes:
  1124. ------------------------------------------------------------------------------*/
  1125. METHOD PUBLIC CHARACTER getCharDateTime(
  1126. INPUT ipdDateTime AS DATETIME
  1127. ):
  1128. DEFINE VARIABLE cReturnValue AS CHARACTER NO-UNDO.
  1129. DEFINE VARIABLE dDateTime AS DATETIME NO-UNDO.
  1130. DEFINE VARIABLE cDateTime AS CHARACTER NO-UNDO.
  1131. dDateTime = ipdDateTime.
  1132. cDateTime = STRING(dDateTime,'99-99-9999THH:MM:SS').
  1133. cReturnValue =
  1134. STRING(YEAR(dDateTime),'9999')
  1135. + '-'
  1136. + STRING(MONTH(dDateTime),'99')
  1137. + '-'
  1138. + STRING(DAY(dDateTime),'99')
  1139. + SUBSTRING(cDateTime,11).
  1140. RETURN cReturnValue.
  1141. END METHOD.
  1142. /*------------------------------------------------------------------------------
  1143. Purpose:
  1144. Notes:
  1145. ------------------------------------------------------------------------------*/
  1146. METHOD PUBLIC HANDLE getData(
  1147. INPUT ipoJsonIdent AS JsonObject,
  1148. INPUT ipcFileName AS CHARACTER,
  1149. INPUT ipcWherePaires AS CHARACTER
  1150. ):
  1151. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  1152. DEFINE VARIABLE cWherePaire AS CHARACTER NO-UNDO.
  1153. DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
  1154. DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
  1155. DEFINE VARIABLE lWhere AS LOGICAL NO-UNDO INIT TRUE.
  1156. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1157. DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
  1158. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
  1159. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
  1160. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1161. lOK = FALSE.
  1162. DO WHILE TRUE:
  1163. FIND FIRST Ge_MIS._File NO-LOCK
  1164. WHERE Ge_MIS._File._File-Name = ipcFileName NO-ERROR.
  1165. IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
  1166. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
  1167. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  1168. FIND FIRST Ge_MIS._Field OF Ge_MIS._File WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
  1169. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  1170. lOK = TRUE.
  1171. LEAVE.
  1172. END.
  1173. DO WHILE NOT lOK:
  1174. FIND FIRST FRAMEWORK._File NO-LOCK
  1175. WHERE FRAMEWORK._File._File-Name = ipcFileName NO-ERROR.
  1176. IF NOT AVAILABLE FRAMEWORK._File THEN LEAVE.
  1177. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
  1178. lCompany = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  1179. FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
  1180. lActive = (IF AVAILABLE _Field THEN TRUE ELSE FALSE).
  1181. lOK = TRUE.
  1182. LEAVE.
  1183. END.
  1184. CREATE BUFFER hBuffer FOR TABLE ipcFileName.
  1185. CREATE TEMP-TABLE ttTable.
  1186. ttTable:CREATE-LIKE (hBuffer).
  1187. ttTable:TEMP-TABLE-PREPARE ('ttTable').
  1188. httBuffer = ttTable:DEFAULT-BUFFER-HANDLE.
  1189. DO i1 = 1 TO httBuffer:NUM-FIELDS:
  1190. httBuffer:BUFFER-FIELD(i1):SERIALIZE-NAME = SUBSTITUTE('&1_&2', ipcFileName, hBuffer:BUFFER-FIELD(i1):NAME).
  1191. END.
  1192. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK ', ipcFileName).
  1193. IF lCompany THEN
  1194. DO:
  1195. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  1196. cWhere = cWhere + SUBSTITUTE('&1.company = &2 ', ipcFileName, QUOTER(ipoJsonIdent:GetCharacter('company'))).
  1197. lWhere = FALSE.
  1198. END.
  1199. DO i1 = 1 TO NUM-ENTRIES(ipcWherePaires, ';'):
  1200. cWherePaire = ENTRY(i1, ipcWherePaires, ';').
  1201. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ) + cWherePaire + ' '.
  1202. lWhere = FALSE.
  1203. END.
  1204. IF lActive THEN
  1205. DO:
  1206. cWhere = cWhere + (IF lWhere THEN 'WHERE ' ELSE 'AND ' ).
  1207. cWhere = cWhere + SUBSTITUTE('&1.active = &2 ', ipcFileName, 'TRUE').
  1208. lWhere = FALSE.
  1209. END.
  1210. MESSAGE 'cWhere = ' cWhere.
  1211. CREATE QUERY hQuery.
  1212. hQuery:SET-BUFFERS(hBuffer).
  1213. hQuery:QUERY-PREPARE (cWhere).
  1214. hQuery:QUERY-OPEN ().
  1215. hQuery:GET-FIRST ().
  1216. DO WHILE NOT hQuery:QUERY-OFF-END:
  1217. httBuffer:BUFFER-CREATE ().
  1218. httBuffer:BUFFER-COPY(hBuffer).
  1219. hQuery:GET-NEXT ().
  1220. END.
  1221. hQuery:QUERY-CLOSE ().
  1222. DELETE OBJECT hQuery NO-ERROR.
  1223. DELETE OBJECT hBuffer NO-ERROR.
  1224. RETURN httBuffer.
  1225. END METHOD.
  1226. /*------------------------------------------------------------------------------
  1227. Purpose:
  1228. Notes:
  1229. ------------------------------------------------------------------------------*/
  1230. METHOD PUBLIC VOID getErrorMessage(
  1231. INPUT cFehlerNo AS CHARACTER,
  1232. INPUT ilanguage_id AS INTEGER,
  1233. INPUT cParam AS CHARACTER,
  1234. OUTPUT cMessage AS LONGCHAR
  1235. ):
  1236. DEFINE VARIABLE lcJsonString AS CHARACTER NO-UNDO.
  1237. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1238. DEFINE VARIABLE iNo AS INTEGER NO-UNDO.
  1239. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1240. DEFINE VARIABLE cParameter AS CHARACTER NO-UNDO EXTENT 5.
  1241. cParam = REPLACE(cParam, ',', ';').
  1242. DO ii = 1 TO NUM-ENTRIES(cParam, ';'):
  1243. cParameter[ii] = ENTRY(ii, cParam, ';').
  1244. IF ii = 5 THEN LEAVE.
  1245. END.
  1246. lcJsonString = '(&1) -> &2'.
  1247. cFehlerNo = REPLACE(cFehlerNo, ',', ';').
  1248. DO ii = 1 TO NUM-ENTRIES(cFehlerNo, ';'):
  1249. iNo = INTEGER(ENTRY(ii, cFehlerNo, ';')).
  1250. FIND messages NO-LOCK
  1251. WHERE messages.message_no = iNo
  1252. AND messages.language_id = ilanguage_id NO-ERROR.
  1253. IF NOT AVAILABLE messages THEN
  1254. DO:
  1255. FIND FIRST messages NO-LOCK
  1256. WHERE messages.message_no = iNo NO-ERROR.
  1257. END.
  1258. IF NOT AVAILABLE messages THEN
  1259. DO:
  1260. cString = cString
  1261. + (IF cString = '' THEN '' ELSE ' ')
  1262. + 'Systemfehler, Administrator benachrichtigen !'.
  1263. END.
  1264. ELSE
  1265. DO:
  1266. cString = cString
  1267. + (IF cString = '' THEN '' ELSE ' ')
  1268. + messages.message_text.
  1269. END.
  1270. END.
  1271. cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
  1272. cMessage = cString.
  1273. RETURN.
  1274. END METHOD.
  1275. /*------------------------------------------------------------------------------
  1276. Purpose:
  1277. Notes:
  1278. ------------------------------------------------------------------------------*/
  1279. METHOD PUBLIC LOGICAL getField(
  1280. INPUT httInput AS HANDLE,
  1281. INPUT ctable AS CHARACTER,
  1282. INPUT cTabfield_name AS CHARACTER,
  1283. INPUT cKeyfield_nameer AS CHARACTER,
  1284. INPUT cKeyValues AS CHARACTER,
  1285. INPUT htable AS HANDLE,
  1286. OUTPUT cInhalt AS CHARACTER
  1287. ):
  1288. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1289. DEFINE VARIABLE hfield_nameBuffer AS HANDLE NO-UNDO.
  1290. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  1291. DEFINE VARIABLE cfield_name AS CHARACTER NO-UNDO.
  1292. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  1293. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1294. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1295. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO.
  1296. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1297. CREATE BUFFER hBuffer FOR TABLE ctable.
  1298. cKeyfield_nameer = REPLACE(cKeyfield_nameer, ',', ';').
  1299. cKeyValues = REPLACE(cKeyValues, ',', ';').
  1300. cString = ''.
  1301. DO ii = 1 TO NUM-ENTRIES(cKeyfield_nameer, ';'):
  1302. cString = cString
  1303. + (IF cString = '' THEN '' ELSE ' AND ')
  1304. + ENTRY(ii, cKeyfield_nameer, ';')
  1305. + ' = &1 '.
  1306. cfield_name = ENTRY(ii, cKeyfield_nameer, ';').
  1307. hfield_nameBuffer = hBuffer:BUFFER-FIELD(cfield_name).
  1308. IF ENTRY(ii, cKeyValues, ';') BEGINS '@' THEN
  1309. DO:
  1310. cfield_name = TRIM(SUBSTRING(ENTRY(ii, cKeyValues, ';'),02)).
  1311. hfield_name = htable:BUFFER-FIELD(cfield_name) NO-ERROR.
  1312. IF NOT VALID-HANDLE(hfield_name) THEN hfield_name = httInput:BUFFER-FIELD(cfield_name) NO-ERROR.
  1313. cWert = hfield_name:BUFFER-VALUE(0).
  1314. END.
  1315. ELSE cWert = TRIM(ENTRY(ii, cKeyValues, ';')).
  1316. CASE hfield_nameBuffer:DATA-TYPE:
  1317. WHEN 'character' OR
  1318. WHEN 'date' THEN
  1319. cString = SUBSTITUTE(cString, QUOTER(cWert) ).
  1320. OTHERWISE
  1321. cString = SUBSTITUTE(cString, cWert ).
  1322. END CASE.
  1323. END.
  1324. cWhere = SUBSTITUTE('WHERE &1 ', cString).
  1325. MESSAGE cWhere.
  1326. lRetVal = hBuffer:FIND-UNIQUE (cWhere, NO-LOCK).
  1327. MESSAGE lRetVal.
  1328. hfield_name = hBuffer:BUFFER-FIELD(cTabfield_name).
  1329. cInhalt = hfield_name:BUFFER-VALUE(0).
  1330. MESSAGE cInhalt.
  1331. RETURN TRUE.
  1332. END METHOD.
  1333. /*------------------------------------------------------------------------------
  1334. Purpose:
  1335. Notes:
  1336. ------------------------------------------------------------------------------*/
  1337. METHOD PUBLIC CHARACTER getFieldValueExtern(
  1338. INPUT ipcfield_name AS CHARACTER,
  1339. INPUT iphttInput AS HANDLE,
  1340. INPUT iphttBrowser AS HANDLE
  1341. ):
  1342. DEFINE VARIABLE cfield_nameInhalt AS CHARACTER NO-UNDO INIT ''.
  1343. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
  1344. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  1345. DEFINE VARIABLE cKeyValue AS CHARACTER NO-UNDO.
  1346. DEFINE VARIABLE cKeyfield_name AS CHARACTER NO-UNDO.
  1347. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1348. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1349. DEFINE VARIABLE hfield_name AS HANDLE NO-UNDO.
  1350. FIND FIRST ttExternefield_nameer NO-LOCK
  1351. WHERE LOOKUP(ipcfield_name, ttExternefield_nameer.cfield_nameer, ';') > 0 NO-ERROR.
  1352. IF NOT AVAILABLE ttExternefield_nameer THEN RETURN cfield_nameInhalt.
  1353. hBuffer = ttExternefield_nameer.hBuffer.
  1354. cWhere = ttExternefield_nameer.cWhere.
  1355. DO ii = 1 TO NUM-ENTRIES(ttExternefield_nameer.cKeyfield_nameer, ';'):
  1356. cKeyfield_name = ENTRY(ii, ttExternefield_nameer.cKeyfield_nameer, ';').
  1357. hfield_name = iphttBrowser:BUFFER-FIELD(cKeyfield_name) NO-ERROR.
  1358. CASE hfield_name:DATA-TYPE:
  1359. WHEN 'INTEGER' OR
  1360. WHEN 'INT64' THEN
  1361. cKeyValue = TRIM(STRING(INTEGER(hfield_name:BUFFER-VALUE(0)),'->>>>>>>>9')).
  1362. WHEN 'DECIMAL' THEN
  1363. cKeyValue = TRIM(STRING(DECIMAL(hfield_name:BUFFER-VALUE(0)),'->>>>>>>>9.99<<<')).
  1364. WHEN 'DATE' THEN
  1365. cKeyValue = STRING(DATE(hfield_name:BUFFER-VALUE(0)),'99.99.9999').
  1366. OTHERWISE
  1367. cKeyValue = QUOTER(hfield_name:BUFFER-VALUE(0)).
  1368. END CASE.
  1369. cWhere = cWhere
  1370. + (IF cWhere = '' THEN ' WHERE ' ELSE ' AND ')
  1371. + SUBSTITUTE('&1.&2 = &3 ':U, ttExternefield_nameer.ctable, cKeyfield_name, cKeyValue).
  1372. END.
  1373. lRetVal = hBuffer:FIND-FIRST (cWhere) NO-ERROR.
  1374. IF lRetVal THEN cfield_nameInhalt = hBuffer:BUFFER-FIELD(ipcfield_name):BUFFER-VALUE(0).
  1375. RETURN cfield_nameInhalt.
  1376. END METHOD.
  1377. /*------------------------------------------------------------------------------
  1378. Purpose:
  1379. Notes:
  1380. ------------------------------------------------------------------------------*/
  1381. METHOD PUBLIC CHARACTER getHeader(
  1382. INPUT httInput AS HANDLE
  1383. ):
  1384. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO.
  1385. FIND FIRST labeltexte NO-LOCK
  1386. WHERE labeltexte.company = httInput::company
  1387. AND labeltexte.user_name = httInput::user_name
  1388. AND labeltexte.program = httInput::program
  1389. AND labeltexte.field_name = 'KOPF'
  1390. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1391. IF NOT AVAILABLE labeltexte THEN
  1392. DO:
  1393. FIND FIRST labeltexte NO-LOCK
  1394. WHERE labeltexte.company = httInput::company
  1395. AND labeltexte.program = httInput::program
  1396. AND labeltexte.field_name = 'KOPF'
  1397. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1398. END.
  1399. cHeader = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE httInput::program).
  1400. RETURN cHeader.
  1401. END METHOD.
  1402. /*------------------------------------------------------------------------------
  1403. Purpose:
  1404. Notes:
  1405. ------------------------------------------------------------------------------*/
  1406. METHOD PUBLIC LOGICAL getHeaderData(
  1407. INPUT poRequest AS IHttpRequest,
  1408. INPUT cQueryString AS CHARACTER ,
  1409. OUTPUT ccompany AS CHARACTER ,
  1410. OUTPUT cuser_name AS CHARACTER ,
  1411. OUTPUT cAnzeigeName AS CHARACTER ,
  1412. OUTPUT iLanguage_id AS INTEGER ,
  1413. OUTPUT cSessionToken AS CHARACTER ,
  1414. OUTPUT cFunction AS CHARACTER ,
  1415. OUTPUT oJsonIdent AS JsonObject
  1416. ):
  1417. DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
  1418. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1419. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  1420. DEFINE VARIABLE cQueryPairs AS CHARACTER NO-UNDO.
  1421. DEFINE VARIABLE cQueryKey AS CHARACTER NO-UNDO.
  1422. DEFINE VARIABLE cQueryValue AS CHARACTER NO-UNDO.
  1423. DEFINE VARIABLE cFormId AS CHARACTER NO-UNDO.
  1424. DEFINE VARIABLE cClassName AS CHARACTER NO-UNDO.
  1425. DEFINE VARIABLE cFilename AS CHARACTER NO-UNDO.
  1426. oHeader = poRequest:GetHeader('X-COMPANY').
  1427. ccompany = oHeader:VALUE.
  1428. oHeader = poRequest:GetHeader('X-USER-NAME').
  1429. cuser_name = oHeader:VALUE.
  1430. oHeader = poRequest:GetHeader('X-DISPLAY-NAME').
  1431. cAnzeigeName = oHeader:VALUE.
  1432. oHeader = poRequest:GetHeader('X-LANGUAGE-ID').
  1433. ilanguage_id = INTEGER(oHeader:VALUE).
  1434. oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
  1435. cSessionToken = oHeader:VALUE.
  1436. oJsonIdent = NEW JsonObject().
  1437. oJsonIdent:ADD('H_company' , ccompany ) NO-ERROR.
  1438. oJsonIdent:ADD('H_user_name' , cuser_name ) NO-ERROR.
  1439. oJsonIdent:ADD('H_language_id', iLanguage_id ) NO-ERROR.
  1440. oJsonIdent:ADD('sessionToken' , cSessionToken) NO-ERROR.
  1441. //
  1442. // Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
  1443. //
  1444. DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
  1445. cQueryPairs = ENTRY(ii, cQueryString, '&').
  1446. cQueryKey = ENTRY(1 , cQueryPairs , '=').
  1447. cQueryValue = ENTRY(2 , cQueryPairs , '=').
  1448. IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
  1449. ELSE oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
  1450. END.
  1451. IF NOT oJsonIdent:HAS('company' ) THEN oJsonIdent:ADD('company' , oJsonIdent:GetCharacter('H_company' )).
  1452. IF NOT oJsonIdent:HAS('user_name' ) THEN oJsonIdent:ADD('user_name' , oJsonIdent:GetCharacter('H_user_name' )).
  1453. IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetJsonText ('H_language_id')).
  1454. // language_id soll immer ein Interger-Wert sein
  1455. oJsonIdent:SET('language_id', INTEGER(oJsonIdent:GetJsonText('language_id'))).
  1456. cFormId = oJsonIdent:GetCharacter('formId').
  1457. cClassname = ENTRY(1, cFormId, '_').
  1458. cFileName = ENTRY(1, cFormId, '_').
  1459. oJsonIdent:ADD('class_name', cClassName).
  1460. oJsonIdent:ADD('file_name' , cFileName ).
  1461. ccompany = oJsonIdent:GetCharacter('company').
  1462. cuser_name = oJsonIdent:GetCharacter('user_name').
  1463. ilanguage_id = oJsonIdent:GetInteger ('language_id').
  1464. IF oJsonIdent:HAS('function') THEN cFunction = oJsonIdent:GetCharacter('function').
  1465. lRetVal = TRUE.
  1466. RETURN lRetVal.
  1467. END METHOD.
  1468. /*------------------------------------------------------------------------------
  1469. Purpose:
  1470. Notes:
  1471. ------------------------------------------------------------------------------*/
  1472. METHOD PUBLIC LOGICAL getKeyFields(
  1473. INPUT oJsonIdent AS JsonObject,
  1474. OUTPUT cKeyFields AS CHARACTER ,
  1475. OUTPUT cKeyValues AS CHARACTER
  1476. ):
  1477. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
  1478. DEFINE VARIABLE cFieldNames AS CHARACTER NO-UNDO EXTENT.
  1479. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1480. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1481. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1482. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  1483. cKeyFields = ''.
  1484. cKeyValues = ''.
  1485. cFieldNames = oJsonIdent:getNames().
  1486. DO i1 = 1 TO EXTENT(cFieldNames):
  1487. IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
  1488. cKeyFields = cKeyFields
  1489. + (IF cKeyFields = '' THEN '' ELSE ';')
  1490. + REPLACE(cFieldNames[i1], 'keyfield_', '').
  1491. cValue = oJsonIdent:GetCharacter(cFieldNames[i1]).
  1492. cKeyValues = cKeyValues
  1493. + (IF cKeyValues = '' THEN '' ELSE CHR(01))
  1494. + cValue.
  1495. END.
  1496. lOK = TRUE.
  1497. DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
  1498. cString = ENTRY(i1, cKeyFields, ';').
  1499. cString = ENTRY(1, cString, '_') + '_'.
  1500. cFieldName = REPLACE(ENTRY(i1, cKeyFields, ';'), cString, '').
  1501. DO WHILE lOK:
  1502. FIND FIRST Ge_MIS._Field NO-LOCK
  1503. WHERE Ge_MIS._Field._Field-Name = cFieldname NO-ERROR.
  1504. IF NOT AVAILABLE Ge_MIS._Field THEN
  1505. DO:
  1506. lOK = FALSE.
  1507. LEAVE.
  1508. END.
  1509. CASE Ge_MIS._Field._Data-Type:
  1510. WHEN 'character' THEN
  1511. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1512. WHEN 'logical' THEN
  1513. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1514. END CASE.
  1515. LEAVE.
  1516. END.
  1517. DO WHILE NOT lOK:
  1518. FIND FIRST FRAMEWORK._Field NO-LOCK
  1519. WHERE FRAMEWORK._Field._Field-Name = cFieldname NO-ERROR.
  1520. IF NOT AVAILABLE FRAMEWORK._Field THEN
  1521. DO:
  1522. lOK = FALSE.
  1523. LEAVE.
  1524. END.
  1525. CASE FRAMEWORK._Field._Data-Type:
  1526. WHEN 'character' THEN
  1527. ENTRY(i1, cKeyValues, CHR(01)) = QUOTER(ENTRY(i1, cKeyValues, CHR(01))).
  1528. WHEN 'logical' THEN
  1529. ENTRY(i1, cKeyValues, CHR(01)) = STRING(ENTRY(i1, cKeyValues, CHR(01)),"TRUE/FALSE").
  1530. END CASE.
  1531. LEAVE.
  1532. END.
  1533. END.
  1534. lRetVal = TRUE.
  1535. RETURN lRetVal.
  1536. END METHOD.
  1537. /*------------------------------------------------------------------------------
  1538. Purpose:
  1539. Notes:
  1540. ------------------------------------------------------------------------------*/
  1541. METHOD PUBLIC CHARACTER getLabel(
  1542. INPUT iprRecid AS RECID,
  1543. INPUT ipcArt AS CHARACTER,
  1544. INPUT ipilanguage_id AS INTEGER
  1545. ):
  1546. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  1547. DEFINE BUFFER bviewer_ze FOR viewer_ze.
  1548. FIND bviewer_ze NO-LOCK WHERE RECID(bviewer_ze) = iprRecid.
  1549. IF ipilanguage_id = 0 OR
  1550. ipilanguage_id > 10 THEN ipilanguage_id = 1.
  1551. FIND FIRST labeltexte NO-LOCK
  1552. WHERE labeltexte.company = bviewer_ze.company
  1553. AND labeltexte.user_name = bviewer_ze.user_name
  1554. AND labeltexte.program = bviewer_ze.program
  1555. AND labeltexte.table_name = bviewer_ze.table_name
  1556. AND labeltexte.field_name = bviewer_ze.field_name
  1557. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1558. IF NOT AVAILABLE labeltexte THEN
  1559. DO:
  1560. FIND FIRST labeltexte NO-LOCK
  1561. WHERE labeltexte.company = bviewer_ze.company
  1562. AND labeltexte.program = bviewer_ze.program
  1563. AND labeltexte.table_name = bviewer_ze.table_name
  1564. AND labeltexte.field_name = bviewer_ze.field_name
  1565. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1566. END.
  1567. IF NOT AVAILABLE labeltexte THEN
  1568. DO:
  1569. FIND FIRST labeltexte NO-LOCK
  1570. WHERE labeltexte.company = bviewer_ze.company
  1571. AND labeltexte.table_name = bviewer_ze.table_name
  1572. AND labeltexte.field_name = bviewer_ze.field_name
  1573. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1574. END.
  1575. IF NOT AVAILABLE labeltexte THEN
  1576. DO:
  1577. FIND FIRST labeltexte NO-LOCK
  1578. WHERE labeltexte.company = bviewer_ze.company
  1579. AND labeltexte.field_name = bviewer_ze.field_name
  1580. AND labeltexte.language_id = ipilanguage_id NO-ERROR.
  1581. END.
  1582. CASE ipcArt:
  1583. WHEN 'side' THEN
  1584. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE bviewer_ze.field_name).
  1585. WHEN 'head' THEN
  1586. cLabel = (IF AVAILABLE labeltexte THEN labeltexte.headlabel ELSE bviewer_ze.field_name).
  1587. END CASE.
  1588. RETURN cLabel.
  1589. END METHOD.
  1590. /*------------------------------------------------------------------------------
  1591. Purpose:
  1592. Notes:
  1593. ------------------------------------------------------------------------------*/
  1594. METHOD PUBLIC CHARACTER getProgramName(
  1595. INPUT oJsonIdent AS JsonObject,
  1596. INPUT cUsers AS CHARACTER ,
  1597. OUTPUT cFormUser AS CHARACTER ,
  1598. INPUT-OUTPUT iItemsPerPage AS INTEGER ,
  1599. INPUT-OUTPUT cMaxHeight AS CHARACTER
  1600. ):
  1601. DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
  1602. DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
  1603. DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
  1604. cProgram = ''.
  1605. ccompany = oJsonIdent:GetCharacter('company').
  1606. DO i1 = 1 TO NUM-ENTRIES(cUsers, ','):
  1607. cProgramUser = ENTRY(i1, cUsers).
  1608. FIND FIRST htmldokumente NO-LOCK
  1609. WHERE htmldokumente.company = ccompany
  1610. AND htmldokumente.user_name = cProgramUser
  1611. AND htmldokumente.form_id = oJsonIdent:GetCharacter('formId' ) NO-ERROR.
  1612. IF NOT AVAILABLE htmldokumente THEN NEXT.
  1613. ASSIGN
  1614. cProgram = htmldokumente.program
  1615. cFormUser = cProgramUser
  1616. iItemsPerPage = htmldokumente.itemsPerPage
  1617. cMaxHeight = htmldokumente.tableMaxHeight.
  1618. LEAVE.
  1619. END.
  1620. RETURN cProgram.
  1621. END METHOD.
  1622. /*------------------------------------------------------------------------------
  1623. Purpose:
  1624. Notes:
  1625. ------------------------------------------------------------------------------*/
  1626. METHOD PUBLIC VOID readLastcWhere(
  1627. INPUT oJsonIdent AS JsonObject,
  1628. INPUT cFileName AS CHARACTER ,
  1629. OUTPUT cWhere AS CHARACTER
  1630. ):
  1631. FIND userdata
  1632. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1633. AND userdata.company = oJsonIdent:GetCharacter('company')
  1634. AND userdata.branch = '0000'
  1635. AND userdata.record_type = 'where'
  1636. AND userdata.section = cFileName
  1637. AND userdata.key_type = 'last' NO-ERROR.
  1638. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1639. RELEASE userdata.
  1640. RETURN.
  1641. END METHOD.
  1642. /*------------------------------------------------------------------------------
  1643. Purpose:
  1644. Notes:
  1645. ------------------------------------------------------------------------------*/
  1646. METHOD PUBLIC VOID readSortFields(
  1647. INPUT oJsonIdent AS JsonObject,
  1648. INPUT cFileName AS CHARACTER ,
  1649. OUTPUT cSortField AS CHARACTER ,
  1650. OUTPUT cDirection AS CHARACTER
  1651. ):
  1652. cSortField = ''.
  1653. cDirection = ''.
  1654. FIND userdata NO-LOCK
  1655. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1656. AND userdata.company = oJsonIdent:GetCharacter('company')
  1657. AND userdata.branch = '0000'
  1658. AND userdata.record_type = 'sortField'
  1659. AND userdata.section = cFileName
  1660. AND userdata.key_type = '' NO-ERROR.
  1661. IF AVAILABLE userdata THEN
  1662. ASSIGN
  1663. cSortField = userdata.cfield_1
  1664. cDirection = (IF userdata.cfield_2 BEGINS 'asc' THEN '' ELSE userdata.cfield_2).
  1665. RETURN.
  1666. END METHOD.
  1667. /*------------------------------------------------------------------------------
  1668. Purpose:
  1669. Notes:
  1670. ------------------------------------------------------------------------------*/
  1671. METHOD PUBLIC HANDLE getWebMenuStructure(
  1672. INPUT ipccompany AS CHARACTER ,
  1673. INPUT ipcuser_name AS CHARACTER ,
  1674. INPUT ipilanguage_id AS INTEGER
  1675. ):
  1676. DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
  1677. DEFINE VARIABLE lAdmin AS LOGICAL NO-UNDO INIT FALSE.
  1678. DEFINE VARIABLE htwebmenu AS HANDLE NO-UNDO.
  1679. EMPTY TEMP-TABLE twebmenu.
  1680. htwebmenu = TEMP-TABLE twebmenu:DEFAULT-BUFFER-HANDLE.
  1681. cuser_name = ipcuser_name.
  1682. lAdmin = FALSE.
  1683. DO WHILE TRUE.
  1684. FIND FIRST webmenu NO-LOCK
  1685. WHERE webmenu.company = ipccompany
  1686. AND webmenu.user_name = ipcuser_name NO-ERROR.
  1687. IF AVAILABLE webmenu THEN LEAVE.
  1688. IF cuser_name = 'Admin' THEN LEAVE.
  1689. cuser_name = 'Admin'.
  1690. END.
  1691. FIND FIRST users NO-LOCK
  1692. WHERE users.user_name = cuser_name NO-ERROR.
  1693. IF NOT AVAILABLE users THEN RETURN htwebmenu.
  1694. lAdmin = users.lAdmin.
  1695. FOR EACH webmenu NO-LOCK
  1696. WHERE webmenu.company = ipccompany
  1697. AND webmenu.user_name = cuser_name :
  1698. IF NOT lAdmin AND
  1699. webmenu.menu_link <> '' AND
  1700. webmenu.ladmin THEN NEXT.
  1701. CREATE twebmenu.
  1702. BUFFER-COPY webmenu
  1703. EXCEPT webmenu.created_at webmenu.updated_at
  1704. TO twebmenu.
  1705. END.
  1706. RETURN htwebmenu.
  1707. END METHOD.
  1708. /*------------------------------------------------------------------------------
  1709. Purpose:
  1710. Notes:
  1711. ------------------------------------------------------------------------------*/
  1712. METHOD PUBLIC CHARACTER getPrimaryIndexFields(
  1713. INPUT ipctable AS CHARACTER
  1714. ):
  1715. DEFINE VARIABLE cFields AS CHARACTER NO-UNDO.
  1716. DEFINE VARIABLE cDBNames AS CHARACTER NO-UNDO INIT 'Ge_MIS;FRAMEWORK'.
  1717. DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
  1718. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  1719. DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
  1720. DEFINE VARIABLE ix AS INTEGER NO-UNDO.
  1721. DO ix = 1 TO NUM-ENTRIES(cDBNames, ';'):
  1722. cDBName = ENTRY(ix, cDBNames, ';').
  1723. cFileName = SUBSTITUTE('&1.&2', cDBName, ipcTable).
  1724. CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
  1725. IF NOT ERROR-STATUS:ERROR AND
  1726. VALID-HANDLE(hBuffer) THEN LEAVE.
  1727. DELETE OBJECT hBuffer NO-ERROR.
  1728. cDBName = ''.
  1729. END.
  1730. DELETE OBJECT hBuffer NO-ERROR.
  1731. cFields = ''.
  1732. CASE cDBName:
  1733. WHEN 'Ge_MIS' THEN
  1734. DO:
  1735. FIND FIRST Ge_MIS._File NO-LOCK
  1736. WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
  1737. FOR EACH Ge_MIS._Index-Field NO-LOCK
  1738. WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
  1739. FIRST Ge_MIS._Field NO-LOCK
  1740. WHERE RECID(Ge_MIS._Field) = Ge_MIS._index-Field._Field-recid
  1741. BY Ge_MIS._Index-Field._Index-Seq:
  1742. cFields = cFields
  1743. + (IF cFields = '' THEN '' ELSE ';')
  1744. + Ge_MIS._Field._Field-Name.
  1745. END.
  1746. END.
  1747. WHEN 'FRAMEWORK' THEN
  1748. DO:
  1749. FIND FIRST FRAMEWORK._File NO-LOCK
  1750. WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
  1751. FOR EACH FRAMEWORK._Index-Field NO-LOCK
  1752. WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
  1753. FIRST FRAMEWORK._Field NO-LOCK
  1754. WHERE RECID(FRAMEWORK._Field) = FRAMEWORK._index-Field._Field-recid
  1755. BY FRAMEWORK._Index-Field._Index-Seq:
  1756. cFields = cFields
  1757. + (IF cFields = '' THEN '' ELSE ';')
  1758. + FRAMEWORK._Field._Field-Name.
  1759. END.
  1760. END.
  1761. END CASE.
  1762. RETURN cFields.
  1763. END METHOD.
  1764. /*------------------------------------------------------------------------------
  1765. Purpose:
  1766. Notes:
  1767. ------------------------------------------------------------------------------*/
  1768. METHOD PUBLIC CHARACTER getSysUser( ):
  1769. DEFINE VARIABLE mBen AS MEMPTR NO-UNDO.
  1770. DEFINE VARIABLE iLeng AS INTEGER INIT 100 NO-UNDO.
  1771. DEFINE VARIABLE fok AS INTEGER NO-UNDO.
  1772. DEFINE VARIABLE cBen AS CHARACTER NO-UNDO.
  1773. SET-SIZE(mBen) = iLeng.
  1774. RUN GetUserNameA( OUTPUT mBen, INPUT-OUTPUT iLeng, OUTPUT fok ) NO-ERROR.
  1775. ASSIGN
  1776. cBen = GET-STRING(mBen,1) NO-ERROR.
  1777. SET-SIZE(mBen) = 0.
  1778. RETURN cBen.
  1779. END METHOD.
  1780. /*------------------------------------------------------------------------------
  1781. Purpose:
  1782. Notes:
  1783. ------------------------------------------------------------------------------*/
  1784. METHOD PUBLIC CHARACTER getTitle(
  1785. INPUT httInput AS HANDLE
  1786. ):
  1787. DEFINE VARIABLE cTitel AS CHARACTER NO-UNDO.
  1788. FIND FIRST labeltexte NO-LOCK
  1789. WHERE labeltexte.company = httInput::company
  1790. AND labeltexte.user_name = httInput::user_name
  1791. AND labeltexte.program = httInput::program
  1792. AND labeltexte.field_name = 'TITLE'
  1793. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1794. IF NOT AVAILABLE labeltexte THEN
  1795. DO:
  1796. FIND FIRST labeltexte NO-LOCK
  1797. WHERE labeltexte.company = httInput::company
  1798. AND labeltexte.program = httInput::program
  1799. AND labeltexte.field_name = 'TITLE'
  1800. AND labeltexte.language_id = INTEGER(httInput::language_id) NO-ERROR.
  1801. END.
  1802. cTitel = (IF AVAILABLE labeltexte THEN labeltexte.sidelabel ELSE cProgramm).
  1803. RETURN cTitel.
  1804. END METHOD.
  1805. /*------------------------------------------------------------------------------
  1806. Purpose:
  1807. Notes:
  1808. ------------------------------------------------------------------------------*/
  1809. METHOD PUBLIC LOGICAL readInputDatenFromJson(
  1810. INPUT oJsonObject AS JsonObject,
  1811. INPUT hbttInput AS HANDLE,
  1812. INPUT-OUTPUT hbttTemp AS HANDLE
  1813. ):
  1814. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
  1815. DEFINE VARIABLE lcOriginal AS LONGCHAR NO-UNDO.
  1816. DEFINE VARIABLE ctable AS CHARACTER NO-UNDO.
  1817. DEFINE VARIABLE jsonttTemp AS jsonObject NO-UNDO.
  1818. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO INIT FALSE.
  1819. DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
  1820. jsonttTemp = NEW JsonObject().
  1821. jsonttTemp = oJsonObject:GetJsonObject('ttTemp').
  1822. lRetVal = hbttTemp:READ-JSON ('JsonObject', jsonttTemp).
  1823. hbttTemp:FIND-FIRST ().
  1824. hbttTemp:WRITE-JSON('longchar', lcJsonString, FALSE).
  1825. MESSAGE 'Daten zweiter Buffer -> ' STRING(lcJsonString).
  1826. lRetVal = TRUE.
  1827. RETURN lRetVal.
  1828. END METHOD.
  1829. /*------------------------------------------------------------------------------
  1830. Purpose:
  1831. Notes:
  1832. ------------------------------------------------------------------------------*/
  1833. METHOD PUBLIC VOID readPosition(
  1834. INPUT oJsonIdent AS JsonObject ,
  1835. INPUT cFileName AS CHARACTER ,
  1836. OUTPUT iCurrentPosition AS INTEGER ,
  1837. OUTPUT iStartPage AS INTEGER ,
  1838. OUTPUT iMaxRecords AS INTEGER
  1839. ):
  1840. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1841. FIND userdata
  1842. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1843. AND userdata.company = oJsonIdent:GetCharacter('company')
  1844. AND userdata.branch = '0000'
  1845. AND userdata.record_type = 'position'
  1846. AND userdata.section = cFileName
  1847. AND userdata.key_type = '' NO-ERROR.
  1848. IF AVAILABLE userdata THEN
  1849. DO:
  1850. ASSIGN
  1851. iCurrentPosition = userdata.ifield_1
  1852. iStartPage = userdata.ifield_2
  1853. iMaxRecords = userdata.ifield_3.
  1854. END.
  1855. ELSE
  1856. DO:
  1857. ASSIGN
  1858. iCurrentPosition = 1
  1859. iStartPage = 1
  1860. iMaxRecords = 25.
  1861. END.
  1862. RELEASE userdata.
  1863. LEAVE.
  1864. END.
  1865. RETURN.
  1866. END METHOD.
  1867. /*------------------------------------------------------------------------------
  1868. Purpose:
  1869. Notes:
  1870. ------------------------------------------------------------------------------*/
  1871. METHOD PUBLIC VOID readStartcWhere(
  1872. INPUT oJsonIdent AS JsonObject,
  1873. INPUT cFileName AS CHARACTER ,
  1874. OUTPUT cWhere AS CHARACTER
  1875. ):
  1876. FIND userdata
  1877. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  1878. AND userdata.company = oJsonIdent:GetCharacter('company')
  1879. AND userdata.branch = '0000'
  1880. AND userdata.record_type = 'where'
  1881. AND userdata.section = cFileName
  1882. AND userdata.key_type = 'start' NO-ERROR.
  1883. IF AVAILABLE userdata THEN cWhere = userdata.cfield_1.
  1884. RELEASE userdata.
  1885. RETURN.
  1886. END METHOD.
  1887. /*------------------------------------------------------------------------------
  1888. Purpose:
  1889. Notes:
  1890. ------------------------------------------------------------------------------*/
  1891. METHOD PUBLIC VOID setActiveSelection(
  1892. INPUT oJsonIdent AS JsonObject,
  1893. INPUT cFileName AS CHARACTER ,
  1894. INPUT cActiveSelection AS CHARACTER
  1895. ):
  1896. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  1897. FIND userdata
  1898. WHERE userdata.user_name = oJsonIdent:GetCharacter('H_user_name')
  1899. AND userdata.company = oJsonIdent:GetCharacter('H_company')
  1900. AND userdata.branch = '0000'
  1901. AND userdata.record_type = 'active'
  1902. AND userdata.section = cFileName
  1903. AND userdata.key_type = oJsonIdent:GetCharacter('Program') NO-ERROR.
  1904. IF NOT AVAILABLE UserData THEN
  1905. DO:
  1906. CREATE userdata.
  1907. ASSIGN
  1908. userdata.user_name = oJsonIdent:GetCharacter('H_user_name')
  1909. userdata.company = oJsonIdent:GetCharacter('H_company')
  1910. userdata.branch = '0000'
  1911. userdata.record_type = 'active'
  1912. userdata.section = cFileName
  1913. userdata.key_type = oJsonIdent:GetCharacter('Program') NO-ERROR.
  1914. END.
  1915. userdata.cfield_1 = cActiveSelection.
  1916. MESSAGE 'userdate mutiert mit activefilter' cActiveSelection.
  1917. RELEASE userdata.
  1918. LEAVE.
  1919. END.
  1920. RETURN.
  1921. END METHOD.
  1922. /*------------------------------------------------------------------------------
  1923. Purpose:
  1924. Notes:
  1925. ------------------------------------------------------------------------------*/
  1926. METHOD PUBLIC VOID setSortField(
  1927. INPUT cSortField AS CHARACTER,
  1928. INPUT-OUTPUT httBrowserKo AS HANDLE
  1929. ):
  1930. DO WHILE TRUE:
  1931. IF httBrowserKo::sortfield = '' THEN
  1932. DO:
  1933. httBrowserKo::sortfield = cSortField + ':ASCENDING'.
  1934. LEAVE.
  1935. END.
  1936. /* ASCENDING / DESCENDING Kehren */
  1937. IF LOOKUP(cSortField, httBrowserKo::sortfield, ':') > 0 THEN
  1938. DO:
  1939. IF ENTRY(2, httBrowserKo::sortfield, ':') = 'ASCENDING' THEN
  1940. DO:
  1941. ENTRY(2, httBrowserKo::sortfield, ':') = 'DESCENDING'.
  1942. LEAVE.
  1943. END.
  1944. ELSE
  1945. DO:
  1946. ENTRY(2, httBrowserKo::sortfield, ':') = 'ASCENDING'.
  1947. LEAVE.
  1948. END.
  1949. END.
  1950. httBrowserKo::sortfield = cSortField + ':ASCENDING'.
  1951. LEAVE.
  1952. END.
  1953. updateBrowserKo( INPUT httBrowserKo ).
  1954. RETURN.
  1955. END METHOD.
  1956. /*------------------------------------------------------------------------------
  1957. Purpose:
  1958. Notes:
  1959. ------------------------------------------------------------------------------*/
  1960. METHOD PUBLIC LOGICAL startBrowserKopf (
  1961. INPUT httInput AS HANDLE,
  1962. OUTPUT httBrowserKo AS HANDLE
  1963. ):
  1964. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  1965. DEFINE BUFFER bbrowser_ko FOR browser_ko.
  1966. FIND FIRST browser_ko NO-LOCK
  1967. WHERE browser_ko.company = httInput::company
  1968. AND browser_ko.user_name = httInput::user_name
  1969. AND browser_ko.program = httInput::program
  1970. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  1971. IF NOT AVAILABLE browser_ko THEN
  1972. DO:
  1973. FIND FIRST browser_ko NO-LOCK
  1974. WHERE browser_ko.company = httInput::company
  1975. AND browser_ko.user_name = 'admin'
  1976. AND browser_ko.program = httInput::program
  1977. AND browser_ko.table_name = httInput::table_name NO-ERROR.
  1978. END.
  1979. IF NOT AVAILABLE browser_ko THEN RETURN FALSE.
  1980. rRecid = RECID(browser_ko).
  1981. REPEAT TRANSACTION:
  1982. FIND browser_ko WHERE RECID(browser_ko) = rRecid.
  1983. IF browser_ko.user_name = 'admin' THEN
  1984. DO:
  1985. CREATE bbrowser_ko.
  1986. BUFFER-COPY browser_ko
  1987. EXCEPT browser_ko.user_name
  1988. TO bbrowser_ko
  1989. ASSIGN
  1990. bbrowser_ko.user_name = httInput::user_name.
  1991. rRecid = RECID(bbrowser_ko).
  1992. FIND browser_ko WHERE RECID(browser_ko) = rRecid.
  1993. END.
  1994. ASSIGN
  1995. browser_ko.actualpage = 0
  1996. browser_ko.lastrecid = 0.
  1997. RELEASE browser_ko.
  1998. LEAVE.
  1999. END.
  2000. FIND browser_ko NO-LOCK WHERE RECID(browser_ko) = rRecid.
  2001. httBrowserKo = TEMP-TABLE ttBrowserKo:DEFAULT-BUFFER-HANDLE.
  2002. httBrowserKo:EMPTY-TEMP-TABLE ().
  2003. httBrowserKo:BUFFER-CREATE ().
  2004. httBrowserKo:BUFFER-COPY(BUFFER browser_ko:HANDLE).
  2005. RELEASE browser_ko.
  2006. RETURN TRUE.
  2007. END METHOD.
  2008. /*------------------------------------------------------------------------------
  2009. Purpose:
  2010. Notes:
  2011. ------------------------------------------------------------------------------*/
  2012. METHOD PUBLIC LOGICAL startViewerKopf(
  2013. INPUT httInput AS HANDLE,
  2014. OUTPUT httViewerKo AS HANDLE
  2015. ):
  2016. DEFINE VARIABLE rRecid AS RECID NO-UNDO.
  2017. DEFINE BUFFER bviewer_ko FOR viewer_ko.
  2018. FIND FIRST viewer_ko NO-LOCK
  2019. WHERE viewer_ko.company = httInput::company
  2020. AND viewer_ko.user_name = httInput::user_name
  2021. AND viewer_ko.program = httInput::program
  2022. AND viewer_ko.table_name = httInput::table_name NO-ERROR.
  2023. IF NOT AVAILABLE viewer_ko THEN
  2024. DO:
  2025. FIND FIRST viewer_ko NO-LOCK
  2026. WHERE viewer_ko.company = httInput::company
  2027. AND viewer_ko.user_name = 'admin'
  2028. AND viewer_ko.program = httInput::program
  2029. AND viewer_ko.table_name = httInput::table_name NO-ERROR.
  2030. END.
  2031. IF NOT AVAILABLE viewer_ko THEN RETURN FALSE.
  2032. rRecid = RECID(viewer_ko).
  2033. REPEAT TRANSACTION:
  2034. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  2035. IF viewer_ko.user_name = 'admin' THEN
  2036. DO:
  2037. CREATE bviewer_ko.
  2038. BUFFER-COPY viewer_ko
  2039. EXCEPT viewer_ko.user_name
  2040. TO bviewer_ko
  2041. ASSIGN
  2042. bviewer_ko.user_name = httInput::user_name.
  2043. rRecid = RECID(bviewer_ko).
  2044. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  2045. END.
  2046. RELEASE viewer_ko.
  2047. LEAVE.
  2048. END.
  2049. FIND viewer_ko WHERE RECID(viewer_ko) = rRecid.
  2050. httviewerKo = TEMP-TABLE ttviewerKo:DEFAULT-BUFFER-HANDLE.
  2051. httviewerKo:EMPTY-TEMP-TABLE ().
  2052. httviewerKo:BUFFER-CREATE ().
  2053. httviewerKo:BUFFER-COPY(BUFFER viewer_ko:HANDLE).
  2054. RELEASE viewer_ko.
  2055. RETURN TRUE.
  2056. END METHOD.
  2057. /*------------------------------------------------------------------------------
  2058. Purpose:
  2059. Notes:
  2060. ------------------------------------------------------------------------------*/
  2061. METHOD PUBLIC LONGCHAR trimStructure(
  2062. INPUT oJsonInput AS JsonObject
  2063. ):
  2064. DEFINE VARIABLE lcResult AS LONGCHAR NO-UNDO.
  2065. DEFINE VARIABLE ii AS INTEGER NO-UNDO.
  2066. lcResult = TRIM(oJsonInput:GetJsonText()).
  2067. lcResult = SUBSTRING(lcResult,02).
  2068. ii = LENGTH(lcResult) - 1.
  2069. lcResult = SUBSTRING(lcResult,01, ii).
  2070. RETURN lcResult.
  2071. END METHOD.
  2072. /*------------------------------------------------------------------------------
  2073. Purpose:
  2074. Notes:
  2075. ------------------------------------------------------------------------------*/
  2076. METHOD PUBLIC VOID updateBrowserKo(
  2077. INPUT httBrowserKo AS HANDLE
  2078. ):
  2079. DEFINE VARIABLE hBrowserKo AS HANDLE NO-UNDO.
  2080. hBrowserKo = BUFFER browser_ko:HANDLE.
  2081. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  2082. FIND browser_ko EXCLUSIVE-LOCK
  2083. WHERE browser_ko.company = httBrowserKo::company
  2084. AND browser_ko.user_name = httBrowserKo::user_name
  2085. AND browser_ko.program = httBrowserKo::program
  2086. AND browser_ko.table_name = httBrowserKo::table_name NO-ERROR.
  2087. IF NOT AVAILABLE browser_ko THEN LEAVE.
  2088. DO i1 = 1 TO httBrowserKo:NUM-FIELDS:
  2089. IF httBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) = hBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) THEN NEXT.
  2090. hBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0) = httBrowserKo:BUFFER-FIELD(i1):BUFFER-VALUE(0).
  2091. END.
  2092. RELEASE browser_ko.
  2093. LEAVE.
  2094. END.
  2095. RETURN.
  2096. END METHOD.
  2097. /*------------------------------------------------------------------------------
  2098. Purpose:
  2099. Notes:
  2100. ------------------------------------------------------------------------------*/
  2101. METHOD PUBLIC VOID writeLastcWhere(
  2102. INPUT oJsonIdent AS JsonObject,
  2103. INPUT cFileName AS CHARACTER ,
  2104. INPUT cWhere AS CHARACTER
  2105. ):
  2106. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  2107. FIND userdata
  2108. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2109. AND userdata.company = oJsonIdent:GetCharacter('company')
  2110. AND userdata.branch = '0000'
  2111. AND userdata.record_type = 'where'
  2112. AND userdata.section = cFileName
  2113. AND userdata.key_type = 'last' NO-ERROR.
  2114. IF NOT AVAILABLE userdata THEN
  2115. DO:
  2116. CREATE userdata.
  2117. ASSIGN
  2118. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2119. userdata.company = oJsonIdent:GetCharacter('company')
  2120. userdata.branch = '0000'
  2121. userdata.record_type = 'where'
  2122. userdata.section = cFileName
  2123. userdata.key_type = 'last' NO-ERROR.
  2124. END.
  2125. ASSIGN
  2126. userdata.cfield_1 = cWhere.
  2127. RELEASE userdata.
  2128. LEAVE.
  2129. END.
  2130. RETURN.
  2131. END METHOD.
  2132. /*------------------------------------------------------------------------------
  2133. Purpose:
  2134. Notes:
  2135. ------------------------------------------------------------------------------*/
  2136. METHOD PUBLIC VOID writePosition(
  2137. INPUT oJsonIdent AS JsonObject,
  2138. INPUT cFileName AS CHARACTER ,
  2139. INPUT iCurrentPosition AS INTEGER ,
  2140. INPUT iStartPage AS INTEGER ,
  2141. INPUT iMaxRecords AS INTEGER
  2142. ):
  2143. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  2144. FIND userdata
  2145. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2146. AND userdata.company = oJsonIdent:GetCharacter('company')
  2147. AND userdata.branch = '0000'
  2148. AND userdata.record_type = 'position'
  2149. AND userdata.section = cFileName
  2150. AND userdata.key_type = '' NO-ERROR.
  2151. IF NOT AVAILABLE userdata THEN
  2152. DO:
  2153. CREATE userdata.
  2154. ASSIGN
  2155. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2156. userdata.company = oJsonIdent:GetCharacter('company')
  2157. userdata.branch = '0000'
  2158. userdata.record_type = 'position'
  2159. userdata.section = cFileName
  2160. userdata.key_type = '' NO-ERROR.
  2161. END.
  2162. ASSIGN
  2163. userdata.ifield_1 = iCurrentPosition
  2164. userdata.iField_2 = iStartPage
  2165. userdata.ifield_3 = iMaxRecords.
  2166. RELEASE userdata.
  2167. LEAVE.
  2168. END.
  2169. RETURN.
  2170. END METHOD.
  2171. /*------------------------------------------------------------------------------
  2172. Purpose:
  2173. Notes:
  2174. ------------------------------------------------------------------------------*/
  2175. METHOD PUBLIC VOID writeSortfields(
  2176. INPUT oJsonIdent AS JsonObject,
  2177. INPUT cFileName AS CHARACTER ,
  2178. INPUT cSortField AS CHARACTER ,
  2179. INPUT cDirection AS CHARACTER
  2180. ):
  2181. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  2182. FIND userdata
  2183. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2184. AND userdata.company = oJsonIdent:GetCharacter('company')
  2185. AND userdata.branch = '0000'
  2186. AND userdata.record_type = 'sortField'
  2187. AND userdata.section = cFileName
  2188. AND userdata.key_type = '' NO-ERROR.
  2189. IF NOT AVAILABLE userdata THEN
  2190. DO:
  2191. CREATE userdata.
  2192. ASSIGN
  2193. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2194. userdata.company = oJsonIdent:GetCharacter('company')
  2195. userdata.branch = '0000'
  2196. userdata.record_type = 'sortField'
  2197. userdata.section = cFileName
  2198. userdata.key_type = '' NO-ERROR.
  2199. END.
  2200. ASSIGN
  2201. userdata.cfield_1 = cSortfield
  2202. userdata.cfield_2 = cDirection.
  2203. RELEASE userdata.
  2204. LEAVE.
  2205. END.
  2206. RETURN.
  2207. END METHOD.
  2208. /*------------------------------------------------------------------------------
  2209. Purpose:
  2210. Notes:
  2211. ------------------------------------------------------------------------------*/
  2212. METHOD PUBLIC VOID writeStartcWhere(
  2213. INPUT oJsonIdent AS JsonObject,
  2214. INPUT cFileName AS CHARACTER ,
  2215. INPUT cWhere AS CHARACTER
  2216. ):
  2217. REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
  2218. FIND userdata
  2219. WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2220. AND userdata.company = oJsonIdent:GetCharacter('company')
  2221. AND userdata.branch = '0000'
  2222. AND userdata.record_type = 'where'
  2223. AND userdata.section = cFileName
  2224. AND userdata.key_type = 'start' NO-ERROR.
  2225. IF NOT AVAILABLE userdata THEN
  2226. DO:
  2227. CREATE userdata.
  2228. ASSIGN
  2229. userdata.user_name = oJsonIdent:GetCharacter('user_name')
  2230. userdata.company = oJsonIdent:GetCharacter('company')
  2231. userdata.branch = '0000'
  2232. userdata.record_type = 'where'
  2233. userdata.section = cFileName
  2234. userdata.key_type = 'start' NO-ERROR.
  2235. END.
  2236. ASSIGN
  2237. userdata.cfield_1 = cWhere.
  2238. RELEASE userdata.
  2239. LEAVE.
  2240. END.
  2241. RETURN.
  2242. END METHOD.
  2243. /*------------------------------------------------------------------------------
  2244. Purpose:
  2245. Notes:
  2246. ------------------------------------------------------------------------------*/
  2247. DESTRUCTOR PUBLIC utilitiesHandler ( ):
  2248. MESSAGE 'Destructor utilitiesHandler '.
  2249. /* DELETE OBJECT hQuery NO-ERROR. */
  2250. /* DELETE OBJECT hBuffer NO-ERROR. */
  2251. END DESTRUCTOR.
  2252. END CLASS.