Ver código fonte

Summary : 15.04.2026 19:54

walter.riechsteiner 3 semanas atrás
pai
commit
6b381f522f

+ 190 - 241
addresses/addressprogsHandler.cls

@@ -59,6 +59,7 @@ CLASS addresses.addressprogsHandler FINAL:
     DEFINE VARIABLE lcMessage        AS LONGCHAR          NO-UNDO.
     DEFINE VARIABLE lcString         AS LONGCHAR          NO-UNDO.
     DEFINE VARIABLE iAddress_Id      AS INT64             NO-UNDO.
+    DEFINE VARIABLE hError           AS HANDLE            NO-UNDO.
     
     DEFINE VARIABLE cWhere           AS CHARACTER         NO-UNDO.
     DEFINE VARIABLE cUniqueWhere     AS CHARACTER         NO-UNDO.
@@ -124,8 +125,6 @@ CLASS addresses.addressprogsHandler FINAL:
     DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
     DEFINE VARIABLE oselectboxHandler AS selectboxHandler NO-UNDO.
     
-    
-
     /*------------------------------------------------------------------------------
      Purpose:
      Notes:
@@ -134,9 +133,10 @@ CLASS addresses.addressprogsHandler FINAL:
     CONSTRUCTOR PUBLIC addressprogsHandler (  ):
         SUPER ().
         
+        hError = ERROR-STATUS:HANDLE.
+        
     END CONSTRUCTOR.
 
-
     /*------------------------------------------------------------------------------
      Purpose:
      Notes:
@@ -151,6 +151,8 @@ CLASS addresses.addressprogsHandler FINAL:
         DEFINE VARIABLE iItemsPage AS INTEGER           NO-UNDO.
         DEFINE VARIABLE cMaxHeight AS CHARACTER         NO-UNDO.
         
+        hError = ERROR-STATUS:HANDLE.
+        
         outilitiesHandler = NEW utilitiesHandler().
         oselectboxHandler = NEW selectboxHandler().
         
@@ -311,9 +313,15 @@ CLASS addresses.addressprogsHandler FINAL:
             IF cDirection BEGINS 'asc' THEN cDirection = ''.
             cWhere = cWhere + SUBSTITUTE(' BY &1 &2', cSortField, cDirection).
         END.
-// MESSAGE 'cWhere am Ende von BuildWhere ' cWhere.
+// MESSAGE 'cWhere am Ende von BuildWhere =' cWhere.
+        outilitiesHandler:writeLastcWhere(
+            INPUT  oJsonIdent ,
+            INPUT  cFileName  ,
+            INPUT  cWhere
+            ).
+
         createTempTable().
-// MESSAGE 'WHERE-Statement nach buildcWhere =' cWhere.
+
         RETURN.
 
     END METHOD.
@@ -327,63 +335,43 @@ CLASS addresses.addressprogsHandler FINAL:
         INPUT  oJsonData    AS JsonObject   ,
         OUTPUT oJsonReturn  AS JsonObject
         ):
-            
-        DEFINE VARIABLE cReplace         AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cFieldName       AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cField           AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cBufferField     AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cValue           AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE ii               AS INTEGER    NO-UNDO.
-        DEFINE VARIABLE lOK              AS LOGICAL    NO-UNDO.
-        DEFINE VARIABLE cCompany         AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cFormUser        AS CHARACTER  NO-UNDO.
-            
-        DEFINE VARIABLE hField           AS HANDLE     NO-UNDO.
-        DEFINE VARIABLE cAdresse         AS CHARACTER  NO-UNDO EXTENT 12.
-        DEFINE VARIABLE cBriefanrede     AS CHARACTER  NO-UNDO.
-        
+// MESSAGE 'START changeAnschrift'.
+        DEFINE VARIABLE oJsonMessage     AS JsonObject NO-UNDO.
+        DEFINE VARIABLE oJsonMessageBox  AS JsonObject NO-UNDO.
         DEFINE VARIABLE oJsonRecord      AS JsonObject NO-UNDO.
-        DEFINE VARIABLE oJsonArray       AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oMasterKeyFields AS JsonObject NO-UNDO.
         DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
+
+        DEFINE VARIABLE lRetVal          AS LOGICAL    NO-UNDO.
+        DEFINE VARIABLE lOK              AS LOGICAL    NO-UNDO.
+        DEFINE VARIABLE hField           AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE htField          AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE rBuffer          AS RECID      NO-UNDO.
+        DEFINE VARIABLE iContact_Id      AS INTEGER    NO-UNDO.
         
-        httKeyFields    = TEMP-TABLE ttKeyFields   :DEFAULT-BUFFER-HANDLE.
-        httPrimaryIndex = TEMP-TABLE ttPrimaryIndex:DEFAULT-BUFFER-HANDLE.
-        //
-        //  Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
-        //
-        outilitiesHandler:evaluateFile(
-            INPUT-OUTPUT oJsonIdent     ,
-            OUTPUT       cFileName      ,
-            OUTPUT       lCompany       ,
-            OUTPUT       lActive        ,
-            OUTPUT       lWordIndex     ,
-            INPUT-OUTPUT httKeyFields   ,
-            INPUT-OUTPUT httPrimaryIndex
-            ).
-            
-        cFunction = oJsonIdent:GetCharacter('function').
-        cCompany  = oJsonIdent:GetCharacter('company').
-        cFormId   = oJsonIdent:GetCharacter('formId').
-        cFormUser = oJsonIdent:GetCharacter('formUser').
-        
-//        CREATE BUFFER hBuffer FOR TABLE cFileName.
-//         createTempTable().
+        DEFINE VARIABLE lcttTable        AS LONGCHAR   NO-UNDO.
 
         oJsonRecord = NEW JsonObject().
-        oJsonRecord = oJsonData:GetJsonObject('record').
-// oJsonRecord:WriteFile('C:\Temp\changeanschrift_oJsonRecord.json', TRUE).
+        oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
+// oJsonRecord:WriteFile('C:\TEMP\createAnschrift_record.json', TRUE).
+        oMasterKeyFields = NEW JsonObject().
+        oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
+        //
+        //  Input-Recors-Daten in ttTable lesen
+        //
+        createTempTable().
+        oJsonRecord:Write(lcttTable, FALSE).
 
-        httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
-        
-// httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_changeAnschrift_Inhalt.json', TRUE).
+        lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
+        outilitiesHandler:evaluateErrorStatus(hError).
         //
         //  den ersten Datensatz in der TEMP-TABLE lesen
         //
-        httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
-
-        IF  iformTabIndex = 1           AND
+        httTable:FIND-FIRST('', NO-LOCK).
+// httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_changeAnschrift_Inhalt.json', TRUE).
+        IF oJsonIdent:HAS('formTabIndex') THEN iFormTabIndex = INTEGER(oJsonIdent:GetJsonText('formTabIndex')).
+// MESSAGE iFormTabIndex '-' cFileName '-' httTable::address_fix '-' httTable::first_name.
+        IF  iFormTabIndex = 1           AND
             cFileName     = 'addresses' AND
             NOT httTable::address_fix   THEN 
         DO:
@@ -457,7 +445,7 @@ CLASS addresses.addressprogsHandler FINAL:
 // oJsonRecord:WriteFile('C:\Temp\changefixedAddressoJsonRecord.json', TRUE).
 
         httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
         
 // httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_changeFixedAddresses_Inhalt.json', TRUE).
         httTable:FIND-FIRST('', NO-LOCK) NO-ERROR.
@@ -505,7 +493,7 @@ CLASS addresses.addressprogsHandler FINAL:
         DEFINE VARIABLE hField          AS HANDLE    NO-UNDO.
         
         IF hRecord::address_fix THEN RETURN.
-        MESSAGE 'start'.        
+// MESSAGE 'start'.        
         iLanguage_id    = hRecord::language_id.
         iSalutationCode = hRecord::salutation_code.
         cCountryCode    = hRecord::country_code.
@@ -659,7 +647,7 @@ CLASS addresses.addressprogsHandler FINAL:
         oJsonRecord:Write(lcttTable, FALSE).
 // MESSAGE STRING(lcttTable).
         lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
         httTable:FIND-FIRST('', NO-LOCK).
 
         /*        EXTENT(cFieldNames) = ?.                                                                                          */
