| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107 |
- /*------------------------------------------------------------------------
- File : dynamicformImplImpl
- Purpose :
- Syntax :
- Description :
- Author(s) : walter.riechsteiner
- Created : Wed Nov 19 13:23:38 CET 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.WebResponseWriter FROM PROPATH.
- 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.ParameterList FROM PROPATH.
- USING src.ch.adprime.gemis.WebHandlerUtilities FROM PROPATH.
- USING utilities.selectboxHandler FROM PROPATH.
- USING utilities.utilitiesHandler FROM PROPATH.
- CLASS admin.dynamicformImpl INHERITS WebHandler:
- DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
- DEFINE VARIABLE oJsonData AS JsonObject 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 cQueryString AS CHARACTER NO-UNDO.
-
- DEFINE VARIABLE lcJsonString AS LONGCHAR NO-UNDO.
- DEFINE VARIABLE lcString AS LONGCHAR NO-UNDO.
- DEFINE VARIABLE cString 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 cFormId AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cProgram AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFormUser AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFormColumns AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cFieldName AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cUsers AS CHARACTER NO-UNDO INIT 'user,admin'.
- DEFINE VARIABLE cMaxHeight AS CHARACTER NO-UNDO.
- DEFINE VARIABLE iItemsPage AS INTEGER NO-UNDO.
-
- DEFINE VARIABLE cActiveSelection AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lCompany AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lActive AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lWordindex AS LOGICAL NO-UNDO.
- DEFINE VARIABLE lSendChange AS LOGICAL NO-UNDO.
-
- DEFINE VARIABLE lcMessage AS LONGCHAR NO-UNDO.
- DEFINE VARIABLE cErrorNo AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cLogFile AS CHARACTER NO-UNDO.
-
- DEFINE VARIABLE hError AS HANDLE NO-UNDO.
- DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
- DEFINE VARIABLE hField AS HANDLE 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 oParam AS ParameterList NO-UNDO.
-
- DEFINE VARIABLE oJsonIdent AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonActiveSelectBox AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonMessageBox AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonResponse AS JsonObject NO-UNDO.
-
- DEFINE VARIABLE outilitiesHandler AS utilitiesHandler NO-UNDO.
- DEFINE VARIABLE oselectboxHandler AS selectboxHandler NO-UNDO.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- CONSTRUCTOR PUBLIC dynamicformImpl ( ):
- SUPER ().
-
- hError = ERROR-STATUS:HANDLE.
-
- outilitiesHandler = NEW utilitiesHandler().
- oselectboxHandler = NEW selectboxHandler().
-
- CATCH e AS Progress.Lang.Error:
- END CATCH.
- FINALLY:
- END FINALLY.
- END CONSTRUCTOR.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- /* METHOD PUBLIC VOID createJsonIdent( */
- /* INPUT poRequest AS IWebRequest */
- /* ): */
- /* */
- /* DEFINE VARIABLE cUser AS CHARACTER NO-UNDO. */
- /* */
- /* DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO. */
- /*MESSAGE 'CREATE JSONIDENT **********************************'. */
- /* outilitiesHandler:getHeaderData( */
- /* INPUT poRequest , */
- /* OUTPUT ccompany , */
- /* OUTPUT cUser_Name , */
- /* OUTPUT cAnzeigeName , */
- /* OUTPUT ilanguage_id , */
- /* OUTPUT cSessionToken, */
- /* OUTPUT cFunction , */
- /* OUTPUT oJsonIdent */
- /* ). */
- /* cFormId = oJsonIdent:GetCharacter('formId'). */
- /* cFileName = ENTRY(1, cFormId, '_'). */
- /* // */
- /* // mögliche Benutzer für das durchsuchen von HTML-Dokumenten und Labeltexten ... */
- /* // */
- /* cUser = oJsonIdent:GetCharacter('H_user_name') NO-ERROR. */
- /* IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.*/
- /* cUser = oJsonIdent:GetCharacter('user_name') NO-ERROR. */
- /* IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.*/
- /* oJsonIdent:ADD('cUsers', cUsers). */
- /* // */
- /* // Wenn ein UI Multi-Tab hat, wird es hier erstellt */
- /* // */
- /* RETURN. */
- /* */
- /* END METHOD. */
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC VOID createMultiTab(
- OUTPUT oJsonTabs AS JsonArray
- ):
-
- DEFINE VARIABLE cTabGroup AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cHtmlUser AS CHARACTER NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
-
- DEFINE VARIABLE cTabProgram AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cHtmlFileName AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cKeyField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cKeyFields AS CHARACTER NO-UNDO.
-
- DEFINE VARIABLE oJsonTab AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonMasterKeyFields AS JsonArray NO-UNDO.
- // MESSAGE 'START MULTITAB'.
- oJsonTabs = NEW JsonArray().
- FIND programs NO-LOCK
- WHERE programs.formId = cFormId NO-ERROR.
- cTabGroup = programs.tab_group.
- cProgram = programs.program.
-
- DO ii = 1 TO NUM-ENTRIES(cUsers, ','):
- cHtmlUser = ENTRY(ii, cUsers, ',').
- FIND FIRST htmldokumente
- WHERE htmldokumente.company = ccompany
- AND htmldokumente.user_name = cHtmlUser
- AND htmldokumente.language_id = ilanguage_id
- AND htmldokumente.program = cProgram NO-ERROR.
- IF AVAILABLE htmldokumente THEN LEAVE.
- END.
-
- oJsonTab = NEW JsonObject().
- oJsonTab:ADD('tabIndex' , 1).
- oJsonTab:ADD('formId' , htmldokumente.formId).
- oJsonTab:ADD('title' , htmldokumente.formtitle).
- oJsonTab:ADD('programName', cprogram).
- oJsonTab:ADD('isMain' , programs.isMain).
- oJsonTabs:ADD(oJsonTab).
-
- FOR EACH programs NO-LOCK
- WHERE programs.tab_group = cTabGroup
- AND programs.tab_index > 1
-
- BY programs.tab_index:
- cTabProgram = programs.program.
- // MESSAGE 'Tab-Gruppe' cTabGroup '-' cTabProgram.
- DO ii = 1 TO NUM-ENTRIES(cUsers, ','):
- cHtmlUser = ENTRY(ii, cUsers, ',').
- FIND FIRST htmldokumente
- WHERE htmldokumente.company = ccompany
- AND htmldokumente.user_name = cHtmlUser
- AND htmldokumente.language_id = ilanguage_id
- AND htmldokumente.program = cTabProgram NO-ERROR.
- IF AVAILABLE htmldokumente THEN LEAVE.
- END.
-
- outilitiesHandler:getFileNameFromFormId(
- INPUT htmldokumente.formId,
- OUTPUT cHtmlFileName,
- OUTPUT cDBName
- ).
-
- oJsonTab = NEW JsonObject().
- oJsonTab:ADD('tabIndex' , programs.tab_index).
- oJsonTab:ADD('formId' , htmldokumente.formId).
- oJsonTab:ADD('title' , htmldokumente.formtitle).
- oJsonTab:ADD('programName', htmldokumente.program).
- oJsonTab:ADD('isMain' , programs.isMain).
- oJsonTab:ADD('tabType' , programs.tabtype).
- oJsonTab:ADD('allowCreate', programs.allowCreate).
- oJsonTab:ADD('allowEdit' , programs.allowedit).
- oJsonTab:ADD('allowDelete', programs.allowDelete).
- oJsonTab:ADD('allowCopy' , programs.allowCopy).
- cKeyFields = REPLACE(programs.masterkeyfields, ',', ';').
- DO ii = 1 TO NUM-ENTRIES(cKeyFields, ';').
- cKeyField = ENTRY(ii, cKeyFields, ';').
- oJsonMasterKeyFields = NEW JsonArray().
- oJsonMasterKeyFields:ADD(cKeyField).
- oJsonTab:ADD('masterKeyFields', oJsonMasterKeyFields).
- END.
-
- oJsonTabs:ADD(oJsonTab).
- END.
- // oJsonTabs:WriteFile('C:\TEMP\oJsonTabs_createMultiTab.json', TRUE).
- // oJsonTabs:WRITE(lcString).
- // MESSAGE 'ENDE MULTITAB'.
- RETURN.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
-
- METHOD OVERRIDE PROTECTED INTEGER HandleDelete(INPUT poRequest AS IWebRequest):
-
- DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
-
- WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
- DO WHILE TRUE:
- iRetVal = processingInitFunction(
- INPUT poRequest ,
- OUTPUT oJsonResponse
- ).
- IF iRetVal = 0 THEN RETURN 0.
- IF iRetVal = -1 THEN LEAVE.
-
- IF iRetVal = 1 THEN responseOK(
- INPUT oJsonResponse
- ).
- RETURN 0.
- END.
- REPEAT TRANSACTION WHILE cFunction = 'delete' ON ERROR UNDO, LEAVE:
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar' , 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
- // oJsonData:WriteFile('C:\TEMP\dynamicform_delete_data.json', TRUE).
- cMethode = 'deleteData'.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- INPUT oJsonData ,
- OUTPUT oJsonResult
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
- // MESSAGE lRetVal.
- oJsonResult:WRITE(lcString, FALSE).
- // MESSAGE STRING(lcString).
- responseOK(
- INPUT oJsonResult
- ).
-
- RETURN 0.
- END.
-
- oResponse = NEW OpenEdge.Web.WebResponse().
- oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
- oResponse:ContentType = "application/json;charset=utf-8".
-
- oJsonResult:WRITE(lcJsonString, FALSE).
- // oJsonResult:WriteFile(SUBSTITUTE('C:\TEMP\DYNAMIC_&1_Respons.json', cFunction), TRUE).
-
- oWriter = NEW WebResponseWriter(oResponse).
- oWriter:Open().
- oWriter:Write(lcJsonString).
- oWriter:Close().
-
- RETURN 0.
-
- CATCH e AS Progress.Lang.Error:
-
- END CATCH.
-
- FINALLY:
- DELETE OBJECT oHandler NO-ERROR.
- DELETE OBJECT oResponse NO-ERROR.
- DELETE OBJECT oWriter NO-ERROR.
- END FINALLY.
- END METHOD.
-
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD OVERRIDE PROTECTED INTEGER HandleGet (INPUT poRequest AS IWebRequest ):
-
- DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
- DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
- DEFINE VARIABLE cUser AS CHARACTER NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
-
- DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
- DO WHILE TRUE:
- iRetVal = processingInitFunction(
- INPUT poRequest ,
- OUTPUT oJsonResponse
- ).
- IF iRetVal = 0 THEN RETURN 0.
- IF iRetVal = -1 THEN LEAVE.
-
- IF iRetVal = 1 THEN responseOK(
- INPUT oJsonResponse
- ).
- RETURN 0.
- END.
- IF cFunction <> 'saveActiveFilter' THEN
- DO:
- outilitiesHandler:getActiveSelection(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- OUTPUT cActiveSelection
- ).
- IF cActiveSelection <> '' THEN
- DO:
- IF NOT oJsonIdent:HAS('activeFilter') THEN oJsonIdent:ADD('activeFilter', cActiveSelection ).
- ELSE oJsonIdent:SET('activeFilter', cActiveSelection ).
- END.
- END.
- DO WHILE cFunction = 'loaddata' AND cProgram <> '':
- // MESSAGE 'do while loaddata' cFileName.
- IF oJsonIdent:HAS('sortField') THEN
- DO:
- DEFINE VARIABLE cSortField AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDirection AS CHARACTER NO-UNDO.
-
- cSortField = oJsonIdent:GetCharacter('sortField').
- cDirection = oJsonIdent:GetCharacter('sortDirection').
- outilitiesHandler:writeSortfields(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT cSortField ,
- INPUT cDirection
- ).
- END.
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar', 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
-
- cMethode = 'getData'.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- OUTPUT oJsonResponse
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
-
- // oJsonResponse:WriteFile(SUBSTITUTE('C:\TEMP\Loaddata_response_&1.json', cProgram), TRUE).
- responseOK(
- INPUT oJsonResponse
- ).
-
- RETURN 0.
- END.
- DO WHILE cFunction = 'loaddataunique' AND cProgram <> '':
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar', 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
-
- cMethode = 'getDataUnique'.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- OUTPUT oJsonResult
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
-
- // oJsonResponse:WriteFile('C:\TEMP\Loaddataunique_response.json', TRUE).
- // oJsonResponse:ADD('selectOptionsFix', oJsonSelectBoxes).
- // oJsonResult:write(lcString, FALSE).
- // MESSAGE STRING(lcString).
- responseOK(
- INPUT oJsonResult
- ).
-
- RETURN 0.
- END.
- DO WHILE cFunction = 'rebuild':
- // MESSAGE 'function rebuild starten' cFileName.
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar' , 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
-
- cMethode = 'rebuildData'.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- OUTPUT oJsonResult
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
- // MESSAGE 'Return bei rebuild' lRetVal.
- oJsonResult:write(lcString, FALSE).
- // MESSAGE STRING(lcString).
- responseOK(
- INPUT oJsonResult
- ).
-
- RETURN 0.
- END.
-
- DO WHILE cFunction = 'saveActiveFilter':
- cActiveSelection = oJsonIdent:GetCharacter('activeFilter').
- // MESSAGE cFunction '-' cActiveSelection.
- outilitiesHandler:setActiveSelection(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT cActiveSelection
- ).
-
- oJsonResponse = NEW JsonObject().
- oJsonResponse:ADD('success', TRUE).
- // oJsonResponse:WRITE(lcJsonString, FALSE).
-
- lRetVal = TRUE.
- LEAVE.
- END.
-
- DO WHILE cFunction = 'lookup' AND cProgram <> '':
- cMethode = oJsonIdent:GetCharacter('lookupField') NO-ERROR.
- cMethode = REPLACE(cMethode, cFileName + '_', '').
- cClass = 'utilities.lookupHandler'.
-
- ASSIGN
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oHandler = rClass:NEW() NO-ERROR.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- INPUT oJsonIdent ,
- OUTPUT oJsonResult
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oJsonResponse = oJsonResult.
- LEAVE.
- END.
-
- IF NOT lRetVal THEN
- DO:
- lcString = oJsonMessageBox:GetLongchar('text').
- oJsonResponse = NEW JsonObject().
- oJsonResponse:ADD('success', FALSE).
- oJsonResponse:ADD('message', lcString).
- oJsonResponse:ADD('showMessage', oJsonMessageBox).
- END.
- oJsonResponse:WRITE(lcJsonString, FALSE).
- cContent-Type = "application/json".
- cDefautlCharSet = 'utf-8'.
- // IF cFunction = 'multitab' THEN oJsonResponse:WriteFile(SUBSTITUTE('C:\TEMP\dynamicform_get_response_&1.json', ETIME), TRUE).
- oBody = NEW STRING(lcJsonString) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- WebHandlerUtilities:createHttpResponse(INPUT INTEGER(StatusCodeEnum:OK), INPUT oBody, INPUT cContent-Type, INPUT cDefautlCharSet, INPUT cCorralationID, OUTPUT oResponse) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- // oResponse:SetHeader(HttpHeaderBuilder:Build(cHeaderCorralationID):Value(cCorralationID):Header).
-
- oWriter = NEW WebResponseWriter(oResponse) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oWriter:Open() NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oWriter:Close().
- RETURN 0.
-
- CATCH e AS Progress.Lang.Error:
- 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 oJsonResponse NO-ERROR.
- END FINALLY.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD OVERRIDE PROTECTED INTEGER HandlePost(INPUT poRequest AS IWebRequest):
-
- DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
-
- WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
- DO WHILE TRUE:
- iRetVal = processingInitFunction(
- INPUT poRequest ,
- OUTPUT oJsonResponse
- ).
- IF iRetVal = 0 THEN RETURN 0.
- IF iRetVal = -1 THEN LEAVE.
-
- IF iRetVal = 1 THEN responseOK(
- INPUT oJsonResponse
- ).
- RETURN 0.
- END.
- DO WHILE cFunction = 'change':
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar' , 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
-
- cMethode = oJsonData:GetCharacter('changeAction').
- // MESSAGE 'changeAction =' cMethode.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- INPUT oJsonData ,
- OUTPUT oJsonResponse
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
- // oJsonResponse:WriteFile(SUBSTITUTE('C:\TEMP\Change_response_&1.json', cFileName), TRUE).
- responseOK(
- INPUT oJsonResponse
- ).
-
- RETURN 0.
- END.
- REPEAT TRANSACTION WHILE cFunction = 'create' ON ERROR UNDO, LEAVE:
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar' , 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
-
- cMethode = 'createData'.
- // MESSAGE 'changeAction =' cMethode.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- INPUT oJsonData ,
- OUTPUT oJsonResponse
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
-
- responseOK(
- INPUT oJsonResponse
- ).
-
- RETURN 0.
- END.
-
- oResponse = NEW OpenEdge.Web.WebResponse().
- oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
- oResponse:ContentType = "application/json;charset=utf-8".
-
- oJsonResult:WRITE(lcJsonString, FALSE).
-
- oWriter = NEW WebResponseWriter(oResponse).
- oWriter:Open().
- oWriter:Write(lcJsonString).
- oWriter:Close().
-
- RETURN 0.
-
- CATCH e AS Progress.Lang.Error:
-
- END CATCH.
-
- FINALLY:
- DELETE OBJECT oResponse NO-ERROR.
- DELETE OBJECT oWriter NO-ERROR.
- DELETE OBJECT oJsonResult NO-ERROR.
- END FINALLY.
- END METHOD.
-
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD OVERRIDE PROTECTED INTEGER HandlePatch(INPUT poRequest AS IWebRequest):
-
- DEFINE VARIABLE oJsonResult AS JsonObject NO-UNDO.
- DEFINE VARIABLE lRetVal AS LOGICAL NO-UNDO.
- DEFINE VARIABLE iRetVal AS INTEGER NO-UNDO.
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
-
- WebHandlerUtilities:getJsonFromRequest(INPUT poRequest, OUTPUT oJsonData) NO-ERROR.
- DO WHILE TRUE:
- iRetVal = processingInitFunction(
- INPUT poRequest ,
- OUTPUT oJsonResponse
- ).
- IF iRetVal = 0 THEN RETURN 0.
- IF iRetVal = -1 THEN LEAVE.
-
- IF iRetVal = 1 THEN responseOK(
- INPUT oJsonResponse
- ).
- RETURN 0.
- END.
- REPEAT TRANSACTION WHILE cFunction = 'update' ON ERROR UNDO, LEAVE:
- rClass = Progress.Lang.Class:GetClass(cClass) NO-ERROR.
- oJsonIdent:Write(lcJsonString, FALSE).
- IF VALID-OBJECT(rClass) THEN
- DO:
- oParam = NEW ParameterList(2).
- oParam:SetParameter(1, 'longchar' , 'INPUT', lcJsonString ) NO-ERROR.
- oParam:SetParameter(2, 'character', 'INPUT', cFunction ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oHandler = rClass:New(oParam) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- END.
-
- cMethode = 'updateData'.
- lRetVal = DYNAMIC-INVOKE ( oHandler, cMethode,
- INPUT oJsonData ,
- OUTPUT oJsonResult
- ) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(INPUT hError).
- // MESSAGE 'Return bri update' lRetVal.
- // oJsonResult:write(lcString, FALSE).
- // MESSAGE STRING(lcString).
- responseOK(
- INPUT oJsonResult
- ).
-
- RETURN 0.
- END.
-
- oResponse = NEW OpenEdge.Web.WebResponse().
- oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
- oResponse:ContentType = "application/json;charset=utf-8".
-
- oJsonResult:WRITE(lcJsonString, FALSE).
- // oJsonResult:WriteFile(SUBSTITUTE('C:\TEMP\DYNAMIC_&1_Respons.json', cFunction), TRUE).
-
- oWriter = NEW WebResponseWriter(oResponse).
- oWriter:Open().
- oWriter:Write(lcJsonString).
- 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.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC INTEGER processingInitFunction(
- INPUT poRequest AS IWebRequest,
- OUTPUT oJsonReturn AS JsonObject
- ):
-
- DEFINE VARIABLE ii AS INTEGER NO-UNDO.
- DEFINE VARIABLE i1 AS INTEGER NO-UNDO.
- DEFINE VARIABLE cUser AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cSelectFileName AS CHARACTER NO-UNDO.
- DEFINE VARIABLE cDBName AS CHARACTER NO-UNDO.
- DEFINE VARIABLE oJsonBox AS JsonArray NO-UNDO.
- DEFINE VARIABLE oJsonSelectBoxes AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonTabs AS JsonArray NO-UNDO.
- DEFINE VARIABLE oJsonTab AS JsonObject NO-UNDO.
- DEFINE VARIABLE oJsonMasterKeyFields AS JsonArray NO-UNDO.
-
- DEFINE VARIABLE httBuffer AS HANDLE NO-UNDO.
-
- outilitiesHandler:getHeaderData(
- INPUT poRequest ,
- OUTPUT ccompany ,
- OUTPUT cUser_Name ,
- OUTPUT cAnzeigeName ,
- OUTPUT ilanguage_id ,
- OUTPUT cSessionToken,
- OUTPUT cFunction ,
- OUTPUT oJsonIdent
- ).
- IF oJsonIdent:HAS('file_name') THEN MESSAGE 'getHeaderData' oJsonIdent:GetCharacter('file_name').
- ELSE MESSAGE 'getHeaderData ohne FileName'.
- cFormId = oJsonIdent:GetCharacter('formId') NO-ERROR.
- outilitiesHandler:getFileNameFromFormId(
- INPUT cFormId ,
- OUTPUT cFileName,
- OUTPUT cDBName
- ).
- /* cFileName = ''. */
- /* ii = NUM-ENTRIES(cFileAusForm, '_') - 1.*/
- /* DO i1 = 1 TO ii: */
- /* cFileName = cFileName */
- /* + (IF cFileName = '' THEN '' ELSE '_') */
- /* + entry(i1, cFileAusForm, '_'). */
- /* END. */
- MESSAGE 'API-Call mit Function' cFunction 'und FileName' cFileName 'und FormId' cFormId.
- IF NOT oJsonIdent:has('user_name') THEN oJsonIdent:ADD('user_name', cUser_Name).
- //
- // mögliche Benutzer für das durchsuchen von HTML-Dokumenten und Labeltexten ...
- //
- cUser = oJsonIdent:GetCharacter('H_user_name') NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
- cUser = oJsonIdent:GetCharacter('user_name') NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND LOOKUP(cUser, cUsers, ',') = 0 THEN cUsers = cUser + ',' + cUsers.
- oJsonIdent:ADD('cUsers', cUsers).
- //
- // Wenn ein UI Multi-Tab hat, wird es hier erstellt
- //
- DO WHILE cFunction='multitab':
- createMultiTab(
- OUTPUT oJsonTabs
- ).
-
- oJsonResponse = NEW JsonObject().
- oJsonResponse:ADD('tabs', oJsonTabs).
- responseOK(oJsonResponse).
- RETURN 0.
- END.
- //
- // 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.
- //
- // wenn die Tabelle(File) das Feld wordindex enthält, muss am Ende der WordIndex aufgebaut werden
- //
- hField = hBuffer:BUFFER-FIELD('wordindex') NO-ERROR.
- IF NOT ERROR-STATUS:ERROR AND
- VALID-HANDLE(hField) THEN lWordIndex = TRUE.
-
- DELETE OBJECT hBuffer.
-
- iItemsPage = 50.
- cMaxHeight = '250px'.
- cProgram = outilitiesHandler:getProgramName (
- INPUT oJsonIdent ,
- INPUT cUsers ,
- OUTPUT cFormUser ,
- OUTPUT cformColumns,
- INPUT-OUTPUT iItemsPage ,
- INPUT-OUTPUT cMaxHeight
- ).
- IF cProgram = '' THEN
- DO:
- cString = oJsonIdent:GetCharacter('formId').
- outilitiesHandler:createErrorBox(
- INPUT oJsonIdent ,
- INPUT '2001' ,
- INPUT cString, /* Parameters */
- OUTPUT oJsonMessageBox
- ).
- oJsonResponse = NEW JsonObject().
- oJsonResponse:ADD('showMessage', oJsonMessageBox).
- responseNOTOK(oJsonResponse).
- RETURN 0.
- END.
- oJsonIdent:ADD('program' , cProgram ).
- oJsonIdent:ADD('itemsPerPage' , iItemsPage).
- oJsonIdent:ADD('tableMaxHeight', cMaxHeight).
- oJsonIdent:ADD('formUser' , cFormUser ).
-
- cErrorNo = ''.
- FIND programs NO-LOCK
- WHERE programs.program = cProgram NO-ERROR.
- IF NOT AVAILABLE programs THEN LEAVE.
-
- cClass = programs.program_class.
- lSendChange = programs.sendChangeRecord.
- //
- // Nur bei Function "init" müssen fixe Selectboxen
- // und UI - Parameter ermittelt werden
- //
- IF cFunction <> 'init' THEN RETURN -1.
- //
- // Es sollen alle Fixen Selctboxen erstellet werden
- //
- oJsonSelectBoxes = NEW JsonObject().
- FOR EACH selectboxfields NO-LOCK
- WHERE selectboxfields.company = ccompany
- AND selectboxfields.program = cFormId
- AND selectboxfields.user_name = cFormUser
- AND selectboxfields.boxfieldsFix <> '':
- DO ii = 1 TO NUM-ENTRIES(selectboxfields.boxfieldsFix, ';'):
- cFieldName = ENTRY(ii, selectboxfields.boxfieldsFix, ';').
- cSelectFileName = ENTRY(1, cFieldName, '_').
- DO WHILE TRUE:
- CREATE BUFFER hBuffer FOR TABLE cSelectFileName NO-ERROR.
- IF VALID-HANDLE(hBuffer) THEN LEAVE.
- cSelectFileName = cSelectFileName
- + '_'
- + entry(2, cFieldName, '_').
- END.
- DELETE OBJECT hBuffer.
- // MESSAGE 'SelectFileName =' cSelectFileName '-' cFieldName.
- IF cFieldName MATCHES('*company*') THEN
- DO:
- oJsonBox = NEW JsonArray().
- httBuffer = oSelectboxHandler:getSelboxCompany(INPUT cSelectFileName).
- httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
- oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
- NEXT.
- END.
-
- IF cFieldName MATCHES('*language_id*') THEN
- DO:
- oJsonBox = NEW JsonArray().
- httBuffer = oSelectboxHandler:getSelboxLanguage(INPUT cSelectFileName) NO-ERROR.
- httBuffer:WRITE-JSON ('JsonArray', oJsonBox) NO-ERROR.
- oJsonSelectBoxes:ADD(cFieldName, oJsonBox) NO-ERROR.
- NEXT.
- END.
-
- IF cFieldName MATCHES('*user_name*') THEN
- DO:
- oJsonBox = NEW JsonArray().
- httBuffer = oSelectboxHandler:getSelboxUsers(INPUT cSelectFileName).
- httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
- oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
- NEXT.
- END.
-
- IF cFieldName MATCHES('*table_name*') THEN
- DO:
- oJsonBox = NEW JsonArray().
- httBuffer = oSelectboxHandler:getSelboxTables(INPUT cSelectFileName).
- httBuffer:WRITE-JSON ('JsonArray', oJsonBox).
- oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
- NEXT.
- END.
-
- oselectboxHandler:getSelectBoxData(
- INPUT oJsonIdent,
- INPUT cFieldName,
- OUTPUT oJsonBox
- ).
- oJsonSelectBoxes:ADD(cFieldName, oJsonBox).
- END.
- END.
- oJsonReturn = NEW JsonObject().
- oJsonReturn:ADD('selectOptionsFix', oJsonSelectBoxes).
- oJsonReturn:ADD('tableMaxHeight' , cMaxHeight ).
- oJsonReturn:ADD('itemsPerPage' , iItemsPage ).
- oJsonReturn:ADD('formColumns' , cFormColumns ).
- oJsonReturn:ADD('lSearch' , lWordIndex ).
- oJsonReturn:ADD('hasRecordChange' , lSendChange ).
- //
- // Wenn die Tabelle das Feld active hat, wird die SelectBox für den activ-Filter gefüllt
- //
- IF lActive THEN
- DO:
- outilitiesHandler:getActiveSelection(
- INPUT oJsonIdent,
- INPUT cFileName ,
- OUTPUT cActiveSelection
- ).
-
- oJsonReturn:ADD("activeFilter" , cActiveSelection).
- oJsonReturn:ADD("hasActiveField" , lActive ).
-
- oJsonActiveSelectBox = NEW JsonObject().
- FOR EACH labeltexte NO-LOCK
- WHERE labeltexte.company = ccompany
- AND labeltexte.user_name = cFormUser
- 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.
- oJsonReturn:ADD('activeFilterLabels', oJsonActiveSelectBox).
-
- END.
- //
- // Sortfelder auf start (keine Felder) stellen.
- //
- outilitiesHandler:writeSortfields(
- INPUT oJsonIdent ,
- INPUT cFileName ,
- INPUT '' , // cSortField
- INPUT '' // cDirection
- ) NO-ERROR.
-
- // oJsonReturn:WriteFile(SUBSTITUTE('C:\Temp\dynamicform_init_&1_return.json', cProgram), TRUE).
- RETURN 1.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC VOID responseNOTOK(
- INPUT oJsonResponse AS JsonObject
- ):
- DEFINE VARIABLE oMessage AS JsonObject.
-
- oJsonResponse:ADD('success', FALSE).
-
- IF oJsonResponse:HAS('showMessage') THEN
- DO:
- oMessage = oJsonResponse:GetJsonObject('showMesage').
- lcString = oMessage:GetLongchar('text').
- oJsonResponse:ADD('message', lcString).
- END.
-
- oResponse = NEW OpenEdge.Web.WebResponse().
- oResponse:StatusCode = INTEGER(StatusCodeEnum:OK).
- oResponse:ContentType = "application/json;charset=utf-8".
- oWriter = NEW WebResponseWriter(oResponse).
-
- oJsonResponse:WRITE(lcJsonString, FALSE).
- // MESSAGE 'responsOK oResponse ->' STRING(lcJsonString).
- oWriter:Open().
- oWriter:Write(lcJsonString).
- oWriter:Close().
-
- RETURN.
- END METHOD.
- /*------------------------------------------------------------------------------
- Purpose:
- Notes:
- ------------------------------------------------------------------------------*/
- METHOD PUBLIC VOID responseOK(
- INPUT oJsonReturn AS JsonObject
- ):
- oResponse = NEW OpenEdge.Web.WebResponse() NO-ERROR.
- oResponse:StatusCode = INTEGER(StatusCodeEnum:OK) NO-ERROR.
- oResponse:ContentType = "application/json;charset=utf-8" NO-ERROR.
- oWriter = NEW WebResponseWriter(oResponse) NO-ERROR.
-
- oJsonReturn:WRITE(lcJsonString, FALSE).
- // oJsonReturn:WriteFile(SUBSTITUTE('C:\TEMP\getData_&1.json', cFileName), TRUE ).
- oWriter:Open() NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oWriter:Write(lcJsonString) NO-ERROR.
- outilitiesHandler:evaluateErrorStatus(hError).
- oWriter:Close().
-
- RETURN.
- END METHOD.
- DESTRUCTOR PUBLIC dynamicformImpl ( ):
- DELETE OBJECT oWriter NO-ERROR.
- DELETE OBJECT oResponse NO-ERROR.
- DELETE OBJECT oHandler NO-ERROR.
-
- END DESTRUCTOR.
- END CLASS.
|