VOOZH about

URL: https://www.cdata.com/kb/tech/saparibasource-odata-sapui5.rst

⇱ Integrate Real-Time Access to SAP Ariba Source in SAPUI5 MVC Apps


Integrate Real-Time Access to SAP Ariba Source in SAPUI5 MVC Apps

πŸ‘ Jerod Johnson
Jerod Johnson
Director, Technology Evangelism
Use the built-in ODataModel class in SAPUI5 to create Web apps that reflect changes to SAP Ariba Source data in real time.

In this article we show how to use the CData API Server to write SAPUI5 apps that leverage the capabilities of the SAP Ariba Source API, without writing to a back-end database. The API Server is a lightweight Web application that runs on your server and produces OData feeds of SAP Ariba Source data. OData is the standard for real-time data access over the Web and has built-in support in SAPUI5 and OpenUI5.

Set Up the API Server

If you have not already done so, download the CData API Server. Once you have installed the API Server, follow the steps below to begin producing secure SAP Ariba Source OData services:

Connect to SAP Ariba Source

To work with SAP Ariba Source data from SAPUI5, we start by creating and configuring a SAP Ariba Source connection. Follow the steps below to configure the API Server to connect to SAP Ariba Source data:

  1. First, navigate to the Connections page.
  2. Click Add Connection and then search for and select the SAP Ariba Source connection. πŸ‘ Selecting a data source (SQLite is shown)
  3. Enter the necessary authentication properties to connect to SAP Ariba Source.

    In order to connect with SAP Ariba Source, set the following:

    • API: Specify which API you would like the provider to retrieve SAP Ariba data from. Select the Supplier, Sourcing Project Management, or Contract API based on your business role (possible values are SupplierDataAPIWithPaginationV4, SourcingProjectManagementAPIV2, or ContractAPIV1).
    • DataCenter: The data center where your account's data is hosted.
    • Realm: The name of the site you want to access.
    • Environment: Indicate whether you are connecting to a test or production environment (possible values are TEST or PRODUCTION).

    If you are connecting to the Supplier Data API or the Contract API, additionally set the following:

    • User: Id of the user on whose behalf API calls are invoked.
    • PasswordAdapter: The password associated with the authenticating User.

    If you're connecting to the Supplier API, set ProjectId to the Id of the sourcing project you want to retrieve data from.

    Authenticating with OAuth

    After setting connection properties, you need to configure OAuth connectivity to authenticate.

    • Set AuthScheme to OAuthClient.
    • Register an application with the service to obtain the APIKey, OAuthClientId and OAuthClientSecret.

      For more information on creating an OAuth application, refer to the Help documentation.

    Automatic OAuth

    After setting the following, you are ready to connect:

      APIKey: The Application key in your app settings. OAuthClientId: The OAuth Client Id in your app settings. OAuthClientSecret: The OAuth Secret in your app settings.

    When you connect, the provider automatically completes the OAuth process:

    1. The provider obtains an access token from SAP Ariba and uses it to request data.
    2. The provider refreshes the access token automatically when it expires.
    3. The OAuth values are saved in memory relative to the location specified in OAuthSettingsLocation.
    πŸ‘ Connecting to a datasource (SQLite is shown)
  4. After configuring the connection, click Save & Test to confirm a successful connection.

Configure API Server Users

Next, create a user to access your SAP Ariba Source data through the API Server. You can add and configure users on the Users page. Follow the steps below to configure and create a user:

  1. On the Users page, click Add User to open the Add User dialog.
  2. Next, set the Role, Username, and Privileges properties and then click Add User. πŸ‘ Configure a new user
  3. An Authtoken is then generated for the user. You can find the Authtoken and other information for each user on the Users page: πŸ‘ API Server user settings

Creating API Endpoints for SAP Ariba Source

Having created a user, you are ready to create API endpoints for the SAP Ariba Source tables:

  1. First, navigate to the API page and then click Add Table . πŸ‘ Add tables
  2. Select the connection you wish to access and click Next. πŸ‘ Select the connection (SQLite is shown)
  3. With the connection selected, create endpoints by selecting each table and then clicking Confirm. πŸ‘ Adding tables from the connection (SQLite is shown)

Gather the OData Url

Having configured a connection to SAP Ariba Source data, created a user, and added resources to the API Server, you now have an easily accessible REST API based on the OData protocol for those resources. From the API page in API Server, you can view and copy the API Endpoints for the API:

πŸ‘ API Endpoints

Create the View

In this article the user views and interacts with SAP Ariba Source data through an SAPUI5 table control. Table columns will be automatically detected from the metadata retrieved from the API Server's API endpoint. We define the following table in a separate View.view.xml file:

<mvc:View
 controllerName="sap.ui.table.sample.OData2.Controller"
 xmlns="sap.ui.table"
 xmlns:mvc="sap.ui.core.mvc"
 xmlns:u="sap.ui.unified"
 xmlns:c="sap.ui.core"
 xmlns:m="sap.m">
 <m:Page
 showHeader="false"
 enableScrolling="false"
 class="sapUiContentPadding">
 <m:content>
 <Table
 id="table"
 selectionMode="MultiToggle"
 visibleRowCount="10"
 enableSelectAll="false"
 rows="{/Vendors}"
 threshold="15"
 enableBusyIndicator="true"
 columns="{
 path: 'meta>/dataServices/schema/[${namespace}===\'CData\']/entityType/[${name}===\'Vendors\']/property',
 factory: '.columnFactory'
 }">
 <toolbar>
 <m:Toolbar>
 <m:Title text="SAP Ariba Source Vendors"></m:Title>
 </m:Toolbar>
 </toolbar>
 <noData>
 <m:BusyIndicator class="sapUiMediumMargin"/>
 </noData>
 </Table>
 </m:content>
 </m:Page>