@@ -694,7 +682,7 @@ CLASS addresses.addressprogsHandler FINAL:
         /*                    oJsonRecord:SET(cField, cValue).                                                                      */
         /*                END.                                                                                                      */
         /*            END CASE.                                                                                                     */
-        /*            lOk = outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).                                             */
+        /*            lOk = outilitiesHandler:evaluateErrorStatus(hError).                                             */
         /*        END.                                                                                                              */
         IF lCompany THEN 
         DO:
@@ -787,9 +775,7 @@ CLASS addresses.addressprogsHandler FINAL:
 
         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 i2               AS INTEGER    NO-UNDO.
+        DEFINE VARIABLE iAnzRec          AS INTEGER    NO-UNDO.
         DEFINE VARIABLE hField           AS HANDLE     NO-UNDO.
         DEFINE VARIABLE htField          AS HANDLE     NO-UNDO.
         DEFINE VARIABLE hUniqueBuffer    AS HANDLE     NO-UNDO.
@@ -812,12 +798,11 @@ CLASS addresses.addressprogsHandler FINAL:
         oJsonRecord:Write(lcttTable, FALSE).
 // MESSAGE STRING(lcttTable).
         lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
         httTable:FIND-FIRST('', NO-LOCK).
         //
         //  Anschrift und Briefanrede erstellen
         //
-// MESSAGE 'd'.        
         iFormTabIndex = htt::FormTabIndex.
         IF  iFormTabIndex = 1           AND 
             cFileName     = 'addresses' AND 
@@ -850,7 +835,9 @@ CLASS addresses.addressprogsHandler FINAL:
         lRetVal = FALSE.
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
             lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
