| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219 |
-
- /*------------------------------------------------------------------------
- File : usersHandler
- Purpose :
- Syntax :
- Description :
- Author(s) : walter.riechsteiner
- Created : Fri Nov 21 11:31:01 CET 2025
- Notes :
- ----------------------------------------------------------------------*/
- BLOCK-LEVEL ON ERROR UNDO, THROW.
- USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
- USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
- USING utilities.utilitiesHandler FROM PROPATH.
- USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
- USING OpenEdge.DataAdmin.IIndex FROM PROPATH.
- USING OpenEdge.Web.DataObject.Writer.JsonObjectValueWriter FROM PROPATH.
- CLASS admin.adminprogsHandler FINAL:
- DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO.
- DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.
-
- DEFINE VARIABLE cuser_name AS CHARACTER NO-UNDO.
- DEFINE VARIABLE ccompany AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
- DEFINE VARIABLE iLanguage_id AS INTEGER NO-UNDO.
- DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
- DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
-
- DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lWordindex AS LOGICAL NO-UNDO.
- DEFINE VARIABLE iMaxRecords AS INTEGER NO-UNDO INIT 20.
- DEFINE VARIABLE iStartPage AS INTEGER NO-UNDO.
- DEFINE VARIABLE iStartRecord AS INTEGER NO-UNDO.
- DEFINE VARIABLE iPageCounter AS INTEGER NO-UNDO.
- DEFINE VARIABLE iCurrentPosition AS INTEGER NO-UNDO.
- DEFINE VARIABLE cFieldReplace AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFilterReplace AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFileReplace AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cKeyFields AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cKeyValues AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cMessage AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
-
- DEFINE VARIABLE iActualPage AS INTEGER NO-UNDO.
- DEFINE VARIABLE cPrimaryKey AS CHARACTER NO-UNDO.
- DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
- DEFINE VARIABLE iStartIndex AS INTEGER NO-UNDO.
-
- DEFINE VARIABLE httTable AS HANDLE NO-UNDO.
- DEFINE VARIABLE ttTable AS HANDLE NO-UNDO.
-
- DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
- DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
-
- DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
-
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC LOGICAL createData(
- INPUT oJsonIdent AS JsonObject,
- INPUT oJsonRecord AS jsonObject,
- OUTPUT oJsonReturn AS JsonObject
- ):
-
- DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
- DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
- DEFINE VARIABLE hField AS HANDLE NO-UNDO.
- DEFINE VARIABLE htField AS HANDLE NO-UNDO.
- DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO.
- DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
- outilitiesHandler = NEW utilitiesHandler().
- outilitiesHandler:evaluateFile(
- INPUT oJsonIdent ,
- OUTPUT cFileName ,
- OUTPUT lCompany ,
- OUTPUT lActive ,
- OUTPUT lWordindex
- ).
-
- cFieldReplace = SUBSTITUTE('&1_', cFileName).
- cKeyFieldReplace = SUBSTITUTE('keyfield_&1_', cFileName).
- cFilterReplace = SUBSTITUTE('filter_&1_', cFileName).
- cFileReplace = SUBSTITUTE('&1_', cFileName).
- iLanguage_id = oJsonIdent:GetInteger('language_id').
- lOK = outilitiesHandler:getKeyFields(
- INPUT oJsonIdent ,
- OUTPUT cKeyFields ,
- OUTPUT cKeyValues
- ).
- CREATE TEMP-TABLE ttTable.
- ttTable:ADD-FIELDS-FROM (cFileName, 'wordindex'). /* except Field wordindex */
- ttTable:TEMP-TABLE-PREPARE ('record').
- httTable = ttTable:DEFAULT-BUFFER-HANDLE.
- DO ii = 1 TO httTable:NUM-FIELDS:
- httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME NO-ERROR.
- END.
- httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
- httTable:FIND-FIRST('', NO-LOCK).
-
- CREATE BUFFER hBuffer FOR TABLE cFileName.
- cIndexFields = outilitiesHandler:getPrimaryIndexFields(
- INPUT cFileName
- ).
- cWhere = ''.
- DO i1 = 1 TO NUM-ENTRIES(cIndexFields, ';'):
- cField = ENTRY(i1, cIndexFields, ';').
- hField = httTable:BUFFER-FIELD(cField):HANDLE.
- CASE hField:DATA-TYPE:
- WHEN 'character' THEN
- cValue = QUOTER(hField:BUFFER-VALUE).
- WHEN 'logical' THEN
- cValue = STRING(hField:BUFFER-VALUE,"TRUE/FALSE").
- WHEN 'date' THEN
- cValue = STRING(DATE(hField:BUFFER-VALUE)).
- OTHERWISE
- cValue = hField:BUFFER-VALUE.
- END CASE.
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE ' ELSE ' AND ')
- + SUBSTITUTE('&1.&2 = ', cFileName, cField)
- + cValue.
- END.
- lRetVal = FALSE.
- REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
- lOK = hBuffer:FIND-UNIQUE(cWhere) NO-ERROR.
- IF hBuffer:AVAILABLE THEN
- DO:
- outilitiesHandler:getErrorMessage(
- INPUT '1023',
- INPUT ilanguage_id,
- INPUT '',
- OUTPUT lcMessage).
- LEAVE.
- END.
- hBuffer:BUFFER-CREATE ().
- DO ii = 1 TO httTable:NUM-FIELDS:
- hField = hBuffer:BUFFER-FIELD(ii):HANDLE NO-ERROR.
- IF ERROR-STATUS:ERROR OR
- NOT VALID-HANDLE(hField) THEN NEXT.
-
- htField = httTable:BUFFER-FIELD(ii):HANDLE NO-ERROR.
- IF htField:BUFFER-VALUE = hField:BUFFER-VALUE THEN NEXT.
- hField:BUFFER-VALUE = htField:BUFFER-VALUE.
- END.
- htField = httTable:BUFFER-FIELD('created_at'):HANDLE NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(htField) THEN htField:BUFFER-VALUE = NOW.
-
- htField = httTable:BUFFER-FIELD('wordindex'):HANDLE NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(htField) THEN
- DO:
- cWordIndex = outilitiesHandler:createWordindex(
- INPUT hBuffer
- ).
- htField:BUFFER-VALUE = cWordIndex.
- END.
- rBuffer = hBuffer:RECID.
- hBuffer:BUFFER-RELEASE ().
-
- lRetVal = TRUE.
- LEAVE.
- END.
-
- DO WHILE TRUE:
- outilitiesHandler:readLastcWhere(
- INPUT oJsonIdent,
- INPUT cFileName ,
- OUTPUT cWhere
- ).
- // MESSAGE 'readlastcwhere = ' cWhere.
- ASSIGN
- ii = 0
- i1 = 0
- iActualPage = 0
- iCurrentPosition = 0.
-
- ttTable:EMPTY-TEMP-TABLE ().
- CREATE QUERY hQuery.
- hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
- hQuery:QUERY-PREPARE (cWhere) NO-ERROR.
- hQuery:QUERY-OPEN ().
- hQuery:GET-FIRST ().
- // MESSAGE 'cPrimaryKey = ' cPrimaryKey '- cWhere = ' cWhere.
- lOK = FALSE.
- DO WHILE NOT hQuery:QUERY-OFF-END:
- ii = ii + 1.
- IF ii < iStartRecord THEN
- DO:
- hQuery:GET-NEXT ().
- NEXT.
- END.
- IF NOT lOK AND
- ii MOD iMaxRecords = 1 THEN iActualPage = iActualPage + 1.
- IF NOT lOK THEN
- DO:
- IF hBuffer:RECID <> rBuffer THEN
- DO:
- hQuery:GET-NEXT().
- NEXT.
- END.
- iIndex = ii MOD iMaxRecords.
- iStartIndex = ii - iIndex + 1.
- DO WHILE ii > iStartIndex:
- hQuery:GET-PREV ().
- ii = ii - 1.
- END.
- lOK = TRUE.
- END.
- IF iCurrentPosition = 0 THEN iCurrentPosition = ii.
- i1 = i1 + 1.
- hQuery:GET-NEXT ().
- END.
- hQuery:QUERY-CLOSE ().
- DELETE OBJECT hBuffer NO-ERROR.
-
- IF ii = 0 THEN RETURN FALSE.
- iPageCounter = ii / iMaxRecords.
- IF (iPageCounter * iMaxRecords) < ii THEN iPageCounter = iPageCounter + 1.
-
- oJsonPosition = NEW JsonObject().
- oJsonPosition:ADD('page' , iActualPage).
- oJsonPosition:ADD('index', iIndex - 1). /* -1 weil in Java beginnt Index bei 0 */
-
- oRecords = NEW JsonArray().
- httTable:WRITE-JSON('JsonArray', oRecords).
-
- oJsonReturn = NEW JsonObject().
- // oJsonReturn:ADD('records' , oRecords).
- oJsonReturn:ADD('maxRecords', ii).
- oJsonReturn:ADD('pageCount' , iPageCounter).
- oJsonReturn:ADD('position' , oJsonPosition).
- outilitiesHandler:writePosition(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT iCurrentPosition
- ).
-
- lRetVal = TRUE.
- RETURN lRetVal.
- END.
- IF NOT lRetVal THEN
- DO:
- oJsonMessage = NEW JsonObject().
- oJsonMessage:ADD('success', FALSE).
- oJsonMessage:ADD('message', lcMessage).
- oJsonMessage:WRITE(lcJsonString, FALSE).
-
- oJsonReturn = oJsonMessage.
- END.
-
- RETURN lRetVal.
- CATCH e AS Progress.Lang.Error:
- END CATCH.
- FINALLY:
- END FINALLY.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC LOGICAL deleteData(
- INPUT oJsonIdent AS JsonObject,
- INPUT oJsonRecord AS jsonObject,
- OUTPUT oJsonReturn AS JsonObject
- ):
- DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
- DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
- DEFINE VARIABLE hField AS HANDLE NO-UNDO.
- DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO.
- DEFINE VARIABLE rBuffer AS ROWID NO-UNDO.
- outilitiesHandler = NEW utilitiesHandler().
- outilitiesHandler:evaluateFile(
- INPUT oJsonIdent ,
- OUTPUT cFileName ,
- OUTPUT lCompany ,
- OUTPUT lActive ,
- OUTPUT lWordindex
- ).
-
- cFieldReplace = SUBSTITUTE('&1_', cFileName).
- cKeyFieldReplace = SUBSTITUTE('keyfield_&1_', cFileName).
- cFilterReplace = SUBSTITUTE('filter_&1_', cFileName).
- cFileReplace = SUBSTITUTE('&1_', cFileName).
- iLanguage_id = oJsonIdent:GetInteger('language_id').
- ccompany = oJsonIdent:GetCharacter('company').
- lOK = outilitiesHandler:getKeyFields(
- INPUT oJsonIdent ,
- OUTPUT cKeyFields ,
- OUTPUT cKeyValues
- ).
- CREATE TEMP-TABLE ttTable.
- ttTable:ADD-FIELDS-FROM (cFileName, 'wordindex'). /* except Field wordindex */
- ttTable:TEMP-TABLE-PREPARE ('record').
- httTable = ttTable:DEFAULT-BUFFER-HANDLE.
- DO ii = 1 TO httTable:NUM-FIELDS:
- httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME NO-ERROR.
- END.
- httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
- httTable:FIND-FIRST('', NO-LOCK).
- // Primary-Index-Fields fuer WHERE-Statement
- CREATE BUFFER hBuffer FOR TABLE cFileName.
- cIndexFields = outilitiesHandler:getPrimaryIndexFields(
- INPUT cFileName
- ).
- // Erzeugen von Where-Statement für UNIQUE-Find
- cWhere = ''.
- DO i1 = 1 TO NUM-ENTRIES(cIndexFields, ';'):
- cField = ENTRY(i1, cIndexFields, ';').
- hField = httTable:BUFFER-FIELD(cField):HANDLE.
- CASE hField:DATA-TYPE:
- WHEN 'character' THEN
- cValue = QUOTER(hField:BUFFER-VALUE).
- WHEN 'logical' THEN
- cValue = STRING(hField:BUFFER-VALUE,"TRUE/FALSE").
- WHEN 'date' THEN
- cValue = STRING(DATE(hField:BUFFER-VALUE)).
- OTHERWISE
- cValue = hField:BUFFER-VALUE.
- END CASE.
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE ' ELSE ' AND ')
- + SUBSTITUTE('&1.&2 = ', cFileName, cField)
- + cValue.
- END.
-
- lRetVal = FALSE.
- REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
- lOK = hBuffer:FIND-UNIQUE (cWhere, NO-LOCK ) NO-ERROR.
- IF NOT lOK THEN
- DO:
- outilitiesHandler:getErrorMessage(
- INPUT '1014',
- INPUT ilanguage_id,
- INPUT '',
- OUTPUT lcMessage).
- LEAVE.
- END.
- rBuffer = hBuffer:ROWID.
- FIND userdata
- WHERE userdata.user_name = oJsonIdent:GetCharacter('user_name')
- AND userdata.company = oJsonIdent:GetCharacter('company')
- AND userdata.branch = '0000'
- AND userdata.record_type = 'sortField'
- AND userdata.section = cFileName
- AND userdata.key_type = '' NO-ERROR.
- IF AVAILABLE userdata THEN
- DO:
- ASSIGN
- cSortField = userdata.cfield_1
- cDirection = userdata.cfield_2.
- END.
- IF cDirection BEGINS 'asc' THEN cDirection = ''.
-
- // Where-Statement f�r FOR EACH Filename f�r die Anzeige
- cWhere = ''.
- IF lCompany THEN cWhere = SUBSTITUTE('WHERE &1.company = &2', cFileName, QUOTER(ccompany)).
- IF cKeyFields <> '' THEN
- DO:
- DO ii = 1 TO NUM-ENTRIES(cKeyFields, ';'):
- cField = ENTRY(ii, cKeyFields, ';').
- cField = REPLACE(cField, cKeyFieldReplace, '').
- cField = REPLACE(cField, cFilterReplace, '').
- cField = REPLACE(cField, cFileReplace, '').
- cValue = ENTRY(ii, cKeyValues, CHR(01)).
- IF lCompany AND
- cFIeld = 'company' THEN NEXT.
- cValue = ENTRY(ii, cKeyValues, CHR(01)).
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE &1.&2 = &3' ELSE ' AND &1.&2 = &3').
- cWhere = SUBSTITUTE(cWhere, cFileName, cField, cValue).
- END.
- END.
- CREATE QUERY hQuery.
- hQuery:SET-BUFFERS (hBuffer).
- cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere).
- IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
-
- hQuery:QUERY-PREPARE(cWhere).
- hQuery:QUERY-OPEN().
- hQuery:GET-FIRST().
-
- ii = 0.
- i1 = 0.
- DO WHILE NOT hQuery:QUERY-OFF-END:
- ii = ii + 1.
- IF hBuffer:ROWID = rBuffer THEN i1 = ii.
- hQuery:GET-NEXT ().
- END.
- hQuery:QUERY-CLOSE ().
-
- iPageCounter = i1 / iMaxRecords.
- IF (iPageCounter * iMaxRecords) < i1 THEN iPageCounter = iPageCounter + 1.
- iIndex = i1 MOD iMaxRecords.
- IF iIndex = 0 THEN iIndex = iMaxRecords.
-
- lOK = hBuffer:FIND-BY-ROWID (rBuffer, EXCLUSIVE-LOCK) NO-ERROR.
- hField = hBuffer:BUFFER-FIELD('active'):HANDLE NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(hField) THEN
- DO:
- hField:BUFFER-VALUE = FALSE.
- hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = NOW.
- END.
- ELSE
- DO:
- hBuffer:BUFFER-DELETE ().
- END.
- hBuffer:BUFFER-RELEASE ().
-
- lRetVal = TRUE.
- oJsonReturn = NEW JsonObject().
- oJsonReturn:ADD('success', lRetVal).
-
- oJsonPosition = NEW JsonObject().
- oJsonPosition:ADD('page', iPageCounter).
- oJsonPosition:ADD('index', iIndex - 1). /* -1 weil in Java beginnt Index bei 0 */
- oJsonPosition:ADD('totalRecords', ii).
-
- oJsonReturn:ADD('position', oJsonPosition).
- LEAVE.
- END.
-
- RETURN lRetVal.
-
- CATCH e AS Progress.Lang.Error:
-
- END CATCH.
-
- FINALLY:
-
- END FINALLY.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC LOGICAL getChanges(
- INPUT oJsonIdent AS JsonObject,
- OUTPUT oJsonResult AS JsonObject
- ):
- /*
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
-
- DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
- DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
-
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE i2 AS INTEGER NO-UNDO.
-
- DEFINE VARIABLE oJsonfieldUpdates AS JsonObject NO-UNDO.
-
- outilitiesHandler = NEW utilitiesHandler().
-
- cField = oJsonIdent:GetCharacter('field').
- cAction = oJsonIdent:GetCharacter('action').
- cValue = REPLACE(oJsonIdent:GetCharacter('value'), '+', ' ').
-
- oJsonResult = NEW JsonObject().
- oJsonFieldUpdates = NEW JsonObject().
-
- lRetVal = outilitiesHandler:getKeyFields(
- INPUT oJsonIdent ,
- OUTPUT cKeyFields ,
- OUTPUT cKeyValues
- ).
- cWhere = ''.
- lRetVal = FALSE.
- DO WHILE TRUE:
- DO i1 = 1 TO NUM-ENTRIES(cKeyFields, ';'):
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ' )
- + SUBSTITUTE('busers.&1 = &2 ',
- REPLACE(ENTRY(i1, cKeyFields, ';'), 'users_', ''),
- QUOTER (ENTRY(i1, cKeyValues, CHR(01)))).
- END.
- MESSAGE cWhere.
- hBuffer = BUFFER busers:HANDLE.
- lRetVal = hBuffer:FIND-UNIQUE(cWhere, NO-LOCK) NO-ERROR.
- IF lRetVal THEN
- DO:
- CASE cField:
- WHEN 'users_firstname' THEN
- DO:
- IF hBuffer::display_Name = '' THEN
- DO:
- cString = cValue + ' ' + hBuffer::lastname.
- oJsonfieldUpdates:ADD('users_display_name', cString).
- END.
- IF hBuffer::initials = '' THEN
- DO:
- cString = TRIM(SUBSTRING(cValue,01,02)) + TRIM(SUBSTRING(hBuffer::lastname,01,02)).
- oJsonfieldUpdates:ADD('users_initials', cString).
- END.
- END.
- END CASE.
- oJsonResult:ADD('fieldUpdates', oJsonfieldUpdates).
- END.
-
- lRetVal = TRUE.
- LEAVE.
- END.
-
- IF NOT lRetVal THEN
- DO:
- oJsonResult = NEW JsonObject().
- oJsonResult:ADD('success', FALSE).
- oJsonResult:ADD('message', 'Fehler beim change').
- END.
-
- RETURN lRetVal.
- */
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC LOGICAL getData(
- INPUT oJsonIdent AS JsonObject,
- OUTPUT oJsonReturn AS JsonObject
- ):
-
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE iNumerisch AS INTEGER NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO INIT ''.
- DEFINE VARIABLE cSearchChars AS CHARACTER NO-UNDO INIT ''.
- DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lSearch AS LOGICAL NO-UNDO INIT FALSE.
- DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFilters AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFilter AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFields AS CHARACTER NO-UNDO EXTENT.
- DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDBField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lChange AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
-
- DEFINE VARIABLE oRecords AS JsonArray NO-UNDO.
-
- outilitiesHandler = NEW utilitiesHandler().
-
- //
- // Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
- outilitiesHandler:evaluateFile(
- INPUT oJsonIdent ,
- OUTPUT cFileName ,
- OUTPUT lCompany ,
- OUTPUT lActive ,
- OUTPUT lWordindex
- ).
-
- cFieldReplace = SUBSTITUTE('&1_', cFileName).
- cKeyFieldReplace = SUBSTITUTE('keyfield_&1_', cFileName).
- cFilterReplace = SUBSTITUTE('filter_&1_', cFileName).
-
- lOK = outilitiesHandler:getKeyFields(
- INPUT oJsonIdent ,
- OUTPUT cKeyFields ,
- OUTPUT cKeyValues
- ).
-
- CREATE BUFFER hBuffer FOR TABLE cFileName.
-
- cuser_name = oJsonIdent:GetCharacter('user_name').
- ccompany = oJsonIdent:GetCharacter('company').
- lChange = (IF oJsonIdent:HAS('change') THEN TRUE ELSE FALSE).
- cSortField = ''.
- cDirection = ''.
- cWhere = ''.
- iStartPage = 1.
- IF oJsonIdent:HAS('page') THEN iStartPage = INTEGER(oJsonIdent:GetCharacter('page')) NO-ERROR.
- iStartRecord = ((iStartPage - 1) * iMaxRecords) + 1.
-
- IF oJsonIdent:HAS('search') THEN
- DO:
- cSearchChars = oJsonIdent:GetCharacter('search').
- cSearchChars = REPLACE(cSearchChars, '+', ' ').
- lSearch = TRUE.
- iMaxRecords = 100.
- iStartRecord = 1.
- END.
-
- IF lCompany THEN cWhere = SUBSTITUTE('WHERE &1.company = &2', cFileName, QUOTER(ccompany)).
- IF cKeyFields <> '' THEN
- DO:
- DO ii = 1 TO NUM-ENTRIES(cKeyFields, ';'):
- cString = ENTRY(ii, cKeyFIelds, ';').
- cString = REPLACE(cString, cKeyFieldReplace, '').
- cString = REPLACE(cString, cFieldReplace, '').
- IF cString = 'company' AND lCompany THEN NEXT.
- cValue = ENTRY(ii, cKeyValues, CHR(01)).
- cString = SUBSTITUTE('&1.&2 = &3 ', cFileName, cString, cValue).
- cWhere = cWhere + (IF cWhere = '' THEN 'WHERE ' ELSE ' AND ') + cString.
- END.
- END.
- outilitiesHandler:writeStartcWhere(
- INPUT oJsonIdent,
- INPUT cFileName ,
- INPUT cWhere
- ).
- // MESSAGE 'Start - cWhere ' cWhere.
- IF lSearch THEN
- DO:
- DO ii = 1 TO NUM-ENTRIES(cSearchChars, ' '):
- cValue = ENTRY(ii, cSearchChars, ' ').
- iNumerisch = INTEGER(cValue) NO-ERROR.
- cWhere = cWhere + (IF cWhere = '' THEN ' WHERE ' ELSE 'AND ').
- IF NOT ERROR-STATUS:ERROR AND
- iNumerisch > 0 THEN cValue = SUBSTITUTE('&1&2&1', CHR(01), TRIM(STRING(iNumerisch,'>>>>>>>>9-'))).
- cWhere = cWhere + 'LOOKUP(' + QUOTER(cValue) + ', ' + cFileName + '.wordindex, " ") > 0 '.
- END.
- END.
- ELSE
- DO:
- IF oJsonIdent:HAS('sortField') THEN
- DO:
- cSortField = REPLACE(oJsonIdent:GetCharacter('sortField'), cFieldReplace, '').
- cDirection = oJsonIdent:GetCharacter('sortDirection').
- END.
-
- outilitiesHandler:writeSortfields(
- INPUT oJsonIdent,
- INPUT cFileName ,
- INPUT cSortField ,
- INPUT cDirection
- ).
-
- cFields = oJsonIdent:GetNames().
- DO i1 = 1 TO EXTENT(cFields):
- cField = cFields[i1].
- IF NOT cField BEGINS 'filter_' THEN NEXT.
- cFilter = oJsonIdent:GetCharacter(cField).
- cField = REPLACE(cField, cFilterReplace, '').
- cType = hBuffer:BUFFER-FIELD(cField):DATA-TYPE.
- CASE cType:
- WHEN 'character' THEN
- cFilter = QUOTER(cFilter).
- WHEN 'logical' THEN
- cFilter = STRING(cFilter,'yes/no').
- WHEN 'date' THEN
- cFilter = STRING(DATE(cFilter),'99.99.9999').
- END CASE.
- cDBField = SUBSTITUTE('&1.&2', cFileName, cField).
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
- + 'INDEX(' + cDBField + ', ' + cFilter + ') > 0 '.
- END.
- END.
- // MESSAGE 'cWhere = ' cWhere.
- IF NOT cDirection BEGINS 'des' THEN cDirection = ''.
- IF cSortField <> '' THEN cWhere = cWhere + 'BY ' + cSortField + ' ' + cDirection.
-
- CREATE TEMP-TABLE ttTable.
- ttTable:ADD-FIELDS-FROM (cFilename, 'wordindex').
- IF cSortField <> '' THEN
- DO:
- ttTable:ADD-NEW-INDEX ('ttTable-k1', FALSE, TRUE). /* UNIQUE, PRIMARY */
- IF cDirection BEGINS 'des' THEN ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField, 'desc').
- ELSE ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField).
- END.
- ttTable:TEMP-TABLE-PREPARE ('records').
- httTable = ttTable:DEFAULT-BUFFER-HANDLE.
-
- DO ii = 1 TO httTable:NUM-FIELDS:
- httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME NO-ERROR.
- END.
- // MESSAGE 'cWhere beim Start des lesens ' cWhere.
- ii = 0.
- i1 = 0.
- ttTable:EMPTY-TEMP-TABLE ().
- CREATE QUERY hQuery.
- cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere) NO-ERROR.
- // MESSAGE 'writeLastcWhere fuer Datei' cFileName 'ist' cWhere.
- outilitiesHandler:writeLastcWhere(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT cWhere
- ).
- MESSAGE 'cWhere vor replacing ' cWhere.
- cWhere = REPLACE(cWhere, 'FOR', 'PRESELECT').
- MESSAGE 'cWhere nach replacing ' cWhere.
- hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
- hQuery:QUERY-PREPARE (cWhere) NO-ERROR.
- hQuery:QUERY-OPEN ().
- /* hQuery:GET-LAST ().*/
- MESSAGE 'Azzahl Query-Datensaetze = ' hQuery:NUM-RESULTS.
- hQuery:GET-FIRST ().
- iCurrentPosition = 0.
- DO WHILE NOT hQuery:QUERY-OFF-END:
- ii = ii + 1.
- IF ii < iStartRecord THEN
- DO:
- hQuery:GET-NEXT ().
- NEXT.
- END.
- IF iCurrentPosition = 0 THEN iCurrentPosition = ii.
- i1 = i1 + 1.
- IF i1 <= iMaxRecords THEN
- DO:
- httTable:BUFFER-CREATE().
- httTable:BUFFER-COPY(hBuffer).
- END.
- hQuery:GET-NEXT ().
- END.
- hQuery:QUERY-CLOSE ().
- DELETE OBJECT hBuffer NO-ERROR.
- iPageCounter = ii / iMaxRecords.
- IF (iPageCounter * iMaxRecords) < ii THEN iPageCounter = iPageCounter + 1.
- oRecords = NEW JsonArray().
- httTable:WRITE-JSON('JsonArray', oRecords).
- oJsonReturn = NEW JsonObject().
- oJsonReturn:ADD('records' , oRecords).
- oJsonReturn:ADD('maxRecords', ii).
- oJsonReturn:ADD('pageCount' , iPageCounter).
- outilitiesHandler:writePosition(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT iCurrentPosition
- ).
- oJsonReturn:WriteFile('C:\TEMP\getData_messages.json', TRUE).
- lRetVal = TRUE.
- RETURN lRetVal.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC LOGICAL rebuildData(
- INPUT oJsonIdent AS JsonObject,
- OUTPUT oJsonReturn AS JsonObject
- ):
-
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE iNumerisch AS INTEGER NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO INIT ''.
- DEFINE VARIABLE cSearchChars AS CHARACTER NO-UNDO INIT ''.
- DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFields AS CHARACTER NO-UNDO EXTENT.
- DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDBField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
- DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
-
- outilitiesHandler = NEW utilitiesHandler().
- outilitiesHandler:evaluateFile(
- INPUT oJsonIdent ,
- OUTPUT cFileName ,
- OUTPUT lCompany ,
- OUTPUT lActive ,
- OUTPUT lWordindex
- ).
-
- cFieldReplace = SUBSTITUTE('&1_' , cFileName).
- cKeyFieldReplace = SUBSTITUTE('keyfield_&1_', cFileName).
- cFilterReplace = SUBSTITUTE('filter_&1_' , cFileName).
-
- lOK = outilitiesHandler:getKeyFields(
- INPUT oJsonIdent ,
- OUTPUT cKeyFields ,
- OUTPUT cKeyValues
- ).
-
- CREATE BUFFER hBuffer FOR TABLE cFileName.
-
- cuser_name = oJsonIdent:GetCharacter('user_name').
- ccompany = oJsonIdent:GetCharacter('company').
-
- cSortField = ''.
- cDirection = ''.
- cWhere = ''.
- cPrimaryKey = ''.
- iStartPage = 1.
- iStartRecord = 1.
-
- IF lCompany THEN cWhere = SUBSTITUTE('WHERE &1.company = &2', cFileName, QUOTER(ccompany)).
- IF cKeyFields <> '' THEN
- DO:
- DO ii = 1 TO NUM-ENTRIES(cKeyFields, ';'):
- cString = ENTRY(ii, cKeyFIelds, ';').
- cString = REPLACE(cString, cKeyFieldReplace, '').
- cString = REPLACE(cString, cFieldReplace, '').
- IF cString = 'company' THEN NEXT.
- cString = SUBSTITUTE('&1.&2 = &3 ', cFileName, cString, ENTRY(ii, cKeyValues, CHR(01))).
- cPrimaryKey = cPrimaryKey + (IF cPrimaryKey = '' THEN 'WHERE ' ELSE 'AND ') + cString.
- END.
- END.
-
- outilitiesHandler:readStartcWhere(
- INPUT oJsonIdent,
- INPUT cFileName ,
- OUTPUT cWhere
- ).
-
- outilitiesHandler:readSortFields(
- INPUT oJsonIdent,
- INPUT cFileName ,
- OUTPUT cSortField,
- OUTPUT cDirection).
-
- IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
-
- CREATE TEMP-TABLE ttTable.
- ttTable:ADD-FIELDS-FROM (cFilename, 'wordindex').
- IF cSortField <> '' THEN
- DO:
- ttTable:ADD-NEW-INDEX ('ttTable-k1', FALSE, TRUE). /* UNIQUE, PRIMARY */
- ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField, cDirection).
- END.
- ttTable:TEMP-TABLE-PREPARE ('records').
- httTable = ttTable:DEFAULT-BUFFER-HANDLE.
-
- DO ii = 1 TO httTable:NUM-FIELDS:
- httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME NO-ERROR.
- END.
- MESSAGE 'cWhere beim Start des lesens ' cWhere.
- ASSIGN
- ii = 0
- i1 = 0
- iActualPage = 0
- iCurrentPosition = 0.
- hBuffer:FIND-UNIQUE(cPrimaryKey, NO-LOCK) NO-ERROR.
- rBuffer = hBuffer:RECID.
-
- ttTable:EMPTY-TEMP-TABLE ().
- CREATE QUERY hQuery.
- cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere) NO-ERROR.
- hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
- hQuery:QUERY-PREPARE (cWhere) NO-ERROR.
- hQuery:QUERY-OPEN ().
- hQuery:GET-FIRST ().
- MESSAGE 'cPrimaryKey = ' cPrimaryKey '- cWhere = ' cWhere.
- lOK = FALSE.
- DO WHILE NOT hQuery:QUERY-OFF-END:
- ii = ii + 1.
- IF ii < iStartRecord THEN
- DO:
- hQuery:GET-NEXT ().
- NEXT.
- END.
- IF NOT lOK AND
- ii MOD iMaxRecords = 1 THEN iActualPage = iActualPage + 1.
- IF NOT lOK THEN
- DO:
- IF hBuffer:RECID <> rBuffer THEN
- DO:
- hQuery:GET-NEXT().
- NEXT.
- END.
- iIndex = ii MOD iMaxRecords.
- iStartIndex = ii - iIndex + 1.
- DO WHILE ii > iStartIndex:
- hQuery:GET-PREV ().
- ii = ii - 1.
- END.
- lOK = TRUE.
- END.
- IF iCurrentPosition = 0 THEN iCurrentPosition = ii.
- i1 = i1 + 1.
- IF i1 <= iMaxRecords THEN
- DO:
- httTable:BUFFER-CREATE().
- httTable:BUFFER-COPY(hBuffer).
- END.
- hQuery:GET-NEXT ().
- END.
- hQuery:QUERY-CLOSE ().
- DELETE OBJECT hBuffer NO-ERROR.
-
- IF ii = 0 THEN RETURN FALSE.
- iPageCounter = ii / iMaxRecords.
- IF (iPageCounter * iMaxRecords) < ii THEN iPageCounter = iPageCounter + 1.
-
- oJsonPosition = NEW JsonObject().
- oJsonPosition:ADD('page' , iActualPage).
- oJsonPosition:ADD('index', iIndex - 1). /* -1 weil in Java beginnt Index bei 0 */
-
- oRecords = NEW JsonArray().
- httTable:WRITE-JSON('JsonArray', oRecords).
-
- oJsonReturn = NEW JsonObject().
- oJsonReturn:ADD('records' , oRecords).
- oJsonReturn:ADD('maxRecords', ii).
- oJsonReturn:ADD('pageCount' , iPageCounter).
- oJsonReturn:ADD('position' , oJsonPosition).
- outilitiesHandler:writePosition(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT iCurrentPosition
- ).
-
- lRetVal = TRUE.
- RETURN lRetVal.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC LOGICAL updateData(
- INPUT oJsonIdent AS JsonObject,
- INPUT oJsonRecord AS jsonObject,
- OUTPUT oJsonReturn AS JsonObject
- ):
-
- DEFINE VARIABLE oJsonMessage AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonPosition AS JsonObject NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE iIndex AS INTEGER NO-UNDO.
- DEFINE VARIABLE cWordIndex AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
- DEFINE VARIABLE hField AS HANDLE NO-UNDO.
- DEFINE VARIABLE htField AS HANDLE NO-UNDO.
- DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO.
- DEFINE VARIABLE rBuffer AS RECID NO-UNDO.
- outilitiesHandler = NEW utilitiesHandler().
- outilitiesHandler:evaluateFile(
- INPUT oJsonIdent ,
- OUTPUT cFileName ,
- OUTPUT lCompany ,
- OUTPUT lActive ,
- OUTPUT lWordindex
- ).
-
- cFieldReplace = SUBSTITUTE('&1_', cFileName).
- cKeyFieldReplace = SUBSTITUTE('keyfield_&1_', cFileName).
- cFilterReplace = SUBSTITUTE('filter_&1_', cFileName).
- cFileReplace = SUBSTITUTE('&1_', cFileName).
- iLanguage_id = oJsonIdent:GetInteger('language_id').
- ccompany = oJsonIdent:GetCharacter('company').
- lOK = outilitiesHandler:getKeyFields(
- INPUT oJsonIdent ,
- OUTPUT cKeyFields ,
- OUTPUT cKeyValues
- ).
- CREATE TEMP-TABLE ttTable.
- ttTable:ADD-FIELDS-FROM (cFileName, 'wordindex'). /* except Field wordindex */
- ttTable:TEMP-TABLE-PREPARE ('record').
- httTable = ttTable:DEFAULT-BUFFER-HANDLE.
- DO ii = 1 TO httTable:NUM-FIELDS:
- httTable:BUFFER-FIELD(ii):SERIALIZE-NAME = cFileName + '_' + httTable:BUFFER-FIELD(ii):NAME NO-ERROR.
- END.
- httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
- httTable:FIND-FIRST('', NO-LOCK).
- // Primary-Index-Fields für WHERE-Statement
- CREATE BUFFER hBuffer FOR TABLE cFileName.
- cIndexFields = outilitiesHandler:getPrimaryIndexFields(
- INPUT cFileName
- ).
- // Erzeugen von Where-Statement für UNIQUE-Find
- cWhere = ''.
- DO i1 = 1 TO NUM-ENTRIES(cIndexFields, ';'):
- cField = ENTRY(i1, cIndexFields, ';').
- hField = httTable:BUFFER-FIELD(cField):HANDLE.
- CASE hField:DATA-TYPE:
- WHEN 'character' THEN
- cValue = QUOTER(hField:BUFFER-VALUE).
- WHEN 'logical' THEN
- cValue = STRING(hField:BUFFER-VALUE,"TRUE/FALSE").
- WHEN 'date' THEN
- cValue = STRING(DATE(hField:BUFFER-VALUE)).
- OTHERWISE
- cValue = hField:BUFFER-VALUE.
- END CASE.
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE ' ELSE ' AND ')
- + SUBSTITUTE('&1.&2 = ', cFileName, cField)
- + cValue.
- END.
- lRetVal = FALSE.
- REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
- lOK = hBuffer:FIND-UNIQUE(cWhere) NO-ERROR.
- IF NOT hBuffer:AVAILABLE THEN
- DO:
- outilitiesHandler:getErrorMessage(
- INPUT '1014',
- INPUT ilanguage_id,
- INPUT '',
- OUTPUT lcMessage).
- LEAVE.
- END.
- DO ii = 1 TO httTable:NUM-FIELDS:
- hField = hBuffer:BUFFER-FIELD(ii):HANDLE NO-ERROR.
- IF ERROR-STATUS:ERROR OR
- NOT VALID-HANDLE(hField) THEN NEXT.
-
- htField = httTable:BUFFER-FIELD(ii):HANDLE NO-ERROR.
- IF htField:BUFFER-VALUE = hField:BUFFER-VALUE THEN NEXT.
- hField:BUFFER-VALUE = htField:BUFFER-VALUE.
- END.
-
- hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(hField) THEN hField:BUFFER-VALUE = NOW.
-
- hField = hBuffer:BUFFER-FIELD('wordindex'):HANDLE NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(hField) THEN
- DO:
- cWordIndex = outilitiesHandler:createWordindex(
- INPUT hBuffer
- ).
- hField:BUFFER-VALUE = cWordIndex.
- END.
- rBuffer = hBuffer:RECID.
-
- oJsonReturn = NEW JsonObject().
- oJsonData = NEW JsonObject().
- oJsonArray = NEW JsonArray ().
- httTable:BUFFER-COPY(hBuffer).
- httTable:WRITE-JSON('JsonObject', oJsonData).
-
- oJsonArray = oJsonData:GetJsonArray('record').
- oJsonData = oJsonArray:GetJsonObject(1).
- oJsonReturn:ADD('record', oJsonData).
-
- hBuffer:BUFFER-RELEASE ().
-
- outilitiesHandler:readSortFields(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- OUTPUT cSortField ,
- OUTPUT cDirection ).
- // Where-Statement f�r FOR EACH Filename f�r die Anzeige
- cWhere = ''.
- IF lCompany THEN cWhere = SUBSTITUTE('WHERE &1.company = &2', cFileName, QUOTER(ccompany)).
- IF cKeyFields <> '' THEN
- DO:
- DO ii = 1 TO NUM-ENTRIES(cKeyFields, ';'):
- cField = ENTRY(ii, cKeyFields, ';').
- cField = REPLACE(cField, cKeyFieldReplace, '').
- cField = REPLACE(cField, cFilterReplace, '').
- cField = REPLACE(cField, cFileReplace, '').
- IF lCompany AND
- cField = 'company' THEN NEXT.
- cValue = ENTRY(ii, cKeyValues, CHR(01)).
- cWhere = cWhere
- + (IF cWhere = '' THEN 'WHERE &1.&2 = &3' ELSE ' AND &1.&2 = &3').
- cWhere = SUBSTITUTE(cWhere, cFileName, cField, cValue).
- END.
- END.
-
- CREATE QUERY hQuery.
- hQuery:SET-BUFFERS (hBuffer).
- cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere).
- IF cSortField <> '' THEN cWhere = cWhere + ' BY ' + cSortField + ' ' + cDirection.
- hQuery:QUERY-PREPARE(cWhere).
- hQuery:QUERY-OPEN().
- hQuery:GET-FIRST().
-
- ii = 0.
- i1 = 0.
- DO WHILE NOT hQuery:QUERY-OFF-END:
- ii = ii + 1.
- IF hBuffer:RECID = rBuffer THEN i1 = ii.
- hQuery:GET-NEXT ().
- END.
- hQuery:QUERY-CLOSE ().
-
- iPageCounter = i1 / iMaxRecords.
- IF (iPageCounter * iMaxRecords) < i1 THEN iPageCounter = iPageCounter + 1.
- iIndex = i1 MOD iMaxRecords.
- IF iIndex = 0 THEN iIndex = iMaxRecords.
-
- oJsonPosition = NEW JsonObject().
- oJsonPosition:ADD('page', iPageCounter).
- oJsonPosition:ADD('index', iIndex - 1). /* -1 weil in Java beginnt Index bei 0 */
- oJsonPosition:ADD('totalRecords', ii).
-
- oJsonReturn:ADD('position', oJsonPosition).
- lRetVal = TRUE.
- LEAVE.
- END.
-
- IF NOT lRetVal THEN
- DO:
- oJsonMessage = NEW JsonObject().
- oJsonMessage:ADD('success', FALSE).
- oJsonMessage:ADD('message', lcMessage).
- oJsonMessage:WRITE(lcJsonString, FALSE).
-
- oJsonReturn = oJsonMessage.
- END.
-
- RETURN lRetVal.
- CATCH e AS Progress.Lang.Error:
- END CATCH.
- FINALLY:
- END FINALLY.
- END METHOD.
- DESTRUCTOR PUBLIC adminprogsHandler ( ):
- END DESTRUCTOR.
- END CLASS.
|