E2E: BOPF-SADL-GW-SAPUI5 – Introduction
What a nasty title! Welcome the happy few keeping at it.
This series is about the creation of the ABAP backend based on Business Object Processing Framework (BOPF), Service Adaptation Description Language (SADL) and SAP Gateway (GW) for an UI application. As it describes also the creation of a SAPUI5 application it is an end to end (E2E) scenario. The latter one targets ABAP developers who are curious to see how their service is used in an UI. Experienced UI developers will rather be bored by this part and should just skip it.
Jens showed in his blog series ** TEAM FPM ** – How to Create Beautiful Apps on BOPF Objects: Simple, without Code and Deploying Latest Features (I) how easy it is to create FPM Applications if you are using the service adaptation engine with a BOPF model. Jens’ sample is more or less the application we are targeting for but using SAPUI5.
Tired of all those frameworks and buzz words, why should you read this blog about just another end to end example? This blog describes a construction area in 7.40 – a productive one. In the next release you will see a tighter integration of CDS and BOPF and the stack then must read BOPF/CDS-SADL-GW-SAPUI5. So it is not only interesting for the confirmed fans of BOPF but for all who are planning a new ABAP based project. ABAP and the Suite are going this way.
- Introduction – describing which application I want to build
- Mapping an Entity Set – describing how to create an entity set based on a CDS view related to the BOPF model
- Implicit View Building – describing how to create an entity set based on a BOPF node taking advantage of the BOPF 0…1 associations
- Mapping Associations – describing how to use BOPF associations to link entity sets
- Modifying associated data – describing how to create and update data related via associations
- Enhancing Entity Types – describing how to add new properties to an entity type
- Back and Forth – resuming the most important topics and looking ahead
Prerequisites and Limitations
To follow this series it is advantageous to have a basic understanding of BOPF and Gateway. In addition some knowledge about Java Script and SAPUI5 is not an obstacle. This is not an introduction to none of them.
I’m also not going to discuss service modelling issues. You may question the granularity of the service or the entity sets I’m going to use. There is certainly a lot to argue. But I want to show the advantages of the BOPF – GW integration using the Service Adaptation Engine. A reasonable understandable example answers my purpose.
I’m using features available in NetWeaver 7.40 SP11 and the related Business Suite EHP support package. The example requires the SAPUI5 libraries 1.26.2 minimum.
OData services should be built with an application in mind. The application I’m targeting for is the maintenance of products. The UI should be alike the sketch below:
We start with a list of categories. Selecting a category searches all products assigned to the selected category. Selecting a product displays the product details including information about the supplier of the product. On the detail page you can edit product or supplier details. So more or less the same application, Jens has built in his blog.
The video shows our target application.
The BOPF – EPM data model
The UI application requires the Product and Business Partner business objects. I will use the demo business objects /BOBF/EPM_PRODUCT and /BOPF/EPM_BP. Let’s just have look on what they are offering.
The following video introduces the BOPF data model as well.
We have two business objects: the product and business partner. The product has two nodes, the ROOT and the PRODUCT_NAME nodes. The product root node consists of attributes like ID, category, supplier ID, price and so on. The product name and description is language dependent, so we find a language composition. This is a special kind of composition: it is a 1:0..n relationship, but during runtime it is filtered by the logon language per default. So it appears to be a 1: 0 ..1 relationship.
The business partner ROOT node consists of attributes like ID, company name, legal form. As a company may have several addresses we have a composition to addresses. In the ADDRESS node we find attributes like country, city, e-mail address and so on.
In the UI application we do not want to display all addresses of a supplier, but only one. Fortunately the model offers a foreign key association to the main address: exactly what we are looking for.
Both BOs are linked via a foreign key association from the product ROOT to the business partner ROOT
So overall this is the cutaway from the BOPF EPM data model we are going to use in this blog.
Want to learn more about BOPF? Go to the BOPF SCN Sitemap. To create the BOPF objects see the tutorials Getting Started with Business Object Processing Framework and Defining Associations with Business Object Builder eXpert.
The Gateway Entity Sets
Knowing the target UI and having an idea to which objects the request can be mapped, we deduce following entity sets for the OData service:
The category list will be provisioned by an entity set Categories. The product list and product details work with an entity set Products and last but not least the supplier details are using the BusinesPartner entity set.
Now we have to bring these models together with the BOPF one. This is the target of the next step: Mapping an Entity Set.