Skip to Content

The paradigm for SAP Business One solutions have completely changed (you probably notice that if you were not hiding in a cave). It started with small steps when we first adopted SAP HANA as our platform. The main drive was the push the add-ons’ business logic from the legacy fat client to the server and, by the usage of Service Layer, leveraging standard protocols such as Odata we opened SAP Business One to countless possibilities. With Social Media integration, IoT and Voice Interfaces, just to name a few

In a more recent wave. We have digital transformation happening in the cloud and all the benefits that comes with it. Much further than a simplistic idea of porting your logic to the server. It gives your solution an amazing flexibility You can choose the technology, the services, when to implement new features and which customer will have access to it. And of course, hence you will be untangled from SAP Business One, you can create “multiple erp” solutions, like the SMB Marketplace or simply plug your B1 app to other system, like we did with the Amazon Echo and ByD.

With that mindset, I developed a tutorial repository to go trough some features of a cloud application. Such as deployment, scalability and persistence.

In this blog I am going to teach you how to get start and create your first SAP Business One loosely coupled solution. So get your git installed (shame on you if didn’t have it) and let’s do some code!

Get your free SAP Cloud Platform trial Account with Cloud Foundry

This is all you need to get started and It’s quite easy to do it. Just follow this great tutorial and you will be all set

Do I need a SAP Business One System?

Not at all! The app supports the B1 APIs available in the SAP API Business Hub so we can play with B1 data in a sandbox without having a system.

You will need an API Key which you can get by clicking in the button in the details page

In case you want to use your own system. Make sure the B1 Service Layer port is exposed to the public internet, otherwise your loosely coupled app won’t be able to fetch data from it. If you don’t have a valid SSL certificate (which is the case for most dev environments). You can use the http port 50001.

Step 1 – Clone the Git Repository and deploy the app on Cloud Foundry

This is really basic, we first clone the GitHub repository executing

$ git clone https://github.com/B1SA/cfDemoSummit18.git

You should have a directory with all the files from the master branch in it. Navigate to this new directory and change it for the first step of our exercise with:

$ git checkout step_1

Time to send the app to the cloud!

If you followed the SAP Cloud Platform tutorial (the last step) mentioned before, you are already logged into the Cloud Foundry environment so in this case, create your cloud app is simple as:

$ cf push --random-route

–random-route will avoid name collisions with others that deploy this same app on SCP. You can choose your own app name by changing the manifest.yml file.

By the end of the process, your terminal should show something like this:

You can clearly see the route where your app is running and check it from your browser

Ok, but this is an empty HTML page. Where are the B1 Items?

Hold your horses, cowboy! We’ve just deployed the app, now we need to configure the environment. We could hard-code routes and credentials in the codebase. But this is not a Cloud development best practice. Instead, you should always use environment variables.

Set an environment variable for one app on cloud foundry is easy as:

$ cf set-env <appname> <env variable Name> <value>

The app require the following environment variables:

//Basic Variables
$ cf set-env cfdemosummit18 B1_SERVER_ENV http://<your b1 server> or API HUb
$ cf set-env cfdemosummit18 B1_SLPORT_ENV <Service Layer Port> or "" if API HUB
$ cf set-env cfdemosummit18 B1_SLPATH_ENV <Service Layer path> or API HUB path
$ cf set-env cfdemosummit18 B1_COMP_ENV <B1 Company DB>

//When using your own environment
$ cf set-env cfdemosummit18 B1_USER_ENV <B1 User Name>
$ cf set-env cfdemosummit18 B1_PASS_ENV <B1 User Password>

//When using the SAP API HUB
$ cf set-env cfdemosummit18 APIKey <Your API Hub Key> 
$ cf set-env cfdemosummit18 APIHUB true

In my case, using the API HUB the variables would be like:

$ cf set-env cfdemosummit18 B1_SERVER_ENV https://sandbox.api.sap.com
$ cf set-env cfdemosummit18 B1_SLPORT_ENV ""
$ cf set-env cfdemosummit18 B1_SLPATH_ENV /sapb1/b1s/v2/
$ cf set-env cfdemosummit18 B1_COMP_ENV SBODEMOUS
$ cf set-env cfdemosummit18 APIHUB true
$ cf set-env cfdemosummit18 APIKey iamnotshowingyoumykey

time to restart the app and check it once again

$ cf restart cfdemosummit18

TADA!!

Step 2 – Monitoring and Scaling

Let’s assume your solution that lists B1 Items is a huge success. A lot of users are accessing it. First thing you do is to monitor the app’s usage with:

$ cf app cfdemosummit18

Now it’s time to scale our application to support more users. Let’s do a scale out, that will create more instances of our application to support a high traffic, for example.

For this part of the tutorial, we need to switch to another branch of our repo:

$ git checkout step_2
// And push this new version to the Cloud Foundry environment
$ cf push
//Then we can create, lets say, 3 instances of the app with 
$ cf scale cfdemosummit18 -i 3

Checking how the app looks like now  you will see the multiple instances:

The Cloud Foundry Environment variable CF_INSTANCE_INDEX returns the number of the instance which your app is running. You can see my implementation here.

If you access your app from the web browser and refresh the page fast enough, you can check that the web page is provided by different servers. The load balancing it’s done automatically so you don’t have to worry about that.

https://i.imgur.com/1wy2W7U.png

Step 3 – Cloud Foundry Services (Persistence)

The SAP Cloud Platform offers a great amount of services to support and enhance your application. Many of those are available in the Cloud Foundry environment. To check what services are assigned to your trial account

$ cf markeplace

There are two steps to have a service in your application, first you need to create it and then bind it to one or many apps. Like this:

$ cf create-service <Service> <Plan> <service_instance_name>
$ cf bind-service <app name>  <service_instance_name>

In our case we want to create a PostgreSQL DB Service named itemdb. There are 2 plans available, we gonna use the V9.4-dev. Then we will bind it to the cfdemosummit18 app

$ cf create-service postgresql v9.4-dev itemdb
$ cf bind-service cfdemosummit18 itemdb

You can check the services and bounds in your account by executing $ cf services. Once a service is bound, the connection parameters are availabe in the VCAP_SERVICES environment variable. You can see my implementation here.

To check the Environment Variables of your app:

$ cf env cfdemosummit18

As in the previous step, checkout the step_3 branch and push it to the cloud. You will be able to interact with your new DB:

Step 4 – Create B1 Items from Cloud DB

Last step is just to close the cycle and synchronize the items created in the PostgreSQL db in the cloud to your B1 environment using Service Layer. It doesn’t use any additional cloud feature but you can check the code here

That’s it!

Hope you find this tutorial useful and get start developing cloud applications. You can also find a .Net version for the same app. Ithe Cloud is all about choice, so choose your runtime, tools and platforms and let us know if you have any questions. Just ping me on twitter @Ralphive

To report this post you need to login first.

Be the first to leave a comment

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

Leave a Reply