[Stackoverflow] [Progress OpenEdge ABL] OpenEdge: create REST services using PAS

  • Thread starter Swagatha Chatterjee
  • Start date
Status
Not open for further replies.
S

Swagatha Chatterjee

Guest
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...
 
Status
Not open for further replies.
Top