Sample COBOL85 Program Illustration for MCP

The following COBOL sample code shows the use of APIs in MCP.

The COBOL85 (SYMBOL/EPORTAL/OUTBOUND/INCLUDE) include file is provided and the file must be included in the COBOL file. Building and linking of the library for COBOL application vary depending on the MCP machine.

*
* This is User Program for calling the WEBAPPSUPPORT Library.
*
IDENTIFICATION DIVISION.
PROGRAM-ID. USERPROGRAM.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 LOG-LEVEL PIC 9(11) BINARY.
77 SYNC-MODE PIC S9(11) BINARY VALUE IS 0.
01 REQ-CONTENT PIC X(10000).
77 REQ-CONTENT-LEN PIC 9(11) BINARY.
77 PORT-NUM PIC 9(11) BINARY.
01 SERVER PIC X(50).
01 BASE-PATH PIC X(255).
01 OPERATION-ID PIC X(255).
01 RES-CONTENT PIC X(100000).
77 RES-CONTENT-LEN PIC 9(11) BINARY.
77 STATUS-CODE PIC 9(11) BINARY.
77 AUTH-TYPE PIC 9(11) BINARY VALUE IS 0.
01 CREDENTIALS PIC X(255).
77 SOL-SSL PIC 9(11) BINARY.
77 OPTION PIC 9(11) BINARY.
77 OPTION-VALUE PIC X(30).
77 OPTION-LEN PIC 9(11) BINARY.
77 OPTION-RESULT PIC S9(11) BINARY.
77 VERSION PIC S9(11) BINARY VALUE 4.
77 MAX-SESSIONS PIC S9(11) BINARY VALUE 2.
01 REASON PIC X(255).
77 RESULT PIC S9(11) BINARY.
77 CLIENT-HANDLE PIC 9(11) BINARY.
77 HOST-HANDLE PIC 9(11) BINARY.
77 SOCKET-HANDLE-1 PIC 9(11) BINARY.
77 REQUEST-HANDLE-1 PIC 9(11) BINARY.
77 SOCKET-HANDLE-2 PIC 9(11) BINARY.
77 REQUEST-HANDLE-2 PIC 9(11) BINARY.
77 TIME-OUT PIC 9(11) BINARY VALUE 15.
01 KEEP-ALIVE PIC X(10) VALUE "Keep-Alive".
01 LOG-FILE PIC X(255).

* Sample PayLOAD
* OutBound Service Base Path: /api/AirportsAPIV2/
* Example:
*   Path: /api/AirportsAPIV2/{OPERATIONID}

************************REQ-AIRPORTSAPIV2***********************
* *

01  REQ-AIRPORTSAPIV2.
    03  OPERATIONID PIC X(26).
        88  X-58D8BCB7A9E6240E200CFF25 VALUE
"X-58D8BCB7A9E6240E200CFF25".
    03  REQ-BUFFER PIC X(412).
********************X-58D8BCB7A9E6240E200CFF25******************
* **

* Summary: Airport by id.
* X-58d8bcb7a9e6240e200cff25
* Description: Retrieve airport by id.
    03  X-58D8BCB7A9E6240E200CFF25 REDEFINES REQ-BUFFER.
* Description: id, Airport code (3-character IATA code).
* The parameter ID is required
      05  LEN-ID PIC S9(3).
      05  ID PIC X(100).
      05  FILLER PIC X(309).

************************RSP-AIRPORTSAPIV2***********************
* *

01  RSP-AIRPORTSAPIV2.
    03  RSP-CODE PIC X(30).
* 58d8bcb7a9e6240e200cff25
      88  GET-200-58D8BCB7A9E6240E20-1 VALUE
"GET-200-58D8BCB7A9E6240E20-1  ".
* 58d8bcb7a9e6240e200cff25
      88  GET-400-58D8BCB7A9E6240E20-1 VALUE
"GET-400-58D8BCB7A9E6240E20-1  ".
* 58d8bcb7a9e6240e200cff25
      88  GET-500-58D8BCB7A9E6240E20-1 VALUE
"GET-500-58D8BCB7A9E6240E20-1  ".
    03  RSP-BUFFER  PIC X(99708).
********************X-58D8BCB7A9E6240E200CFF25******************
* **

* Get-200-58d8bcb7a9e6240e20-1
* Description: OK
    03  GET-200-58D8BCB7A9E6240E20-1 REDEFINES RSP-BUFFER.
      05  LEN-DESCRIPTION PIC 9(5).
      05  DESCRIPTION PIC X(100).
* Description: city, City where the airport is located.
      05  LEN-CITY PIC S9(3).
      05  CITY PIC X(100).
      05  COUNTRY.