-            MESSAGE 'find unique mit ' lOK 'und' cUniqueWhere.
+            //
+            //  Wenn gefunden, dann Fehler weil doppelte ID
+            //
             IF lOK THEN 
             DO:
                 outilitiesHandler:createErrorBox(
@@ -876,52 +863,6 @@ CLASS addresses.addressprogsHandler FINAL:
             //
             hBuffer:BUFFER-CREATE().
             hBuffer:BUFFER-COPY(httTable) NO-ERROR.
-            /*            DO ii = 1 TO httTable:NUM-FIELDS:                                                  */
-            /*                htField = httTable:BUFFER-FIELD(ii):HANDLE NO-ERROR.                           */
-            /*                cField  = htField:NAME.                                                        */
-            /*                hField  = hBuffer:BUFFER-FIELD(cField):HANDLE NO-ERROR.                        */
-            /*                IF  ERROR-STATUS:ERROR       OR                                                */
-            /*                    NOT VALID-HANDLE(hField) THEN NEXT.                                        */
-            /*                                                                                               */
-            /*                IF hField:EXTENT > 0 THEN                                                      */
-            /*                DO:                                                                            */
-            /*                    cFieldValue = htField:BUFFER-VALUE.                                        */
-            /*                    IF cField = 'address' THEN                                                 */
-            /*                    DO:                                                                        */
-            /*                        FIND countries NO-LOCK                                                 */
-            /*                            WHERE countries.language_id  = httTable::language_id               */
-            /*                            AND   countries.country_code = httTable::country_code NO-ERROR.    */
-            /*                        IF NOT AVAILABLE countries THEN                                        */
-            /*                        DO:                                                                    */
-            /*                            FIND countries NO-LOCK                                             */
-            /*                                WHERE countries.language_id  = 1                               */
-            /*                                AND   countries.country_code = httTable::country_code NO-ERROR.*/
-            /*                        END.                                                                   */
-            /*                        i2 = (IF countries.country_code_pos = 9 THEN 12 ELSE 11).              */
-            /*                                                                                               */
-            /*                        DO i1 = 1 TO 12:                                                       */
-            /*                            hField:BUFFER-VALUE(i1) = ''.                                      */
-            /*                        END.                                                                   */
-            /*                        DO i1 = NUM-ENTRIES(cFieldValue, CHR(10)) TO 1 BY -1:                  */
-            /*                            cValue = ENTRY(i1, cFieldValue, CHR(10)).                          */
-            /*                            IF cValue = '' THEN NEXT.                                          */
-            /*                            hField:BUFFER-VALUE(i2) = cValue.                                  */
-            /*                            i2 = i2 - 1.                                                       */
-            /*                        END.                                                                   */
-            /*                    END.                                                                       */
-            /*                    ELSE                                                                       */
-            /*                    DO:                                                                        */
-            /*                        DO i1 = 1 TO hField:EXTENT:                                            */
-            /*                            hField:BUFFER-VALUE(i1) = ENTRY(i1, cFieldValue, CHR(10)) NO-ERROR.*/
-            /*                        END.                                                                   */
-            /*                    END.                                                                       */
-            /*                END.                                                                           */
-            /*                ELSE                                                                           */
-            /*                DO:                                                                            */
-            /*                    IF htField:BUFFER-VALUE = hField:BUFFER-VALUE THEN NEXT.                   */
-            /*                    hField:BUFFER-VALUE = htField:BUFFER-VALUE.                                */
-            /*                END.                                                                           */
-            /*            END.                                                                               */
 
             htField = hBuffer:BUFFER-FIELD('active'):HANDLE NO-ERROR.
             IF  NOT ERROR-STATUS:ERROR AND 
@@ -936,8 +877,8 @@ CLASS addresses.addressprogsHandler FINAL:
                 
             rBuffer = hBuffer:RECID.
             oJsonIdent:ADD('rBuffer', INT64(rBuffer)) NO-ERROR.
-
             hBuffer:BUFFER-RELEASE ().
+            
             outilitiesHandler:writeLastRecord(
                 INPUT oJsonIdent  ,
                 INPUT cUniqueWhere
@@ -946,17 +887,17 @@ CLASS addresses.addressprogsHandler FINAL:
             lRetVal = TRUE.
             LEAVE.
         END.
-
-        IF  cFileName = 'addresses'     OR
-            cFileName = 'communication' THEN 
-        DO:
-            updateCommunication(
-                INPUT iContact_Id
-                ).
-        END.
-
+        
         IF lRetVal THEN 
         DO:
+            IF  cFileName = 'addresses'     OR
+                cFileName = 'communication' THEN 
+            DO:
+                updateCommunication(
+                    INPUT iContact_Id
+                    ).
+            END.
+
             fillWordIndexTable().
         END.
         //
@@ -968,24 +909,22 @@ CLASS addresses.addressprogsHandler FINAL:
                 INPUT  cFileName ,
                 OUTPUT cWhere
                 ).
-
+// MESSAGE 'cWhere nach add von Datensatz' cWhere.            
             outilitiesHandler:evaluatePageNumber(
                 INPUT-OUTPUT oJsonIdent   ,
                 INPUT        cWhere       ,
-                INPUT        rBuffer
-                ).
-        
-            httTable:EMPTY-TEMP-TABLE ().
-            DELETE OBJECT ttTable.            
+                INPUT        rBuffer      ,
+                INPUT        'current'
+                ).            
+       
             createTempTable().
-            
-            fillTemptableFromTable(
+            iAnzRec = fillTemptableFromTable(
                 OUTPUT oJsonReturn
                 ).
-
+                
             CREATE BUFFER hUniqueBuffer FOR TABLE cFileName.
             hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
-            outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+            outilitiesHandler:evaluateErrorStatus(hError).
             hField = hUniqueBuffer:BUFFER-FIELD('language_id'):HANDLE NO-ERROR.
             IF  VALID-HANDLE(hField)   AND
                 NOT ERROR-STATUS:ERROR THEN oJsonIdent:SET('language_id', hField:BUFFER-VALUE).
@@ -1004,9 +943,7 @@ CLASS addresses.addressprogsHandler FINAL:
 
         IF lRetVal THEN 
         DO:
-            oJsonReturn = NEW JsonObject().
             oJsonReturn:ADD('success', TRUE     ).
-            oJsonReturn:ADD('record' , oJsonData).
         
             outilitiesHandler:createInfoBox(
                 INPUT  oJsonIdent       ,
@@ -1015,7 +952,7 @@ CLASS addresses.addressprogsHandler FINAL:
                 OUTPUT oJsonMessageBox
                 ) NO-ERROR.
             oJsonReturn:ADD('showMessage', oJsonMessageBox).
-            
+
             RETURN TRUE.
         END.
 
@@ -1077,6 +1014,7 @@ CLASS addresses.addressprogsHandler FINAL:
                 WHERE customers.company    = ccompany
                 AND   customers.address_id = hUniqueBuffer::address_id NO-ERROR.
             oInfoRecord:ADD('lcustomer', (IF AVAILABLE customers THEN TRUE ELSE FALSE)).
+            oInfoRecord:SET('lcustomer', TRUE).
         /*            FIND FIRST creditors NO-LOCK                                                     */
         /*                WHERE creditors.company    = ccompany                                        */
         /*                AND   creditors.address_id = hUniqueBuffer::address_id NO-ERROR.             */
@@ -1109,7 +1047,7 @@ CLASS addresses.addressprogsHandler FINAL:
         DEFINE VARIABLE cBoxfields     AS CHARACTER NO-UNDO.
         DEFINE VARIABLE cAddField      AS CHARACTER NO-UNDO.
         DEFINE VARIABLE cField         AS CHARACTER NO-UNDO.
-MESSAGE cCompany '-' cFormId '-' htt::FormId.
+// MESSAGE cCompany '-' cFormId '-' htt::FormId.
         FIND FIRST selectboxfields NO-LOCK 
             WHERE selectboxfields.company    = cCompany
             AND   selectboxfields.user_name  = 'admin'
@@ -1125,10 +1063,12 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                 + selectboxfields.boxfieldsFix.
             cBoxFields = REPLACE(cBoxfields, ',', ';').
             lBoxFields = TRUE.
-            MESSAGE 'Alle Boxfields für' cFormId '->' cBoxfields
-                VIEW-AS ALERT-BOX.
+// MESSAGE 'Alle Boxfields für' cFormId '->' cBoxfields.
         END. 
 
+        IF VALID-HANDLE(ttTable) THEN DELETE OBJECT ttTable NO-ERROR.
+        httTable = ?.
+        
         CREATE TEMP-TABLE ttTable.
         ttTable:ADD-FIELDS-FROM (cFileName, 'wordindex').   /*  Alle Felder aus dem Buffer, ausser wordindex    */
 
@@ -1148,14 +1088,6 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             IF cDirection BEGINS 'des' THEN ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField, 'desc').
             ELSE                            ttTable:ADD-INDEX-FIELD ('ttTable-k1', cSortField).
         END.
