1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

OpenEdge: create REST services using PAS

Discussão em 'StackOverflow' iniciado por fdantas, Abril 12, 2018.

  1. fdantas

    fdantas Administrator Moderador

    Creating a REST service with openedge and deploying in PAS server. The block of code;

    the class file:

    USING Progress.Lang.*.
    USING Progress.Json.ObjectModel.*.

    BLOCK-LEVEL ON ERROR UNDO, THROW.

    CLASS CA:
    /* Temp-tables*/
    DEF TEMP-TABLE ttTree NO-UNDO
    FIELD SLNo AS INTEGER
    FIELD BatchName AS CHARACTER
    FIELD BatchID AS INTEGER
    FIELD ProgramName AS CHARACTER
    FIELD ProgramID AS INTEGER
    FIELD CallerProgram AS CHARACTER
    FIELD processed AS LOGICAL
    FIELD ReportGenerated AS LOGICAL
    INDEX SLNo SLNO
    INDEX ID BatchID ProgramID.

    DEF TEMP-TABLE ttBatchLog NO-UNDO
    FIELD ProgramID AS INTEGER
    FIELD NoOfLine AS INTEGER
    FIELD NoOfKeyWords AS INTEGER
    FIELD NoOfProgramCalled AS INTEGER
    FIELD NoOfReadWrite AS INTEGER
    INDEX LineID ProgramID .

    DEF TEMP-TABLE ttProgramDetails NO-UNDO
    FIELD SLNo AS INTEGER
    FIELD ProgramID AS INTEGER
    FIELD KeywordName AS CHARACTER
    FIELD KeywordUsed AS INTEGER
    FIELD KeyType AS CHARACTER
    INDEX SLNo ProgramID KeyType SLNO .

    DEFINE TEMP-TABLE ttError SERIALIZE-NAME "serverMessage"
    FIELD ErrorNum AS INTEGER SERIALIZE-NAME "Message#"
    FIELD RequestStatus AS CHARACTER SERIALIZE-NAME "Status"
    FIELD ErrorDescription AS CHARACTER SERIALIZE-NAME "Description".


    /*Define local Variable*/
    DEF VAR FileData AS CHARACTER NO-UNDO.
    DEF VAR UnCommentedData AS CHARACTER NO-UNDO.
    DEF VAR localCounter AS INTEGER NO-UNDO.
    DEF VAR valCounter AS INTEGER NO-UNDO.
    DEF VAR ProgramSLNo AS INTEGER NO-UNDO.
    DEF VAR localFileName AS CHARACTER NO-UNDO.
    DEF VAR OriFileName AS CHARACTER NO-UNDO.
    DEF VAR ActualFileName AS CHARACTER NO-UNDO.
    DEF VAR NextChar AS CHARACTER NO-UNDO.
    DEF VAR vPass AS LOG NO-UNDO.
    DEF VAR counter AS INTEGER NO-UNDO.
    DEF VAR pathCounter AS INTEGER NO-UNDO.
    DEF VAR batchCounter AS INTEGER NO-UNDO.
    DEF VAR CharPointer AS INTEGER NO-UNDO.
    DEF VAR batFile AS CHARACTER NO-UNDO.
    DEF VAR sourceFileName AS CHARACTER NO-UNDO.
    DEF VAR PFFileName AS CHARACTER NO-UNDO.
    DEF VAR batchID AS INTEGER NO-UNDO.
    DEF VAR LineID AS INTEGER NO-UNDO.
    DEF VAR CallerID AS INTEGER NO-UNDO.
    DEF VAR DirectoryPath AS CHARACTER NO-UNDO.

    /*Data input from txt file*/
    DEF VAR charData AS CHARACTER NO-UNDO.
    DEFINE STREAM s1.
    DEFINE STREAM s2.

    /* Data input from each bat file*/
    DEF VAR batData AS CHARACTER NO-UNDO.
    /* populate keyword as a list from csv*/
    DEF VAR ReadWriteList AS CHARACTER NO-UNDO.
    /*buffer*/
    DEF BUFFER bufttTree FOR ttTree.

    CONSTRUCTOR CA():
    EMPTY TEMP-TABLE ttTree .
    EMPTY TEMP-TABLE ttBatchLog.
    EMPTY TEMP-TABLE ttProgramDetails.
    EMPTY TEMP-TABLE ttError.

    END CONSTRUCTOR.

    DESTRUCTOR PUBLIC CA( ):

    EMPTY TEMP-TABLE ttTree .
    EMPTY TEMP-TABLE ttBatchLog.
    EMPTY TEMP-TABLE ttProgramDetails.
    EMPTY TEMP-TABLE ttError.

    END DESTRUCTOR.

    @openapi.openedge.export(type="REST", useReturnValue="false", writeDataSetBeforeImage="false").
    METHOD PUBLIC VOID postCompanaRequest(INPUT ilcRequest AS LONGCHAR,
    OUTPUT oplcResponseData AS LONGCHAR,
    OUTPUT oplcErrorInfo AS LONGCHAR ,
    OUTPUT opMessage AS CHAR ):

    DEFINE VARIABLE vlOk AS LOGICAL NO-UNDO.
    DEFINE VARIABLE myParam AS JsonObject NO-UNDO.
    DEFINE VARIABLE myParamData AS JsonArray NO-UNDO.
    DEFINE VARIABLE myInputJSONObj AS JsonObject NO-UNDO.
    DEFINE VARIABLE vchError AS CHARACTER NO-UNDO.
    DEFINE VARIABLE vinErrorNum AS INTEGER NO-UNDO.
    DEFINE VARIABLE oParser AS ObjectModelParser NO-UNDO.

    DEFINE VARIABLE jsonResponse AS JsonObject NO-UNDO.
    DEFINE VARIABLE vlcResponseData AS LONGCHAR NO-UNDO.
    DEFINE VARIABLE vlcSchemaInfo AS LONGCHAR NO-UNDO.

    DEFINE VARIABLE inFileName AS CHARACTER NO-UNDO.
    DEFINE VARIABLE inCsvFileName AS CHARACTER NO-UNDO.
    DEFINE VARIABLE inTogNoOfLine AS CHARACTER NO-UNDO.
    DEFINE VARIABLE inTogNoOfProgram AS CHARACTER NO-UNDO.
    DEFINE VARIABLE inTogNoOfKeyword AS CHARACTER NO-UNDO.
    DEFINE VARIABLE inTogNoOfReadWrite AS CHARACTER NO-UNDO.
    DEFINE VARIABLE inTogDisplayProgramDetail AS CHARACTER NO-UNDO.

    ilcRequest = REPLACE (ilcRequest, "%20", " ").
    ilcRequest = REPLACE (ilcRequest, "%22", '"').
    /* OUTPUT TO "c:\users\514500\desktop\ilcRequest.txt".
    DISP 12 ilcRequest VIEW-AS EDITOR LARGE SIZE 50 BY 10.
    OUTPUT CLOSE. */
    /* create responseObject -parameter */
    oParser = NEW ObjectModelParser() NO-ERROR.
    myInputJSONObj = CAST(oParser:parse(ilcRequest), JsonObject) NO-ERROR.
    IF ERROR-STATUS:ERROR THEN
    DO:
    UNDO , THROW NEW Progress.Lang.AppError(PROGRAM-NAME(1) + " : LINE NUMBER : " + "{&LINE-NUMBER}" + " : " + ERROR-STATUS:GET-MESSAGE (1) , 1 ).
    END.

    IF VALID-OBJECT (myInputJSONObj) THEN
    DO:
    myParam = myInputJSONObj:GetJsonObject("Parameters").

    ASSIGN
    inFileName = (IF myParam:Has("FileName") THEN myParam:GetCharacter("FileName") ELSE "")
    inCsvFileName = (IF myParam:Has("CsvFileName") THEN myParam:GetCharacter("CsvFileName") ELSE "")
    inTogNoOfLine = (IF myParam:Has("TogNoOfLine") THEN myParam:GetCharacter("TogNoOfLine") ELSE "")
    inTogNoOfProgram = (IF myParam:Has("TogNoOfProgram") THEN myParam:GetCharacter("TogNoOfProgram") ELSE "")
    inTogNoOfKeyword = (IF myParam:Has("TogNoOfKeyword") THEN myParam:GetCharacter("TogNoOfKeyword") ELSE "")
    inTogNoOfReadWrite = (IF myParam:Has("TogNoOfReadWrite") THEN myParam:GetCharacter("TogNoOfReadWrite") ELSE "")
    inTogDisplayProgramDetail = (IF myParam:Has("TogDisplayProgramDetail") THEN myParam:GetCharacter("TogDisplayProgramDetail") ELSE "").
    /*
    inFileName = REPLACE(inFileName,"|","\").
    inCsvFileName = REPLACE(inCsvFileName,"|","\").
    */
    THIS-OBJECT:RunBatch(INPUT inFileName ,
    INPUT inCsvFileName ,
    INPUT LOGICAL(inTogNoOfLine) ,
    INPUT LOGICAL(inTogNoOfProgram),
    INPUT LOGICAL(inTogNoOfKeyword),
    INPUT LOGICAL(inTogNoOfReadWrite),
    INPUT LOGICAL(inTogDisplayProgramDetail)) NO-ERROR.


    IF ERROR-STATUS:ERROR THEN
    DO:
    UNDO , THROW NEW Progress.Lang.AppError(PROGRAM-NAME(1) + " : LINE NUMBER : " + "{&LINE-NUMBER}" + " : " + ERROR-STATUS:GET-MESSAGE (1), 1 ).
    END.
    /* ELSE DO:

    jsonResponse = NEW Progress.Json.ObjectModel.JsonObject().
    jsonResponse:ADD("outputdata", "File created successfully at C:\temp\Check.csv." ).
    jsonResponse:WRITE (OUTPUT oplcResponseData,TRUE) NO-ERROR.
    /* DISP 12 oplcResponseData VIEW-AS EDITOR LARGE SIZE 50 BY 10. */
    END. */
    END.
    CATCH ap AS Progress.Lang.AppError :
    ASSIGN
    vchError = ap:GetMessage(1)
    vinErrorNum = ap:GetMessageNum(1).
    END CATCH.

    CATCH e AS Progress.Lang.Error:
    ASSIGN
    vchError = e:GetMessage(1)
    vinErrorNum = e:GetMessageNum(1).

    END CATCH.
    FINALLY:
    oplcErrorInfo = "".
    oplcErrorInfo = THIS-OBJECT:getError(vchError, vinErrorNum).
    opMessage = IF vchError <> "" THEN TRIM(vchError) ELSE "Successfull".
    jsonResponse = NEW Progress.Json.ObjectModel.JsonObject().
    IF vchError <> "" THEN jsonResponse:ADD("outputdata", ERROR-STATUS:GET-MESSAGE (1) ).
    ELSE DO:
    jsonResponse:ADD("outputdata", "File created successfully at C:\temp\Check.csv." ).
    /* TEMP-TABLE ttError:WRITE-JSON ("LONGCHAR", vlcErrorInfo, TRUE) .*/
    END.
    jsonResponse:WRITE (OUTPUT oplcResponseData,TRUE) NO-ERROR.

    IF VALID-OBJECT (oParser) THEN DELETE OBJECT oParser NO-ERROR.
    IF VALID-OBJECT (myParam) THEN DELETE OBJECT myParam NO-ERROR.
    IF VALID-OBJECT (myParamData) THEN DELETE OBJECT myParamData NO-ERROR.
    IF VALID-OBJECT (myInputJSONObj) THEN DELETE OBJECT myInputJSONObj NO-ERROR.
    END FINALLY.
    END METHOD.

    METHOD PUBLIC LONGCHAR getError( INPUT ipchError AS CHARACTER,
    INPUT ipinErrorNum AS INTEGER ):
    DEFINE VARIABLE vlcErrorInfo AS LONGCHAR NO-UNDO.
    EMPTY TEMP-TABLE ttError.
    CREATE ttError.
    IF ipchError <> "" THEN
    DO:
    ASSIGN
    ttError.ErrorNum = ipinErrorNum
    ttError.RequestStatus = "Failure"
    ttError.ErrorDescription = ipchError.
    END.
    ELSE
    DO:
    ASSIGN
    ttError.ErrorNum = 0
    ttError.RequestStatus = "Success"
    ttError.ErrorDescription = "Successfull Json Response".
    END.
    TEMP-TABLE ttError:WRITE-JSON ("LONGCHAR", vlcErrorInfo, TRUE) .

    RETURN vlcErrorInfo.

    CATCH e AS Progress.Lang.Error:

    END CATCH.

    FINALLY:

    END FINALLY.

    END METHOD.

    METHOD PUBLIC CHAR RemoveCommentProc ( INPUT inLine AS CHARACTER):
    DEFINE VAR outLine AS CHARACTER NO-UNDO.
    DEFINE VAR vcUncommentedData AS CHARACTER NO-UNDO.
    DEFINE VAR CharPointer AS INTEGER NO-UNDO.
    DEF VAR CommentStarted AS LOGICAL INITIAL NO NO-UNDO.

    ASSIGN
    vcUncommentedData = inLine.

    IF (INDEX(inLine,"/*") > 0 OR
    INDEX(inLine,"*/") > 0) OR
    CommentStarted THEN
    DO:
    ASSIGN
    vcUncommentedData = "".
    DO CharPointer = 1 TO LENGTH(inLine):
    IF SUBSTR(inLine,CharPointer,2) = "/*" THEN
    ASSIGN CommentStarted = YES.
    IF SUBSTR(inLine,CharPointer,2) = "*/" THEN
    ASSIGN CommentStarted = NO.

    IF CommentStarted = NO THEN
    ASSIGN vcUncommentedData = vcUncommentedData + SUBSTR(inLine,CharPointer,1).
    END. /*DO CharPointer = 1 TO LENGTH(charData)*/

    ASSIGN
    outLine = vcUncommentedData. /* Assign the uncommented part of the line only*/
    END.

    ASSIGN
    outLine = vcUncommentedData.

    RETURN outLine.
    END METHOD.

    Continue reading...

Compartilhe esta Página