* Schema Name: code
        07  LEN-X-CODE PIC S9(3).
        07  X-CODE PIC X(100).
        07  LEN-NAME PIC S9(3).
        07  NAME PIC X(100).
      05  GEOCOORDINATES.
        07  LATITUDE PIC S9(18)V9(5).
        07  LONGITUDE PIC S9(18)V9(5).
* Description: id, Unique identifier.
      05  LEN-ID PIC S9(3).
      05  ID PIC X(100).
      05  INBOUNDROUTES.
        07  LEN-HREF PIC S9(3).
        07  HREF PIC X(100).
* Schema Name: name
* Description: name-1, Name of the airport.
      05  LEN-NAME-1 PIC S9(3).
      05  NAME-1 PIC X(100).
      05  OUTBOUNDROUTES.
* Schema Name: href
        07  LEN-HREF-1 PIC S9(3).
        07  HREF-1 PIC X(100).
      05  FILLER PIC X(98836).

* Get-400-58d8bcb7a9e6240e20-1
* Description: BadRequest
    03  GET-400-58D8BCB7A9E6240E20-1 REDEFINES RSP-BUFFER.
      05  LEN-DESCRIPTION PIC 9(5).
      05  DESCRIPTION PIC X(100).
* Description: errorMessages, Actual elements count in the
* array.
      05  CNT-ERRORMESSAGES PIC S9(3).
      05  ERRORMESSAGES OCCURS 10 TIMES.
       06  ERRORMESSAGES PIC X(100).
       06  LEN-ERRORMESSAGES PIC S9(3).
      05  FILLER PIC X(98570).

* Get-500-58d8bcb7a9e6240e20-1
* Description: InternalServerError
    03  GET-500-58D8BCB7A9E6240E20-1 REDEFINES RSP-BUFFER.
      05  LEN-DESCRIPTION PIC 9(5).
      05  DESCRIPTION PIC X(100).
      05  LEN-ERRORMESSAGE PIC S9(3).
      05  ERRORMESSAGE PIC X(100).
      05  LEN-REFERENCEID PIC S9(3).
      05  REFERENCEID PIC X(100).
      05  FILLER PIC X(99397).


********************AIRPORTSAPIV2-DEFAULT-RSP*******************
* *

01  AIRPORTSAPIV2-DEFAULT-RSP.

    03  RSP-CODE PIC X(30).
* HTTP Status Message
    03  X-MESSAGE-LEN PIC 9(3).
    03  X-MESSAGE PIC X(256).
* HTTP Response Code
    03  X-CODE PIC 9(3).
* Local Response Subcode (Unisys-specific response subcodes)
    03  SUBCODE PIC 9(3).
* HTTP Response Message
    03  RESPONSE-LEN PIC 9(3).
    03  RESPONSE PIC X(2560).

* auto-generated  Cobol Payload Ends *


*
* Assing the Values
*
LOCAL-STORAGE SECTION.
COPY INCLUDE OF OUTBOUND OF EPORTAL OF SYMBOL ON DISK.


PROCEDURE DIVISION.
MAIN-PROCEDURE.
*
* Assing the Values for making outboud call
*
MOVE 1 TO LOG-LEVEL.
MOVE 1 TO  SYNC-MODE.
MOVE 5000 TO PORT-NUM.
MOVE "172.22.7.208" TO SERVER.
MOVE "/Api/AirportsAPIV2/" TO BASE-PATH.
MOVE "X_58D8BCB7A9E6240E200CFF25" TO OPERATION-ID.
*
* Call the library procedure passing the identifying string
*
CALL INITHTTPLIBRARY USING VERSION, TIME-OUT,
LOG-LEVEL, LOG-FILE, SYNC-MODE
GIVING RESULT.
IF RESULT = 1 THEN
 CALL CREATEHTTPSESSION
 USING CLIENT-HANDLE, HOST-HANDLE, SERVER, PORT-NUM, BASE-PATH,
 KEEP-ALIVE, AUTH-TYPE, CREDENTIALS
 GIVING RESULT
 IF RESULT = 1 THEN
*
* Assing the values to  RSP-AIRPORTSAPIV2 payload For
* Socket/Request 1
*

     MOVE "BCN                                             " TO
            ID OF X-58D8BCB7A9E6240E200CFF25

     MOVE 5000 TO REQ-CONTENT-LEN
     MOVE "X-58D8BCB7A9E6240E200CFF25" TO OPERATIONID
     MOVE REQ-AIRPORTSAPIV2 TO REQ-CONTENT

     CALL SENDHTTPREQUEST
     USING   SOCKET-HANDLE-1, CLIENT-HANDLE, HOST-HANDLE,
            REQUEST-HANDLE-1, OPERATION-ID, REQ-CONTENT,
            REQ-CONTENT-LEN
     GIVING  RESULT
     IF RESULT = 1 THEN
        Display "First Request Succesfull. ID= BCN"
     ELSE
        DISPLAY "Call Http request Failed. Error="RESULT
     END-IF