-        CASE cFileName:
-        /*            WHEN 'addresses' THEN                                 */
-        /*                DO:                                               */
-        /*                    ttTable:ADD-NEW-FIELD('lcustomer', 'LOGICAL').*/
-        /*                    ttTable:ADD-NEW-FIELD('lcreditor', 'LOGICAL').*/
-        /*                    ttTable:ADD-NEW-FIELD('lsupplier', 'LOGICAL').*/
-        /*                END.                                              */
-        END CASE.
         
         cFunction = htt::FUNCTION NO-ERROR.
         CASE cFunction:
@@ -1253,21 +1185,19 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         DEFINE VARIABLE rBuffer          AS RECID      NO-UNDO.
         DEFINE VARIABLE iContact_Id      AS INTEGER    NO-UNDO.
         
-        DEFINE VARIABLE lcttTable AS LONGCHAR NO-UNDO.
-
-// oJsonData:WriteFile('C:\TEMP\delete_data.json', TRUE).
+        DEFINE VARIABLE lcttTable        AS LONGCHAR   NO-UNDO.
+        oJsonData:writefile(SUBSTITUTE('C:\TEMP\delete_jsondata_&1.json', cFileName), TRUE).
         oJsonRecord = NEW JsonObject().
         oJsonRecord = oJsonData:GetJsonObject('record') NO-ERROR.
-// oJsonRecord:WriteFile('C:\TEMP\delete_record.json', TRUE).
+
         oMasterKeyFields = NEW JsonObject().
         oMasterKeyFields = oJsonData:GetJsonObject('masterKeyFields') NO-ERROR.
         
         CREATE BUFFER hBuffer FOR TABLE cFileName.
         createTempTable().
         oJsonRecord:Write(lcttTable, FALSE).
-// MESSAGE STRING(lcttTable).
         lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
         httTable:FIND-FIRST('', NO-LOCK).
         //
         //  Erzeugen von Where-Statement für UNIQUE-Find
@@ -1276,7 +1206,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             INPUT  httTable,
             OUTPUT cUniqueWhere
             ).
-
+        MESSAGE 'cUniqueWhere =' cUniqueWhere.
         lRetVal = FALSE.
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
             lOK = hBuffer:FIND-UNIQUE(cUniqueWhere, NO-LOCK) NO-ERROR.
@@ -1293,10 +1223,21 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                 oJsonReturn:ADD('showMessage' , oJsonMessageBox).
                 RETURN TRUE.
             END.
-// MESSAGE 'gefunden'.
+
             rBuffer = hBuffer:RECID.
             hBuffer:BUFFER-RELEASE ().
 
+            cActiveSelection = (IF oJsonIdent:HAS('activeFilter') THEN oJsonIdent:GetCharacter('activeFilter') ELSE '').
+            IF cActiveSelection = 'LBL_FILTER_ACTIVE' THEN 
+            DO: 
+                outilitiesHandler:evaluatePageNumber(
+                    INPUT-OUTPUT oJsonIdent   ,
+                    INPUT        cWhere       ,
+                    INPUT        rBuffer      ,
+                    INPUT        'before'
+                    ).
+            END.
+                            
             iStartPage = INTEGER(oJsonIdent:GetCharacter('page'))  NO-ERROR.
             iIndex     = INTEGER(oJsonIdent:GetCharacter('index')) NO-ERROR.
 
@@ -1347,18 +1288,27 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                 
                 LEAVE.
             END.
+            
+            IF  cFileName = 'addresses'     OR 
+                cFileName = 'communication' THEN 
+            DO:
+                updateCommunication(
+                    INPUT  iContact_Id
+                    ).
+            END.
+            fillWordIndexTable().
             //
             //  Letzte Abfrage wiederholen und Temp-Tabelle füllen
             //
             outilitiesHandler:readLastcWhere(
                 INPUT  oJsonIdent,
                 INPUT  cFileName,
-                OUTPUT cWhere) NO-ERROR.
-            outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
-            
-            httTable:EMPTY-TEMP-TABLE ().            
+                OUTPUT cWhere
+                ) NO-ERROR.
+            outilitiesHandler:evaluateErrorStatus(hError).
+            MESSAGE 'cWhere nach Löschung ' cWhere.
             createTempTable().
-            
+
             fillTemptableFromTable(
                 OUTPUT oJsonReturn
                 ).
@@ -1377,16 +1327,6 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             LEAVE.
         END.
 
-        IF  cFileName = 'addresses'     OR 
-            cFileName = 'communication' THEN 
-        DO:
-            updateCommunication(
-                INPUT  iContact_Id
-                ).
-        END.
-        fillWordIndexTable().
-                
-            
         IF lRetVal THEN 
         DO:             
             oJsonReturn:ADD('success', TRUE).
@@ -1438,6 +1378,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         DEFINE VARIABLE cField        AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFieldValue   AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cPreWhere     AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE rBefore       AS RECID      NO-UNDO.
         
         DEFINE VARIABLE oRecords      AS JsonArray  NO-UNDO.
         DEFINE VARIABLE oInfoRecord   AS JsonObject NO-UNDO.
@@ -1467,15 +1408,16 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         //
 // MESSAGE '-> MaxRecords =' iMaxRecords SKIP 'Startpage =' iStartPage SKIP 'Index =' iIndex SKIP 'Startrecord =' iStartRecord.
 // MESSAGE 'cWhere in fillTempTable =' cFileName '->' cWhere.
-        cPreWhere = REPLACE(cWhere, 'FOR', 'PRESELECT').
-        CREATE QUERY  hQuery.
+        cPreWhere = SUBSTITUTE(' PRESELECT EACH &1 &2 NO-LOCK ', cFileName, cWhere) NO-ERROR.
+// MESSAGE 'cPreWhere in fillTempTable =' cPreWhere.
+        CREATE QUERY hQuery.
         
         CREATE BUFFER hBuffer FOR TABLE cFileName.
         hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
 
         hQuery:QUERY-PREPARE (cPreWhere) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
 
         hQuery:QUERY-OPEN ().
 
@@ -1484,13 +1426,15 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         hQuery:GET-NEXT ().
         iCurrentPosition = 0.
         iAnzahlRecords   = 0.
