Jelajahi Sumber

Summary 2025.12.17 10:07

walter.riechsteiner 1 bulan lalu
induk
melakukan
427ca63276

File diff ditekan karena terlalu besar
+ 532 - 241
admin/adminprogsHandler.cls


+ 287 - 258
admin/dynamicformImpl.cls

@@ -21,46 +21,56 @@ USING OpenEdge.Web.WebHandler                       FROM PROPATH.
 USING Progress.Json.ObjectModel.ObjectModelParser   FROM PROPATH.
 USING Progress.Json.ObjectModel.JsonObject          FROM PROPATH.
 USING Progress.Json.ObjectModel.JsonArray           FROM PROPATH.
+USING PROGRESS.lang.*                               FROM PROPATH.
 
 USING src.ch.adprime.gemis.WebHandlerUtilities      FROM PROPATH.
 USING utilities.selectboxHandler                    FROM PROPATH.
 USING utilities.utilitiesHandler                    FROM PROPATH.
-USING admin.usersHandler                            FROM PROPATH.
 USING admin.adminprogsHandler                       FROM PROPATH.
 
+
 CLASS admin.dynamicformImpl INHERITS WebHandler: 
 
-    DEFINE VARIABLE oResponse         AS IHttpResponse        NO-UNDO.         
-    DEFINE VARIABLE oWriter           AS WebResponseWriter    NO-UNDO.
-    DEFINE VARIABLE oBody             AS String               NO-UNDO.
-    DEFINE VARIABLE cDefautlCharSet   AS CHARACTER            NO-UNDO INIT 'UTF-8'.
-    DEFINE VARIABLE oParser           AS ObjectModelParser    NO-UNDO.           
-    DEFINE VARIABLE cCorralationID    AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cContent-Type     AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE lcJsonString      AS LONGCHAR             NO-UNDO.
+    DEFINE VARIABLE oResponse            AS IHttpResponse        NO-UNDO.         
+    DEFINE VARIABLE oWriter              AS WebResponseWriter    NO-UNDO.
+    DEFINE VARIABLE oBody                AS String               NO-UNDO.
+    DEFINE VARIABLE cDefautlCharSet      AS CHARACTER            NO-UNDO INIT 'UTF-8'.
+    DEFINE VARIABLE oParser              AS ObjectModelParser    NO-UNDO.           
+    DEFINE VARIABLE cCorralationID       AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cContent-Type        AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE lcJsonString         AS LONGCHAR             NO-UNDO.
+    DEFINE VARIABLE oJsonActiveSelectBox AS JsonObject           NO-UNDO.    
     
-    DEFINE VARIABLE oHandler          AS Progress.Lang.Object NO-UNDO.
-    DEFINE VARIABLE cMethode          AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE hError               AS HANDLE               NO-UNDO.
+    DEFINE VARIABLE ccompany             AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cuser_name           AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cAnzeigeName         AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE ilanguage_id         AS INTEGER              NO-UNDO.
+    DEFINE VARIABLE cSessionToken        AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cFunction            AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cForm_Id             AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cProgram             AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cProgramUser         AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cUsers               AS CHARACTER            NO-UNDO INIT 'user,admin'.
+    DEFINE VARIABLE lcMessage            AS LONGCHAR             NO-UNDO.
+    DEFINE VARIABLE cErrorNo             AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cMaxHeight           AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE iItemsPage           AS INTEGER              NO-UNDO.
+    DEFINE VARIABLE cLogFile             AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE hBuffer              AS HANDLE               NO-UNDO.
+    DEFINE VARIABLE hField               AS HANDLE               NO-UNDO.
     
-    DEFINE VARIABLE ccompany          AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cuser_name        AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cAnzeigeName      AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE ilanguage_id      AS INTEGER              NO-UNDO.
-    DEFINE VARIABLE cSessionToken     AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cFunction         AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cForm_Id          AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cProgram          AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cProgramUser      AS CHARACTER            NO-UNDO.
-    DEFINE VARIABLE cUsers            AS CHARACTER            NO-UNDO INIT 'user,admin'.
-    DEFINE VARIABLE lcMessage         AS LONGCHAR             NO-UNDO.
-    DEFINE VARIABLE cErrorNo          AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cMethode             AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE cClass               AS CHARACTER            NO-UNDO.
+    DEFINE VARIABLE rClass               AS Progress.Lang.Class.
+    DEFINE VARIABLE oHandler             AS Progress.Lang.Object 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 lCompany             AS LOGICAL              NO-UNDO.
+    DEFINE VARIABLE lActive              AS LOGICAL              NO-UNDO.
+    DEFINE VARIABLE lWordindex           AS LOGICAL              NO-UNDO.
     
-    DEFINE VARIABLE outilitiesHandler AS utilitiesHandler     NO-UNDO.
-    DEFINE VARIABLE oselectboxHandler AS selectboxHandler     NO-UNDO.
+    DEFINE VARIABLE outilitiesHandler    AS utilitiesHandler     NO-UNDO.
+    DEFINE VARIABLE oselectboxHandler    AS selectboxHandler     NO-UNDO.
 
 
     /*------------------------------------------------------------------------------
@@ -79,9 +89,6 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
         DEFINE VARIABLE ii            AS INTEGER    NO-UNDO.
         DEFINE VARIABLE i1            AS INTEGER    NO-UNDO.
         DEFINE VARIABLE cQueryString  AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryPairs   AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryKey     AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryValue   AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFileName     AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFieldName    AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cClassName    AS CHARACTER  NO-UNDO.
@@ -91,84 +98,68 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
         DEFINE VARIABLE httBuffer     AS HANDLE     NO-UNDO.
 
         lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
+        cLogFile = SUBSTITUTE('C:\TEMP\handleDELETE_&1.json', REPLACE(STRING(TIME,'HH:MM:SS'), ':', '')).
+        oJsonData:WriteFile(cLogFile, TRUE).
 
+        hError            = ERROR-STATUS:HANDLE.
         outilitiesHandler = NEW utilitiesHandler().
+        cQueryString      = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
 
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('company'     , ccompany     )   NO-ERROR.
-        oJsonIdent:ADD('user_name'   , cuser_name   )   NO-ERROR.
-        oJsonIdent:ADD('language_id' , iLanguage_id )   NO-ERROR.
-        oJsonIdent:ADD('sessionToken', cSessionToken)   NO-ERROR.
-        
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
-        MESSAGE 'dynamic DELETE' STRING(oJsonIdent:GetJsonText()).        
+        // oJsonIdent:WriteFile('C:\TEMP\dynamicform_DELETE_ident.json', TRUE).
+                
+        cForm_Id   = oJsonIdent:GetCharacter('formId').
         cClassName = ENTRY(1, cForm_Id, '_').
-        
-        lRetVal  = FALSE.
-        
+        cFileName  = ENTRY(1, cForm_Id, '_').
+        //
+        //  mögliche Benutzer für das durchsuchen von HTML-DOkumenten und Labeltexten ...
+        //
         cuser_name = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
-        IF LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
         cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
-        IF LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        
+        lRetVal    = FALSE.
+      
         cProgram = outilitiesHandler:getProgramName (
             INPUT  oJsonIdent,
             INPUT  cUsers
             ).
             
-        cFunction = oJsonIdent:GetCharacter('function').
-
         REPEAT TRANSACTION WHILE cFunction = 'delete' ON ERROR UNDO, LEAVE:
-            
-            DEFINE VARIABLE cClass     AS CHARACTER                   NO-UNDO.
-            DEFINE VARIABLE rClass     AS Progress.Lang.Class.
-            DEFINE VARIABLE rParamList AS Progress.Lang.ParameterList.
-            
             CASE cClassName:
-                WHEN 'users'    THEN 
-                    cClass = 'admin.usersHandler'. 
+                WHEN 'users' THEN 
+                    cClass = 'admin.adminprogsHandler'.
                 WHEN 'messages' THEN 
-                    cClass = 'admin.adminprogsHandler'. 
+                    cClass = 'admin.adminprogsHandler'.
                 WHEN 'labeltexte' THEN 
-                    cClass = 'admin.adminprogsHandler'. 
+                    cClass = 'admin.adminprogsHandler'.
             END CASE.
-            
-            ASSIGN
-                rClass = Progress.Lang.Class:GetClass(cClass).
-            oHandler = rClass:NEW().
-            /*            CASE cClassName:                           */
-            /*                WHEN 'users' THEN                      */
-            /*                    oHandler = NEW usersHandler().     */
-            /*                WHEN 'messages' THEN                   */
-            /*                    oHandler = NEW adminprogsHandler().*/
-            /*            END CASE.                                  */
 
+            rClass   = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
             cMethode = 'deleteData'.
-
             oHandler = rClass:NEW().
-            lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
-                INPUT  oJsonIdent  ,
-                INPUT  oJsonData   ,
+            lRetVal  = DYNAMIC-INVOKE ( oHandler, cMethode,
+                INPUT  oJsonIdent ,
+                INPUT  oJsonData  ,
                 OUTPUT oJsonResult
-                ).
+                ) NO-ERROR.
+            outilitiesHandler:evaluateErrorStatus(hError).
             IF NOT lRetVal THEN LEAVE.
             
             oJsonResult:WRITE(lcJsonString, FALSE).
+            oJsonResult:WriteFile('C:\TEMP\DYNAMIC_DELETE_Respons.json', TRUE).
             LEAVE.
         END.
                     
@@ -181,7 +172,7 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
         DO:
             oJsonMessage = NEW JsonObject().
             oJsonMessage:ADD('success', FALSE).
-            oJsonMessage:ADD('message', 'Fehler beim create/POST des Users').
+            oJsonMessage:ADD('message', 'Fehler beim DELETE').
             oJsonMessage:WRITE(lcJsonString, FALSE).
         END.
                             
@@ -196,8 +187,10 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
         END CATCH.
                 
         FINALLY:
-        /*            DELETE OBJECT oJsonConfig. */
-        /*            DELETE OBJECT oJsonMessage.*/
+            DELETE OBJECT oHandler     NO-ERROR.
+            DELETE OBJECT oJsonMessage NO-ERROR.
+            DELETE OBJECT oResponse    NO-ERROR.
+            DELETE OBJECT oWriter      NO-ERROR.
         END FINALLY.
 
     END METHOD.
@@ -213,50 +206,36 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
         DEFINE VARIABLE oJsonIdent       AS JsonObject NO-UNDO.
         DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
         DEFINE VARIABLE oJsonBox         AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oJsonData        AS JsonObject NO-UNDO.
         
         DEFINE VARIABLE lRetVal          AS LOGICAL    NO-UNDO.
         DEFINE VARIABLE ii               AS INTEGER    NO-UNDO.
         DEFINE VARIABLE i1               AS INTEGER    NO-UNDO.
         DEFINE VARIABLE cQueryString     AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryPairs      AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryKey        AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryValue      AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFileName        AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFieldName       AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cClassName       AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cActiveSelection AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cFormUser        AS CHARACTER  NO-UNDO.
         
         DEFINE VARIABLE oJsonResult      AS JsonObject NO-UNDO.
         DEFINE VARIABLE httBuffer        AS HANDLE     NO-UNDO.
         
+        hError            = ERROR-STATUS:HANDLE.
         outilitiesHandler = NEW utilitiesHandler().
+        cQueryString      = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
-        
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('H_company'     , ccompany     )   NO-ERROR.
-        oJsonIdent:ADD('H_user_name'   , cuser_name   )   NO-ERROR.
-        oJsonIdent:ADD('H_display_name', cAnzeigeName )   NO-ERROR.
-        oJsonIdent:ADD('H_language_id' , iLanguage_id )   NO-ERROR.
-        oJsonIdent:ADD('H_sessionToken', cSessionToken)   NO-ERROR.
-        //
-        //  Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
-        //
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
         //
         //  mögliche Benutzer für das durchsuchen von HTML-DOkumenten und Labeltexten ...
         //
@@ -265,6 +244,10 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
         cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
         IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
         
+        cLogFile = SUBSTITUTE('C:\TEMP\handleGET_&1.json', REPLACE(STRING(TIME,'HH:MM:SS'), ':', '')).
+        oJsonIdent:WriteFile(cLogFile, TRUE) NO-ERROR.
+        outilitiesHandler:evaluateErrorStatus(INPUT hError).
+        
         lRetVal = FALSE.
 
         MASTERLOOP:
@@ -272,72 +255,76 @@ CLASS admin.dynamicformImpl INHERITS WebHandler:
             //
             //  Programmname aus den möglichen Benutzern ermitteln
             //
+            cMaxHeight = '250px'.
+            iItemsPage = 50.
             cProgram = outilitiesHandler:getProgramName (
-                INPUT  oJsonIdent,
-                INPUT  cUsers
+                INPUT        oJsonIdent,
+                INPUT        cUsers    ,
+                OUTPUT       cFormUser ,
+                INPUT-OUTPUT iItemsPage,
+                INPUT-OUTPUT cMaxHeight
                 ).
-MESSAGE 'getProgramName ' cProgram.
             IF cProgram = '' THEN 
             DO:
                 outilitiesHandler:getErrorMessage(
-                    INPUT  '1000',
-                    INPUT  oJsonIdent:GetInteger('language_id'),
-                    INPUT  '',  /* Parameters */
+                    INPUT  '2001',
+                    INPUT  iLanguage_id,
+                    INPUT  oJsonIdent:GetCharacter('frameId'),  /* Parameters */
                     OUTPUT lcMessage
                     ).
                 LEAVE.
             END.            
-            oJsonIdent:ADD('program', cProgram).
+            oJsonIdent:ADD('program'       , cProgram  ).
+            oJsonIdent:ADD('itemsPerPage'  , iItemsPage).
+            oJsonIdent:ADD('tableMaxHeight', cMaxHeight).
+            oJsonIdent:ADD('formUser'      , cFormUser ).
+
+            cErrorNo   = ''.
+            cForm_Id   = oJsonIdent:GetCharacter("formId"    ) NO-ERROR.
+            cFileName  = oJsonIdent:GetCharacter("file_name" ) NO-ERROR.
+            cClassName = oJsonIdent:GetCharacter("class_name") NO-ERROR.
             
-            cErrorNo = ''.
-            cForm_Id = oJsonIdent:GetCharacter("formId") NO-ERROR.
-            IF NOT ERROR-STATUS:ERROR THEN 
+            //            
+            //  active-Feld-Filter ermitten
+            //
+            outilitiesHandler:getActiveSelection(
+                INPUT  oJsonIdent      ,
+                INPUT  cFileName       ,
+                OUTPUT cActiveSelection
+                ).
+            IF cActiveSelection <> '' THEN 
             DO:
-                cClassName = ENTRY(1, cForm_Id, '_').
-                cFileName  = ENTRY(1, cForm_Id, '_').
+                IF NOT oJsonIdent:HAS('activeFilter') THEN oJsonIdent:ADD('activeFilter', cActiveSelection ).
             END.
-            IF  cClassName = '' THEN
-                cErrorNo = cErrorNo 
-                    + (IF cErrorNo = '' THEN '' ELSE ',')
-                    + '1001'.
-            IF cFileName = '' THEN
-                cErrorNo = cErrorNo 
-                    + (IF cErrorNo = '' THEN '' ELSE ',')
-                    + '1002'.
-            IF cErrorNo <> '' THEN 
-            DO:
-                outilitiesHandler:getErrorMessage(
-                    INPUT  cErrorNo,
-                    INPUT  oJsonIdent:GetInteger('language_id'),
-                    INPUT  '',  /* Parameters */
-                    OUTPUT lcMessage
+
+            DO WHILE cFunction = 'saveActiveFilter' AND cProgram <> '':
+                outilitiesHandler:setActiveSelection(
+                    INPUT  oJsonIdent,
+                    INPUT  cFileName,
+                    INPUT  oJsonIdent:GetCharacter('activeFilter')
                     ).
+                lRetVal = TRUE.
                 LEAVE.
             END.
-            oJsonIdent:ADD('class_name', cClassName).
-            oJsonIdent:ADD('file_name' , cFileName ).
-            
-            IF NOT oJsonIdent:HAS('company'    ) THEN oJsonIdent:ADD('company'    , oJsonIdent:GetCharacter('H_company'    )).
-            IF NOT oJsonIdent:HAS('user_name'  ) THEN oJsonIdent:ADD('user_name'  , oJsonIdent:GetCharacter('H_user_name'  )).
-            IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetInteger  ('H_language_id')).
-        
-            oJsonIdent:WriteFile('C:\TEMP\dynamicform_GET.json', TRUE).
-        
-            cFunction = oJsonIdent:GetCharacter('function').
-            cCompany  = oJsonIdent:GetCharacter('company').
-     
-            DO WHILE cFunction = 'init' AND cProgram <> '':
-            
-                FIND FIRST selectboxfields NO-LOCK
-                    WHERE selectboxfields.company = ccompany
-                    AND   selectboxfields.program = cform_id NO-ERROR.
-                IF NOT AVAILABLE selectboxfields THEN LEAVE.
 
+            DO WHILE cFunction = 'init' AND cProgram <> '':
+                //
+                //  wenn die Tabelle(File) das Feld active enthält, soll der activeFilter activiert werden
+                //
+                CREATE BUFFER hBuffer FOR TABLE cFilename NO-ERROR.
+                hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
+                IF  NOT ERROR-STATUS:ERROR AND 
+                    VALID-HANDLE(hField)   THEN lActive = TRUE.
+                DELETE OBJECT hBuffer.
+                //
+                //  Alle Felder, welche als Selectboxen definiert sind, füllen
+                //                
                 oselectboxHandler = NEW selectboxHandler().
                 oJsonSelectBoxes  = NEW JsonObject().
                 FOR EACH selectboxfields NO-LOCK
-                    WHERE selectboxfields.company = ccompany
-                    AND   selectboxfields.program = cform_id:
+                    WHERE selectboxfields.company   = ccompany
+                    AND   selectboxfields.program   = cform_id
+                    AND   selectboxfields.user_name = cFormUser:
 
                     DO ii = 1 TO NUM-ENTRIES(selectboxfields.boxfields, ';'):
                         cFieldName = ENTRY(ii, selectboxfields.boxfields, ';').
@@ -355,9 +342,9 @@ MESSAGE 'getProgramName ' cProgram.
                         IF cFieldName MATCHES('*language_id*') THEN 
                         DO:
                             oJsonBox  = NEW JsonArray().
-                            httBuffer = oSelectboxHandler:getSelboxLanguage(INPUT cFileName).
-                            httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
-                            oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
+                            httBuffer = oSelectboxHandler:getSelboxLanguage(INPUT cFileName) NO-ERROR.
+                            httBuffer:WRITE-JSON ('JsonArray', oJsonBox) NO-ERROR.
+                            oJsonSelectBoxes:ADD(cFieldName, oJsonBox) NO-ERROR.
                             NEXT.
                         END.
                     
@@ -381,28 +368,32 @@ MESSAGE 'getProgramName ' cProgram.
                     
                     END.
                 END.
-            
-                outilitiesHandler:evaluateFile(
-                    INPUT  oJsonIdent   ,
-                    OUTPUT cFileName    ,
-                    OUTPUT lCompany     ,
-                    OUTPUT lActive      ,
-                    OUTPUT lWordindex
-                    ).
-            
-                outilitiesHandler:getActiveSelection(
-                    INPUT  oJsonIdent      ,
-                    INPUT  cFileName       ,
-                    OUTPUT cActiveSelection
-                    ).
-            
+                
                 oJsonResponse = NEW JsonObject().
                 oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
