Before you Begin

This 30-minute tutorial shows you how to plan and create the Application Class for an Application Service.

Background

Use the Application Service Framework to create and test Oracle Standard REST Provider Services.

The tutorials in this series describe processes used create the Application Class for the Application Service, create the Application Service and test the Application Service. In this series, you will create a sample Application Service.

Creating a Provider Application Service involves the following steps:

  1. Plan Application Service.
  2. Create an Application Class which will provide the application logic.
  3. Create Application Service.
  4. Create or import a root resource.
  5. Add URI templates.
  6. Add base template parameters to URI Template.
  7. Add method to URI template.
  8. Add input and output parameters to method.
  9. Optionally assign headers for the method.
  10. Define result states for the method.

This is the first tutorial in the Create Application Service series. Read the tutorials in the order listed.

Determine the Resources for your Application Service

For this tutorial, you will create an Application Service for music. The initial design should include:

  • URI Template(s)
  • Method(s)
  • Input Parameters
  • Output Parameters

This tutorial will begin by creating the Application Class that defines the application logic for the Application Service. For this Application Service, the user can retrieve the number of players and playdate for a specific instrument. It will also include the ability to post a player and music code for an instrument.

The root resource for the Application Service will include a GET and PUT method.

URI Template Index Method Input Parameters Output Parameters
band/{instrument} 1 GET
instrument (string)
numPlayers (number)
playdate (date)
band/{instrument} 1 POST player (string)
musicCode (integer)
results (string)

Create Application Class

In Application Designer create a new Application Package and Application Class that implements the application logic:

  1. In Application Designer create a new Application Package. File, New, Application Package.
  2. Select File, Save. Enter Description and click OK. Enter Name: APPSRVEXAMPLE.
  3. Right click on the package and select Insert App Class. Class Name: band.
  4. Double click band to add the code.

The application class must extend the  PCBAPPLSVCDEFN:ApplicationServiceBase application class and then implement the invokeService() method to define the application logic.

import PTCBAPPLSVCDEFN:ApplicationServiceBase;
class band extends PTCBAPPLSVCDEFN:ApplicationServiceBase;
method invokeService();
end-class;

method invokeService
/+ Extends/implements PTCBAPPLSVCDEFN:ApplicationServiceBase.invokeService +/

Define the variables for the Application Service parameters:

Local string &Inst, &httpMethod, &player, &results, &headervalue;
Local integer &UriIndex, &code;
Local time &timein;
Local date &datein;

Use the %This.ServiceAPI property to read and write parameters and other Application Services metadata.

&httpMethod = %This.ServiceAPI.HttpMethod; &UriIndex = %This.ServiceAPI.URIIndex;

Use the HttpMethod property and URIIndex property to return the HTTP method and URI index  that was invoked for the transaction.

If &httpMethod = "GET" Then
   If &UriIndex = 1 Then

 Use the getTemplateParameter method to retrieve template value based on parameter defined on the application service. 

&Inst = %This.ServiceAPI.getTemplateParameter("instrument");

Use setOutputParameters for single row output. The code is commented out here as the tutorial will use multi row output.

<* %This.ServiceAPI.setOutputParameter("numPlayers", 10);
  %This.ServiceAPI.setOutputParameter("instrument", &Inst);
  %This.ServiceAPI.setOutputParameter("playdate", %Date);
  %This.ServiceAPI.setOutputParameter("timeout", &timein); *>

Use insertOutputRow for multi row output. For this tutorial the output is hardcoded for simplicity.

 
         %This.ServiceAPI.insertOutputRow();
         %This.ServiceAPI.OutputRows [1].setParameter("numPlayers", 10);
         %This.ServiceAPI.OutputRows [1].setParameter("instrument", &Inst);
         %This.ServiceAPI.OutputRows [1].setParameter("playdate", Date(20220202));
         
         %This.ServiceAPI.insertOutputRow();
         %This.ServiceAPI.OutputRows [2].setParameter("numPlayers", 6);
         %This.ServiceAPI.OutputRows [2].setParameter("instrument", &Inst);
         %This.ServiceAPI.OutputRows [2].setParameter("playdate", %Date);
         

Use the result state property to set the result state. Results States denote logical conclusion for the service execution.

         %This.ServiceAPI.ResultState = "SUCCESS - PLAY MUSIC";
      End-If;
   End-If;
  

Next you will enter the code for the POST.


If &httpMethod  = "POST" Then
If &UriIndex = 1 Then  

Optionally you can add request and response headers. For this example, we will add both a request and response header to the POST.

Use getRequestHeaderValue to retrieve header value based  on header defined on the application service. Use setResponseHeader to set the response header value based on header defined on the application service.

&headervalue = %This.ServiceAPI.getRequestHeaderValue("Accept-Language");
%This.ServiceAPI.setResponseHeader("Type","Woodwind");

 Use the getTemplateParameter method to retrieve template value based on parameter defined on the application service.

&Inst = %This.ServiceAPI.getTemplateParameter("instrument"); 

Use the InputRows property to get values on the specified row.

&player = %This.ServiceAPI.InputRows[1].getParameter("player");
&Inst = %This.ServiceAPI.InputRows[1].getParameter("instrument");
&code = %This.ServiceAPI.InputRows[1].getParameter("musicCode");
&player = %This.ServiceAPI.InputRows[2].getParameter("player");
&Inst = %This.ServiceAPI.InputRows[2].getParameter("instrument");
&code = %This.ServiceAPI.InputRows[2].getParameter("musicCode");

Use the setOutputParameter to set output value based on parameter defined on the application service. (single row output)

%This.ServiceAPI.setOutputParameter("results", "Players added");

Use the result state property to set the result state.This is also the end of the if statement and end of the method.

        %This.ServiceAPI.ResultState = "Success";
      End-If;
   End-If;
   
end-method;

This is an example of the code: 

Description of app_class_code.png follows
Description of the illustration app_class_code.png

Next Steps

Create Application Service.