-        MESSAGE 'Start query mit StartRecord ' iStartRecord 'und cWhere ' cWhere.
+// MESSAGE 'Start query mit StartRecord ' iStartRecord 'und cWhere ' cPreWhere.
+        ttTable:EMPTY-TEMP-TABLE ().
         DO WHILE NOT hQuery:QUERY-OFF-END:
             IF iCurrentPosition = 0 THEN iCurrentPosition = iStartRecord.
             iAnzahlRecords = iAnzahlRecords + 1.
             httTable:BUFFER-CREATE().
             httTable:BUFFER-COPY(hBuffer).
-             
+
+            rBefore = hBuffer:RECID.             
             IF rBuffer <> ? AND hBuffer:RECID = rBuffer THEN iIndex = iAnzahlRecords - 1.
             IF iAnzahlRecords >= iMaxRecords THEN LEAVE.
             hQuery:GET-NEXT ().
@@ -1514,19 +1458,18 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                     lFound      = TRUE.
                     cField      = httTable:BUFFER-FIELD(i1):NAME.
                     cField      = REPLACE(cField, '_BoxField', '').
-// MESSAGE 'Boxfield-Name' cField.
                     hField      = httTable:BUFFER-FIELD(cField):HANDLE NO-ERROR.
                     IF ERROR-STATUS:ERROR       THEN NEXT.
                     IF NOT VALID-HANDLE(hField) THEN NEXT.
                     cFieldValue = hField:BUFFER-VALUE.
-// MESSAGE 'Boxfield ' cField '-' cFieldValue '-' htt::user_name.
+
                     httTable:BUFFER-FIELD(i1):BUFFER-VALUE =
                         outilitiesHandler:getBoxFieldText(
                         INPUT oJsonIdent ,
                         INPUT cField     ,
                         INPUT cFieldValue
                         ) NO-ERROR. 
-// MESSAGE httTable:BUFFER-FIELD(i1):BUFFER-VALUE.
+
                 END.
                 IF lFound = FALSE THEN LEAVE. 
                 hQuery:GET-NEXT () NO-ERROR.
@@ -1538,7 +1481,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
 
         oRecords = NEW JsonArray().
         httTable:WRITE-JSON('JsonArray', oRecords).
-// oRecords:WriteFile(SUBSTITUTE('C:\TEMP\&1_records.json', htt::FormId), TRUE).
+// MESSAGE 'ttTable gefüllt ' iANzahlRecords.
+// oRecords:WriteFile(SUBSTITUTE('C:\TEMP\fillTempTable_&1_records.json', htt::FormId), TRUE).
         
         iPageCounter = iTotalRecords / iMaxRecords.
         IF (iPageCounter * iMaxRecords) < iTotalRecords THEN iPageCounter = iPageCounter + 1.  
@@ -1567,7 +1511,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         END.
         
         iRetVal = iAnzahlRecords.
-        MESSAGE 'ende filltable'.
+// oJsonReturn:WriteFile(SUBSTITUTE('C:\TEMP\fillTempTable_return_&1.json', cFormId), TRUE).        
+// MESSAGE 'ende filltable'.
         RETURN iRetVal.
 
     END METHOD.
@@ -1587,8 +1532,6 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         DEFINE VARIABLE cCommTypes AS CHARACTER NO-UNDO
             INIT '1,2,3,4,6'.
         
-        outilitiesHandler = NEW utilitiesHandler().
-            
         EMPTY TEMP-TABLE ttWordIndexTable.
 
         FIND addresses NO-LOCK
@@ -1668,7 +1611,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             INPUT hwibuffer
             ).
 
-        MESSAGE 'wordIndex =' cValue.            
+// MESSAGE 'wordIndex =' cValue.            
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:        
             FIND addresses
                 WHERE addresses.address_id = iAddress_id NO-ERROR.
@@ -1728,6 +1671,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         //
         //  Ermitteln des Tabellennamens, ob die Tabelle das Feld "company" und/oder das Feld "active" enthält
         //
+        MESSAGE 'getChanges'.
         outilitiesHandler:evaluateFile(
             INPUT-OUTPUT oJsonIdent     ,
             OUTPUT       cFileName      ,
@@ -1776,7 +1720,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                     IF hField:DATA-TYPE = 'date'      THEN hField:BUFFER-VALUE = DATE(outilitiesHandler:iso2date(cValue)).
                 END.
             END CASE.
-            lOk = outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+            lOk = outilitiesHandler:evaluateErrorStatus(hError).
             IF lOk THEN NEXT.
         END.
 // httTable:WRITE-JSON ('FILE', 'C:\TEMP\ttTable_Inhalt.json', TRUE).
@@ -1859,17 +1803,17 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         iAnzRec = 0.
         ttTable:EMPTY-TEMP-TABLE ().
         CREATE QUERY hQuery.
-        cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere) NO-ERROR.
+//        cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK &2 ', cFileName, cWhere) NO-ERROR.
 // MESSAGE 'cWhere loaddate for ' cFileName '->' cWhere.
-// oJsonIdent:WriteFile('C:\TEMP\getData_oJsonIdent.json', TRUE ).
-        IF NOT oJsonIdent:HAS('search') THEN 
-        DO:
-            outilitiesHandler:writeLastcWhere(
-                INPUT  oJsonIdent ,
-                INPUT  cFileName  ,
-                INPUT  cWhere
-                ).
-        END.
+        oJsonIdent:WriteFile('C:\TEMP\getData_oJsonIdent.json', TRUE ).
+        /*        IF NOT oJsonIdent:HAS('search') THEN  */
+        /*        DO:                                   */
+        /*            outilitiesHandler:writeLastcWhere(*/
+        /*                INPUT  oJsonIdent ,           */
+        /*                INPUT  cFileName  ,           */
+        /*                INPUT  cWhere                 */
+        /*                ).                            */
+        /*        END.                                  */
         //
         //  Für das Dynamische Query wird PRESELECT verwendet für die Pagination
         //
@@ -1938,6 +1882,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         
         DEFINE VARIABLE oJsonRecord      AS JsonObject NO-UNDO.
         DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
+        DEFINE VARIABLE oInfoRecord      AS JsonObject NO-UNDO.
         
         CREATE BUFFER hBuffer FOR TABLE cFileName.
         createTempTable().
