/*------------------------------------------------------------------------ File : gebindeImpl Purpose : Syntax : Description : Author(s) : walter.riechsteiner Created : Wed May 29 21:02:53 CEST 2024 Notes : ----------------------------------------------------------------------*/ BLOCK-LEVEL ON ERROR UNDO, THROW. USING OpenEdge.Net.HTTP.IHttpResponse FROM PROPATH. USING OpenEdge.Net.HTTP.StatusCodeEnum FROM PROPATH. USING OpenEdge.Web.IWebRequest FROM PROPATH. USING OpenEdge.Web.WebHandler FROM PROPATH. USING OpenEdge.Web.WebResponseWriter FROM PROPATH. USING Progress.Json.ObjectModel.* FROM PROPATH. USING Progress.Lang.* FROM PROPATH. USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH. USING utilities.utilitiesHandler FROM PROPATH. CLASS gebindeImpl INHERITS WebHandler: DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO. { ttInput.i } DEFINE VARIABLE hFeld AS HANDLE NO-UNDO. DEFINE VARIABLE httBrowserKo AS HANDLE NO-UNDO. DEFINE VARIABLE httBrowserze AS HANDLE NO-UNDO. DEFINE VARIABLE httViewerKo AS HANDLE NO-UNDO. DEFINE VARIABLE httViewerZe AS HANDLE NO-UNDO. DEFINE VARIABLE httBrowser AS HANDLE NO-UNDO. DEFINE VARIABLE hbttDBTabelle AS HANDLE NO-UNDO. DEFINE VARIABLE httDBTabelle AS HANDLE NO-UNDO. DEFINE VARIABLE hqDBTabelle AS HANDLE NO-UNDO. DEFINE VARIABLE hbDBTabelle AS HANDLE NO-UNDO. DEFINE VARIABLE i1 AS INTEGER NO-UNDO. DEFINE VARIABLE i2 AS INTEGER NO-UNDO. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO. DEFINE VARIABLE iAnzRec AS INTEGER NO-UNDO. DEFINE VARIABLE cAktion AS CHARACTER NO-UNDO. DEFINE VARIABLE cUpdateAktion AS CHARACTER NO-UNDO INIT 'add,update,copy'. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC LONGCHAR addDatenFromJson( ): DEFINE VARIABLE rRecid AS RECID NO-UNDO. DEFINE VARIABLE cResult AS CHARACTER NO-UNDO. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO. DEFINE VARIABLE cMessage AS LONGCHAR NO-UNDO. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO. DEFINE VARIABLE cIndexFields AS CHARACTER NO-UNDO. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO. DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE cDataType AS CHARACTER NO-UNDO. DEFINE VARIABLE hFeld AS HANDLE NO-UNDO. DEFINE VARIABLE cWert AS CHARACTER NO-UNDO. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. iAnzRec = 0. rRecid = INT64(hbttInput::ident). cTabelle = hbttInput::tabelle. CREATE BUFFER hbDBTabelle FOR TABLE cTabelle. hbttDBTabelle:FIND-FIRST (). cIndexFields = outilitiesHandler:getPrimaryIndexFields(cTabelle). cWhere = ''. DO ii = 1 TO NUM-ENTRIES(cIndexFields, ','): cFeld = ENTRY(ii, cIndexFields, ','). hFeld = hbDBTabelle:BUFFER-FIELD (cFeld). cWert = hbttDBTabelle:BUFFER-FIELD(cFeld):BUFFER-VALUE(0). cDataType = hFeld:DATA-TYPE. CASE cDataType: WHEN 'character' THEN cWert = QUOTER(cWert). END CASE. cWhere = cWhere + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ') + SUBSTITUTE('&1.&3 = &2 ', cTabelle, cWert, cFeld ). END. lRetVal = hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(NO-LOCK) ) NO-ERROR. IF lRetVal THEN DO: outilitiesHandler:getErrorMessage( INPUT '9', INPUT INTEGER(hbttInput::sprcd), INPUT hbttDBTabelle::Geb_Cd, OUTPUT cMessage ). IF cMessage <> '' THEN DO: RETURN cMessage. END. END. REPEAT TRANSACTION ON ERROR UNDO, LEAVE: hbDBTabelle:BUFFER-CREATE(). hbDBTabelle:BUFFER-COPY(hbttDBTabelle). hbttInput::ident = TRIM(STRING(hbDBTabelle:RECID,'>>>>>>>>9')). rRecid = hbDBTabelle:RECID. httBrowserKo::rRecid. hbDBTabelle:BUFFER-RELEASE(). LEAVE. END. iAnzahl = 0. CREATE QUERY hqDBTabelle. hqDBTabelle:SET-BUFFERS (hbDBTabelle). cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK WHERE &1.Firma = &2 ', cTabelle, QUOTER(hbttInput::mandant)). hqDBTabelle:QUERY-PREPARE (cWhere). hqDBTabelle:QUERY-OPEN(). hqDBTabelle:GET-FIRST() NO-ERROR. DO WHILE NOT hqDBTabelle:QUERY-OFF-END: iAnzahl = iAnzahl + 1. IF hbDBTabelle:RECID = rRecid THEN LEAVE. hqDBTabelle:GET-NEXT () NO-ERROR. END. DELETE OBJECT hbDBTabelle NO-ERROR. DELETE OBJECT hqDBTabelle NO-ERROR. httBrowserKo::actualpage = (iAnzahl - (iAnzahl MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize. IF httBrowserKo::actualpage < 1 THEN httBrowserKo::actualpage = 0. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo). cAktion = 'next'. createNextResponse(). cMessage = ''. RETURN cMessage. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC LONGCHAR copyDatenFromJson( ): DEFINE VARIABLE rRecid AS RECID NO-UNDO. DEFINE VARIABLE cResult AS CHARACTER NO-UNDO. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO. DEFINE VARIABLE cMessage AS LONGCHAR NO-UNDO. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO. cAktion = 'add'. cMessage = addDatenFromJson(). RETURN cMessage. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createLastResponse( ): DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. outilitiesHandler:createQuery( INPUT hbttInput, INPUT httBrowserKo, OUTPUT hqDBTabelle, OUTPUT hbDBTabelle ). outilitiesHandler:createTemptableBrowser( INPUT hbttInput, INPUT httBrowserKo, OUTPUT httBrowser ). iAnzRec = outilitiesHandler:fillBrowserTT ( INPUT httBrowserKo, INPUT hqDBTabelle, INPUT hbttInput, INPUT-OUTPUT httBrowser ). httBrowserKo::actualpage = httBrowserKo::actualpage + 1. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createNextResponse( ): DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. outilitiesHandler:createQuery( INPUT hbttInput, INPUT httBrowserKo, OUTPUT hqDBTabelle, OUTPUT hbDBTabelle ). outilitiesHandler:createTemptableBrowser( INPUT hbttInput, INPUT httBrowserKo, OUTPUT httBrowser ). DO WHILE TRUE: iAnzRec = outilitiesHandler:fillBrowserTT ( INPUT httBrowserKo, INPUT hqDBTabelle, INPUT hbttInput, INPUT-OUTPUT httBrowser ). IF iAnzRec = 0 AND httBrowserKo::actualpage > 0 THEN DO: httBrowserKo::actualpage = httBrowserKo::actualpage - 1. NEXT. END. LEAVE. END. httBrowserKo::actualpage = httBrowserKo::actualpage + 1. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createPrevResponse( ): DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. httBrowserKo::actualpage = httBrowserKo::actualpage - 2. IF (httBrowserKo::actualpage < 0) THEN httBrowserKo::actualpage = 0. outilitiesHandler:createQuery( INPUT hbttInput, INPUT httBrowserKo, OUTPUT hqDBTabelle, OUTPUT hbDBTabelle ). outilitiesHandler:createTemptableBrowser( INPUT hbttInput, INPUT httBrowserKo, OUTPUT httBrowser ). iAnzRec = outilitiesHandler:fillBrowserTT ( INPUT httBrowserKo, INPUT hqDBTabelle, INPUT hbttInput, INPUT-OUTPUT httBrowser ). httBrowserKo::actualpage = httBrowserKo::actualpage + 1. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createSameResponse( ): DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE VARIABLE cTitle AS CHARACTER NO-UNDO. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO. cTitle = outilitiesHandler:getTitle( INPUT hbttInput ). MESSAGE 'Titel = ' cTitle. cHeader = outilitiesHandler:getHeader( INPUT hbttInput ). MESSAGE 'Header = ' cHeader. ASSIGN hbttInput::params = SUBSTITUTE('Title=&1;Header=&2':U, cTitle, cHeader). outilitiesHandler:createQuery( INPUT hbttInput, INPUT httBrowserKo, OUTPUT hqDBTabelle, OUTPUT hbDBTabelle ). httBrowserKo::actualpage = httBrowserKo::actualpage - 1. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). outilitiesHandler:createTemptableBrowser( INPUT hbttInput, INPUT httBrowserKo, OUTPUT httBrowser ). DO WHILE TRUE: iAnzRec = outilitiesHandler:fillBrowserTT ( INPUT httBrowserKo, INPUT hqDBTabelle, INPUT hbttInput, INPUT-OUTPUT httBrowser ). IF iAnzRec = 0 AND httBrowserKo::actualpage > 0 THEN DO: httBrowserKo::actualpage = httBrowserKo::actualpage - 1. NEXT. END. LEAVE. END. httBrowserKo::actualpage = httBrowserKo::actualpage + 1. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createSearchResponse( ): DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. // FIND FIRST ttInput. /* lRetVal = outilitiesHandler:getBrowserKopf(*/ /* INPUT hbttInput, */ /* OUTPUT httBrowserKo */ /* ). */ /* */ httBrowserKo::actualpage = 0. outilitiesHandler:createSearchQuery( INPUT hbttInput, INPUT httBrowserKo, OUTPUT hqDBTabelle, OUTPUT hbDBtabelle ). outilitiesHandler:createTemptableBrowser( INPUT hbttInput, INPUT httBrowserKo, OUTPUT httBrowser ). iAnzRec = outilitiesHandler:fillBrowserTT ( INPUT httBrowserKo, INPUT hqDBtabelle, INPUT hbttInput, INPUT-OUTPUT httBrowser ). httBrowserKo::actualpage = httBrowserKo::actualpage = 0. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createSelectResponse( ): DEFINE VARIABLE ii AS INTEGER NO-UNDO. DEFINE VARIABLE hViewer_ze AS HANDLE NO-UNDO. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE VARIABLE cInhalt AS CHARACTER NO-UNDO. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO. DEFINE VARIABLE rRecid AS RECID NO-UNDO. iAnzRec = 0. hViewer_ze = BUFFER viewer_ze:HANDLE. rRecid = INT64(hbttInput::ident). outilitiesHandler:startViewerKopf ( INPUT hbttInput, OUTPUT httViewerKo ). outilitiesHandler:createTemptableViewer( INPUT hbttInput, INPUT httViewerKo, OUTPUT httDBTabelle ). cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hbttInput::tabelle, INT64(hbttInput::ident) ). hbDBTabelle:FIND-UNIQUE(cWhere, INTEGER(NO-LOCK)) NO-ERROR. httDBTabelle:EMPTY-TEMP-TABLE(). httDBTabelle:BUFFER-CREATE(). httDBTabelle:BUFFER-COPY(hbDBtabelle). httDBTabelle::ident = TRIM(STRING(hbDBTabelle:RECID,'>>>>>>>>9')). iAnzRec = iAnzRec + 1. MESSAGE 'Start getField' httDBTabelle:NUM-FIELDS. DO ii = 1 TO httDBTabelle:NUM-FIELDS: FIND FIRST viewer_ze NO-LOCK WHERE viewer_ze.mandant = hbttInput::mandant AND viewer_ze.benutzer = hbttInput::benutzer AND viewer_ze.program = hbttInput::programm AND viewer_ze.tabelle = hbttInput::tabelle AND viewer_ze.feld = httDBTabelle:BUFFER-FIELD(ii):NAME AND viewer_ze.addFieldTabelle <> '' NO-ERROR. IF NOT AVAILABLE viewer_ze THEN NEXT. lRetVal = outilitiesHandler:getField( INPUT hbttInput, INPUT viewer_ze.addFieldTabelle, INPUT viewer_ze.addFieldField, INPUT viewer_ze.addFieldKeyFields, INPUT viewer_ze.addFieldKeyValues, INPUT httDBTabelle, OUTPUT cInhalt ). httDBTabelle:BUFFER-FIELD(ii):BUFFER-VALUE(0) = cInhalt. MESSAGE httDBTabelle:BUFFER-FIELD(ii):NAME httDBTabelle:BUFFER-FIELD(ii):BUFFER-VALUE(0). END. httBrowserKo::lastrecid = httDBTabelle::ident. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createSortResponse( ): DEFINE VARIABLE cSortfeld AS CHARACTER NO-UNDO INIT ''. DEFINE VARIABLE cRichtung AS CHARACTER NO-UNDO INIT ''. DEFINE VARIABLE cJsonFeld AS LONGCHAR NO-UNDO INIT ''. DEFINE VARIABLE hQuery AS HANDLE NO-UNDO. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO. FIND FIRST ttInput. cJsonFeld = CHR(123) + SUBSTITUTE(' "&1" : "&1" ', hbttInput::SORT) + CHR(125). outilitiesHandler:createTemptableBrowser( INPUT hbttInput , INPUT httBrowserKo , OUTPUT httBrowser ). MESSAGE 'cJsonFeld = ' STRING(cJsonFeld). httBrowser:READ-JSON('LONGCHAR', cJsonFeld, 'EMPTY'). CREATE QUERY hQuery. hQuery:SET-BUFFERS(httBrowser). hQuery:QUERY-PREPARE ('FOR EACH ttBrowser NO-LOCK'). hQuery:QUERY-OPEN (). hQuery:GET-FIRST (). DO i1 = 1 TO httBrowser:NUM-FIELDS: IF httBrowser:BUFFER-FIELD(i1):BUFFER-VALUE(0) = '' THEN NEXT. cSortfeld = httBrowser:BUFFER-FIELD(i1):NAME. LEAVE. END. hQuery:QUERY-CLOSE (). DELETE OBJECT hQuery. MESSAGE 'Sortfeld = ' cSortfeld. outilitiesHandler:setSortField( INPUT cSortfeld , INPUT-OUTPUT httBrowserKo ). MESSAGE 'Sortierung neu' cSortfeld '->' httBrowserKo::sortfeld. cAktion = 'start'. createStartResponse(). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID createStartResponse( ): DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO. DEFINE VARIABLE cTitle AS CHARACTER NO-UNDO. DEFINE VARIABLE cHeader AS CHARACTER NO-UNDO. iAnzRec = 0. cTitle = outilitiesHandler:getTitle( INPUT hbttInput ). MESSAGE 'Titel = ' cTitle. cHeader = outilitiesHandler:getHeader( INPUT hbttInput ). MESSAGE 'Header = ' cHeader. ASSIGN hbttInput::params = SUBSTITUTE('Title=&1;Header=&2':U, cTitle, cHeader). outilitiesHandler:startBrowserKopf ( INPUT hbttInput, OUTPUT httBrowserKo ). outilitiesHandler:createQuery( INPUT hbttInput, INPUT httBrowserKo, OUTPUT hqDBTabelle, OUTPUT hbDBTabelle ). outilitiesHandler:createTemptableBrowser( INPUT hbttInput, INPUT httBrowserKo, OUTPUT httBrowser ). iAnzRec = outilitiesHandler:fillBrowserTT ( INPUT httBrowserKo, INPUT hqDBTabelle, INPUT hbttInput, INPUT-OUTPUT httBrowser ). httBrowserKo::actualpage = 1. outilitiesHandler:updateBrowserKo( INPUT httBrowserKo ). RETURN. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC VOID deleteDatenFromJson( ): DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO. DEFINE VARIABLE rRecid AS RECID NO-UNDO. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO. iAnzRec = 0. rRecid = INT64(hbttInput::ident). cTabelle = hbttInput::tabelle. CREATE BUFFER hbDBTabelle FOR TABLE cTabelle. REPEAT TRANSACTION ON ERROR UNDO, LEAVE: cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', cTabelle, rRecid). hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(EXCLUSIVE-LOCK) ) NO-ERROR. hbDBTabelle:BUFFER-DELETE (). hbDBTabelle:BUFFER-RELEASE (). hbDBTabelle:GET-PREV (). rRecid = (IF hbDBTabelle:AVAILABLE THEN hbDBTabelle:RECID ELSE ? ). LEAVE. END. DELETE OBJECT hbDBTabelle NO-ERROR. httDBTabelle:EMPTY-TEMP-TABLE(). IF rRecid = ? THEN DO: hbttInput::ident = ''. cAktion = 'first'. END. ELSE DO: hbttInput::ident = TRIM(STRING(rRecid,'>>>>>>>>9')). cAktion = 'next'. END. httBrowserKo::actualpage = httBrowserKo::actualpage - 1. IF httBrowserKo::actualpage < 0 THEN httBrowserKo::actualpage = 0. httBrowserKo::lastrecid = rRecid. outilitiesHandler:updateBrowserKo(INPUT httBrowserKo). createNextResponse(). RETURN. END METHOD. METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest): DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO. DEFINE VARIABLE oWriter AS WebResponseWriter NO-UNDO. DEFINE VARIABLE oJsonData AS JsonObject NO-UNDO. DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO. DEFINE VARIABLE oJsonArray AS JsonArray NO-UNDO. DEFINE VARIABLE oJsonDataset AS JsonObject NO-UNDO. DEFINE VARIABLE oInput AS JsonObject NO-UNDO. DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO. DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO. DEFINE VARIABLE cGetHtml AS CHARACTER NO-UNDO. DEFINE VARIABLE lcHTML AS LONGCHAR NO-UNDO. DEFINE VARIABLE cString AS CHARACTER NO-UNDO. lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR. MESSAGE 'getJsonFromRequest = ' lRetVal. oJsonData:WRITE(lcJsonString, FALSE). MESSAGE 'ganzer eingangsstring = ' STRING(lcJsonString). // // Input-Daten (Steuersatz) aus JsonObject lesen und in ttInput füllen // EMPTY TEMP-TABLE ttInput . hbttInput = TEMP-TABLE ttInput:DEFAULT-BUFFER-HANDLE. oInput = NEW JsonObject(). oInput = oJsonData:GetJsonObject('ttInput'). lRetVal = hbttInput:READ-JSON ('JsonObject', oInput). FIND FIRST ttInput. cAktion = ttInput.action. CREATE TEMP-TABLE httDBTabelle. CREATE BUFFER hbDBTabelle FOR TABLE ttInput.tabelle. httDBTabelle:CREATE-LIKE (hbDBTabelle). httDBTabelle:ADD-NEW-FIELD ('ident', 'character'). httDBTabelle:TEMP-TABLE-PREPARE(ttInput.tabelle). hbttDBTabelle = httDBTabelle:DEFAULT-BUFFER-HANDLE. httDBTabelle:EMPTY-TEMP-TABLE (). outilitiesHandler = NEW utilitiesHandler (). DO WHILE lRetVal: MESSAGE 'Temptable-Name = ' httDBTabelle:NAME. IF LOOKUP(cAktion, cUpdateAktion, ',') > 0 THEN DO: lRetVal = outilitiesHandler:readInputDatenFromJson( INPUT oJsonData, INPUT hbttInput, INPUT-OUTPUT hbttDBTabelle ). hbttDBTabelle:FIND-FIRST (). IF NOT lRetVal THEN LEAVE. END. lRetVal = outilitiesHandler:getBrowserKopf( INPUT hbttInput, OUTPUT httBrowserKo ). IF cAktion = 'same' THEN ttInput.ident = TRIM(STRING(httBrowserKo::lastrecid,'>>>>>>>>9')). CASE cAktion: WHEN 'start' THEN createStartResponse ( ). WHEN 'same' THEN createSameResponse ( ). WHEN 'first' THEN createStartResponse ( ). WHEN 'last' THEN createLastResponse ( ). WHEN 'next' THEN createNextResponse ( ). WHEN 'prev' THEN createPrevResponse ( ). WHEN 'select' THEN createSelectResponse( ). WHEN 'search' THEN createSearchResponse( ). WHEN 'sort' THEN createSortResponse ( ). WHEN 'update' THEN updateDatenFromJson ( ). WHEN 'delete' THEN deleteDatenFromJson ( ). WHEN 'copy' THEN DO: lcJsonString = copyDatenFromJson ( ). IF lcJsonString <> '' THEN DO: lRetVal = FALSE. LEAVE. END. END. WHEN 'add' THEN DO: lcJsonString = addDatenFromJson ( ). IF lcJsonString <> '' THEN DO: lRetVal = FALSE. LEAVE. END. END. END CASE. MESSAGE 'Anzahl gelesene KGebinde-Record = ' iAnzRec. hbttDBTabelle:FIND-FIRST () NO-ERROR. FIND FIRST ttInput. /* IF NOT AVAILABLE ttBrowser AND */ /* NOT AVAILABLE ttKGebinde THEN LEAVE. */ IF iAnzRec = 0 THEN DO: lRetVal = FALSE. LEAVE. END. httBuffer = (IF cAktion = 'select' THEN httDBTabelle ELSE httBrowser). oJsonArray = NEW JsonArray(). oJsonData = NEW JsonObject(). hbttInput:WRITE-JSON('JsonObject', oJsonData). oJsonArray:Add(oJsonData). oJsonData = NEW JsonObject(). httBuffer:WRITE-JSON('JsonObject', oJsonData). oJsonArray:Add(oJsonData). oJsonArray:WRITE(lcJsonString, FALSE). MESSAGE 'JsonArray = ' STRING(lcJsonString). MESSAGE 'lcString Rückgabe: ' + STRING(lcJsonString). oResponse = NEW OpenEdge.Web.WebResponse(). oResponse:StatusCode = INTEGER(StatusCodeEnum:OK). oResponse:ContentType = "application/json;charset=utf-8". oWriter = NEW WebResponseWriter(oResponse). oWriter:Open(). oWriter:Write(lcJsonString). oWriter:Close(). LEAVE. END. IF NOT lRetVal THEN DO: oResponse = NEW OpenEdge.Web.WebResponse(). oResponse:StatusCode = INTEGER(StatusCodeEnum:OK). oResponse:ContentType = "application/json;charset=utf-8". oWriter = NEW WebResponseWriter(oResponse). oWriter:Open(). MESSAGE 'lcString Rückgabe: ' + STRING(lcJsonString) VIEW-AS ALERT-BOX. oWriter:Write(lcJsonString). oWriter:Close(). END. DELETE OBJECT httDBTabelle NO-ERROR. DELETE OBJECT hbDBTabelle NO-ERROR. MESSAGE "Exiting HandlePost" VIEW-AS ALERT-BOX. CATCH e AS Progress.Lang.Error: MESSAGE "Exception occurred: " + e:GetMessage(1) VIEW-AS ALERT-BOX ERROR BUTTONS OK. RETURN -1. END CATCH. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ METHOD PUBLIC LOGICAL updateDatenFromJson( ): DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO. DEFINE VARIABLE rRecid AS RECID NO-UNDO. DEFINE VARIABLE cResult AS CHARACTER NO-UNDO. DEFINE VARIABLE cFeld AS CHARACTER NO-UNDO. DEFINE VARIABLE cWhere AS CHARACTER NO-UNDO. DEFINE VARIABLE iAnzahl AS INTEGER NO-UNDO. DEFINE VARIABLE cTabelle AS CHARACTER NO-UNDO. iAnzRec = 0. rRecid = INT64(hbttInput::ident). cTabelle = hbttInput::tabelle. CREATE BUFFER hbDBTabelle FOR TABLE cTabelle. cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hbttInput::tabelle, rRecid). hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(NO-LOCK) ) NO-ERROR. hbttDBTabelle:FIND-FIRST (). lRetVal = hbDBTabelle:BUFFER-COMPARE(hbttDBTabelle). REPEAT TRANSACTION WHILE NOT lRetVal ON ERROR UNDO, LEAVE: cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hbttInput::tabelle, rRecid). hbDBTabelle:FIND-UNIQUE (cWhere, INTEGER(EXCLUSIVE-LOCK) ) NO-ERROR. DO i1 = 1 TO hbDBTabelle:NUM-FIELDS: cFeld = hbDBTabelle:BUFFER-FIELD(i1):NAME. hFeld = hbttDBTabelle:BUFFER-FIELD(cFeld) NO-ERROR. IF hFeld:BUFFER-VALUE(0) = hbDBTabelle:BUFFER-FIELD(i1):BUFFER-VALUE(0) THEN NEXT. hbDBTabelle:BUFFER-FIELD(i1):BUFFER-VALUE(0) = hFeld:BUFFER-VALUE(0). END. hbDBTabelle:BUFFER-RELEASE (). LEAVE. END. DELETE OBJECT hqDBTabelle NO-ERROR. CREATE QUERY hqDBTabelle. cWhere = SUBSTITUTE('FOR EACH &1 WHERE &1.Firma = &2 NO-LOCK ', cTabelle, QUOTER(hbttInput::mandant)). hqDBTabelle:SET-BUFFERS(hbDBTabelle). hqDBTabelle:QUERY-PREPARE(cWhere). hqDBTabelle:QUERY-OPEN(). hqDBTabelle:GET-FIRST() NO-ERROR. iAnzahl = 0. DO WHILE NOT hqDBTabelle:QUERY-OFF-END: iAnzahl = iAnzahl + 1. IF hbDBTabelle:RECID = rRecid THEN LEAVE. hqDBTabelle:GET-NEXT () NO-ERROR. END. DELETE OBJECT hbDBTabelle NO-ERROR. DELETE OBJECT hqDBTabelle NO-ERROR. httBrowserKo::actualpage = (iAnzahl - (iAnzahl MOD httBrowserKo::pagesize)) / httBrowserKo::pagesize. IF httBrowserKo::actualpage < 1 THEN httBrowserKo::actualpage = 0. httDBTabelle:EMPTY-TEMP-TABLE (). hbttInput::ident = TRIM(STRING(rRecid,'>>>>>>>>9')). cAktion = 'next'. IF (iAnzahl MOD httBrowserKo::pagesize) = 0 THEN httBrowserKo::actualpage = httBrowserKo::actualpage - 1. httBrowserKo::lastrecid = INT64(ttInput.ident). outilitiesHandler:updateBrowserKo(INPUT httBrowserKo). createNextResponse(). lRetVal = TRUE. RETURN lRetVal. END METHOD. METHOD OVERRIDE PROTECTED INTEGER HandleNotAllowedMethod(INPUT poRequest AS IWebRequest): DEFINE VARIABLE result AS INTEGER NO-UNDO. MESSAGE "HandleNotAllowedMethod called" VIEW-AS ALERT-BOX. RETURN result. END METHOD. METHOD OVERRIDE PROTECTED INTEGER HandleNotImplemented(INPUT poRequest AS IWebRequest): DEFINE VARIABLE result AS INTEGER NO-UNDO. MESSAGE "HandleNotImplemented called" VIEW-AS ALERT-BOX. RETURN result. END METHOD. /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DESTRUCTOR PUBLIC gebindeImpl ( ): DELETE OBJECT outilitiesHandler NO-ERROR. MESSAGE 'DESTRUCTOR gebindeImpl'. END DESTRUCTOR. END CLASS.