-                oJsonResponse:ADD("activeFilter"    , cActiveSelection).
-                oJsonResponse:ADD("hasActiveField"  , lActive         ).
-                oJsonResponse:ADD("tableMaxHeight"  , '400px'         ).
-                oJsonResponse:ADD("itemsPerPage"    , 25              ).
-                oJsonResponse:WriteFile('C:\Temp\Dynamic_Init_response.json', TRUE).
+                oJsonResponse:ADD("tableMaxHeight"  , cMaxHeight      ).
+                oJsonResponse:ADD("itemsPerPage"    , iItemsPage      ).
+                //
+                //  Wenn die Tabelle das Feld active hat, wird die SelectBox für den activ-Filter gefüllt
+                //
+                IF lActive THEN 
+                DO:
+                    oJsonResponse:ADD("activeFilter"    , cActiveSelection).
+                    oJsonResponse:ADD("hasActiveField"  , lActive         ).
+                    
+                    oJsonActiveSelectBox = NEW JsonObject().
+                    FOR EACH labeltexte NO-LOCK 
+                        WHERE labeltexte.company     = ccompany
+                        AND   labeltexte.user_name   = cuser_name
+                        AND   labeltexte.program     = 'Labels'
+                        AND   labeltexte.table_name  = 'table'
+                        AND   labeltexte.field_name BEGINS 'LBL_FILTER'
+                        AND   labeltexte.language_id = ilanguage_id :
+                        oJsonActiveSelectBox:ADD(CAPS(labeltexte.field_name), labeltexte.headlabel).
+                    END.
+                END.
+                oJsonResponse:ADD('activeFilterLabels', oJsonActiveSelectBox).
+                
                 lRetVal = TRUE.                
                 LEAVE. 
             END.
@@ -410,20 +401,22 @@ MESSAGE 'getProgramName ' cProgram.
             DO WHILE cFunction = 'loaddata' AND cProgram <> '':
                 CASE cClassName:
                     WHEN 'users' THEN 
-                        oHandler = NEW usersHandler().
+                        cClass = 'admin.adminprogsHandler'.
                     WHEN 'messages' THEN 
-                        oHandler = NEW adminprogsHandler().
+                        cClass = 'admin.adminprogsHandler'.
                     WHEN 'labeltexte' THEN 
-                        oHandler = NEW adminprogsHandler().
+                        cClass = 'admin.adminprogsHandler'.
                 END CASE.
 
+                rClass   = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
                 cMethode = 'getData'.
-
-                lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
-                    INPUT  oJsonIdent    ,
+                oHandler = rClass:NEW().
+                lRetVal  = DYNAMIC-INVOKE ( oHandler, cMethode,
+                    INPUT  oJsonIdent  ,
                     OUTPUT oJsonResult
-                    ).
-            // oJsonResult:WriteFile('C:\TEMP\loaddate_result.json', TRUE).
+                    ) NO-ERROR.
+                outilitiesHandler:evaluateErrorStatus(hError).
+                IF NOT lRetVal THEN LEAVE.
  
                 oJsonResponse = NEW JsonObject().
                 oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
@@ -435,23 +428,28 @@ MESSAGE 'getProgramName ' cProgram.
             END.
         
             DO WHILE cFunction = 'change' AND cProgram <> '':
-
                 CASE cClassName:
                     WHEN 'users' THEN 
-                        oHandler = NEW usersHandler().
+                        cClass = 'adminprogsHandler'.
                     WHEN 'messages' THEN 
-                        oHandler = NEW adminprogsHandler().
+                        cClass = 'adminprogsHandler'.
                     WHEN 'labeltexte' THEN 
-                        oHandler = NEW adminprogsHandler().
+                        cClass = 'adminprogsHandler'.
                 END CASE.
+            
+                ASSIGN
+                    rClass = Progress.Lang.Class:GetClass(cClass).
+                
+                cMethode = 'change'.
 
-                cMethode = 'getChanges'.
-
+                oHandler = rClass:NEW().
                 lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
-                    INPUT  oJsonIdent    ,
+                    INPUT  oJsonIdent  ,
+                    INPUT  oJsonData   ,
                     OUTPUT oJsonResult
                     ).
-            
+                IF NOT lRetVal THEN LEAVE.
+                
                 oJsonResponse = NEW JsonObject().
                 oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
             
@@ -462,20 +460,24 @@ MESSAGE 'getProgramName ' cProgram.
             END.
         
             DO WHILE cFunction = 'rebuild':
-            
                 CASE cClassName:
                     WHEN 'users' THEN 
-                        oHandler = NEW usersHandler().
+                        cClass = 'adminprogsHandler'.
                     WHEN 'messages' THEN 
-                        oHandler = NEW adminprogsHandler().
+                        cClass = 'adminprogsHandler'.
                     WHEN 'labeltexte' THEN 
-                        oHandler = NEW adminprogsHandler().
+                        cClass = 'adminprogsHandler'.
                 END CASE.
-
+            
+                ASSIGN
+                    rClass = Progress.Lang.Class:GetClass(cClass).
+                
                 cMethode = 'rebuildData'.
 
+                oHandler = rClass:NEW().
                 lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
-                    INPUT  oJsonIdent    ,
+                    INPUT  oJsonIdent  ,
+                    INPUT  oJsonData   ,
                     OUTPUT oJsonResult
                     ).
                 IF NOT lRetVal THEN 
@@ -531,7 +533,7 @@ MESSAGE 'getProgramName ' cProgram.
                 
         cContent-Type   = "application/json".
         cDefautlCharSet = 'utf-8'.
-
+// MESSAGE 'Get-Respond ' STRING(lcJsonString).
         oBody = NEW STRING(lcJsonString).
         WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
 //        oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
@@ -548,7 +550,15 @@ MESSAGE 'getProgramName ' cProgram.
         END CATCH.
 
         FINALLY:
-
+            DELETE OBJECT oHandler          NO-ERROR.
+            DELETE OBJECT oSelectBoxHandler NO-ERROR.
+            DELETE OBJECT oResponse         NO-ERROR.
+            DELETE OBJECT oWriter           NO-ERROR.
+            DELETE OBJECT oJsonSelectBoxes  NO-ERROR.
+            DELETE OBJECT oJsonBox          NO-ERROR.
+            DELETE OBJECT oParser           NO-ERROR.
+            DELETE OBJECT oJsonData         NO-ERROR.
+            DELETE OBJECT oJsonResponse     NO-ERROR.
         END FINALLY.
 
     END METHOD.
@@ -582,64 +592,79 @@ MESSAGE 'getProgramName ' cProgram.
         
         lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
 
+        cLogFile = SUBSTITUTE('C:\TEMP\handlePOST_&1.json', REPLACE(STRING(TIME,'HH:MM:SS'), ':', '')).
+        oJsonData:WriteFile(cLogFile, TRUE).
+
         outilitiesHandler = NEW utilitiesHandler().
+        hError            = ERROR-STATUS:HANDLE.        
+        cQueryString      = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
         
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
 
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('H_company'     , ccompany     )   NO-ERROR.
-        oJsonIdent:ADD('H_user_name'   , cuser_name   )   NO-ERROR.
-        oJsonIdent:ADD('H_display_name', cAnzeigeName )   NO-ERROR.
-        oJsonIdent:ADD('H_language_id' , iLanguage_id )   NO-ERROR.
-        oJsonIdent:ADD('H_sessionToken', cSessionToken)   NO-ERROR.
+        oJsonIdent:WriteFile('C:\TEMP\dynamicform_POST.json', TRUE).
         //
-        //  Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
+        //  mögliche Benutzer für das durchsuchen von HTML-DOkumenten und Labeltexten ...
         //
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
+        cuser_name = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        
+        cForm_Id   = poRequest:URI:GetQueryValue("formId") NO-ERROR.
+        cClassName = ENTRY(1, cForm_Id, '_').
+        cFileName  = ENTRY(1, cForm_Id, '_').
+        //
+        //  mögliche Benutzer für das durchsuchen von HTML-DOkumenten und Labeltexten ...
+        //
+        cuser_name = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
         
         lRetVal  = FALSE.
+        
         cProgram = outilitiesHandler:getProgramName (
             INPUT  oJsonIdent,
             INPUT  cUsers
             ).
             
-        cFunction = oJsonIdent:GetCharacter('function').
+        cForm_Id   = oJsonIdent:GetCharacter('formId').
+        cClassName = ENTRY(1, cForm_Id, '_').
+        cFileName  = ENTRY(1, cForm_Id, '_').
 
         REPEAT TRANSACTION WHILE cFunction = 'create' ON ERROR UNDO, LEAVE:
-            
             CASE cClassName:
                 WHEN 'users' THEN 
-                    oHandler = NEW usersHandler().
+                    cClass = 'admin.adminprogsHandler'.
                 WHEN 'messages' THEN 
-                    oHandler = NEW adminprogsHandler().
+                    cClass = 'admin.adminprogsHandler'.
                 WHEN 'labeltexte' THEN 
-                    oHandler = NEW adminprogsHandler().
+                    cClass = 'admin.adminprogsHandler'.
             END CASE.
 
+            rClass   = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
             cMethode = 'createData'.
-
-            lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
-                INPUT  oJsonIdent  ,
-                INPUT  oJsonData   ,
+            oHandler = rClass:NEW().
+            lRetVal  = DYNAMIC-INVOKE (oHandler, cMethode,
+                INPUT  oJsonIdent ,
+                INPUT  oJsonData  ,
                 OUTPUT oJsonResult
-                ).
+                ) NO-ERROR.
+            outilitiesHandler:evaluateErrorStatus(hError).
             IF NOT lRetVal THEN LEAVE.
             
             oJsonResult:WRITE(lcJsonString, FALSE).
+            oJsonResult:WriteFile('C:\TEMP\DYNAMIC_CREATE_Respons.json', TRUE).
             LEAVE.
         END.
                     
@@ -668,8 +693,10 @@ MESSAGE 'getProgramName ' cProgram.
         END CATCH.
                 
         FINALLY:
-        /*            DELETE OBJECT oJsonConfig. */
-        /*            DELETE OBJECT oJsonMessage.*/
+            DELETE OBJECT oJsonMessage  NO-ERROR.
+            DELETE OBJECT oResponse     NO-ERROR.
+            DELETE OBJECT oWriter       NO-ERROR.
+            DELETE OBJECT oJsonResult   NO-ERROR.
         END FINALLY.
 
     END METHOD.
@@ -690,9 +717,6 @@ MESSAGE 'getProgramName ' cProgram.
         DEFINE VARIABLE ii            AS INTEGER    NO-UNDO.
         DEFINE VARIABLE i1            AS INTEGER    NO-UNDO.
         DEFINE VARIABLE cQueryString  AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryPairs   AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryKey     AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cQueryValue   AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFileName     AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cFieldName    AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cClassName    AS CHARACTER  NO-UNDO.
@@ -703,63 +727,66 @@ MESSAGE 'getProgramName ' cProgram.
         
         lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
         
+        cLogFile = SUBSTITUTE('C:\TEMP\handlePATCH_&1.json', REPLACE(STRING(TIME,'HH:MM:SS'), ':', '')).
+        oJsonData:WriteFile(cLogFile, TRUE).
+        
         outilitiesHandler = NEW utilitiesHandler().
+        hError            = ERROR-STATUS:HANDLE.        
+        cQueryString      = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
         
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
 
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('company'     , ccompany     )   NO-ERROR.
-        oJsonIdent:ADD('user_name'   , cuser_name   )   NO-ERROR.
-        oJsonIdent:ADD('language_id' , iLanguage_id )   NO-ERROR.
-        oJsonIdent:ADD('sessionToken', cSessionToken)   NO-ERROR.
-        
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
-        MESSAGE 'dynamic PATCH' STRING(oJsonIdent:GetJsonText()).
         cForm_Id   = poRequest:URI:GetQueryValue("formId") NO-ERROR.
         cClassName = ENTRY(1, cForm_Id, '_').
+        cFileName  = ENTRY(1, cForm_Id, '_').
+        //
+        //  mögliche Benutzer für das durchsuchen von HTML-DOkumenten und Labeltexten ...
+        //
+        cuser_name = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
         
         lRetVal  = FALSE.
+        
         cProgram = outilitiesHandler:getProgramName (
             INPUT  oJsonIdent,
             INPUT  cUsers
             ).
             
-        cFunction = oJsonIdent:GetCharacter('function').
-        
         REPEAT TRANSACTION WHILE cFunction = 'update' ON ERROR UNDO, LEAVE:
-            
             CASE cClassName:
                 WHEN 'users' THEN 
-                    oHandler = NEW usersHandler().
+                    cClass = 'admin.adminprogsHandler'.
                 WHEN 'messages' THEN 
-                    oHandler = NEW adminprogsHandler().
+                    cClass = 'admin.adminprogsHandler'.
                 WHEN 'labeltexte' THEN 
-                    oHandler = NEW adminprogsHandler().
+                    cClass = 'admin.adminprogsHandler'.
             END CASE.
 
+            rClass   = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
             cMethode = 'updateData'.
-
-            lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
-                INPUT  oJsonIdent  ,
-                INPUT  oJsonData   ,
+            oHandler = rClass:NEW().
+            lRetVal  = DYNAMIC-INVOKE ( oHandler, cMethode,
+                INPUT  oJsonIdent ,
+                INPUT  oJsonData  ,
                 OUTPUT oJsonResult
-                ).
+                ) NO-ERROR.
+            outilitiesHandler:evaluateErrorStatus(hError).
+            IF NOT lRetVal THEN LEAVE.
             
             oJsonResult:WRITE(LcJsonString, FALSE).
+            // oJsonResult:WriteFile('C:\TEMP\DYNAMIC_UPDATE_Respons.json', TRUE).
             LEAVE.
         END.
                     
@@ -775,7 +802,7 @@ MESSAGE 'getProgramName ' cProgram.
             oJsonMessage:ADD('message', 'Fehler beim Update/PATCH des Users').
             oJsonMessage:WRITE(lcJsonString, FALSE).
         END.
-        // MESSAGE 'Rckmeldung ' STRING(lcJsonString).
+        // MESSAGE 'Rueckmeldung ' STRING(lcJsonString).
                             
         oWriter:Open().
         oWriter:Write(lcJsonString).
@@ -788,8 +815,10 @@ MESSAGE 'getProgramName ' cProgram.
         END CATCH.
                 
         FINALLY:
-        /*            DELETE OBJECT oJsonConfig. */
-        /*            DELETE OBJECT oJsonMessage.*/
+            DELETE OBJECT oJsonMessage  NO-ERROR.
+            DELETE OBJECT oWriter       NO-ERROR.
+            DELETE OBJECT oResponse     NO-ERROR.
+            DELETE OBJECT oHandler      NO-ERROR.
         END FINALLY.
 
     END METHOD.

+ 260 - 271
admin/formdesignerImpl.cls

@@ -23,6 +23,7 @@ USING Progress.Json.ObjectModel.ObjectModelParser FROM PROPATH.
 USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
 USING utilities.utilitiesHandler FROM PROPATH.
 USING Progress.Json.ObjectModel.JsonDataType FROM PROPATH.
+USING System.Windows.Forms.HtmlDocument FROM ASSEMBLY.
 
 CLASS admin.formdesignerImpl INHERITS WebHandler: 
 
@@ -35,6 +36,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
     DEFINE VARIABLE cAnzeigeName      AS CHARACTER         NO-UNDO.
     DEFINE VARIABLE ilanguage_id      AS INTEGER           NO-UNDO.
     DEFINE VARIABLE cSessionToken     AS CHARACTER         NO-UNDO.
+    DEFINE VARIABLE cFunction         AS CHARACTER         NO-UNDO.
     
     DEFINE VARIABLE outilitiesHandler AS utilitiesHandler  NO-UNDO.
     
@@ -103,7 +105,6 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
         DEFINE VARIABLE iType       AS INTEGER    NO-UNDO.
         DEFINE VARIABLE cType       AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE cField      AS CHARACTER  NO-UNDO.
-        DEFINE VARIABLE cFunction   AS CHARACTER  NO-UNDO.
         DEFINE VARIABLE ii          AS INTEGER    NO-UNDO.
         DEFINE VARIABLE i1          AS INTEGER    NO-UNDO.
         DEFINE VARIABLE cFieldNames AS CHARACTER  NO-UNDO EXTENT.
@@ -170,68 +171,59 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
     METHOD PUBLIC LOGICAL fillFileDict(
         INPUT oJsonIdent AS JsonObject
         ):
-        
-        DEFINE VARIABLE lresult     AS LOGICAL   NO-UNDO INIT FALSE.
-        DEFINE VARIABLE ii          AS INTEGER   NO-UNDO.
-        DEFINE VARIABLE i1          AS INTEGER   NO-UNDO.
-        DEFINE VARIABLE i2          AS INTEGER   NO-UNDO.
-        DEFINE VARIABLE lRetVal     AS LOG       NO-UNDO INIT FALSE.
-        DEFINE VARIABLE hBuffer     AS HANDLE    NO-UNDO.
-        DEFINE VARIABLE hQuery      AS HANDLE    NO-UNDO.
-        DEFINE VARIABLE rFile       AS RECID     NO-UNDO.
-        DEFINE VARIABLE cViewas     AS CHARACTER NO-UNDO.
-        
-        DEFINE VARIABLE cFileNames  AS CHARACTER NO-UNDO.
-        DEFINE VARIABLE cFileName   AS CHARACTER NO-UNDO.
-        DEFINE VARIABLE cLDBName    AS CHARACTER NO-UNDO.
-        DEFINE VARIABLE cDBName     AS CHARACTER NO-UNDO.
-        DEFINE VARIABLE cTestName   AS CHARACTER NO-UNDO.
-        DEFINE VARIABLE cDBFileName AS CHARACTER NO-UNDO.
-        EMPTY TEMP-TABLE tFileDict.
 
+        DEFINE VARIABLE lresult      AS LOGICAL   NO-UNDO INIT FALSE.
+        DEFINE VARIABLE ii           AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE i1           AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE j1           AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE j2           AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE lRetVal      AS LOG       NO-UNDO INIT FALSE.
+        DEFINE VARIABLE hBuffer      AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE hField       AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE hQuery       AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE rFile        AS RECID     NO-UNDO.
+        DEFINE VARIABLE cViewas      AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cSidelabel   AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cHeadlabel   AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE rLabelTexte  AS RECID     NO-UNDO.
+        
+        DEFINE VARIABLE cFileNames   AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cFileName    AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cFieldName   AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cLDBName     AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cDBName      AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cTestName    AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cDBFileName  AS CHARACTER NO-UNDO.
+        
+        DEFINE VARIABLE ccompany     AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cuser_name   AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE iLanguage_id AS INTEGER   NO-UNDO.
+        
+        DEFINE BUFFER blabeltexte FOR labeltexte.
+        
+        ccompany     = oJsonIdent:GetCharacter('company').
+        cuser_name   = oJsonIdent:GetCharacter('user_name').
+        iLanguage_id = oJsonIdent:GetInteger('language_id').
+
+        EMPTY TEMP-TABLE tFileDict.
         lRetVal = FALSE.