@@ -1970,11 +1915,16 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             INPUT  oJsonIdent      ,
             OUTPUT oJsonSelectBoxes
             ).
+            
+        createInfoRecord(
+            OUTPUT oInfoRecord
+            ).
 
         lOk = TRUE.    
         oJsonReturn = NEW JsonObject().
         oJsonReturn:ADD('success', lOK        ).
         oJsonReturn:ADD('record' , oJsonRecord).
+        IF VALID-OBJECT(oInfoRecord)      THEN oJsonReturn:ADD('infoRecord'   , oInfoRecord     ).
         IF VALID-OBJECT(oJsonSelectBoxes) THEN oJsonReturn:ADD('selectOptions', oJsonSelectBoxes).
         
         
@@ -1992,61 +1942,61 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
     ------------------------------------------------------------------------------*/
 
     METHOD PUBLIC LOGICAL rebuildData(
-        INPUT  oJsonData   AS JsonObject,
         OUTPUT oJsonReturn AS JsonObject  
         ):
         
-        DEFINE VARIABLE ii               AS INTEGER    NO-UNDO.
-        DEFINE VARIABLE i1               AS INTEGER    NO-UNDO.
+        /*        DEFINE VARIABLE ii               AS INTEGER    NO-UNDO.*/
+        /*        DEFINE VARIABLE i1               AS INTEGER    NO-UNDO.*/
+        DEFINE VARIABLE iAnzRec          AS INTEGER    NO-UNDO.
         DEFINE VARIABLE lRetVal          AS LOGICAL    NO-UNDO.
-        DEFINE VARIABLE cValue           AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE iRetVal          AS INTEGER    NO-UNDO.
         DEFINE VARIABLE lOK              AS LOGICAL    NO-UNDO.
-        DEFINE VARIABLE rBuffer          AS RECID      NO-UNDO.
-        DEFINE VARIABLE iTotalRecords    AS INTEGER    NO-UNDO.
-        DEFINE VARIABLE hFeld            AS HANDLE     NO-UNDO.
         DEFINE VARIABLE cAddress         AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cUniqueWhere     AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE hFeld            AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE cFormUser        AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE hUniqueBuffer    AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE rBuffer          AS RECID      NO-UNDO.
         
+        DEFINE VARIABLE oRecords         AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oJsonEditable    AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oJsonBox         AS JsonArray  NO-UNDO.
         DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
-        
-        outilitiesHandler = NEW utilitiesHandler().
-        oselectboxHandler = NEW selectboxHandler().
-        
-        cFileName = oJsonIdent:GetCharacter('file_name').
+        DEFINE VARIABLE oJsonMessageBox  AS JsonObject NO-UNDO.
+        DEFINE VARIABLE oInfoRecord      AS JsonObject NO-UNDO.
+
         outilitiesHandler:readLastRecord(
             INPUT  oJsonIdent ,
             OUTPUT cUniqueWhere
             ).
-// MESSAGE 'cUniqueWhere fuer UNIQE-FIND' cUniqueWhere.
+
         CREATE BUFFER hUniqueBuffer FOR TABLE cFileName.
         hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK).
         rBuffer = hUniqueBuffer:RECID.
         oJsonIdent:ADD('rBuffer', INT64(rBuffer)).
-// MESSAGE hUniqueBuffer::address_id '-' rBuffer.
-        outilitiesHandler:readLastcWhere(
-            INPUT  oJsonIdent,
-            INPUT  cFileName ,
-            OUTPUT cWhere
-            ).
+
+        IF oJsonIdent:HAS('search') THEN 
+        DO:
+            oJsonIdent:Remove('search') NO-ERROR.
+            oJsonIdent:SET('lSearch', FALSE) NO-ERROR.
+        END.
+
+        buildWhere().
+        
         outilitiesHandler:evaluatePageNumber(
             INPUT-OUTPUT oJsonIdent   ,
             INPUT        cWhere       ,
-            INPUT        rBuffer
+            INPUT        rBuffer      ,
+            INPUT        'current'
             ).            
-// oJsonIdent:WriteFile('C:\TEMP\address_rebuildData_JsonIdent.json', TRUE).        
-// MESSAGE 'LAST-WHERE' cWhere.            
        
-        createTempTable().
-            
-        fillTemptableFromTable(
+        // createTempTable().
+        iAnzRec = fillTemptableFromTable(
             OUTPUT oJsonReturn
             ).
             
-        hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        /*        hUniqueBuffer:FIND-UNIQUE (cUniqueWhere, NO-LOCK) NO-ERROR.*/
+        /*        outilitiesHandler:evaluateErrorStatus(hError).*/
         oJsonIdent:SET('language_id', hUniqueBuffer::language_id).
-
         oselectboxHandler:getVariableSelectBoxes(
             INPUT  oJsonIdent      ,
             OUTPUT oJsonSelectBoxes
@@ -2090,7 +2040,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         oJsonRecord = oJsonData:GetJsonObject('record').
 // oJsonRecord:WriteFile('C:\Temp\RecordChange_record.json', TRUE).
         httTable:READ-JSON('JsonObject', oJsonRecord) NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
         //
         //  den ersten Datensatz in der TEMP-TABLE lesen
         //
@@ -2111,12 +2061,12 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             INPUT  cUniqueWhere       
             ).            
 
-        outilitiesHandler:readLastcWhere(
-            INPUT  oJsonIdent   ,
-            INPUT  cFileName    ,
-            OUTPUT cWhere
-            ).
-
+        /*        outilitiesHandler:readLastcWhere(*/
+        /*            INPUT  oJsonIdent   ,        */
+        /*            INPUT  cFileName    ,        */
+        /*            OUTPUT cWhere                */
+        /*            ).                           */
+        /*                                         */
         createInfoRecord(
             OUTPUT oInfoRecord
             ).
@@ -2220,9 +2170,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         INPUT iContact_Id AS INTEGER  
         ):
             
-        DEFINE VARIABLE hBuffer AS HANDLE    NO-UNDO.
-        DEFINE VARIABLE cWhere  AS CHARACTER NO-UNDO.
-        MESSAGE 'cFileName in updateCommunication' cFileName.
+        DEFINE VARIABLE hBuffer    AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE cAddrWhere AS CHARACTER NO-UNDO.
 
         IF iContact_Id > 0 THEN RETURN.
 