*
* Assing the values to  RSP-AIRPORTSAPIV2 payload For
* Socket/Request 2
*
     MOVE SPACES TO REQ-AIRPORTSAPIV2
     MOVE SPACES TO REQ-CONTENT
     MOVE "ACE                                             " TO
            ID OF X-58D8BCB7A9E6240E200CFF25

     MOVE 5000 TO REQ-CONTENT-LEN
     MOVE "X-58D8BCB7A9E6240E200CFF25" TO OPERATIONID
     MOVE REQ-AIRPORTSAPIV2 TO REQ-CONTENT


     CALL SENDHTTPREQUEST
     USING   SOCKET-HANDLE-2, CLIENT-HANDLE, HOST-HANDLE,
            REQUEST-HANDLE-2, OPERATION-ID, REQ-CONTENT,
            REQ-CONTENT-LEN
     GIVING  RESULT
     IF RESULT = 1 THEN
        Display "Second Request Succesfull. ID = ACE"
     ELSE
        DISPLAY "Call Http request Failed. Error="RESULT
     END-IF

*Poll for the response to come from Session 1
     PERFORM WITH TEST AFTER UNTIL RESULT NOT = -83

     CALL RECEIVEHTTPRESPONSE
     USING SOCKET-HANDLE-2, REQUEST-HANDLE-2, RES-CONTENT,
     RES-CONTENT-LEN, STATUS-CODE, REASON
     GIVING RESULT
        IF RESULT = 1 THEN
            DISPLAY "Response received."
             DISPLAY "STATUS-CODE : " STATUS-CODE
             MOVE  RES-CONTENT TO RSP-AIRPORTSAPIV2
             IF STATUS-CODE = 200 THEN
                DISPLAY  "DESCRIPTION=" DESCRIPTION OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY "CITY="  CITY OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY "X-CODE="  X-CODE OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY "LATITUDE="  LATITUDE OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY  "LONGITUDE=" LONGITUDE OF
                GET-200-58D8BCB7A9E6240E20-1
             ELSE
                  DISPLAY   RSP-AIRPORTSAPIV2
             END-IF


          END-IF
     END-PERFORM

     CALL DESTROYHTTPREQUEST
     USING  REQUEST-HANDLE-2
     GIVING RESULT
     CALL DESTROYHTTPSOCKET
     USING  SOCKET-HANDLE-2
     GIVING RESULT
*Clear
        MOVE SPACES TO RES-CONTENT
        MOVE SPACES TO RSP-AIRPORTSAPIV2

*Poll for the response to come from Session 2
     PERFORM WITH TEST AFTER UNTIL RESULT NOT = -83

      CALL RECEIVEHTTPRESPONSE
      USING SOCKET-HANDLE-1, REQUEST-HANDLE-1, RES-CONTENT,
      RES-CONTENT-LEN, STATUS-CODE, REASON
      GIVING RESULT
         DISPLAY  STATUS-CODE
          IF RESULT = 1 THEN
            DISPLAY "Response received."
             DISPLAY "STATUS-CODE : " STATUS-CODE
             MOVE  RES-CONTENT TO RSP-AIRPORTSAPIV2
             IF STATUS-CODE = 200 THEN
                DISPLAY  "DESCRIPTION=" DESCRIPTION OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY "CITY="  CITY OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY "X-CODE="  X-CODE OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY "LATITUDE="  LATITUDE OF
                GET-200-58D8BCB7A9E6240E20-1
                 DISPLAY  "LONGITUDE=" LONGITUDE OF
                GET-200-58D8BCB7A9E6240E20-1
             ELSE
                  DISPLAY   RSP-AIRPORTSAPIV2
             END-IF

          END-IF
     END-PERFORM
     CALL DESTROYHTTPREQUEST
     USING  REQUEST-HANDLE-1
     GIVING RESULT
     CALL DESTROYHTTPSOCKET
     USING  SOCKET-HANDLE-1
     GIVING RESULT

 ELSE
     DISPLAY "Failed to Create Session. Error=" RESULT
 END-IF

 CALL CLOSEHTTPLIBRARY
 USING  CLIENT-HANDLE, HOST-HANDLE
 GIVING RESULT
ELSE
   DISPLAY "Intialization of WebAPPSupport Failed. Error=" RESULT
END-IF.

STOP RUN.