</mvc:View>

Create the Model and Controller

In SAPUI5, you do not need to write any OData queries; an ODataModel instance handles the application's data access commands. The API Server then translates the queries into SAP Ariba Source API calls.

The controller processes user input and represents information to the user through a view. Define the controller in a new file, Controller.controller.js. Instantiate the model in the onInit function -- you will need to replace the placeholder values for the URL to the API Server, a user allowed to access the OData endpoint of the API Server, and the authtoken for the user.

sap.ui.define([
 "sap/ui/core/mvc/Controller",
 "sap/ui/model/odata/v2/ODataModel",
 "sap/ui/model/json/JSONModel",
 "sap/ui/table/Column",
 "sap/m/Text",
], function(Controller, ODataModel, JSONModel, Column, Text ) {
 "use strict";
 

 return Controller.extend("sap.ui.table.sample.OData2.Controller", {
 
 onInit : function () {
 
 var oView = this.getView();
 var oDataModel = new ODataModel("http://myserver/api.rsc/",{user: "MyUser", password: "MyAuthToken"});
 
 oDataModel.getMetaModel().loaded().then(function(){
 oView.setModel(oDataModel.getMetaModel(), "meta");
 });
 oView.setModel(oDataModel);
 
 var oTable = oView.byId("table");
 var oBinding = oTable.getBinding("rows");
 var oBusyIndicator = oTable.getNoData();
 oBinding.attachDataRequested(function(){
 oTable.setNoData(oBusyIndicator);
 });
 oBinding.attachDataReceived(function(){
 oTable.setNoData(null); //use default again ("no data" in case no data is available)
 });
 },
 
 onExit : function () {
 },
 
 columnFactory : function(sId, oContext) {
 var oModel = this.getView().getModel();
 var sName = oContext.getProperty("name");
 var sType = oContext.getProperty("type");
 var iLen = oContext.getProperty("maxLength");
 iLen = iLen ? parseInt(iLen, 10) : 10;
 
 return new Column(sId, {
 sortProperty: sName, 
 filterProperty: sName,
 width: (iLen > 9 ? (iLen > 50 ? 15 : 10) : 5) + "rem",
 label: new sap.m.Label({text: "{/#Vendors/" + sName + "/@name}"}),
 hAlign: sType && sType.indexOf("Decimal") >= 0 ? "End" : "Begin",
 template: new Text({text: {path: sName}})
 });
 }
 
 });

});

Describe Application Logic

Create a component that contains the resources of your application. Define the following in Component.js:

sap.ui.define([
 'sap/ui/core/UIComponent'
], function(UIComponent) {
 "use strict";

 return UIComponent.extend("sap.ui.table.sample.OData2.Component", {
 metadata : {
 rootView : "sap.ui.table.sample.OData2.View",
 dependencies : {
 libs : [
 "sap.ui.table",
 "sap.ui.unified",
 "sap.m"
 ]
 },

 config : {
 sample : {
 stretch : true,
 files : [
 "View.view.xml",
 "Controller.controller.js"
 ]
 }
 }
 }
 });

});

Bootstrap OpenUI5 and Launch

To complete the MVC application, simply add the bootstrap and initialization code. Add these directly to index.html:

<!DOCTYPE HTML>

<html>
<head>
 <meta http-equiv="x-ua-compatible" content="ie=edge">
 <meta charset="utf-8"> 
 <title>SAP Ariba Source Vendors</title>
 
 <script id="sap-ui-bootstrap"
 src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
 data-sap-ui-libs="sap.m"
 data-sap-ui-theme="sap_bluecrystal"
 data-sap-ui-xx-bindingSyntax="complex"
 data-sap-ui-preload="async"
 data-sap-ui-compatVersion="edge" 
 data-sap-ui-resourceroots='{"sap.ui.table.sample.OData2": "./", "sap.ui.demo.mock": "mockdata"}'>
 </script>
 
 <!-- application launch configuration -->
 <script>
 
 sap.ui.getCore().attachInit(function() {
 new sap.m.App ({
 pages: [
 new sap.m.Page({
 title: "SAP Ariba Source Vendors", 
 enableScrolling : false,
 content: [ new sap.ui.core.ComponentContainer({
 height : "100%", name : "sap.ui.table.sample.OData2"
 })]
 })
 ]
 }).placeAt("content");
 });

 </script>
</head> 
 <!-- UI Content -->
<body class="sapUiBody" id="content" role="application">
</body> 
</html>

The resulting SAPUI5 table control reflects any changes to a table in the remote SAP Ariba Source data. You can now browse and search current SAP Ariba Source data.

πŸ‘ A table in SAPUI5 that reflects changes to the data in real time. (Salesforce is shown.)