@@ -2233,8 +2182,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                 WHEN 'addresses' THEN 
                     DO:
                         CREATE BUFFER hBuffer FOR TABLE cFileName.
-                        cWhere = SUBSTITUTE('WHERE &1.address_id = &2', cFileName, iAddress_Id).
-                        hBuffer:FIND-UNIQUE (cWhere, NO-LOCK).
+                        cAddrWhere = SUBSTITUTE('WHERE &1.address_id = &2', cFileName, iAddress_Id).
+                        hBuffer:FIND-UNIQUE (cAddrWhere, NO-LOCK).
 
                         EMPTY TEMP-TABLE ttcommunication.
                         CREATE  ttcommunication.
@@ -2335,8 +2284,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                             addresses.phone_private   = ''
                             addresses.mobile_business = ''
                             addresses.mobile_private  = ''
-                            addresses.fax            = ''
-                            addresses.e-mail         = ''
+                            addresses.fax             = ''
+                            addresses.e-mail          = ''
                             .
                         IF cFunction = 'delete' THEN 
                         DO:
@@ -2412,7 +2361,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
         oJsonRecord:Write(lcttTable, FALSE).
 // MESSAGE STRING(lcttTable).
         lOK = ttTable:READ-JSON('longchar', lcttTable, 'EMPTY') NO-ERROR.
-        outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
+        outilitiesHandler:evaluateErrorStatus(hError).
         httTable:FIND-FIRST('', NO-LOCK).
 // MESSAGE 'e'.
         //
@@ -2486,8 +2435,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
 
             lOK = hBuffer:BUFFER-COMPARE(httTable, 'case-sensitive') NO-ERROR.
             hBuffer:BUFFER-COPY(httTable) NO-ERROR.
-            outilitiesHandler:evaluateErrorStatus(ERROR-STATUS:HANDLE).
-
+            outilitiesHandler:evaluateErrorStatus(hError).
+// MESSAGE 'compare ergab' lOK.
             hField = hBuffer:BUFFER-FIELD('updated_at'):HANDLE NO-ERROR.
             IF  NOT ERROR-STATUS:ERROR AND
                 VALID-HANDLE(hField)   THEN hField:BUFFER-VALUE = NOW.
@@ -2507,7 +2456,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
                 //
                 //  Anschrift und Briefanrede erstellen
                 //
-                iFormTabIndex = htt::FormTabIndex.
+                iFormTabIndex = 1.
+                IF oJsonIdent:HAS('formTabIndex') THEN iFormTabIndex = INTEGER(oJsonIdent:GetJsonText('formTabIndex')).
                 IF  iFormTabIndex = 1           AND 
                     cFileName     = 'addresses' AND 
                     NOT httTable::address_fix   THEN
@@ -2531,9 +2481,8 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
             lRetVal = TRUE.
             LEAVE.
         END.
-        MESSAGE 'start fillwordindex'.
+
         fillWordIndexTable().
-        MESSAGE 'ende fillwordindex'.
 
         IF lRetVal THEN 
         DO:             
@@ -2576,7 +2525,7 @@ MESSAGE cCompany '-' cFormId '-' htt::FormId.
 
     DESTRUCTOR PUBLIC addressprogsHandler ( ):
         
-        // DELETE OBJECT ttJsonIdent NO-ERROR.
+        DELETE OBJECT ttJsonIdent NO-ERROR.
 
     END DESTRUCTOR.
 

+ 19 - 16
admin/dynamicformImpl.cls

@@ -377,7 +377,7 @@ MESSAGE 'START MULTITAB'.
         END.
 
         DO WHILE cFunction = 'loaddata' AND cProgram <> '':
-MESSAGE 'loaddata' cFileName.
+// MESSAGE 'loaddata' cFileName.
             IF oJsonIdent:HAS('sortField') THEN 
             DO:
                 DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
@@ -423,7 +423,6 @@ MESSAGE 'loaddata' cFileName.
         END.
 
         DO WHILE cFunction = 'loaddataunique' AND cProgram <> '':
-            MESSAGE 'START LOADDATAUNIQUE' cFileName.
             rClass   = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
             oJsonIdent:Write(lcJsonString, FALSE).
             IF VALID-OBJECT(rClass) THEN 
@@ -438,21 +437,25 @@ MESSAGE 'loaddata' cFileName.
             END.
                 
             cMethode = 'getDataUnique'.
-                // oHandler = rClass:NEW().
             lRetVal  = DYNAMIC-INVOKE ( oHandler, cMethode,
-                OUTPUT oJsonResponse
+                OUTPUT oJsonResult
                 ) NO-ERROR.
-// MESSAGE 'return from loaddataunique' lRetVal.
             outilitiesHandler:evaluateErrorStatus(INPUT hError).
  
 // oJsonResponse:WriteFile('C:\TEMP\Loaddataunique_response.json', TRUE).
 // oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
 
-            lRetVal = TRUE.
-            LEAVE.
+// oJsonResult:write(lcString, FALSE).
+// MESSAGE STRING(lcString).
+            responseOK(
+                INPUT oJsonResult
+                ).
+                
+            RETURN 0.
         END.
 
         DO WHILE cFunction = 'rebuild':
+// MESSAGE 'function rebuild starten' cFileName.
             rClass   = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
             oJsonIdent:Write(lcJsonString, FALSE).
             IF VALID-OBJECT(rClass) THEN 
@@ -468,13 +471,12 @@ MESSAGE 'loaddata' cFileName.
                 
             cMethode = 'rebuildData'.
             lRetVal  = DYNAMIC-INVOKE ( oHandler, cMethode,
-                INPUT  oJsonData   ,
                 OUTPUT oJsonResult
                 ) NO-ERROR.
             outilitiesHandler:evaluateErrorStatus(INPUT hError).
-MESSAGE 'Return bei rebuild' lRetVal.
+// MESSAGE 'Return bei rebuild' lRetVal.
             oJsonResult:write(lcString, FALSE).
-MESSAGE STRING(lcString).
+// MESSAGE STRING(lcString).
             responseOK(
                 INPUT oJsonResult
                 ).
@@ -494,7 +496,7 @@ MESSAGE STRING(lcString).
             
             oJsonResponse = NEW JsonObject().
             oJsonResponse:ADD('success', TRUE).
-//                oJsonResponse:WRITE(lcJsonString, FALSE).
+// oJsonResponse:WRITE(lcJsonString, FALSE).
             
             lRetVal = TRUE.
             LEAVE.
@@ -608,7 +610,7 @@ MESSAGE STRING(lcString).
             END.
                 
             cMethode = oJsonData:GetCharacter('changeAction').
-// MESSAGE 'changeAction =' cMethode.
+MESSAGE 'changeAction =' cMethode.
             lRetVal  = DYNAMIC-INVOKE ( oHandler, cMethode,
                 INPUT  oJsonData    ,
                 OUTPUT oJsonResponse
@@ -726,9 +728,9 @@ MESSAGE STRING(lcString).
                 OUTPUT oJsonResult
                 ) NO-ERROR.
             outilitiesHandler:evaluateErrorStatus(INPUT hError).
-MESSAGE 'Return bri update' lRetVal.
-oJsonResult:write(lcString, FALSE).
-MESSAGE STRING(lcString).
+// MESSAGE 'Return bri update' lRetVal.
+// oJsonResult:write(lcString, FALSE).
+// MESSAGE STRING(lcString).
             responseOK(
                 INPUT oJsonResult
                 ).
@@ -807,7 +809,8 @@ MESSAGE STRING(lcString).
             ).
         cFormId   = oJsonIdent:GetCharacter('formId') NO-ERROR.
         cFileName = ENTRY(1, cFormId, '_').
-        IF NOT oJsonIdent:has('user_name') THEN oJsonIdent:add('user_name', cUser_Name).
+MESSAGE 'API-Call mit Function' cFunction 'und FileName' cFileName 'und FormId' cFormId.            
+        IF NOT oJsonIdent:has('user_name') THEN oJsonIdent:ADD('user_name', cUser_Name).
         //
         //  mögliche Benutzer für das durchsuchen von HTML-Dokumenten und Labeltexten ...
         //

+ 3 - 3
admin/programgeneratorImpl.cls

@@ -83,7 +83,7 @@ CLASS admin.programgeneratorImpl INHERITS WebHandler:
             OUTPUT oJsonIdent   
             ).
 
-oJsonIdent:WriteFile('C:\TEMP\programgenerator_getHeaderData.json', TRUE).
+// oJsonIdent:WriteFile('C:\TEMP\programgenerator_getHeaderData.json', TRUE).
         
         cProgram  = oJsonIdent:GetCharacter('program_name').
         
@@ -94,7 +94,7 @@ oJsonIdent:WriteFile('C:\TEMP\programgenerator_getHeaderData.json', TRUE).
 // MESSAGE 'load hrmldokument mir program' cProgram.
         cProgUser = cuser_name.
         lRetVal   = FALSE.
-MESSAGE 'company = ' ccompany '- proguser = ' cproguser '- ilanguage_id = ' iLanguage_id '- program = ' cprogram. 
+// MESSAGE 'company = ' ccompany '- proguser = ' cproguser '- ilanguage_id = ' iLanguage_id '- program = ' cprogram. 
         DO WHILE TRUE:
             FIND FIRST htmldokumente NO-LOCK 
                 WHERE htmldokumente.company     = ccompany
@@ -109,7 +109,7 @@ MESSAGE 'company = ' ccompany '- proguser = ' cproguser '- ilanguage_id = ' iLan
                 NEXT.
             END.
             cFormId = htmldokumente.formId.
-MESSAGE cProgram 'gefunden mit user ' cproguser.
+// MESSAGE cProgram 'gefunden mit user ' cproguser.
             COPY-LOB htmldokumente.htmlprogram TO lcProgramCode.
 
             lRetVal = TRUE.

+ 8 - 2
utilities/utilitiesHandler.cls

@@ -731,7 +731,8 @@ END PROCEDURE.
     METHOD PUBLIC LOGICAL evaluatePageNumber(
         INPUT-OUTPUT oJsonIdent AS JsonObject,
         INPUT        cWhere     AS CHARACTER,
-        INPUT        rRecid     AS RECID 
+        INPUT        rRecid     AS RECID    ,
+        INPUT        cStatus    AS CHARACTER 
         ):
         
         DEFINE VARIABLE lRetVal       AS LOGICAL   NO-UNDO INIT FALSE.
@@ -744,6 +745,7 @@ END PROCEDURE.
         DEFINE VARIABLE iPage         AS INTEGER   NO-UNDO.
         DEFINE VARIABLE iIndex        AS INTEGER   NO-UNDO.
         DEFINE VARIABLE iTotalRecords AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE rBefore       AS RECID     NO-UNDO.
 
         cFileName      = oJsonIdent:GetCharacter('file_name'). 
         iPage          = 1.       
@@ -755,7 +757,7 @@ END PROCEDURE.
                 THEN INTEGER(oJsonIdent:GetCharacter('limit'))
                 ELSE oJsonIdent:GetInteger('limit')) NO-ERROR.
         END.
-        cWhere = REPLACE(cWhere, 'FOR', 'PRESELECT').
+        cWhere = SUBSTITUTE(' PRESELECT EACH &1 &2 NO-LOCK ', cFileName, cWhere).
 //MESSAGE 'cWhere =' cWhere 'Filename =' cFileName.
         CREATE QUERY hQuery.
         CREATE BUFFER hBuffer FOR TABLE cFileName.
@@ -768,6 +770,7 @@ END PROCEDURE.
         DO WHILE NOT hQuery:QUERY-OFF-END:
             iCurrentPos = iCurrentPos + 1.
             IF hBuffer:RECID = rRecid THEN LEAVE.
+            rBefore     = hBuffer:RECID.
             hQuery:GET-NEXT (NO-LOCK) NO-ERROR.
         END.
         hQuery:QUERY-CLOSE ().
@@ -775,6 +778,9 @@ END PROCEDURE.
         DELETE OBJECT hBuffer.
         DELETE OBJECT hQuery.
         
+        IF cStatus = 'before' THEN iCurrentPos = iCurrentPos - 1.
+        IF cStatus = 'after'  THEN iCurrentPos = iCurrentPos + 1.
+        
         iIndex = (iCurrentPos MOD iMaxRecords).
         IF iIndex = 0 THEN 
         DO: