Skip to Content


Appendix A:  OData

Open Data Protocol (OData) (see also [MS-ODATA]: Open Data Protocol (OData) is a data access protocol for web applications.  A JavaScript library such as datajs is used to access an OData source.

The below sample uses an OData source from  There is a list of sample services available at

Note the Kapsel SDK as of SP 11, supports the V2 version of OData.

One of the nice features of OData is how simple it is to access an OData source.  Simply enter the OData URL with a $metadata parameter to see a description of the service.$metadata

It is also possible to use a free online tool such as xodata to visualize the metadata.image6.PNG

This describes that there are three entities named Products, Categories, Suppliers, what fields are in each entity and the associations between them.

To access the data, specify which data to read such as  As seen below, there are three categories, Food, Beverages and Electronics.

The data is formatted as either atom(xml) or json.  The json format is less verbose.  image5.PNG$format=json

The URLs to navigate the association between categories and products are shown in this link$format=json which shows the products for category 2 or Electronics.

Here are a few more examples.
First three products$top=3&$format=json
Fourth product$format=json
Products that start with the letter F$filter=startswith(Name, ‘F’) eq true&$format=json

The following links may also be helpful.
URI Conventions
Basic Tutorial

The below steps demonstrate how to create a simple OData web app.

Create a folder named C:\ODataSample.

Create a file named ODataSample\products.html and paste in the following code.

<script src="datajs-1.1.2.min.js"></script>

    function successCallback(data, response) {
        var productsTable = document.getElementById("productsTable");
        for (var i = 0; i < data.results.length; i++) {
            var row = productsTable.insertRow(1);
            var cell1 = row.insertCell(0);
            var cell2 = row.insertCell(1);
            var cell3 = row.insertCell(2); 
            cell1.innerHTML = data.results[i].Name;
            cell2.innerHTML = data.results[i].Description;
            cell3.innerHTML = data.results[i].Price;

    function errorCallback(e) {
        alert("An error occurred" + JSON.stringify(e));

    function init() {
        OData.defaultHttpClient.enableJsonpCallback=true;  //"", successCallback, errorCallback);

<body onload="init()">
    <table id="productsTable"><tr><th>Name</th><th>Description</th><th>Price</th></tr></table>

Download the latest datajs file (datajs-1.1.2.min.js) from datajs and place it in the folder ODataSample.

The datajs JavaScript library provides a read method that takes an OData URL and returns the data as a JavaScript object.


See also the example Cross-Site Request Forgery (CSRF)in the security section that performs create, read, update and delete operations.

Creating An OData Service with SQL Anywhere

SQL Anywhere 17 is included with SMP 3.0 SP10 Server and can be used to expose a database table as an OData service.  The following instructions demonstrate how this can be accomplished.



Create a new database.  Tools > SQL Anywhere 17 > Create Database Choose to save the database to the following file.


Specify the DBA user and password. I used my first name dan.
jConnect is not necessary.
Uncheck Connect to the new database.

After the database has been created, start it on a SQL Anywhere network server enabling it to be used as an OData service.

cd C:\SAP\MobilePlatform3\Server\db\sa\smp3\win32\Bin64
dbsrv17.exe -xs odata(ServerPort=8085) ..\..\odata.db

Start the dbisql tool.


Connect to the running database server.  Select Connect to a running database on this computer and fill in the user name (dan), password and Server name (odata).
Execute the following command to create a new table.

DROP TABLE IF EXISTS dan.CarrierCollection
CREATE TABLE dan.CarrierCollection(carrid char(3) NOT NULL PRIMARY KEY, CARRNAME char(20))
INSERT INTO dan.CarrierCollection(carrid, CARRNAME) VALUES('AA','American Airlines')
INSERT INTO dan.CarrierCollection(carrid, CARRNAME) VALUES('AB','Air Berlin')
INSERT INTO dan.CarrierCollection(carrid, CARRNAME) VALUES('AC','Air Canada')
INSERT INTO dan.CarrierCollection(carrid, CARRNAME) VALUES('AF','Air France')

Create a service model file in the following location with the below contents.

service {
  entity "dan"."CarrierCollection";

Execute the following command in dbisql to create an OData service based off of the CarrierCollection table.

MODEL FILE '../../service.osdl'

Open the following URLs to view the OData service.

Note the following command can be used to change a password.


Back to Getting Started With Kapsel

To report this post you need to login first.

1 Comment

You must be Logged on to comment or reply to a post.

Leave a Reply