-        cFileNames = oJsonIdent:GetCharacter('tables').
+        cFileNames = REPLACE(oJsonIdent:GetCharacter('tables'), ',', ';').
         DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
             cFileName = ENTRY(ii,cFileNames, ';').
-            
-            DO i1 = 1 TO NUM-DBS:
-                cDBName   = LDBNAME(i1).
-                cFileName = SUBSTITUTE('&1.&2', cDBName, cFileName) NO-ERROR.        
-                CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
-                IF  ERROR-STATUS:ERROR        OR 
-                    NOT VALID-HANDLE(hBuffer) THEN NEXT.
-                /*                    lRetVal = hBuffer:FIND-FIRST('WHERE _File-Name = ' + QUOTER(cFileName), NO-LOCK) NO-ERROR.*/
-                /*                    IF lRetVal THEN                                                                           */
-                /*                    DO:                                                                                       */
-                /*                        rFile = hBuffer:RECID.                                                                */
-                /*                        DELETE OBJECT hBuffer NO-ERROR.                                                       */
-                /*                        LEAVE.                                                                                */
-                /*                    END.                                                                                      */
-                /*                    DELETE OBJECT hBuffer.                                                                    */
-                lRetVal = TRUE.
-            END.
-            IF NOT lRetVal THEN NEXT.
-            
-/*            cDBFileName = cDBName + '.' + '_Field'.                                                                                    */
-/*                                                                                                                                       */
-/*            CREATE BUFFER hBuffer FOR TABLE cDBFileName.                                                                               */
-/*            CREATE QUERY hQuery.                                                                                                       */
-/*            hQuery:SET-BUFFERS(hBuffer).                                                                                               */
-/*            hQuery:QUERY-PREPARE(SUBSTITUTE('FOR EACH &1 WHERE _Field._File-Recid = &2 NO-LOCK BY _Field._Order', cDBFileName, rFile)).*/
-/*            hQuery:QUERY-OPEN().                                                                                                       */
- 
-            DO WHILE NOT hQuery:QUERY-OFF-END:
-                hQuery:GET-NEXT(NO-LOCK) NO-ERROR.
-                IF hQuery:QUERY-OFF-END THEN LEAVE.
-            DO i1 = 1 TO hBuffer:NUM-FIELDS:
-                IF hBuffer:BUFFER-FIELD(i1):NAME  = 'wordindex' THEN NEXT.
+            CREATE BUFFER hBuffer FOR TABLE cFileName NO-ERROR.
+            IF  ERROR-STATUS:ERROR        OR 
+                NOT VALID-HANDLE(hBuffer) THEN NEXT.
 
+            DO i1 = 1 TO hBuffer:NUM-FIELDS:
+                hField     = hBuffer:BUFFER-FIELD(i1).
+                cFieldName = hField:NAME.
+                IF cFieldName  = 'wordindex' THEN NEXT.
                 CREATE  tFileDict.
                 ASSIGN
-                    tFileDict.cId          = cFilename + '_' + hBuffer::_Field-Name
-                    tFileDict.cName        = cFilename + '_' + hBuffer::_Field-Name
-                    tFileDict.cFormat      = hBuffer::_Format
-                    tFileDict.cType        = hBuffer::_Data-Type
+                    tFileDict.cId          = cFileName + '_' + cFieldName
+                    tFileDict.cName        = cFilename + '_' + cFieldName
+                    tFileDict.cFormat      = hBuffer:BUFFER-FIELD(ii):FORMAT
+                    tFileDict.cType        = hBuffer:BUFFER-FIELD(ii):DATA-TYPE
                     tFileDict.iDecimals    = 0
                     tFileDict.lhidden      = FALSE
                     tFileDict.leditable    = TRUE
@@ -242,41 +234,100 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                     tFileDict.cInputMode   = ?
                     .
 
-                FIND FIRST labeltexte NO-LOCK 
-                    WHERE labeltexte.company     = oJsonIdent:GetCharacter('company')
-                    AND   labeltexte.table_name  = cFileName
-                    AND   labeltexte.field_name  = hBuffer::_Field-Name
-                    AND   labeltexte.language_id = oJsonIdent:GetInteger('language_id') NO-ERROR.
-                IF NOT AVAILABLE labeltexte THEN 
-                DO:
+                DO WHILE TRUE TRANSACTION:
                     FIND FIRST labeltexte NO-LOCK 
-                        WHERE labeltexte.company     = oJsonIdent:GetCharacter('company')
-                        AND   labeltexte.table_name  = 'table'
-                        AND   labeltexte.field_name  = hBuffer::_Field-Name NO-ERROR.
+                        WHERE labeltexte.company     = ccompany
+                        AND   labeltexte.user_name   = 'admin'
+                        AND   labeltexte.table_name  = cFileName
+                        AND   labeltexte.field_name  = cFieldName
+                        AND   labeltexte.language_id = iLanguage_id
+                        AND   labeltexte.program     = '' NO-ERROR.
+                    IF AVAILABLE labeltexte THEN 
+                    DO:
+                        rLabelTexte = RECID(labeltexte).
+                        LEAVE.
+                    END.
+                    
+                    FIND FIRST blabeltexte NO-LOCK 
+                        WHERE blabeltexte.company     = ccompany
+                        AND   blabeltexte.user_name   = 'admin'
+                        AND   blabeltexte.field_name  = cFieldName
+                        AND   blabeltexte.language_id = iLanguage_id
+                        AND   blabeltexte.program     = '' NO-ERROR.
+                    IF AVAILABLE blabeltexte THEN
+                        ASSIGN 
+                            cSidelabel = blabeltexte.sidelabel
+                            cHeadlabel = blabeltexte.headlabel.
+                    ELSE
+                        IF hField:LABEL <> ? THEN 
+                            ASSIGN 
+                                cSidelabel = hField:LABEL 
+                                cHeadlabel = hField:LABEL.
+                        ELSE
+                            ASSIGN 
+                                cSidelabel = hField:NAME 
+                                cHeadlabel = hField:NAME.
+                        
+                    CREATE  labeltexte.
+                    ASSIGN  
+                        labeltexte.company     = ccompany
+                        labeltexte.user_name   = 'admin'
+                        labeltexte.table_name  = cFileName
+                        labeltexte.field_name  = cFieldName
+                        labeltexte.language_id = iLanguage_id
+                        labeltexte.program     = ''
+                        labeltexte.created_at  = NOW NO-ERROR.
+                    
+                    ASSIGN 
+                        labeltexte.sidelabel = cSidelabel
+                        labeltexte.headlabel = cHeadlabel.
+                        
+                    rLabelTexte = RECID(labeltexte).
+                    RELEASE labeltexte.
+                    RELEASE blabeltexte.
+                    LEAVE.
                 END.
-                IF NOT AVAILABLE labeltexte THEN 
-                DO:
+                
+                DO WHILE TRUE TRANSACTION:
+                    IF cuser_name = 'admin' THEN LEAVE.
+                    
                     FIND FIRST labeltexte NO-LOCK 
-                        WHERE labeltexte.company     = oJsonIdent:GetCharacter('company')
-                        AND   labeltexte.field_name  = hBuffer::_Field-Name
-                        AND   labeltexte.language_id = oJsonIdent:GetInteger('language_id') NO-ERROR.
-                END.
-
-                IF AVAILABLE labeltexte THEN 
-                DO:
-                    tFileDict.cLabel = labeltexte.sidelabel.
-                END.
-                ELSE 
-                DO:
-                    tFileDict.cLabel = (IF hBuffer::_Label <> ? THEN hBuffer::_Label ELSE hBuffer::_Field-Name). 
+                        WHERE labeltexte.company     = ccompany
+                        AND   labeltexte.user_name   = cuser_name
+                        AND   labeltexte.table_name  = cFileName
+                        AND   labeltexte.field_name  = cFieldName
+                        AND   labeltexte.language_id = iLanguage_id
+                        AND   labeltexte.program     = '' NO-ERROR.
+                    IF AVAILABLE labeltexte THEN 
+                    DO:
+                        rLabelTexte = RECID(labeltexte).
+                        LEAVE.
+                    END.
+                    
+                    FIND FIRST blabeltexte NO-LOCK 
+                        WHERE blabeltexte.company     = ccompany
+                        AND   blabeltexte.user_name   = cuser_name
+                        AND   blabeltexte.field_name  = cFieldName
+                        AND   blabeltexte.language_id = iLanguage_id
+                        AND   blabeltexte.program     = '' NO-ERROR.
+                    IF AVAILABLE blabeltexte THEN 
+                    DO:
+                        rLabelTexte = RECID(blabeltexte).
+                        LEAVE.
+                    END.
+                    LEAVE.
                 END.
+                
+                FIND labeltexte NO-LOCK 
+                    WHERE RECID(labeltexte) = rLabelTexte.
+                tFileDict.cLabel = labeltexte.headlabel.
 
-                IF INDEX(hBuffer::_Format, '(') = 0 THEN tFileDict.iMaxLength = LENGTH(hBuffer::_Format).
+                IF INDEX(hField:FORMAT, '(') = 0 THEN tFileDict.iMaxLength = LENGTH(hField:FORMAT).
                 ELSE 
                 DO:
-                    i1 = INDEX(hBuffer::_Format, '(') + 1.
-                    i2 = INDEX(hBuffer::_Format, ')').
-                    tFileDict.iMaxLength = INTEGER(SUBSTRING(hBuffer::_Format, i1, i2 - i1)).
+                    j1 = INDEX(hField:FORMAT, '(') + 1.
+                    j2 = INDEX(hField:FORMAT, ')').
+                    tFileDict.iMaxLength = INTEGER(SUBSTRING(hField:FORMAT, j1, j2 - j1)).
                 END.
                 
                 CASE tFileDict.cType:
@@ -285,7 +336,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                             ASSIGN 
                                 tFileDict.cType     = 'text'
                                 tFileDict.iDecimals = 0.
-                            IF hBuffer::_Extent > 0 THEN tFileDict.cType = 'textarea'. 
+                            IF hField:EXTENT > 0 THEN tFileDict.cType = 'textarea'. 
                         END.
                     WHEN 'Date' THEN 
                         DO: 
@@ -300,7 +351,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                         DO: 
                             ASSIGN 
                                 tFileDict.cType        = 'decimal'
-                                tFileDict.iDecimals    = hBuffer::_Decimals
+                                tFileDict.iDecimals    = hField:DECIMALS
                                 tFileDict.cDisplayType = 'text'
                                 tFileDict.cInputMode   = 'decimal'
                                 tFileDict.lShowSpinner = FALSE
@@ -338,7 +389,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                         END.
                 END CASE.
                 
-                cViewas = hBuffer::_View-as.
+                cViewas = hField:VIEW-AS.
                 CASE cViewas:
                     WHEN 'combo-box' THEN 
                         tFileDict.cType = 'select'.
@@ -346,15 +397,9 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                         ASSIGN  
                             tFileDict.cType = 'textarea'.
                 END CASE.
-                 
-            /*                tFileDict.cFormat = REPLACE(tFileDict.cFormat, '9', '0').*/
-            /*                tFileDict.cFormat = REPLACE(tFileDict.cFormat, '>', ''). */
-            /*                tFileDict.cFormat = REPLACE(tFileDict.cFormat, '<', ''). */
-            /*                tFileDict.cAusrichtung = 'right'.                        */
+                
             END.
-            hQuery:QUERY-CLOSE().
-            DELETE OBJECT hBuffer.
-            DELETE OBJECT hQuery.
+            DELETE OBJECT hBuffer NO-ERROR.
         END.
         
         lResult = TRUE.
@@ -369,80 +414,51 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
     ------------------------------------------------------------------------------*/
 
     METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
-        DEFINE VARIABLE oJsonResponse   AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oJsonIdent      AS JsonObject        NO-UNDO.
-        
-        DEFINE VARIABLE oJsonCompanies  AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE oJsonUsers      AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE oJsonLanguages  AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE oBody           AS String            NO-UNDO.
-        
-        DEFINE VARIABLE oJsonFileDict   AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oJsonConfig     AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oJsonArray      AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE cDefautlCharSet AS CHARACTER         NO-UNDO INIT 'UTF-8'.
-        DEFINE VARIABLE oParser         AS ObjectModelParser NO-UNDO.           
-        DEFINE VARIABLE cCorralationID  AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cContent-Type   AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE htFileDict      AS HANDLE            NO-UNDO.
-        DEFINE VARIABLE htConfig        AS HANDLE            NO-UNDO.
-        DEFINE VARIABLE lcJsonInhalt    AS LONGCHAR          NO-UNDO.
-        DEFINE VARIABLE cFileNames      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cFileName       AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ii              AS INTEGER           NO-UNDO.
-        DEFINE VARIABLE dDateTime       AS DATETIME          NO-UNDO.
-        DEFINE VARIABLE cDateTime       AS CHARACTER         NO-UNDO.
-        
-        DEFINE VARIABLE oJsonMenu       AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE oJsonData       AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE cConfig_id      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE lRetVal         AS LOGICAL           NO-UNDO INIT FALSE.
-        DEFINE VARIABLE cFunction       AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryString    AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryPairs     AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryKey       AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryValue     AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE oJsonResponse   AS JsonObject NO-UNDO.
+        DEFINE VARIABLE oJsonIdent      AS JsonObject NO-UNDO.
+        
+        DEFINE VARIABLE oJsonCompanies  AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oJsonUsers      AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oJsonLanguages  AS JsonArray  NO-UNDO.
+        DEFINE VARIABLE oBody           AS String     NO-UNDO.
+        
+        DEFINE VARIABLE cDefautlCharSet AS CHARACTER  NO-UNDO INIT 'UTF-8'.
+        DEFINE VARIABLE cCorralationID  AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cContent-Type   AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE htFileDict      AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE htConfig        AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE lcJsonInhalt    AS LONGCHAR   NO-UNDO.
+        DEFINE VARIABLE cFileNames      AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cFileName       AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE ii              AS INTEGER    NO-UNDO.
+        DEFINE VARIABLE dDateTime       AS DATETIME   NO-UNDO.
+        DEFINE VARIABLE cDateTime       AS CHARACTER  NO-UNDO.
+        
+        DEFINE VARIABLE cConfig_id      AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE lRetVal         AS LOGICAL    NO-UNDO INIT FALSE.
+        DEFINE VARIABLE cQueryString    AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cQueryPairs     AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cQueryKey       AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cQueryValue     AS CHARACTER  NO-UNDO.
         
         outilitiesHandler = NEW utilitiesHandler().
-
+        
+        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
+            
+        // oJsonIdent:WriteFile('C:\TEMP\formdesigner_GET.json', TRUE).
         
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('H_company'     , ccompany     )   NO-ERROR.
-        oJsonIdent:ADD('H_user_name'   , cuser_name   )   NO-ERROR.
-        oJsonIdent:ADD('H_display_name', cAnzeigeName )   NO-ERROR.
-        oJsonIdent:ADD('H_language_id' , iLanguage_id )   NO-ERROR.
-        oJsonIdent:ADD('H_sessionToken', cSessionToken)   NO-ERROR.
-        //
-        //  Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
-        //
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
-        
-        IF NOT oJsonIdent:HAS('company'    ) THEN oJsonIdent:ADD('company'    , oJsonIdent:GetCharacter('H_company'    )).
-        IF NOT oJsonIdent:HAS('user_name'  ) THEN oJsonIdent:ADD('user_name'  , oJsonIdent:GetCharacter('H_user_name'  )).
-        IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetInteger  ('H_language_id')).
-        
-        oJsonIdent:WriteFile('C:\TEMP\formdesigner_GET.json', TRUE).
-        
-        cFileNames = REPLACE(oJsonIdent:GetCharacter("tables"), ',', ';')  NO-ERROR.
-        cFunction  = oJsonIdent:GetCharacter('function').
-
         DO WHILE cFunction = 'init':
-            
             EMPTY TEMP-TABLE tcompanies.
             FOR EACH companies NO-LOCK WHERE companies.active:
                 CREATE  tcompanies.
@@ -485,18 +501,20 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
             lRetVal = TRUE.
             LEAVE.
         END.
-        
+
         DO WHILE cFunction = 'load': 
-            fillFileDict(
+            lRetVal = fillFileDict(
                 INPUT oJsonIdent
                 ).
 
+            cFileNames = oJsonIdent:GetCharacter('tables').
+
             EMPTY TEMP-TABLE tConfig.
             FOR EACH htmldokumente NO-LOCK 
                 WHERE htmldokumente.company     = ccompany
                 AND   htmldokumente.user_name   = cuser_name
                 AND   htmldokumente.language_id = ilanguage_id:
-                    
+
                 DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
                     cFileName = ENTRY(ii, cFileNames, ';').
 
@@ -530,18 +548,32 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
         
             htFileDict  = TEMP-TABLE tFileDict :DEFAULT-BUFFER-HANDLE.
             htConfig    = TEMP-TABLE tConfig   :DEFAULT-BUFFER-HANDLE.
-            hdsResponse = DATASET    dsResponse:HANDLE.
+            hdsResponse = DATASET dsResponse:HANDLE.
                  
             oJsonResponse = NEW JsonObject().
             oJsonResponse:READ(hdsResponse).
             oJsonResponse:WRITE(lcJsonInhalt, FALSE).
-        
+
             lRetVal = TRUE.
             LEAVE.
         END.
         
+        DO WHILE cFunction = 'loaddetail':
+            cConfig_id = oJsonIdent:GetCharacter('config_id').
+            FIND FIRST htmldokumente NO-LOCK 
+                WHERE htmldokumente.company     = ccompany
+                AND   htmldokumente.user_name   = cuser_name
+                AND   htmldokumente.language_id = ilanguage_id
+                AND   htmldokumente.form_id     = cConfig_id NO-ERROR.
+                
+            lcJsonInhalt    = htmldokumente.htmltext.
+            lRetVal         = TRUE.
+            LEAVE.
+        END.
+        
         DO WHILE cFunction = 'delete':
             lRetVal = FALSE.
+            cConfig_id = oJsonIdent:GetCharacter('config_id').
             REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
                 FIND FIRST htmldokumente 
                     WHERE htmldokumente.company     = ccompany
@@ -556,25 +588,13 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
             
             oJsonResponse   = NEW JsonObject().
             oJsonResponse:ADD("success", lRetVal).
-            IF lRetVal THEN oJsonResponse:ADD('message', 'Konfiguration erfolreich gelscht').
+            IF lRetVal THEN oJsonResponse:ADD('message', 'Konfiguration erfolreich gelöscht').
             ELSE            oJsonResponse:ADD('error'  , 'Konfiguration nicht gefunden'     ).
             oJsonResponse:write(lcJsonInhalt, FALSE).
                             
             LEAVE.
         END.
         
-        DO WHILE cFunction = 'loaddetail':
-            FIND FIRST htmldokumente NO-LOCK 
-                WHERE htmldokumente.company     = ccompany
-                AND   htmldokumente.user_name   = cuser_name
-                AND   htmldokumente.language_id = ilanguage_id
-                AND   htmldokumente.form_id     = cConfig_id NO-ERROR.
-                
-            lcJsonInhalt    = htmldokumente.htmltext.
-            lRetVal         = TRUE.
-            LEAVE.
-        END.
-        
         IF NOT lRetVal THEN 
         DO:
             oJsonResponse = NEW JsonObject().
@@ -622,38 +642,39 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
 
     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 oJsonMessage AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oFelder      AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE oFeld        AS JsonObject        NO-UNDO.
-        
-        DEFINE VARIABLE lRetVal      AS LOGICAL           NO-UNDO.
-        DEFINE VARIABLE lcJsonString AS LONGCHAR          NO-UNDO.
-        DEFINE VARIABLE cJSON        AS LONGCHAR          NO-UNDO.
-        DEFINE VARIABLE i1           AS INTEGER           NO-UNDO.
-        DEFINE VARIABLE ii           AS INTEGER           NO-UNDO.
-        DEFINE VARIABLE oJsonConfig  AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oJsonFields  AS JsonArray         NO-UNDO.
-        
-        DEFINE VARIABLE ctables      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ccompany     AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cuser_name   AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ilanguage_id AS INTEGER           NO-UNDO.
-        DEFINE VARIABLE cformtitle   AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cformid      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE lcJsonConfig AS LONGCHAR          NO-UNDO.
-        
-        DEFINE VARIABLE htTable      AS HANDLE            NO-UNDO.
-        DEFINE VARIABLE hBuffer      AS HANDLE            NO-UNDO.
-        DEFINE VARIABLE hQuery       AS HANDLE            NO-UNDO.
-        DEFINE VARIABLE cFunction    AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cFieldNames  AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cFieldName   AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cFileName    AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cBoxfields   AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE lBoxField    AS LOGICAL           NO-UNDO.
+        DEFINE VARIABLE oResponse       AS IHttpResponse     NO-UNDO.
+        DEFINE VARIABLE oWriter         AS WebResponseWriter NO-UNDO.
+        DEFINE VARIABLE oJsonData       AS JsonObject        NO-UNDO.
+        DEFINE VARIABLE oJsonMessage    AS JsonObject        NO-UNDO.
+        DEFINE VARIABLE oFelder         AS JsonArray         NO-UNDO.
+        DEFINE VARIABLE oFeld           AS JsonObject        NO-UNDO.
+        
+        DEFINE VARIABLE lRetVal         AS LOGICAL           NO-UNDO.
+        DEFINE VARIABLE lcJsonString    AS LONGCHAR          NO-UNDO.
+        DEFINE VARIABLE cJSON           AS LONGCHAR          NO-UNDO.
+        DEFINE VARIABLE i1              AS INTEGER           NO-UNDO.
+        DEFINE VARIABLE ii              AS INTEGER           NO-UNDO.
+        DEFINE VARIABLE oJsonConfig     AS JsonObject        NO-UNDO.
+        DEFINE VARIABLE oJsonFields     AS JsonArray         NO-UNDO.
+        
+        DEFINE VARIABLE ctables         AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE ccompany        AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cuser_name      AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE ilanguage_id    AS INTEGER           NO-UNDO.
+        DEFINE VARIABLE cformtitle      AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cformid         AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE lcJsonConfig    AS LONGCHAR          NO-UNDO.
+        DEFINE VARIABLE iItemsPerPage   AS INTEGER           NO-UNDO.
+        DEFINE VARIABLE ctableMaxHeight AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE htTable         AS HANDLE            NO-UNDO.
+        DEFINE VARIABLE hBuffer         AS HANDLE            NO-UNDO.
+        DEFINE VARIABLE hQuery          AS HANDLE            NO-UNDO.
+        DEFINE VARIABLE cFieldNames     AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cFieldName      AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cFileName       AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cField          AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cBoxfields      AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE lBoxField       AS LOGICAL           NO-UNDO.
         
         lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
         // MESSAGE 'getJsonFromRequest    = ' lRetVal.
@@ -662,7 +683,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
         // MESSAGE 'Funktion = ' cFunction.
         
         oJsonData:WRITE(lcJsonString, FALSE).
-        MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
+        // MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
         
         ccompany     =         oJsonData:GetCharacter('company' ).
         cuser_name   =         oJsonData:GetCharacter('user_name' ).
@@ -670,22 +691,24 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
         ctables      =         oJsonData:GetCharacter('tables').
         // MESSAGE ccompany '-' cuser_name '-' ilanguage_id '-' ctables.
         
-        oJsonConfig = NEW JsonObject().
-        oJsonConfig = oJsonData:GetJsonObject ('config').
-        cformtitle  = oJsonConfig:GetCharacter('formTitle').
-        cformid     = oJsonConfig:GetCharacter('formId').
-        oJsonFields = NEW JsonArray().
-        oJsonFields = oJsonConfig:GetJsonArray('selectedFields').
+        oJsonConfig     = NEW JsonObject().
+        oJsonConfig     = oJsonData:GetJsonObject ('config').
+        cformtitle      = oJsonConfig:GetCharacter('formTitle').
+        cformid         = oJsonConfig:GetCharacter('formId').
+        iItemsPerPage   = oJsonConfig:Getinteger  ('itemsPerPage').
+        ctableMaxHeight = oJsonConfig:GetCharacter('tableMaxHeight').
+        oJsonFields     = NEW JsonArray().
+        oJsonFields     = oJsonConfig:GetJsonArray('selectedFields').
         oJsonConfig:WRITE(lcJsonConfig, FALSE).
         
-        oJsonConfig:WriteFile('C:\TEMP\FormDesignerOutput.json', TRUE).
+        // oJsonConfig:WriteFile('C:\TEMP\FormDesignerConfig.json', TRUE).
         
         createTemptable (
             INPUT  oJsonFields,
             OUTPUT htTable    ,
             OUTPUT hBuffer    ).
         
-        hBuffer:WRITE-JSON ('file', 'C:\TEMP\FeldAttributeAusFormdesigner.csv', TRUE).
+        // hBuffer:WRITE-JSON ('file', 'C:\TEMP\FeldAttributeAusFormdesigner.csv', TRUE).
 
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
             FIND htmldokumente
@@ -704,8 +727,10 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                     htmldokumente.created_at  = NOW.
             END.
             ASSIGN 
-                htmldokumente.tables    = ctables
-                htmldokumente.formtitle = cformtitle.
+                htmldokumente.tables         = ctables
+                htmldokumente.formtitle      = cformtitle
+                htmldokumente.itemsPerPage   = iItemsPerPage
+                htmldokumente.tableMaxHeight = ctableMaxHeight.
             htmltext = STRING(lcJsonConfig).
             // MESSAGE 'htmldokument gschrieben mit config ' STRING(lcJsonConfig).
             RELEASE htmldokumente.
@@ -717,16 +742,17 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
         hQuery:SET-BUFFERS(hBuffer).
         hQuery:QUERY-PREPARE ('FOR EACH ttTemp NO-LOCK').
         hQuery:QUERY-OPEN ().
-        hQUery:GET-FIRST ().
+        hQuery:GET-FIRST ().
         DO WHILE NOT hQuery:QUERY-OFF-END TRANSACTION:
             cFieldName = hBuffer:BUFFER-FIELD('fieldName'):BUFFER-VALUE.
             cFileName  = ENTRY(1, cFieldName, '_').
+            cField     = REPLACE(cFieldName, cFileName + '_', '').
             FIND FIRST labeltexte
                 WHERE labeltexte.company     = ccompany
                 AND   labeltexte.user_name   = cuser_name
-                AND   labeltexte.program     = cformid
+                AND   labeltexte.program     = ''
                 AND   labeltexte.table_name  = cFileName
-                AND   labeltexte.field_name  = cFieldName
+                AND   labeltexte.field_name  = cField
                 AND   labeltexte.language_id = ilanguage_id NO-ERROR.
             IF NOT AVAILABLE labeltexte THEN 
             DO:
@@ -734,59 +760,22 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                 ASSIGN
                     labeltexte.company     = ccompany
                     labeltexte.user_name   = cuser_name
-                    labeltexte.program     = cformid
+                    labeltexte.program     = ''
                     labeltexte.table_name  = cFileName
-                    labeltexte.field_name  = cFieldName
-                    labeltexte.language_id = ilanguage_id.
+                    labeltexte.field_name  = cField
+                    labeltexte.language_id = ilanguage_id
+                    labeltexte.created_at  = NOW.
+            END.
+            ELSE 
+            DO:
+                ASSIGN                             
+                    labeltexte.updated_at = NOW.
             END.
             ASSIGN 
                 labeltexte.sidelabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
                 labeltexte.headlabel = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
                 labeltexte.alignment = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
                 
-            FIND FIRST labeltexte
-                WHERE labeltexte.company     = ccompany
-                AND   labeltexte.user_name   = ''
-                AND   labeltexte.program     = ''
-                AND   labeltexte.table_name  = cFileName
-                AND   labeltexte.field_name  = cFieldName
-                AND   labeltexte.language_id = ilanguage_id NO-ERROR.
-            IF NOT AVAILABLE labeltexte THEN 
-            DO:
-                CREATE  labeltexte.
-                ASSIGN
-                    labeltexte.company     = ccompany
-                    labeltexte.user_name   = ''
-                    labeltexte.program     = ''
-                    labeltexte.table_name  = cFileName
-                    labeltexte.field_name  = cFieldName
-                    labeltexte.language_id = ilanguage_id
-                    labeltexte.sidelabel   = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
-                    labeltexte.headlabel   = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
-                    labeltexte.alignment   = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
-            END.
-            
-            FIND FIRST labeltexte
-                WHERE labeltexte.company     = ccompany
-                AND   labeltexte.user_name   = ''
-                AND   labeltexte.program     = ''
-                AND   labeltexte.table_name  = ''
-                AND   labeltexte.field_name  = cFieldName
-                AND   labeltexte.language_id = ilanguage_id NO-ERROR.
-            IF NOT AVAILABLE labeltexte THEN 
-            DO:
-                CREATE  labeltexte.
-                ASSIGN
-                    labeltexte.company     = ccompany
-                    labeltexte.user_name   = ''
-                    labeltexte.program     = ''
-                    labeltexte.table_name  = ''
-                    labeltexte.field_name  = cFieldName
-                    labeltexte.language_id = ilanguage_id
-                    labeltexte.sidelabel   = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
-                    labeltexte.headlabel   = hBuffer:BUFFER-FIELD('label'):BUFFER-VALUE
-                    labeltexte.alignment   = hBuffer:BUFFER-FIELD('align'):BUFFER-VALUE.
-            END.
             RELEASE labeltexte.
             
             lBoxField = (IF hBuffer:BUFFER-FIELD('type'):BUFFER-VALUE = 'select' THEN TRUE ELSE FALSE).
@@ -806,7 +795,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                 FIND FIRST selectboxfields
                     WHERE selectboxfields.company   = ccompany
                     AND   selectboxfields.program   = cFormId
-                    AND   selectboxfields.user_name = ''
+                    AND   selectboxfields.user_name = cuser_name
                     AND   selectboxfield.table_Name = '' NO-ERROR.
                 IF NOT AVAILABLE selectboxfields THEN 
                 DO:
@@ -814,7 +803,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
                     ASSIGN
                         selectboxfields.company   = ccompany
                         selectboxfields.program   = cFormId
-                        selectboxfields.user_name = ''
+                        selectboxfields.user_name = cuser_name
                         selectboxfield.table_Name = ''.
                 END.
                 ASSIGN 
@@ -835,7 +824,7 @@ CLASS admin.formdesignerImpl INHERITS WebHandler:
         oJsonMessage:ADD('id', cformid).
         oJsonMessage:ADD('message', 'erfolgreich gespeichert').
         oJsonMessage:WRITE(lcJsonString, TRUE).
-        // MESSAGE 'Rckmeldung ' STRING(lcJsonString).
+        // MESSAGE 'Rueckmeldung ' STRING(lcJsonString).
             
         oWriter:Open().
         oWriter:Write(lcJsonString).

+ 34 - 45
admin/formprogramImpl.cls

@@ -30,6 +30,8 @@ CLASS admin.formprogramImpl INHERITS WebHandler:
     DEFINE VARIABLE cAnzeigeName      AS CHARACTER        NO-UNDO.
     DEFINE VARIABLE ilanguage_id      AS INTEGER          NO-UNDO.
     DEFINE VARIABLE cSessionToken     AS CHARACTER        NO-UNDO.
+    DEFINE VARIABLE cFunction         AS CHARACTER        NO-UNDO.
+    DEFINE VARIABLE cForm_Id          AS CHARACTER        NO-UNDO.
     
     DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
     DEFINE VARIABLE oSelectboxHandler AS selectboxHandler NO-UNDO.
@@ -92,22 +94,15 @@ CLASS admin.formprogramImpl INHERITS WebHandler:
         DEFINE VARIABLE oJsonSelectBoxes    AS JsonObject        NO-UNDO.
         DEFINE VARIABLE oJsonRecords        AS JsonArray         NO-UNDO.
         
-        DEFINE VARIABLE ccompany            AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cuser_name          AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ilanguage_id        AS INTEGER           NO-UNDO.
-        DEFINE VARIABLE cFunction           AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cForm_Id            AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE lRetVal             AS LOGICAL           NO-UNDO.
         DEFINE VARIABLE httBuffer           AS HANDLE            NO-UNDO.
         DEFINE VARIABLE cFiles              AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cFile               AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cFileName           AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cFieldName          AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE xuser_name          AS CHARACTER         NO-UNDO.
         
         DEFINE VARIABLE cQueryString        AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryPairs         AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryKey           AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryValue         AS CHARACTER         NO-UNDO.
         
         DEFINE BUFFER bwebmenu FOR webmenu.
         
@@ -116,31 +111,20 @@ CLASS admin.formprogramImpl INHERITS WebHandler:
         
         cFunction = poRequest:URI:GetQueryValue("function") NO-ERROR.
         
+        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
 
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('company'     , ccompany     ).
-        oJsonIdent:ADD('user_name'   , cuser_name   ).
-        oJsonIdent:ADD('language_id' , iLanguage_id ).
-        oJsonIdent:ADD('sessionToken', cSessionToken).
-        oJsonIdent:ADD('function'    , cFunction    ).
-        
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
-        cFunction = oJsonIdent:GetCharacter('function').
+        oJsonIdent:WriteFile('C:\TEMP\formprogram_GET.json', TRUE).
         
         // MESSAGE 'Inhalt von Header und Query ' STRING(oJsonIdent:GetJsonText()).
         
@@ -191,20 +175,28 @@ CLASS admin.formprogramImpl INHERITS WebHandler:
         END.
 
         DO WHILE cFunction = 'loadconfig':
-            FIND htmldokumente NO-LOCK 
-                WHERE htmldokumente.company     =         oJsonIdent:GetCharacter('company')
-                AND   htmldokumente.user_name   =         oJsonIdent:GetCharacter('user_name')
-                AND   htmldokumente.form_id     =         oJsonIdent:GetCharacter('form_id')
-                AND   htmldokumente.language_id = INTEGER(oJsonIdent:GetCharacter('language_id')) NO-ERROR.
-            IF NOT AVAILABLE htmldokumente THEN LEAVE.
-MESSAGE 'gefunden'.
+            cForm_Id = oJsonIdent:GetCharacter('form_id').
+            
+            xuser_name = cuser_name.
+            DO WHILE TRUE:
+                FIND htmldokumente NO-LOCK 
+                    WHERE htmldokumente.company     = ccompany
+                    AND   htmldokumente.user_name   = xuser_name
+                    AND   htmldokumente.form_id     = cForm_Id
+                    AND   htmldokumente.language_id = iLanguage_Id NO-ERROR.
+                IF AVAILABLE htmldokumente THEN LEAVE.
+                IF xuser_name = 'admin' THEN LEAVE.
+                xuser_name = 'admin'.
+            END.
+            MESSAGE 'htmldokument mit user' xuser_name 'gefunden'.
             cFiles = htmldokumente.tables.
 
             oJsonSelectBoxes = NEW JsonObject().
             FOR EACH selectboxfields NO-LOCK
-                WHERE selectboxfields.company = htmldokumente.company
-                AND   selectboxfields.program = htmldokumente.form_id:
-                MESSAGE selectboxfields.boxfields.
+                WHERE selectboxfields.company   = htmldokumente.company
+                AND   selectboxfields.program   = htmldokumente.form_id
+                AND   selectboxfields.user_name = xuser_name:
+
                 DO ii = 1 TO NUM-ENTRIES(selectboxfields.boxfields, ';'):
                     cFieldName = ENTRY(ii, selectboxfields.boxfields, ';').
                     cFileName  = ENTRY(1, cFieldName, '_').
@@ -226,13 +218,9 @@ MESSAGE 'gefunden'.
                         oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
                         NEXT.
                     END.
-                    
-                /*                    httBuffer = oSelectboxHandler:getSelboxLaguages(). */
-                /*                    oJsonCompanies = NEW JsonArray().                  */
-                /*                    httBuffer:WRITE-JSON ('JsonArray', oJsonLanguages).*/
                 END.
             END.
-            
+
             DO ii = 1 TO NUM-ENTRIES(cFiles, ';'):
                 httBuffer = outilitiesHandler:getData(
                     INPUT  oJsonIdent            ,
@@ -265,19 +253,20 @@ MESSAGE 'gefunden'.
         END.
         
         DO WHILE cFunction = "getformconfig":
+            MESSAGE 'getformconfig'.
             FIND htmldokumente NO-LOCK 
                 WHERE htmldokumente.company     = oJsonIdent:GetCharacter('company')
-                AND   htmldokumente.user_name   = oJsonIdent:GetCharacter('user')
+                AND   htmldokumente.user_name   = oJsonIdent:GetCharacter('user_name')
                 AND   htmldokumente.form_id     = oJsonIdent:GetCharacter('form_id')
-                AND   htmldokumente.language_id = INTEGER(oJsonIdent:GetCharacter('language_id')) NO-ERROR.
+                AND   htmldokumente.language_id = iLanguage_id NO-ERROR.
             IF NOT AVAILABLE htmldokumente THEN LEAVE.
             
             oJsonResponse = NEW JsonObject().
             oJsonResponse:ADD('formTitle'       , htmldokumente.formtitle) NO-ERROR.
             oJsonResponse:ADD('formId'          , htmldokumente.form_id  ) NO-ERROR.
-            oJsonResponse:ADD('targetCompany'   , oJsonIdent:GetCharacter('company')   ) NO-ERROR.
-            oJsonResponse:ADD('targetUser'      , oJsonIdent:GetCharacter('user')       ) NO-ERROR.
-            oJsonResponse:ADD('targetLanguageId', oJsonIdent:GetCharacter('language_id')) NO-ERROR.
+            oJsonResponse:ADD('targetCompany'   , oJsonIdent:GetCharacter('company')    ) NO-ERROR.
+            oJsonResponse:ADD('targetUser'      , oJsonIdent:GetCharacter('user_name')  ) NO-ERROR.
+            oJsonResponse:ADD('targetLanguageId', oJsonIdent:GetInteger  ('language_id')) NO-ERROR.
              
             oParser   = NEW ObjectModelParser().
             oJsonData = CAST(oParser:Parse(htmldokumente.htmltext), JsonObject).

+ 34 - 17
admin/menudesignerImpl.cls

@@ -30,6 +30,7 @@ CLASS admin.menudesignerImpl INHERITS WebHandler:
     DEFINE VARIABLE cAnzeigeName      AS CHARACTER        NO-UNDO.
     DEFINE VARIABLE ilanguage_id      AS INTEGER          NO-UNDO.
     DEFINE VARIABLE cSessionToken     AS CHARACTER        NO-UNDO.
+    DEFINE VARIABLE cFunction         AS CHARACTER        NO-UNDO.
     
     DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
     
@@ -129,34 +130,34 @@ CLASS admin.menudesignerImpl INHERITS WebHandler:
         DEFINE VARIABLE oJsonLanguages  AS JsonArray         NO-UNDO.
         DEFINE VARIABLE oJsonMenu       AS JsonArray         NO-UNDO.
         DEFINE VARIABLE oJsonData       AS JsonObject        NO-UNDO.
+        DEFINE VARIABLE oJsonIdent      AS JsonObject        NO-UNDO.
         
-        DEFINE VARIABLE ccompany        AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cuser_name      AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cnewuser_name   AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE rtlevel1        AS RECID             NO-UNDO.
         DEFINE VARIABLE rtlevel2        AS RECID             NO-UNDO.
         DEFINE VARIABLE ilanguage_id    AS INTEGER           NO-UNDO.
         DEFINE VARIABLE cFunction       AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE lRetVal         AS LOGICAL           NO-UNDO.
+        DEFINE VARIABLE cQueryString    AS CHARACTER         NO-UNDO.
         
         DEFINE BUFFER bwebmenu FOR webmenu.
         
         outilitiesHandler = NEW utilitiesHandler().
         
+        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
-        
-        cFunction    =         poRequest:URI:GetQueryValue("function")      NO-ERROR.
-        ccompany     =         poRequest:URI:GetQueryValue("company")       NO-ERROR.
-        cuser_name   =         poRequest:URI:GetQueryValue("user_name")     NO-ERROR.
-        ilanguage_id = INTEGER(poRequest:URI:GetQueryValue("language_id"))  NO-ERROR.
-        MESSAGE 'GET company = ' ccompany 'user_name = ' cuser_name 'Sprache = ' ilanguage_id 'Function = ' cFunction 'Session-Token = ' cSessiontoken.
+
+        oJsonIdent:WriteFile('C:\TEMP\menudesigner_GET.json', TRUE).
         
         lRetVal = FALSE.
         DO WHILE cFunction = 'init':
@@ -360,7 +361,8 @@ CLASS admin.menudesignerImpl INHERITS WebHandler:
         DEFINE VARIABLE oJsonResponse AS JsonObject        NO-UNDO.
         DEFINE VARIABLE oFelder       AS JsonArray         NO-UNDO.
         DEFINE VARIABLE oFeld         AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oParser       AS ObjectModelParser NO-UNDO.           
+        DEFINE VARIABLE oParser       AS ObjectModelParser NO-UNDO.
+        DEFINE VARIABLE oJsonIdent    AS JsonObject        NO-UNDO.           
         
         DEFINE VARIABLE lRetVal       AS LOGICAL           NO-UNDO.
         DEFINE VARIABLE lcJsonString  AS LONGCHAR          NO-UNDO.
@@ -368,21 +370,36 @@ CLASS admin.menudesignerImpl INHERITS WebHandler:
         DEFINE VARIABLE i1            AS INTEGER           NO-UNDO.
         
         DEFINE VARIABLE cTabellen     AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ccompany      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cuser_name    AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ilanguage_id  AS INTEGER           NO-UNDO.
         DEFINE VARIABLE cMaskenId     AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cQueryString  AS CHARACTER         NO-UNDO.
         
         lRetVal = WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
 
         oJsonData:WRITE(lcJsonString, FALSE).
-        MESSAGE 'ganzer Eingangsstring = ' STRING(lcJsonString).
+        MESSAGE 'ganzer Eingangsstring POST = ' STRING(lcJsonString).
             
+        outilitiesHandler = NEW utilitiesHandler().
+        
+        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING")) NO-ERROR.
+        outilitiesHandler:getHeaderData(
+            INPUT  poRequest    ,
+            INPUT  cQueryString ,
+            OUTPUT ccompany     ,
+            OUTPUT cuser_name   ,
+            OUTPUT cAnzeigeName ,
+            OUTPUT ilanguage_id ,
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
+            ).
+
+        oJsonIdent:WriteFile('C:\TEMP\menudesigner_POST.json', TRUE).
+        
         ccompany     = oJsonData:GetCharacter('company' ).
         cuser_name   = oJsonData:GetCharacter('user_name' ).
         ilanguage_id = INTEGER(oJsonData:GetCharacter('language_id')).
-
-        //  Aufbereiten Json-Struktur für READ-JSON in DATASET 
+MESSAGE 'daten aus jsondata' ccompany cuser_name ilanguage_id.
+        //  Aufbereiten Json-Struktur für READ-JSON in DATASET 
         lcJsonString = oJsonData:GetJsonText('menuItems').
         lcJsonString = CHR(123)     /*  {   */
             + ' "menuItem": '
@@ -499,7 +516,7 @@ CLASS admin.menudesignerImpl INHERITS WebHandler:
             oJsonMessage:ADD('message', 'Fehler beim erstellen der Menu-Struktur').
             oJsonMessage:WRITE(lcJsonString, FALSE).
         END.
-        MESSAGE 'Rückmeldung ' STRING(lcJsonString).
+        MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
                         
         oWriter:Open().
         oWriter:Write(lcJsonString).

+ 36 - 55
admin/programgeneratorImpl.cls

@@ -23,6 +23,7 @@ USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
 USING utilities.utilitiesHandler FROM PROPATH.
 USING utilities.selectboxHandler FROM PROPATH.
 USING OpenEdge.Web.WebHandler FROM PROPATH.
+USING System.Windows.Forms.HtmlDocument FROM ASSEMBLY.
 
 CLASS admin.programgeneratorImpl INHERITS WebHandler: 
 
@@ -52,59 +53,41 @@ CLASS admin.programgeneratorImpl INHERITS WebHandler:
         
         DEFINE VARIABLE oJsonResponse   AS JsonObject        NO-UNDO.
         DEFINE VARIABLE oJsonIdent      AS JsonObject        NO-UNDO.
+        DEFINE VARIABLE oJsonData       AS JsonObject        NO-UNDO.
         
-        DEFINE VARIABLE ccompany        AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cuser_name      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE ilanguage_id    AS INTEGER           NO-UNDO.
         DEFINE VARIABLE cFunction       AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cForm_Id        AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cProgram        AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cProgUser       AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE lRetVal         AS LOGICAL           NO-UNDO.
         DEFINE VARIABLE ii              AS INTEGER           NO-UNDO.
         DEFINE VARIABLE i1              AS INTEGER           NO-UNDO.
         DEFINE VARIABLE cQueryString    AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryPairs     AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryKey       AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cQueryValue     AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cProgUser       AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE lcProgramCode   AS LONGCHAR          NO-UNDO.
+        DEFINE VARIABLE cMaxHeight      AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE iItemsPage      AS INTEGER           NO-UNDO.
         
         outilitiesHandler = NEW utilitiesHandler().
-        
-        cForm_Id = poRequest:URI:GetQueryValue("progname") NO-ERROR.
-        
+
+        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
+
+        // oJsonIdent:WriteFile('C:\TEMP\programgenerator_GET.json', TRUE).
         
-        oJsonIdent = NEW JsonObject().
-        oJsonIdent:ADD('company'     , ccompany     ).
-        oJsonIdent:ADD('user_name'   , cuser_name   ).
-        oJsonIdent:ADD('language_id' , iLanguage_id ).
-        oJsonIdent:ADD('sessionToken', cSessionToken).
-        
-        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
-        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
-            cQueryPairs = ENTRY(ii, cQueryString, '&').
-            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
-            cQueryValue = ENTRY(2 , cQueryPairs , '=').
-            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
-            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
-        END.
-        
-        // MESSAGE 'oJsonIdent = ' STRING(oJsonIdent:write(lcJsonInhalt)).
-        
-        cFunction = oJsonIdent:GetCharacter('function') NO-ERROR.
-        cProgram  = oJsonIdent:GetCharacter('program_name') NO-ERROR.
+        cProgram  = oJsonIdent:GetCharacter('program_name').
         
         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
@@ -120,17 +103,23 @@ CLASS admin.programgeneratorImpl INHERITS WebHandler:
             END.
             MESSAGE 'gefunden mit user ' cproguser.
             COPY-LOB htmldokumente.htmlprogram TO lcProgramCode.
-            /*            lcProgramCode = REPLACE(lcProgramCode, '"'    , '\"').*/
-            /*            lcProgramCode = REPLACE(lcProgramCode, CHR(13), '\r').*/
-            /*            lcProgramCode = REPLACE(lcProgramCode, CHR(10), '\n').*/
-            /*            lcProgramCode = REPLACE(lcProgramCode, CHR(09), '\t').*/
+
+            cMaxHeight = '250px'.
+            iItemsPage = 50.
+            oParser   = NEW ObjectModelParser().
+            oJsonData = CAST(oParser:Parse(htmldokumente.htmltext), JsonObject) NO-ERROR.
+            IF oJsonData:HAS('tableMaxHeight') THEN DO:
+                cMaxHeight = oJsonData:GetCharacter('tableMaxHeight').
+            END.
+            IF oJsonData:HAS('itemsPerPage') THEN
+            DO:
+                iItemsPage = oJsonData:GetInteger('itemsPerPage').
+            END.
             
             lRetVal = TRUE.
             LEAVE.
         END.
         
-        // MESSAGE 'oJsonIdent = ' STRING(oJsonIdent:GetJsonText()).
-
         oJsonResponse = NEW JsonObject().
         oJsonResponse:ADD('program_name', cProgram).
         oJsonResponse:ADD('form_id'     , cProgram).
@@ -199,6 +188,7 @@ CLASS admin.programgeneratorImpl INHERITS WebHandler:
         DEFINE VARIABLE cFormId           AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cFunction         AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cTargetUser       AS CHARACTER         NO-UNDO.
+        DEFINE VARIABLE cQueryString      AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE iTargetLanguageId AS INTEGER           NO-UNDO.
         DEFINE VARIABLE cTargetCompany    AS CHARACTER         NO-UNDO.
         DEFINE VARIABLE cNames            AS CHARACTER         NO-UNDO EXTENT.
@@ -225,24 +215,15 @@ CLASS admin.programgeneratorImpl INHERITS WebHandler:
             oJsonData:Remove('program_code_base64').
         END.
         
-            
         outilitiesHandler = NEW utilitiesHandler().
         
-        outilitiesHandler:getHeaderData(
-            INPUT  poRequest    ,
-            OUTPUT ccompany     ,
-            OUTPUT cuser_name   ,
-            OUTPUT cAnzeigeName ,
-            OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
-            ).
-
-        cFunction         =         oJsonData:GetCharacter('function').        
-        cProgram          =         oJsonData:GetCharacter('program_name').        
-        cFormId           =         oJsonData:GetCharacter('form_id').        
-        cTargetUser       =         oJsonData:GetCharacter('target_user').        
-        iTargetLanguageId = INTEGER(oJsonData:GetCharacter('target_language_id')).
-        cTargetCompany    =         oJsonData:GetCharacter('target_company' ).
+        // oJsonData:WriteFile('C:\TEMP\programgenerator_post.json', TRUE).
+        cfunction         =         oJsonData:GetCharacter('function'          ).
+        cProgram          =         oJsonData:GetCharacter('program_name'      ).        
+        cFormId           =         oJsonData:GetCharacter('form_id'           ).        
+        cTargetUser       =         oJsonData:GetCharacter('target_user'       ).        
+        iTargetLanguageId =         oJsonData:GetInteger  ('target_language_id').
+        cTargetCompany    =         oJsonData:GetCharacter('target_company'    ).
 
         lRetVal = FALSE.
         REPEAT TRANSACTION WHILE cFunction = 'save' ON ERROR UNDO, LEAVE:
@@ -279,7 +260,7 @@ CLASS admin.programgeneratorImpl INHERITS WebHandler:
             oJsonMessage:ADD('message', 'Fehler beim erstellen der Menu-Struktur').
             oJsonMessage:WRITE(lcJsonString, FALSE).
         END.
-        // MESSAGE 'Rückmeldung ' STRING(lcJsonString).
+        // MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
                             
         oWriter:Open().
         oWriter:Write(lcJsonString).

+ 43 - 16
admin/usersHandler.cls

@@ -346,7 +346,7 @@ CLASS admin.usersHandler FINAL:
                     REPLACE(ENTRY(i1, cKeyFields, ';'), 'users_', ''),
                     ENTRY(i1, cKeyValues, CHR(01))).
             END.
-MESSAGE cWhere.
+            MESSAGE cWhere.
             hBuffer = BUFFER busers:HANDLE.
             lRetVal = hBuffer:FIND-UNIQUE(cWhere, NO-LOCK) NO-ERROR.
             IF lRetVal THEN 
@@ -399,6 +399,7 @@ MESSAGE cWhere.
         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 lSearch      AS LOGICAL   NO-UNDO.
         DEFINE VARIABLE cValue       AS CHARACTER NO-UNDO.
         DEFINE VARIABLE lWordIndex   AS LOGICAL   NO-UNDO INIT FALSE.
         DEFINE VARIABLE cDirection   AS CHARACTER NO-UNDO.
@@ -409,7 +410,7 @@ MESSAGE cWhere.
         DEFINE VARIABLE cDBField     AS CHARACTER NO-UNDO.
         DEFINE VARIABLE cWhere       AS CHARACTER NO-UNDO.
         DEFINE VARIABLE cType        AS CHARACTER NO-UNDO.
-        
+        DEFINE VARIABLE dDate        AS DATE      NO-UNDO.
         
         DEFINE VARIABLE oRecords     AS JsonArray NO-UNDO.
         
@@ -427,19 +428,42 @@ MESSAGE cWhere.
         IF oJsonIdent:HAS('search') THEN 
         DO:
             cSearchChars = oJsonIdent:GetCharacter('search').
-            lWordIndex   = TRUE.
-            /*            iMaxRecords  = 100.*/
-            /*            cSortField   = ''. */
+            cSearchChars = REPLACE(cSearchChars, '+', ' ').
+            lSearch      = TRUE.
+            iMaxRecords  = 100.
             iStartRecord = 1.
         END.
         
         IF lWordIndex THEN
         DO:
-            DO ii = 1 TO NUM-ENTRIES(cSearchChars):
-                cValue = ENTRY(ii, cSearchChars, ' ').
+            NEXTFIELD:
+            DO ii = 1 TO NUM-ENTRIES(cSearchChars, '+'):
+                cValue = ENTRY(ii, cSearchChars, '+').
+                DO WHILE TRUE:
+                    i1 = INTEGER(cValue) NO-ERROR.
+                    IF  NOT ERROR-STATUS:ERROR AND
+                        i1 > 0                 THEN 
+                    DO:
+                        cValue = SUBSTITUTE('"&1&2&1","&2"', CHR(01), TRIM(STRING(i1,'>>>>>>>>>9'))).
+                        cWhere = cWhere + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND (')
+                            + '(LOOKUP(' + ENTRY(1, cValue, ',') + ', users.wordindex, " ") > 0 OR '
+                            + 'LOOKUP(' + ENTRY(2, cValue, ',') + ', users.wordindex, " ") > 0) '. 
+                        NEXT NEXTFIELD.
+                    END.
+                    dDate = DATE(cValue) NO-ERROR.
+                    IF  NOT ERROR-STATUS:ERROR AND
+                        dDate <> ?             THEN 
+                    DO:
+                        cValue = STRING(dDate,'99.99.9999').
+                        LEAVE.
+                    END.
+                    cValue = QUOTER(cValue).
+                    LEAVE.
+                END.
                 cWhere = cWhere + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
-                    + 'LOOKUP(' + QUOTER(cValue) + ', users.wordindex, " ") > 0 '. 
+                    + 'LOOKUP(' + cValue + ', users.wordindex, " ") > 0 '. 
             END.
+            MESSAGE 'search mit Where' cWhere.
         END.
         ELSE 
         DO: 
@@ -480,7 +504,8 @@ MESSAGE cWhere.
             cWhere  = ''.
             DO i1 = 1 TO EXTENT(cFields):
                 cField = cFields[i1].
-                IF NOT cField BEGINS 'filter_' THEN NEXT. 
+                IF NOT cField BEGINS 'filter_' THEN NEXT.
+                 
                 cFilter = oJsonIdent:GetCharacter(cField).
                 cField  = REPLACE(cField, 'filter_users_', '').
                 cType   = hBuffer:BUFFER-FIELD(cField):DATA-TYPE.
@@ -497,10 +522,10 @@ MESSAGE cWhere.
                     + (IF cWhere = '' THEN 'WHERE ' ELSE 'AND ')
                     + 'INDEX(' + cDBField + ', ' + cFilter + ') > 0 '.
             END.
-        END.
 
-        IF NOT cDirection BEGINS 'des' THEN cDirection = ''.
-        IF cSortField <> '' THEN cWhere = cWhere + 'BY ' + cSortField + ' ' + cDirection.
+            IF NOT cDirection BEGINS 'des' THEN cDirection = ''.
+            IF cSortField <> '' THEN cWhere = cWhere + 'BY ' + cSortField + ' ' + cDirection.
+        END.
          
         CREATE TEMP-TABLE ttusers.
         ttusers:ADD-FIELDS-FROM ('users', 'wordindex').
@@ -516,16 +541,18 @@ MESSAGE cWhere.
         DO ii = 1 TO httusers:NUM-FIELDS:
             httusers:BUFFER-FIELD(ii):SERIALIZE-NAME = 'users_' + httusers:BUFFER-FIELD(ii):NAME NO-ERROR.
         END.
-
+        MESSAGE '1'.
         ii = 0.
         i1 = 0.
         ttusers:EMPTY-TEMP-TABLE ().
         CREATE QUERY hQuery.
         hQuery:SET-BUFFERS (hBuffer) NO-ERROR.
         hQuery:QUERY-PREPARE (SUBSTITUTE('FOR EACH users NO-LOCK &1 ', cWhere)) NO-ERROR.
+        MESSAGE ERROR-STATUS:ERROR ERROR-STATUS:GET-MESSAGE(1).  
         hQuery:QUERY-OPEN ().
-        hQuery:GET-FIRST ().
-
+        MESSAGE hQuery:PREPARE-STRING
+            hQuery:GET-FIRST ().
+        MESSAGE '2'.
         DO WHILE NOT hQuery:QUERY-OFF-END:
             ii = ii + 1.
             IF ii < iStartRecord THEN 
@@ -543,7 +570,7 @@ MESSAGE cWhere.
         END.
         hQuery:QUERY-CLOSE ().
         DELETE OBJECT hBuffer NO-ERROR.
-        
+        MESSAGE 'Anzahl selektierter Records' ii.        
         iPageCounter = ii / iMaxRecords.
         IF (iPageCounter * iMaxRecords) < ii THEN iPageCounter = iPageCounter + 1.  
         oRecords = NEW JsonArray().

+ 33 - 39
auth/loginImpl.cls

@@ -58,7 +58,6 @@ CLASS auth.loginImpl INHERITS WebHandler:
         
         DEFINE VARIABLE cuser_name      AS CHARACTER         NO-UNDO.
         
-        MESSAGE 'start get'.
         cuser_name = poRequest:URI:GetQueryValue("user_name").
         
         ii = 0.
@@ -100,13 +99,10 @@ CLASS auth.loginImpl INHERITS WebHandler:
         oJsonArray     = CAST(oParser:Parse(lcJsonInhalt), JsonArray) NO-ERROR.
         oJsonResponse:ADD('companies', oJsonArray) NO-ERROR.
 
-        oJsonResponse:WRITE(lcJsonInhalt, TRUE).
-        MESSAGE STRING(lcJsonInhalt).        
+        oJsonResponse:WRITE(lcJsonInhalt, FALSE).
         
-        oBody = NEW STRING(oJsonResponse:GetJsonText()).
+        oBody = NEW STRING(lcJsonInhalt).
         WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
-//        oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
-
            
         oWriter = NEW WebResponseWriter(oResponse).
         oWriter:Open(). 
@@ -147,9 +143,10 @@ CLASS auth.loginImpl INHERITS WebHandler:
         DEFINE VARIABLE oWriter        AS WebResponseWriter            NO-UNDO.
         DEFINE VARIABLE oParser        AS ObjectModelParser            NO-UNDO.           
         DEFINE VARIABLE oJsonResponse  AS JsonObject                   NO-UNDO.
+        DEFINE VARIABLE oJsonSession   AS JsonObject                   NO-UNDO.
+        DEFINE VARIABLE oJsonLabels    AS JsonObject                   NO-UNDO.
         DEFINE VARIABLE oMessage       AS JsonObject                   NO-UNDO.
         DEFINE VARIABLE oJsonData      AS JsonObject                   NO-UNDO.
-        DEFINE VARIABLE oJsonButtons   AS JsonObject                   NO-UNDO.
 
         DEFINE VARIABLE lRetVal        AS LOGICAL                      NO-UNDO.
         DEFINE VARIABLE lcJsonString   AS LONGCHAR                     NO-UNDO.
@@ -258,27 +255,6 @@ CLASS auth.loginImpl INHERITS WebHandler:
             
             FIND users NO-LOCK WHERE RECID(users) = rUsers.
                         
-            /*            FIND FIRST userdata                                 */
-            /*                WHERE userdata.user_name   = cuser_name         */
-            /*                AND   userdata.company     = ccompany           */
-            /*                AND   userdata.record_type = 'LOGIN'            */
-            /*                AND   userdata.section     = 'company' NO-ERROR.*/
-            /*            IF NOT AVAILABLE userdata THEN                      */
-            /*            DO:                                                 */
-            /*                CREATE  userdata.                               */
-            /*                ASSIGN                                          */
-            /*                    userdata.user_name   = cuser_name           */
-            /*                    userdata.company     = ccompany             */
-            /*                    userdata.record_type = 'LOGIN'              */
-            /*                    userdata.section     = 'company'.           */
-            /*            END.                                                */
-            /*            ASSIGN                                              */
-            /*                userdata.cfield_1 = ccompany                    */
-            /*                userdata.cfield_2 = cuser_name                  */
-            /*                userdata.cfield_3 = csession_token.             */
-            /*                                                                */
-            /*            RELEASE userdata.                                   */
-            
             oResponse             = NEW OpenEdge.Web.WebResponse().
             oResponse:StatusCode  = INTEGER(StatusCodeEnum:OK).
             oResponse:ContentType = "application/json;charset=utf-8".
@@ -286,26 +262,44 @@ CLASS auth.loginImpl INHERITS WebHandler:
 
             FIND FIRST users NO-LOCK
                 WHERE users.user_name = cuser_name NO-ERROR.
-                
+
+            oJsonSession  = NEW JsonObject().                
+            oJsonLabels   = NEW JsonObject().                
             oJsonResponse = NEW JsonObject().
             oJsonResponse:ADD('success'      , TRUE              ).
-            oJsonResponse:ADD('session_token', csession_token    ).
-            oJsonResponse:ADD('company'      , ccompany          ).
-            oJsonResponse:ADD('user_name'    , cuser_name        ).
-            oJsonResponse:ADD('display_name' , users.display_name).
-            oJsonResponse:ADD('language_id'  , ilanguage_id      ).
+
+            oJsonSession:ADD ('session_token', csession_token    ).
+            oJsonSession:ADD ('company'      , ccompany          ).
+            oJsonSession:ADD ('user_name'    , cuser_name        ).
+            oJsonSession:ADD ('display_name' , users.display_name).
+            oJsonSession:ADD ('language_id'  , ilanguage_id      ).
+            oJsonResponse:ADD('session'      , oJsonSession      ).
             
-            oJsonButtons = NEW JsonObject().
             FOR EACH labeltext NO-LOCK 
                 WHERE labeltexte.company     = ccompany
+                AND   labeltexte.table_name  = 'table'
                 AND   labeltexte.program     = 'buttons'
                 AND   labeltexte.language_id = ilanguage_id:
-                oJsonButtons:ADD(labeltexte.field_name, labeltexte.sidelabel).
+                oJsonLabels:ADD(CAPS(labeltexte.field_name), labeltexte.sidelabel).
+            END.
+            FOR EACH labeltext NO-LOCK 
+                WHERE labeltexte.company     = ccompany
+                AND   labeltexte.table_name  = 'table'
+                AND   labeltexte.program     = 'MsgBox'
+                AND   labeltexte.language_id = ilanguage_id:
+                oJsonLabels:ADD(CAPS(labeltexte.field_name), labeltexte.sidelabel).
+            END.
+            FOR EACH labeltext NO-LOCK 
+                WHERE labeltexte.company     = ccompany
+                AND   labeltexte.table_name  = 'table'
+                AND   labeltexte.program     = 'Labels'
+                AND   labeltexte.language_id = ilanguage_id:
+                oJsonLabels:ADD(CAPS(labeltexte.field_name), labeltexte.sidelabel).
             END.
-            oJsonResponse:ADD('labels', oJsonButtons).
+            oJsonResponse:ADD('labels', oJsonLabels).
             
             oJsonResponse:WRITE(lcJsonString, FALSE).
-            MESSAGE 'Rückmeldung ' STRING(lcJsonString).
+            MESSAGE 'Rueckmeldung' STRING(lcJsonString).
 
             oWriter:Open().
             oWriter:Write(lcJsonString).
@@ -327,7 +321,7 @@ CLASS auth.loginImpl INHERITS WebHandler:
         oJsonResponse:ADD('message', lcMessage) NO-ERROR.
         
         oJsonResponse:WRITE(lcJsonString, FALSE).
-        MESSAGE 'Rückmeldung ' STRING(lcJsonString).
+        MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
 
         oWriter:Open().
         oWriter:Write(lcJsonString).

+ 30 - 24
dashboard/dashboardImpl.cls

@@ -31,6 +31,7 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
     DEFINE VARIABLE cAnzeigeName      AS CHARACTER        NO-UNDO.
     DEFINE VARIABLE ilanguage_id      AS INTEGER          NO-UNDO.
     DEFINE VARIABLE cSessionToken     AS CHARACTER        NO-UNDO.
+    DEFINE VARIABLE cUsers            AS CHARACTER        NO-UNDO INIT 'user,admin'.
     
     DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
     
@@ -90,17 +91,21 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
         DEFINE VARIABLE oWriter         AS WebResponseWriter            NO-UNDO.
         DEFINE VARIABLE oBody           AS String                       NO-UNDO.
         DEFINE VARIABLE oJsonResponse   AS JsonObject                   NO-UNDO.
+        DEFINE VARIABLE oJsonIdent      AS JsonObject                   NO-UNDO.
         DEFINE VARIABLE oJsonMenu       AS JsonObject                   NO-UNDO.
         DEFINE VARIABLE cDefautlCharSet AS CHARACTER                    NO-UNDO INIT 'UTF-8'.
-        DEFINE VARIABLE oParser         AS ObjectModelParser            NO-UNDO.           
         DEFINE VARIABLE cContent-Type   AS CHARACTER                    NO-UNDO.
         DEFINE VARIABLE cCorralationID  AS CHARACTER                    NO-UNDO.
         DEFINE VARIABLE lcJsonInhalt    AS LONGCHAR                     NO-UNDO.
         DEFINE VARIABLE lOk             AS LOGICAL                      NO-UNDO.
         DEFINE VARIABLE ii              AS INTEGER                      NO-UNDO.
         
-        DEFINE VARIABLE cFunction       AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE ccompany        AS CHARACTER                    NO-UNDO.
         DEFINE VARIABLE cuser_name      AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cAnzeigeName    AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE ilanguage_id    AS INTEGER                      NO-UNDO.
+        DEFINE VARIABLE cSessionToken   AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cFunction       AS CHARACTER                    NO-UNDO.
         DEFINE VARIABLE lAdmin          AS LOGICAL                      NO-UNDO INIT FALSE.
         DEFINE VARIABLE htwebmenu       AS HANDLE                       NO-UNDO.
         DEFINE VARIABLE oHeader         AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
@@ -108,21 +113,30 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
         DEFINE VARIABLE rtlevel1        AS RECID                        NO-UNDO.
         DEFINE VARIABLE rtlevel2        AS RECID                        NO-UNDO.
         DEFINE VARIABLE cnewuser_name   AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cQueryString    AS CHARACTER                    NO-UNDO.
         
         outilitiesHandler = NEW utilitiesHandler().
         
+        cQueryString = STRING(poRequest:GetContextValue("QUERY_STRING"))    NO-ERROR.
         outilitiesHandler:getHeaderData(
             INPUT  poRequest    ,
+            INPUT  cQueryString ,
             OUTPUT ccompany     ,
             OUTPUT cuser_name   ,
             OUTPUT cAnzeigeName ,
             OUTPUT ilanguage_id ,
-            OUTPUT cSessionToken
+            OUTPUT cSessionToken,
+            OUTPUT cFunction    ,
+            OUTPUT oJsonIdent   
             ).
-        
-        cFunction = poRequest:URI:GetQueryValue("function").
-        MESSAGE 'GET ' ccompany '-' cuser_name '-' cAnzeigeName '-' ilanguage_id '-' cFunction '-' cSessionToken.
 
+        oJsonIdent:WriteFile('C:\TEMP\dashboard_GET.json', TRUE).
+
+        cuser_name = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        cuser_name = oJsonIdent:GetCharacter('user_name') NO-ERROR.
+        IF NOT ERROR-STATUS:ERROR AND LOOKUP(cuser_name, cUsers, ',') = 0 THEN cUsers = cuser_name + ',' + cUsers.
+        
         lRetVal   = FALSE.
         DO WHILE cFunction = 'init':
             hDSmenu_structur = DATASET menu_structur:HANDLE.
@@ -131,23 +145,20 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
             EMPTY TEMP-TABLE tlevel2.
             EMPTY TEMP-TABLE tlevel3.
             
-            cnewuser_name = cuser_name.
-            lAdmin        = FALSE.
-            DO WHILE TRUE.
+            DO ii = 1 TO NUM-ENTRIES(cUsers, ','):
+                cnewuser_name = ENTRY(ii, cUsers, ',').
                 FIND FIRST webmenu NO-LOCK
                     WHERE webmenu.company   = ccompany
                     AND   webmenu.user_name = cnewuser_name NO-ERROR.
-                IF AVAILABLE webmenu    THEN LEAVE.
-                IF cnewuser_name = 'Admin' THEN LEAVE.
-            
-                cnewuser_name = 'Admin'.
+                IF AVAILABLE webmenu THEN LEAVE.
+                cnewuser_name = ''.
             END.
         
             FIND FIRST users NO-LOCK 
-                WHERE users.user_name = cnewuser_name NO-ERROR.
+                WHERE users.user_name = oJsonIdent:GetCharacter('H_user_name').
             IF NOT AVAILABLE users THEN LEAVE.
-
-            lAdmin = users.lAdmin.         
+            lAdmin = users.lAdmin.
+                     
             FOR EACH webmenu NO-LOCK
                 WHERE webmenu.company   = ccompany
                 AND   webmenu.user_name = cnewuser_name
@@ -199,11 +210,6 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
                     .
             END.
 
-            /*            htWebMenu = outilitiesHandler:getWebMenuStructure(*/
-            /*                INPUT ccompany ,                              */
-            /*                INPUT cuser_name,                             */
-            /*                INPUT ilanguage_id ) .                        */
-            
             cContent-Type   = "application/json".
             cDefautlCharSet = 'utf-8'. 
             oJsonResponse   = NEW JsonObject().
@@ -383,7 +389,7 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
             
             
             oJsonResponse:WRITE(lcJsonString, FALSE).
-            MESSAGE 'Rückmeldung ' STRING(lcJsonString).
+            MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
 
             oWriter:Open().
             oWriter:Write(lcJsonString).
@@ -403,10 +409,10 @@ CLASS dashboard.dashboardImpl INHERITS WebHandler:
         oParser       = NEW ObjectModelParser().
         oJsonResponse = NEW JsonObject().
         oJsonResponse:ADD('success', FALSE).
-        oJsonResponse:ADD('message', 'ungültiger users oder ungültiges Passwort!') NO-ERROR.
+        oJsonResponse:ADD('message', 'ung�ltiger users oder ung�ltiges Passwort!') NO-ERROR.
         oJsonResponse:WRITE(lcJsonString, TRUE).
         
-        MESSAGE 'Rückmeldung ' STRING(lcJsonString).
+        MESSAGE 'R�ckmeldung ' STRING(lcJsonString).
 
         oWriter:Open().
         oWriter:Write(lcJsonString).

+ 0 - 154
formdesigner/getTableFIeldsImpl.cls

@@ -1,154 +0,0 @@
- 
-/*------------------------------------------------------------------------
-   File        : adresse_dict
-   Purpose     : 
-   Syntax      : 
-   Description : 
-   Author(s)   : walter.riechsteiner
-   Created     : Thu Jun 26 13:56:20 CEST 2025
-   Notes       : 
- ----------------------------------------------------------------------*/
- 
-BLOCK-LEVEL ON ERROR UNDO, THROW.
-
-USING OpenEdge.Core.String FROM PROPATH.
-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.JsonObject FROM PROPATH.
-USING Progress.Json.ObjectModel.JsonArray FROM PROPATH.
-USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
-USING src.ch.adprime.gemis.ErrorMessage FROM PROPATH.
-
-CLASS getTableFieldsImpl INHERITS WebHandler: 
-
-    DEFINE TEMP-TABLE tFileDict
-        SERIALIZE-NAME 'fields'
-        FIELD cName      AS CHARACTER SERIALIZE-NAME 'fieldName'
-        FIELD cLabel     AS CHARACTER SERIALIZE-NAME 'label' 
-        FIELD cType      AS CHARACTER SERIALIZE-NAME 'type'
-        FIELD iMaxLength AS INTEGER   SERIALIZE-NAME 'maxLength'
-        FIELD cFormat    AS CHARACTER SERIALIZE-NAME 'format'
-        FIELD lReadOnly  AS LOGICAL   SERIALIZE-NAME 'editable'
-        FIELD lhidden    AS LOGICAL   SERIALIZE-NAME 'hidden'
-        .
-    /*------------------------------------------------------------------------------
-     Purpose:
-     Notes:
-    ------------------------------------------------------------------------------*/
-
-    METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
-        DEFINE VARIABLE oResponse       AS IHttpResponse     NO-UNDO.         
-        DEFINE VARIABLE oWriter         AS WebResponseWriter NO-UNDO.
-        DEFINE VARIABLE oError          AS ErrorMessage      NO-UNDO.
-        DEFINE VARIABLE oBody           AS String            NO-UNDO.
-        DEFINE VARIABLE oJsonResponse   AS JsonObject        NO-UNDO.
-        DEFINE VARIABLE oJsonArray      AS JsonArray         NO-UNDO.
-        DEFINE VARIABLE lDebug          AS LOGICAL           NO-UNDO.
-        DEFINE VARIABLE cDefautlCharSet AS CHARACTER         NO-UNDO INIT 'UTF-8'.
-           
-        DEFINE VARIABLE cCorralationID  AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cContent-Type   AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE htFileDict      AS HANDLE            NO-UNDO.
-        DEFINE VARIABLE lcJsonInhalt    AS LONGCHAR          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 cFileName       AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cFileNames      AS CHARACTER         NO-UNDO.
-        DEFINE VARIABLE cFelder         AS CHARACTER         NO-UNDO.
-        
-        cFileNames = poRequest:URI:GetQueryValue("tables").
-        MESSAGE 'File-Names = ' cFileNames.
-        
-        cFileNames = REPLACE(cFileNames, ',', ';').
-        DO ii = 1 TO NUM-ENTRIES(cFileNames, ';'):
-            cFileName = ENTRY(ii,cFileNames, ';').
-            FIND FIRST AnaDat._File NO-LOCK 
-                WHERE AnaDat._File._File-Name = cFileName NO-ERROR.
-                
-            FOR EACH AnaDat._Field OF AnaDat._File:
-                CREATE tFileDict.
-                ASSIGN
-                    tFileDict.cName      = AnaDat._File._File-Name + '.' + AnaDat._Field._Field-Name
-                    tFileDict.cType      = AnaDat._Field._Data-Type
-                    tFileDict.cFormat    = AnaDat._Field._Format
-                    tFileDict.lhidden    = FALSE
-                    tFileDict.lReadOnly  = FALSE
-                    tFileDict.iMaxLength = 10.
-
-                FIND FIRST labeltexte NO-LOCK 
-                    WHERE labeltexte.mandant  = '1000'
-                    AND   labeltexte.benutzer = ''
-                    AND   labeltexte.program  = ''
-                    AND   labeltexte.feld     = Anadat._Field._Field-Name
-                    AND   labeltexte.sprcd    = 1 NO-ERROR.
-
-                IF AVAILABLE labeltexte THEN 
-                DO:
-                    tFileDict.cLabel = labeltexte.sidelabel.
-                END.
-                ELSE 
-                DO:
-                    tFileDict.cLabel = (IF AnaDat._Field._Label <> ? THEN AnaDat._Field._Label ELSE AnaDat._Field._Field-Name). 
-                END.
-
-                IF INDEX(AnaDat._Field._Format, '(') = 0 THEN tFileDict.iMaxLength = LENGTH(AnaDat._Field._Format).
-                ELSE 
-                DO:
-                    i1 = INDEX(AnaDat._Field._Format, '(') + 1.
-                    i2 = INDEX(AnaDat._Field._Format, ')').
-                    tFileDict.iMaxLength = INTEGER(SUBSTRING(_Field._Format, i1, i2 - i1)).
-                END.
-
-            END.
-        END.
-        
-        htFileDict = TEMP-TABLE tFileDict:DEFAULT-BUFFER-HANDLE.
-                 
-        cContent-Type   = "application/json".
-        cDefautlCharSet = 'utf-8'. 
-        oJsonArray      = NEW JsonArray().
-        oJsonResponse   = NEW JsonObject().
-        MESSAGE '1'.
-        htFileDict:WRITE-JSON("JsonArray", oJsonArray).
-        htFileDict:WRITE-JSON("JsonObject", oJsonResponse).
-
-        MESSAGE "GetHandler" STRING(lcJsonInhalt).
-          
-//        oBody = NEW String(oJsonResponse:GetJsonText()).         
-        oBody = NEW String(oJsonResponse:GetJsonText()).         
-        WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse).
-//        oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
-           
-        oWriter = NEW WebResponseWriter(oResponse).
-        oWriter:Open(). 
-        oWriter:Close(). 
-            
-        RETURN 0.
-        
-        CATCH e AS Progress.Lang.Error:
-
-        END CATCH.
-
-        FINALLY:
-
-        END FINALLY.
-
-    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.
-
-END CLASS.

+ 2 - 2
utilities/selectboxHandler.cls

@@ -63,8 +63,8 @@ CLASS utilities.selectboxHandler:
         DEFINE VARIABLE httSelect     AS HANDLE    NO-UNDO.
         DEFINE VARIABLE httBuffer     AS HANDLE    NO-UNDO.
         
-        cttBufferName = SUBSTITUTE('&1_company', cFileName).
-        
+        cttBufferName = SUBSTITUTE('&1_language_id', cFileName).
+
         CREATE TEMP-TABLE httSelect.
         httSelect:ADD-NEW-FIELD('value', 'integer'   ).
         httSelect:ADD-NEW-FIELD('label', 'character' ).

+ 538 - 78
utilities/utilitiesHandler.cls

@@ -10,8 +10,7 @@
  ----------------------------------------------------------------------*/
 
 USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.
-USING OpenEdge.Net.HTTP.IHttpRequest FROM PROPATH.
-USING OpenEdge.DataAdmin.DataAccess.UserData FROM PROPATH.
+USING OpenEdge.Net.HTTP.IHttpRequest       FROM PROPATH.
 
 CLASS utilities.utilitiesHandler: 
 
@@ -52,6 +51,48 @@ END PROCEDURE.
      Notes:
     ------------------------------------------------------------------------------*/
 
+    METHOD PUBLIC VOID createErrorBox(
+        INPUT  oJsonIdent      AS JsonObject,
+        INPUT  cErrorNumber    AS CHARACTER ,
+        INPUT  cParameter      AS CHARACTER ,
+        OUTPUT oJsonMessageBox AS JsonObject
+        ):
+            
+        DEFINE VARIABLE lcMessage    AS LONGCHAR   NO-UNDO.
+        DEFINE VARIABLE iLanguage_id AS INTEGER    NO-UNDO.
+        DEFINE VARIABLE lcTitle      AS LONGCHAR   NO-UNDO.
+        
+        DEFINE VARIABLE oJsonUpdate  AS JsonObject.
+        
+        iLanguage_Id = oJsonIdent:GetInteger('language_id').
+        getErrorMessage(
+            INPUT  '2012'       ,
+            INPUT  ilanguage_id ,
+            INPUT  ''           ,
+            OUTPUT lcTitle  
+            ).
+        getErrorMessage(
+            INPUT  cErrorNumber,
+            INPUT  ilanguage_id,
+            INPUT  cParameter  ,
+            OUTPUT lcMessage
+            ).
+          
+        oJsonMessageBox = NEW JsonObject().
+        oJsonMessageBox:ADD('type' , 'info').
+        oJsonMessageBox:ADD('title', lcTitle   ).
+        oJsonMessageBox:ADD('text' , lcMessage ).
+        
+        RETURN.
+
+
+    END METHOD.
+
+    /*------------------------------------------------------------------------------
+     Purpose:
+     Notes:
+    ------------------------------------------------------------------------------*/
+
     METHOD PUBLIC HANDLE createExterneFieldName(
         INPUT ipctable  AS CHARACTER ,
         INPUT ipcfield_name     AS CHARACTER ,
@@ -146,6 +187,108 @@ END PROCEDURE.
      Notes:
     ------------------------------------------------------------------------------*/
 
+    METHOD PUBLIC VOID createInfoBox(
+        INPUT  oJsonIdent      AS JsonObject,
+        INPUT  cErrorNumber    AS CHARACTER ,
+        INPUT  cParameter      AS CHARACTER ,
+        OUTPUT oJsonMessageBox AS JsonObject
+        ):
+            
+        DEFINE VARIABLE lcMessage    AS LONGCHAR NO-UNDO.
+        DEFINE VARIABLE iLanguage_id AS INTEGER  NO-UNDO.
+        DEFINE VARIABLE lcTitle      AS LONGCHAR NO-UNDO.
+        
+        iLanguage_Id = oJsonIdent:GetInteger('language_id').
+        getErrorMessage(
+            INPUT  '2013'       ,
+            INPUT  ilanguage_id ,
+            INPUT  ''           ,
+            OUTPUT lcTitle  
+            ).
+        getErrorMessage(
+            INPUT  cErrorNumber,
+            INPUT  ilanguage_id,
+            INPUT  cParameter  ,
+            OUTPUT lcMessage
+            ).
+          
+        oJsonMessageBox = NEW JsonObject().
+        oJsonMessageBox:ADD('type' , 'info').
+        oJsonMessageBox:ADD('title', lcTitle   ).
+        oJsonMessageBox:ADD('text' , lcMessage ).
+        
+        RETURN.
+
+    END METHOD.
+
+    /*------------------------------------------------------------------------------
+     Purpose:
+     Notes:
+    ------------------------------------------------------------------------------*/
+
+    METHOD PUBLIC VOID createLockMessage(
+        INPUT  oJsonIdent      AS JsonObject,
+        INPUT  rRecid          AS RECID     ,
+        OUTPUT oJsonMessageBox AS JsonObject
+        ):
+            
+        DEFINE VARIABLE lFound       AS LOGICAL   NO-UNDO INIT FALSE.
+        DEFINE VARIABLE cFileName    AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cLockName    AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cLockUser    AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE lcMessage    AS LONGCHAR  NO-UNDO.
+        DEFINE VARIABLE iLanguage_id AS INTEGER   NO-UNDO.
+
+        DO WHILE NOT lFound:            
+            FIND FIRST Ge_MIS._Lock NO-LOCK
+                WHERE Ge_MIS._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
+            IF NOT AVAILABLE Ge_MIS._Lock THEN LEAVE.
+            
+            FIND Ge_MIS._File NO-LOCK
+                WHERE Ge_MIS._File._File-Number = Ge_MIS._Lock._Lock-Table.
+            ASSIGN  
+                cFileName = Ge_MIS._File._File-Name
+                cLockName = Ge_MIS._Lock._Lock-Name
+                cLockUser = Ge_MIS._Lock._Lock-Usr.
+            lFound = TRUE.
+            LEAVE.
+        END.
+        
+        DO WHILE NOT lFound:            
+            FIND FIRST FRAMEWORK._Lock NO-LOCK
+                WHERE FRAMEWORK._Lock._Lock-RecId = INT64(rRecid) NO-ERROR.
+            IF NOT AVAILABLE FRAMEWORK._Lock THEN LEAVE.
+            
+            FIND FRAMEWORK._File NO-LOCK
+                WHERE FRAMEWORK._File._File-Number = FRAMEWORK._Lock._Lock-Table.
+            ASSIGN  
+                cFileName = FRAMEWORK._File._File-Name
+                cLockName = FRAMEWORK._Lock._Lock-Name
+                cLockUser = FRAMEWORK._Lock._Lock-Usr.
+            lFound = TRUE.
+            LEAVE.
+        END.
+        iLanguage_id = oJsonIdent:GetInteger('language_id').
+        getErrorMessage(
+            INPUT  '2006',
+            INPUT  ilanguage_id,
+            INPUT  SUBSTITUTE('&1;&2;&3', cFileName, cLockName, cLockUser),
+            OUTPUT lcMessage
+            ).
+        
+        oJsonMessageBox = NEW JsonObject().
+        oJsonMessageBox:ADD('success', FALSE).
+        oJsonMessageBox:add('message', lcMessage).
+        
+        RETURN.
+
+    END METHOD.
+
+    /*------------------------------------------------------------------------------
+     Purpose:
+     Notes:
+    ------------------------------------------------------------------------------*/
+
     METHOD PUBLIC LOGICAL createQuery(
         INPUT   httInput     AS HANDLE,
         INPUT   httBrowserKo AS HANDLE,
@@ -162,7 +305,7 @@ END PROCEDURE.
         DEFINE VARIABLE iAnzRec    AS INTEGER   NO-UNDO.
         DEFINE VARIABLE iModulo    AS INTEGER   NO-UNDO.
 
-        ctable    = httInput::table_name.
+        ctable     = httInput::table_name.
         cSortField = httBrowserKo::sortfield.
         cDirection = ''.
 
@@ -220,6 +363,72 @@ END PROCEDURE.
      Notes:
     ------------------------------------------------------------------------------*/
 
+    METHOD PUBLIC VOID createQuestionBox(
+        INPUT  oJsonIdent      AS JsonObject,
+        INPUT  cErrorNumber    AS CHARACTER ,
+        INPUT  cParameter      AS CHARACTER ,
+        INPUT  cFields         AS CHARACTER ,
+        INPUT  cValues         AS CHARACTER ,
+        INPUT  hBuffer         AS HANDLE    ,  
+        OUTPUT oJsonMessageBox AS JsonObject
+        ):
+            
+        DEFINE VARIABLE lcMessage    AS LONGCHAR   NO-UNDO.
+        DEFINE VARIABLE iLanguage_id AS INTEGER    NO-UNDO.
+        DEFINE VARIABLE lcTitle      AS LONGCHAR   NO-UNDO.
+        DEFINE VARIABLE ii           AS INTEGER    NO-UNDO.
+        DEFINE VARIABLE cField       AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE cValue       AS CHARACTER  NO-UNDO.
+        DEFINE VARIABLE hField       AS HANDLE     NO-UNDO.
+        DEFINE VARIABLE cType        AS CHARACTER  NO-UNDO.
+        
+        DEFINE VARIABLE oJsonUpdate  AS JsonObject.
+        
+        iLanguage_Id = oJsonIdent:GetInteger('language_id').
+        getErrorMessage(
+            INPUT  '2011'       ,
+            INPUT  ilanguage_id ,
+            INPUT  ''           ,
+            OUTPUT lcTitle  
+            ).
+        getErrorMessage(
+            INPUT  cErrorNumber,
+            INPUT  ilanguage_id,
+            INPUT  cParameter  ,
+            OUTPUT lcMessage
+            ).
+          
+        oJsonMessageBox = NEW JsonObject().
+        oJsonMessageBox:ADD('type' , 'question').
+        oJsonMessageBox:ADD('title', lcTitle   ).
+        oJsonMessageBox:ADD('text' , lcMessage ).
+        
+        oJsonUpdate = NEW JsonObject().
+        DO ii = 1 TO NUM-ENTRIES(cFields, ';'):
+            cField = ENTRY(ii, cFields, ';')   .
+            cValue = ENTRY(ii, cValues, CHR(01)).
+            hField = hBuffer:BUFFER-FIELD(cField):HANDLE.
+            cType  = hField:DATA-TYPE.
+            CASE ctype:
+                WHEN 'logical'  THEN oJsonUpdate:ADD(cField, LOGICAL(cValue)                    ).
+                WHEN 'integer'  THEN oJsonUpdate:ADD(cField, INTEGER(cValue)                    ).
+                WHEN 'decimal'  THEN oJsonUpdate:ADD(cField, DECIMAL(cValue)                    ).
+                WHEN 'date'     THEN oJsonUpdate:ADD(cField, STRING(DATE(cValue),'99.99.9999')  ).
+                OTHERWISE            oJsonUpdate:ADD(cField, cValue                             ).
+            END CASE.
+        END.
+
+        oJsonMessageBox:ADD('fieldUpdate', oJsonUpdate).
+        
+        RETURN.
+
+    END METHOD.
+
+    /*------------------------------------------------------------------------------
+     Purpose:
+     Notes:
+    ------------------------------------------------------------------------------*/
+
     METHOD PUBLIC LOGICAL createSearchQuery(
         INPUT   httInput     AS HANDLE,
         INPUT   httBrowserKo AS HANDLE,
@@ -687,49 +896,240 @@ END PROCEDURE.
      Notes:
     ------------------------------------------------------------------------------*/
 
+    METHOD PUBLIC VOID evaluateErrorStatus(
+        hError AS HANDLE
+        ):
+        
+        DEFINE VARIABLE iNumMessages AS INTEGER   NO-UNDO.
+        DEFINE VARIABLE cMessage     AS CHARACTER NO-UNDO.
+            
+        IF NOT hError:ERROR THEN RETURN.
+        
+        cMessage = 'ERROR: '.
+        DO iNumMessages = 1 TO hError:NUM-MESSAGES :
+            cMessage = cMessage + hError:GET-MESSAGE(iNumMessages) + CHR(10) + '       '.
+        END.
+        MESSAGE cMessage.
+        
+        RETURN.
+
+    END METHOD.
+
+    /*------------------------------------------------------------------------------
+     Purpose:
+     Notes:
+    ------------------------------------------------------------------------------*/
+
     METHOD PUBLIC VOID evaluateFile(
-        INPUT  oJsonIdent AS JsonObject,
-        OUTPUT cFileName  AS CHARACTER,
-        OUTPUT lCompany   AS LOGICAL  ,
-        OUTPUT lActive    AS LOGICAL  ,
-        OUTPUT lWordindex AS LOGICAL  
+        INPUT-OUTPUT oJsonIdent      AS JsonObject,
+        OUTPUT       cFileName       AS CHARACTER,
+        OUTPUT       lCompany        AS LOGICAL  ,
+        OUTPUT       lActive         AS LOGICAL  ,
+        OUTPUT       lWordindex      AS LOGICAL  ,
+        INPUT-OUTPUT httKeyFields    AS HANDLE   , 
+        INPUT-OUTPUT httPrimaryIndex AS HANDLE 
         ):
             
-        cFileName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
+        DEFINE VARIABLE cDBFileName      AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cDBName          AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE hBuffer          AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE hField           AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE hDictFile        AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE hDictField       AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE rRecid           AS RECID     NO-UNDO.
+        DEFINE VARIABLE cWhere           AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE lOK              AS LOGICAL   NO-UNDO.
+        DEFINE VARIABLE cClassName       AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
+        
+        DEFINE VARIABLE rPrimeIndex      AS RECID     NO-UNDO.
+        DEFINE VARIABLE rField           AS RECID     NO-UNDO.
+        DEFINE VARIABLE hQuery           AS HANDLE    NO-UNDO.
+        DEFINE VARIABLE cKeyField        AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cField           AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cValue           AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE cFieldNames      AS CHARACTER NO-UNDO EXTENT.
+        DEFINE VARIABLE cKeyFieldReplace AS CHARACTER NO-UNDO.
+            
+        cFileName  = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
+        cClassName = ENTRY(1, oJsonIdent:GetCharacter('formId'), '_').
+        
+        IF oJsonIdent:HAS('file_name')  THEN oJsonIdent:SET('file_name' , cFileName ).
+        ELSE                                 oJsonIdent:ADD('file_name' , cFileName ).
+        IF oJsonIdent:HAS('class_name') THEN oJsonIdent:SET('class_name', cClassName).
+        ELSE                                 oJsonIdent:ADD('class_name', cClassName).
 
+        ASSIGN 
+            lCompany   = FALSE
+            lActive    = FALSE
+            lWordIndex = FALSE.
+            
         DO WHILE TRUE:
-            FIND FIRST Ge_MIS._File NO-LOCK 
-                WHERE Ge_MIS._File._File-Name = cFileName NO-ERROR.
-            IF NOT AVAILABLE Ge_MIS._File THEN LEAVE.
+            cDBName = 'Ge_MIS'.
+            cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
+            CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
+            IF VALID-HANDLE(hBuffer) THEN LEAVE.
+            
+            cDBName = 'FRAMEWORK'.
+            DELETE OBJECT hBuffer NO-ERROR.
+            cDBFileName = SUBSTITUTE('&1.&2', cDBName, cFileName).
+            CREATE BUFFER hBuffer FOR TABLE cDBFileName NO-ERROR.
+            IF VALID-HANDLE(hBuffer) THEN LEAVE.
             
-            FIND FIRST Ge_MIS._Field OF Ge_MIS._File NO-LOCK
-                WHERE Ge_MIS._Field._Field-Name = 'company' NO-ERROR.
-            lCompany = (IF AVAILABLE Ge_MIS._Field THEN TRUE ELSE FALSE).
-
-            FIND FIRST Ge_MIS._Field OF Ge_MIS._File NO-LOCK
-                WHERE Ge_MIS._Field._Field-Name = 'active' NO-ERROR.
-            lActive = (IF AVAILABLE Ge_MIS._Field THEN TRUE ELSE FALSE).
-
-            FIND FIRST Ge_MIS._Field OF Ge_MIS._File NO-LOCK
-                WHERE Ge_MIS._Field._Field-Name = 'wordindex' NO-ERROR.
-            lWordindex = (IF AVAILABLE Ge_MIS._Field THEN TRUE ELSE FALSE).
             RETURN.
         END.
         
-        FIND FIRST FRAMEWORK._File NO-LOCK 
-            WHERE FRAMEWORK._File._File-Name = cFileName NO-ERROR.
+        oJsonIdent:ADD('DBName', cDBName).
+        
+        hField = hBuffer:BUFFER-FIELD('active') NO-ERROR.
+        IF  NOT ERROR-STATUS:ERROR AND
+            VALID-HANDLE(hField) THEN lActive = TRUE.
+        DELETE OBJECT hField NO-ERROR.
+                
+        hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
+        IF  NOT ERROR-STATUS:ERROR AND
+            VALID-HANDLE(hField) THEN lWordIndex = TRUE.
+        DELETE OBJECT hField NO-ERROR.
+                
+        hField = hBuffer:BUFFER-FIELD('company') NO-ERROR.
+        IF  NOT ERROR-STATUS:ERROR AND
+            VALID-HANDLE(hField) THEN lCompany = TRUE.
+        //
+        //  Dictionary _File Buffer ermitteln 
+        //        
+        cDBFileName = SUBSTITUTE('&1._File', cDBName).
+        CREATE BUFFER hDictFile FOR TABLE cDBFileName NO-ERROR.
+
+        cWhere = SUBSTITUTE('WHERE _File-Name = &1 ', QUOTER(cFileName)).
+        lOK = hDictFile:FIND-FIRST (cWhere) NO-ERROR.
+        rRecid      = hDictFile:RECID.
+        rPrimeIndex = hDictFile::_Prime-Index.
+
+        DO WHILE lCompany:
+            //
+            //  ermitteln RECID von Field company
+            //
+            cDBFileName = SUBSTITUTE('&1._Field', cDBName).
+            CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
+            cWhere = SUBSTITUTE('WHERE _File-Recid = &1 AND _Field-Name = "company" ', rRecid) .
+            lOK = hDictField:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
+            rField = hDictField:RECID.
+            DELETE OBJECT hDictField NO-ERROR.
+            //
+            //  is Field company ein Index-Feld ? -> Wenn nicht, Flag lCompany auf FALSE setzen
+            //
+            cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
+            CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
+            cWhere = SUBSTITUTE('WHERE _Field-Recid = &1 ', rField) .
+            lOK = hDictField:FIND-FIRST(cWhere) NO-ERROR.
+            IF NOT lOK THEN lCompany = FALSE.
             
-        FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File NO-LOCK
-            WHERE FRAMEWORK._Field._Field-Name = 'company' NO-ERROR.
-        lCompany = (IF AVAILABLE FRAMEWORK._Field THEN TRUE ELSE FALSE).
-
-        FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File NO-LOCK
-            WHERE FRAMEWORK._Field._Field-Name = 'active' NO-ERROR.
-        lActive = (IF AVAILABLE FRAMEWORK._Field THEN TRUE ELSE FALSE).
-
-        FIND FIRST FRAMEWORK._Field OF FRAMEWORK._File NO-LOCK
-            WHERE FRAMEWORK._Field._Field-Name = 'wordindex' NO-ERROR.
-        lWordindex = (IF AVAILABLE FRAMEWORK._Field THEN TRUE ELSE FALSE).
+            DELETE OBJECT hDictField.
+            
+            LEAVE.
+        END.
+        
+        IF lCompany THEN 
+        DO:
+            httKeyFields:BUFFER-CREATE ().
+            ASSIGN
+                httKeyFields::iIndex     = 1
+                httKeyFields::cLongName  = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'company')
+                httKeyFields::cFieldName = 'company'
+                httKeyFields::cFileName  = cFileName
+                httKeyFields::cValue     = oJsonIdent:GetCharacter('company')
+                httKeyFields::cDataType  = 'character'.
+        END.
+        IF lActive THEN 
+        DO:
+            getActiveSelection(
+                INPUT  oJsonIdent,
+                INPUT  cFileName ,
+                OUTPUT cActiveSelection
+                ).
+            CASE cActiveSelection:
+                WHEN 'LBL_FILTER_ACTIVE' THEN 
+                    cActiveSelection = 'true'.
+                WHEN 'LBL_FILTER_INACTIVE' THEN 
+                    cActiveSelection = 'false'.
+                OTHERWISE 
+                cActiveSelection = ''.
+            END CASE.
+            
+            httKeyFields:BUFFER-CREATE ().
+            ASSIGN
+                httKeyFields::iIndex     = 99
+                httKeyFields::cLongName  = SUBSTITUTE('&1_&2_&3', 'keyField', cFileName, 'active')
+                httKeyFields::cFieldName = 'active'
+                httKeyFields::cFileName  = cFileName
+                httKeyFields::cValue     = cActiveSelection
+                httKeyFields::cDataType  = 'logical'.
+        END.
+        //
+        //  restlichen Keyfelder in Tabelle schreiben
+        //
+        CREATE BUFFER hField FOR TABLE SUBSTITUTE('&1._Field', cDBName).
+        cFieldNames      = oJsonIdent:getNames().
+        cKeyFieldReplace = SUBSTITUTE ('keyField_&1_', cFileName).
+        DO i1 = 1 TO EXTENT(cFieldNames):
+            IF NOT cFieldNames[i1] BEGINS 'keyfield' THEN NEXT.
+            cKeyField = cFieldNames[i1].
+            cField    = REPLACE(cKeyField, cKeyFieldReplace, '').
+            
+            cWhere = SUBSTITUTE('WHERE cFieldName = &1 ', QUOTER(cField) ).
+            lOK = httKeyFields:FIND-FIRST(cWhere, NO-LOCK) NO-ERROR.
+            IF lOK THEN NEXT.
+            
+            cValue    = oJsonIdent:GetCharacter(cKeyField).
+            cWhere    = SUBSTITUTE('WHERE &1._File-recid = &2 AND &1._Field-Name = &3', '_Field', rRecid, QUOTER(cField)).
+            hField:FIND-FIRST(cWhere, NO-LOCK).
+            httKeyFields:BUFFER-CREATE().
+            ASSIGN 
+                httKeyFields::iIndex     = i1 + 1
+                httKeyFields::cLongName  = cKeyField
+                httKeyFields::cFieldName = cField
+                httKeyFields::cFileName  = cFileName
+                httKeyFields::cValue     = cValue
+                httKeyFields::cDataType  = hField::_Data-Type. 
+        END.
+        //
+        //  Primary Index Felder ermitteln
+        //
+        cDBFileName = SUBSTITUTE('&1._Index-Field', cDBName).
+        CREATE BUFFER hDictField FOR TABLE cDBFileName NO-ERROR.
+        CREATE QUERY hQuery.
+        hQuery:SET-BUFFERS(hDictField).
+        cWhere = SUBSTITUTE('FOR EACH _Index-Field WHERE _Index-Recid = &1 BY _Index-Field._Index-Seq ', rPrimeIndex) .
+        hQuery:QUERY-PREPARE (cWhere).
+        hQuery:QUERY-OPEN ().
+        hQuery:GET-FIRST () NO-ERROR.
+        
+        cDBFileName = SUBSTITUTE('&1._Field', cDBName).
+        CREATE BUFFER hField FOR TABLE cDBFileName.
+         
+        DO WHILE NOT hQuery:QUERY-OFF-END:
+            rRecid = hDictField::_Field-Recid.
+            cWhere = SUBSTITUTE('WHERE RECID(&1) = &2 ', hField:NAME, rRecid).
+            hField:FIND-UNIQUE (cWhere, NO-LOCK).
+            httPrimaryIndex:BUFFER-CREATE().
+            ASSIGN 
+                httPrimaryIndex::iIndex     = hDictField::_Index-Seq
+                httPrimaryIndex::cFileName  = cFileName
+                httPrimaryIndex::cFieldName = hField::_Field-Name
+                httPrimaryIndex::cDataType  = hField::_DATA-TYPE  
+                .
+            hQuery:GET-NEXT().
+        END. 
+        hQuery:QUERY-CLOSE ().
+        
+        DELETE OBJECT hBuffer    NO-ERROR.
+        DELETE OBJECT hField     NO-ERROR.           
+        DELETE OBJECT hDictField NO-ERROR.
+        DELETE OBJECT hDictFile  NO-ERROR.
+        
+        httKeyFields   :WRITE-JSON('File', 'C:\TEMP\ttKeyFields.json'   , TRUE).
+        httPrimaryIndex:WRITE-JSON('File', 'C:\TEMP\ttPrimaryIndex.json', TRUE).
+        
         RETURN.
 
     END METHOD.
@@ -850,18 +1250,16 @@ END PROCEDURE.
         OUTPUT cActiveSelection AS CHARACTER 
         ):
             
-        DEFINE VARIABLE cForm_Id AS CHARACTER NO-UNDO.
-            
         FIND userdata NO-LOCK
-            WHERE userdata.user_name   = oJsonIdent:GetCharacter('user_name')
-            AND   userdata.company     = oJsonIdent:GetCharacter('company')
+            WHERE userdata.user_name   = oJsonIdent:GetCharacter('H_user_name')
+            AND   userdata.company     = oJsonIdent:GetCharacter('H_company')
             AND   userdata.branch      = '0000'
             AND   userdata.record_type = 'active'
             AND   userdata.section     = cFileName 
-            AND   userdata.key_type    = '' NO-ERROR.
+            AND   userdata.key_type    = oJsonIdent:GetCharacter('Program') NO-ERROR.
               
         IF AVAILABLE userdata THEN cActiveSelection = userdata.cfield_1.
-        ELSE                       cActiveSelection = 'all'.   
+        ELSE                       cActiveSelection = 'LBL_FILTER_ALL'.   
         RELEASE userdata.
 
         RETURN.
@@ -1111,9 +1509,7 @@ END PROCEDURE.
                     + messages.message_text.
             END.
         END.
-        MESSAGE cString '-' cParam.
         cString = SUBSTITUTE(cString, cParameter[01], cParameter[02], cParameter[03], cParameter[04], cParameter[05]).
-        MESSAGE cString.
         
         cMessage = cString.              
         
@@ -1284,15 +1680,27 @@ END PROCEDURE.
 
     METHOD PUBLIC LOGICAL getHeaderData(
         INPUT  poRequest     AS IHttpRequest,
-        OUTPUT cCompany      AS CHARACTER,
-        OUTPUT cuser_name    AS CHARACTER,
-        OUTPUT cAnzeigeName  AS CHARACTER,
-        OUTPUT iLanguage_id  AS INTEGER ,
-        OUTPUT cSessionToken AS CHARACTER
+        INPUT  cQueryString  AS CHARACTER   ,
+        OUTPUT ccompany      AS CHARACTER   ,
+        OUTPUT cuser_name    AS CHARACTER   ,
+        OUTPUT cAnzeigeName  AS CHARACTER   ,
+        OUTPUT iLanguage_id  AS INTEGER     ,
+        OUTPUT cSessionToken AS CHARACTER   ,
+        OUTPUT cFunction     AS CHARACTER   , 
+        OUTPUT oJsonIdent    AS JsonObject
         ):
         
-        DEFINE VARIABLE oHeader AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
-        DEFINE VARIABLE lRetVal AS LOGICAL                      NO-UNDO.
+        DEFINE VARIABLE oHeader     AS OpenEdge.Net.HTTP.HttpHeader NO-UNDO.
+        
+        DEFINE VARIABLE lRetVal     AS LOGICAL                      NO-UNDO.
+        DEFINE VARIABLE ii          AS INTEGER                      NO-UNDO.
+        DEFINE VARIABLE cQueryPairs AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cQueryKey   AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cQueryValue AS CHARACTER                    NO-UNDO.
+        
+        DEFINE VARIABLE cFormId     AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cClassName  AS CHARACTER                    NO-UNDO.
+        DEFINE VARIABLE cFilename   AS CHARACTER                    NO-UNDO.
 
         oHeader      = poRequest:GetHeader('X-COMPANY').
         ccompany     = oHeader:VALUE.
@@ -1309,6 +1717,40 @@ END PROCEDURE.
         oHeader = poRequest:GetHeader('X-SESSION-TOKEN').
         cSessionToken = oHeader:VALUE.
         
+        oJsonIdent = NEW JsonObject().
+        oJsonIdent:ADD('H_company'    , ccompany     )   NO-ERROR.
+        oJsonIdent:ADD('H_user_name'  , cuser_name   )   NO-ERROR.
+        oJsonIdent:ADD('H_language_id', iLanguage_id )   NO-ERROR.
+        oJsonIdent:ADD('sessionToken' , cSessionToken)   NO-ERROR.
+        //
+        //  Alle Parameter aus dem Query-String lesen und im Object oJsonIdent ergänzenz
+        //
+        DO ii = 1 TO NUM-ENTRIES(cQueryString, '&'):
+            cQueryPairs = ENTRY(ii, cQueryString, '&').
+            cQueryKey   = ENTRY(1 , cQueryPairs , '=').
+            cQueryValue = ENTRY(2 , cQueryPairs , '=').
+            IF oJsonIdent:Has(cQueryKey) THEN oJsonIdent:SET(cQueryKey, cQueryValue) NO-ERROR.
+            ELSE                              oJsonIdent:ADD(cQueryKey, cQueryValue) NO-ERROR.
+        END.
+        
+        IF NOT oJsonIdent:HAS('company'    ) THEN oJsonIdent:ADD('company'    , oJsonIdent:GetCharacter('H_company'    )).
+        IF NOT oJsonIdent:HAS('user_name'  ) THEN oJsonIdent:ADD('user_name'  , oJsonIdent:GetCharacter('H_user_name'  )).
+        IF NOT oJsonIdent:HAS('language_id') THEN oJsonIdent:ADD('language_id', oJsonIdent:GetJsonText ('H_language_id')).
+        //  language_id soll immer ein Interger-Wert sein
+        oJsonIdent:SET('language_id', INTEGER(oJsonIdent:GetJsonText('language_id'))).
+        
+        cFormId      = oJsonIdent:GetCharacter('formId').
+        cClassname  = ENTRY(1, cFormId, '_').
+        cFileName   = ENTRY(1, cFormId, '_').
+        oJsonIdent:ADD('class_name', cClassName).
+        oJsonIdent:ADD('file_name' , cFileName ).
+        
+        ccompany     = oJsonIdent:GetCharacter('company').
+        cuser_name   = oJsonIdent:GetCharacter('user_name').  
+        ilanguage_id = oJsonIdent:GetInteger  ('language_id').
+        
+        IF oJsonIdent:HAS('function') THEN cFunction = oJsonIdent:GetCharacter('function').
+
         lRetVal = TRUE.
         RETURN lRetVal.
 
@@ -1465,25 +1907,32 @@ END PROCEDURE.
     ------------------------------------------------------------------------------*/
 
     METHOD PUBLIC CHARACTER getProgramName(
-        INPUT oJsonIdent AS JsonObject,
-        INPUT cUsers     AS CHARACTER 
+        INPUT        oJsonIdent    AS JsonObject,
+        INPUT        cUsers        AS CHARACTER ,
+        OUTPUT       cFormUser     AS CHARACTER ,
+        INPUT-OUTPUT iItemsPerPage AS INTEGER   ,
+        INPUT-OUTPUT cMaxHeight    AS CHARACTER  
         ):
         
         DEFINE VARIABLE cProgram     AS CHARACTER NO-UNDO.
-        DEFINE VARIABLE cCompany     AS CHARACTER NO-UNDO.
+        DEFINE VARIABLE ccompany     AS CHARACTER NO-UNDO.
         DEFINE VARIABLE cProgramUser AS CHARACTER NO-UNDO.
 
         cProgram = ''.
-        cCompany = (IF oJsonIdent:HAS('company') THEN oJsonIdent:GetCharacter('company') ELSE oJsonIdent:GetCharacter('H_company')).
+        ccompany = oJsonIdent:GetCharacter('company').
         DO i1 = 1 TO NUM-ENTRIES(cUsers, ','): 
             cProgramUser = ENTRY(i1, cUsers).
             FIND FIRST htmldokumente NO-LOCK 
-                WHERE htmldokumente.company     = cCompany
+                WHERE htmldokumente.company     = ccompany
                 AND   htmldokumente.user_name   = cProgramUser
                 AND   htmldokumente.form_id     = oJsonIdent:GetCharacter('formId' ) NO-ERROR.
             IF NOT AVAILABLE htmldokumente THEN NEXT. 
 
-            cProgram = htmldokumente.program.
+            ASSIGN 
+                cProgram      = htmldokumente.program
+                cFormUser     = cProgramUser
+                iItemsPerPage = htmldokumente.itemsPerPage
+                cMaxHeight    = htmldokumente.tableMaxHeight. 
             LEAVE.
         END.
         
@@ -1634,8 +2083,6 @@ END PROCEDURE.
                 DO:
                     FIND FIRST Ge_MIS._File NO-LOCK 
                         WHERE Ge_MIS._File._File-Name = ipctable NO-ERROR.
-                    // FIND FIRST Ge_MIS._Index NO-LOCK 
-                    //     WHERE RECID(Ge_MIS._Index) = Ge_MIS._File._Prime-Index NO-ERROR.
                     FOR EACH Ge_MIS._Index-Field NO-LOCK 
                         WHERE Ge_MIS._Index-Field._Index-Recid = Ge_MIS._File._Prime-Index,
                         
@@ -1653,8 +2100,6 @@ END PROCEDURE.
                 DO:
                     FIND FIRST FRAMEWORK._File NO-LOCK 
                         WHERE FRAMEWORK._File._File-Name = ipctable NO-ERROR.
-                    // FIND FIRST FRAMEWORK._Index NO-LOCK 
-                    //     WHERE RECID(FRAMEWORK._Index) = FRAMEWORK._File._Prime-Index NO-ERROR.
                     FOR EACH FRAMEWORK._Index-Field NO-LOCK 
                         WHERE FRAMEWORK._Index-Field._Index-Recid = FRAMEWORK._File._Prime-Index,
                         
@@ -1680,10 +2125,6 @@ END PROCEDURE.
     ------------------------------------------------------------------------------*/
 
     METHOD PUBLIC CHARACTER getSysUser(  ):
-        /*------------------------------------------------------------------------------
-          Purpose:  
-            Notes:  
-        ------------------------------------------------------------------------------*/
 
         DEFINE VARIABLE mBen  AS MEMPTR    NO-UNDO.
         DEFINE VARIABLE iLeng AS INTEGER   INIT 100 NO-UNDO.
@@ -1775,7 +2216,9 @@ END PROCEDURE.
     METHOD PUBLIC VOID readPosition(
         INPUT  oJsonIdent       AS JsonObject ,
         INPUT  cFileName        AS CHARACTER  ,
-        OUTPUT iCurrentPosition AS INTEGER  
+        OUTPUT iCurrentPosition AS INTEGER    ,
+        OUTPUT iStartPage       AS INTEGER    ,
+        OUTPUT iMaxRecords      AS INTEGER   
         ):
             
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:  
@@ -1786,8 +2229,20 @@ END PROCEDURE.
                 AND   userdata.record_type = 'position'
                 AND   userdata.section     = cFileName 
                 AND   userdata.key_type    = '' NO-ERROR.
-              
-            iCurrentPosition = (IF NOT AVAILABLE userdata THEN 1 ELSE userdata.ifield_1).
+            IF AVAILABLE userdata THEN 
+            DO:
+                ASSIGN               
+                    iCurrentPosition = userdata.ifield_1
+                    iStartPage       = userdata.ifield_2
+                    iMaxRecords      = userdata.ifield_3.
+            END.
+            ELSE 
+            DO:
+                ASSIGN               
+                    iCurrentPosition = 1
+                    iStartPage       = 1
+                    iMaxRecords      = 25.
+            END.
             RELEASE userdata.
             LEAVE.
         END.
@@ -1835,24 +2290,25 @@ END PROCEDURE.
          
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:
             FIND userdata 
-                WHERE userdata.user_name   = oJsonIdent:GetCharacter('user_name')
-                AND   userdata.company     = oJsonIdent:GetCharacter('company')
+                WHERE userdata.user_name   = oJsonIdent:GetCharacter('H_user_name')
+                AND   userdata.company     = oJsonIdent:GetCharacter('H_company')
                 AND   userdata.branch      = '0000'
                 AND   userdata.record_type = 'active'
                 AND   userdata.section     = cFileName 
-                AND   userdata.key_type    = '' NO-ERROR.
+                AND   userdata.key_type    = oJsonIdent:GetCharacter('Program') NO-ERROR.
             IF NOT AVAILABLE UserData THEN 
             DO:
                 CREATE userdata.
                 ASSIGN
-                    userdata.user_name   = oJsonIdent:GetCharacter('user_name')
-                    userdata.company     = oJsonIdent:GetCharacter('company')
+                    userdata.user_name   = oJsonIdent:GetCharacter('H_user_name')
+                    userdata.company     = oJsonIdent:GetCharacter('H_company')
                     userdata.branch      = '0000'
                     userdata.record_type = 'active'
                     userdata.section     = cFileName 
-                    userdata.key_type    = '' NO-ERROR.
+                    userdata.key_type    = oJsonIdent:GetCharacter('Program') NO-ERROR.
             END.
             userdata.cfield_1 = cActiveSelection.
+            MESSAGE 'userdate mutiert mit activefilter' cActiveSelection.
             RELEASE userdata.
             LEAVE.
         END.   
@@ -2137,9 +2593,11 @@ END PROCEDURE.
     ------------------------------------------------------------------------------*/
 
     METHOD PUBLIC VOID writePosition(
-        INPUT  oJsonIdent       AS JsonObject ,
-        INPUT  cFileName        AS CHARACTER  ,
-        INPUT  iCurrentPosition AS INTEGER  
+        INPUT  oJsonIdent       AS JsonObject,
+        INPUT  cFileName        AS CHARACTER ,
+        INPUT  iCurrentPosition AS INTEGER   ,
+        INPUT  iStartPage       AS INTEGER   ,
+        INPUT  iMaxRecords      AS INTEGER    
         ):
             
         REPEAT TRANSACTION ON ERROR UNDO, LEAVE:  
@@ -2163,7 +2621,9 @@ END PROCEDURE.
                     userdata.key_type    = '' NO-ERROR.
             END.
             ASSIGN  
-                userdata.ifield_1 = iCurrentPosition.
+                userdata.ifield_1 = iCurrentPosition
+                userdata.iField_2 = iStartPage
+                userdata.ifield_3 = iMaxRecords.
             RELEASE userdata.
             LEAVE.
         END.

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini