E2E: BOPF-SADL-GW-SAPUI5 – Back and Forth
Summary
Here we are with the summary. You’ll find an overview in the document Introduction.
We have seen how to create a Gateway service based on a BOPF BO using SADL – and how this service is used in an UI application. There are open issues. The integration of BOPF in SEGW could be smarter. There could be for example some help to import the BOPF data model and to map the entities and the associations. There is no support for BOPF actions. This is all manual work. And we have seen that you can use implicit joins in read scenarios but not in modifying ones. And what about error handling? No single line on this in the series. Facing these gaps you may ask the following question.
Why using this technology at all?
Advantages in Read Only Scenarios
Let’s first talk about read only scenarios. There are not only the view building capabilities of SADL which allows creating easily the work lists and fact sheets the user needs. But you get a lot more.
The SADL engine is the same engine which is behind the scene of ALV and FPM on HANA. It is a proven, wide spread technical component caring for pushing down date centric operations to the database. Especially in SAPUI5/OData scenarios this is even more important than in SAPGUI or WebDynpro applications. Later profit from the data copied to the application server: the second request could be considerably faster than the first one. But OData services are stateless, the data you copy to the application server should be as suitable for the actual UI request as possible – the rest is waste and cost unnecessarily performance.
You get this out of the box in just defining the service as we have seen it in the blog: SADL provides the paging, the top 10 list, aggregates data, supports search, sorts the data, expands it – you do not have to implement a single one of these operations. Authority checks? No problem if they are modeled in BOPF or CDS SADL transforms them into an additional where clause in the SELECT statement.
I think these are already quite convincing reasons.
Advantages in Update Scenarios
In modifying scenarios you normally do not have to handle mass data but single instances in depth. This is another dimension of complexity. Pageing and so on is not so important but navigating to dependent nodes and executing the CUD operations consistently – meaning handling the composition constraints for example are the challenges. SADL solves it for you.
So even if the data model is more complex, the advantages are given, you do not have to implement the navigation and deep create method of the service for example.
But the most important reasons of all is that ABAP and the Business Suite are going this way. And here we are with a perfect transition to the outlook.
Outlook
Let’s start the outlook with a reference to Oliver Jägle’s blog TechEd 2014 – some thoughts on UI5 and its impact on business application development where he discusses the stateless/stateful programming model. It’s really worth reading it. One of his point is that if you have ‘real’ applications beyond some kind of approval scenarios, the application is not stateless – actually no application is stateless. The question is who is keeping the state. BOPF is well known for managing transactional buffers and all kind of images an application developer could need. And this state is in the ABAP memory. Isn’t that some kind of a conflict?
If you have stateless request, the state is either in the UI or on the database. The challenge with existing applications is, that they very often do not allow saving inconsistent data – the BOPF demo BO is with this respect very indulgent: it doesn’t check anything. But normally you will face problems if you just want to dump the UI input into the persistency.
You will need some kind of staging area on the database for existing applications where you keep the state which you do not want to keep on the UI and cannot keep in the original persistency. In 7.50 we are working on a programming model in this respect. And BOPF plays a central part for the persistency handling. A good UI is responsive, meaning that there is early feedback for erroneous input, that sums are immediately updated and so on. In the BOPF terminology you would say, that we need validations and determinations on the staged data. This is where BOPF shows its strengths. BOPF will not only be used for new applications, but for existing one to handle the objects in the staging area – currently we call them drafts. (Of course in the case of drafts BOPF will not use the buffers but communicate directly with the database.)
And there are lots of questions resulting of this approach on all levels: persistent locking and releasing the locks consistently, the interaction of SAPUI5 UIs and vanilla ones: one can handle drafts, the other one not. Does a user want to (or should he) see all drafts of all persons or only his ones. How to solve conflicting changes and so on.
To work on these challenges is the main focus for the next release, beside the move of BOPF from Business Suite Foundation layer to SAP Basis, some tool improvements like the usage of CDS views for the definition of the data tree of BOPF and the better support for GW model definition based on BOPF.
With this approach we are already beyond the question stateful – stateless. These are categories of a protocol, not of an application. An application has normally a state. But the draft concept based on CDS-SADL-BOPF brings a new quality to the applications: the fact that you can always save your data independently if you run a stateful or stateless protocol.
The BOPF – Gateway Integration based on SADL in 7.40 is the first step on this bigger construction area – and you can use it already. Stay tuned´.
Need for some background, visit the spaces BOPF Application Framework, SAP Gateway or SAPUI5 Developer Center.
Hi Thea,
I have query below of this
what do you mean exactly this..could you please explain more on this
Thanks,
Syam
Great explanation of BOPF-CDS-GW-UI5. Exactly what i was looking for. Thanks!
Hi Thea,
inside the summary of tutorial, you mentioned
A similar statement can be seen in Martin's TechEd blog.
Is this feature by now available in ADT, or do you know from which version on it is planned? Could you share some information how this is intended to look like if not?
Our project team is about to work with CDS and BOPF and we are seeking for best practice how both technologies should be combined, if any. Or in other words, is it depending on the requirements (create/update for example) if BOPF or CDS to be used, in case CDS does not (yet) act as a data model to be imported into BOPF?
I was looking for some information in SCN about this specific topic, but couldn't find much more than the 2 statements above.
Thanks
Carsten
I am virtually positive I saw one or more of the presenters at TECHED 2015 Las Vegas generate a BOPF entity from a CDS view.
When writing up my notes in the evening I had written to myself that this would be possible in 7.5.
I now have a 7.5 system, and I cannot see for the life of me how to do this.
The comments all over the internet say you define your CDS views (bound to me with associations, as that is what BOPF likes) and then somehow import this model into a new BOPF object using ABAP in Eclipse.
Then when finished with the BOPF coding of actions etc. you create another CDS view called a consumption view, which gets used to generate the Odata service in SEGW.
I clearly remember the presenter talking about this, my notes said you needed two CDS views and a BOPF definition to generate the Odata service for UI5, and then the SAP Web IDE generated the finished UI5 application for you pretty much.
None of this seems to be in ABAP 7.5, maybe they were demonstrating using a release of ABAP not yet out, and claiming it was 7.5, which would not cause me to faint with shock.
Or it is all there, just really well hidden.
@Thea - can you shed any light on this? Was I hallucinating at TECHED? is there such a thing as a consumption view and does it read and/or get generated from a BOPF definition? Can you import a CDS view model into ABAP in Eclipse whilst creating a BOPF entity?
Cheersy Cheers
Paul
Hi Paul,
you were not hallucinating, but I guess not all presented features are released for customers yet e.g. draft mode.
I wrote a blog post about the features which were presented at TechEd BCN.
SAP TechEd Barcelona: what was in for BOPF?
Cheers Martin
Hey Paul,
This is indeed available in 7.5. Have a look at the CDS Object Model annotations: ObjectModel Annotations - About ABAP Programming Model for SAP Fiori - SAP Library
If you add these annotations to your CDS views, the BOPF model is automatically generated when you activate the CDS view.
KR,
Bjorn
That is what I was looking for! I knew there was an annotation with the word BUSINESS_OBJECT in it, I was not seeing things that could not possibly exist in Las Vegas, well at least while I was at the conference, one of the pubs had zombie bartenders and I did doubt my eyes when I encountered them.
I think I am also starting to understand what SADL is all about. Because the acronym ends in "definition language" I thought it was some sort of language where you write things, but it looks like it is all to do with putting annotations into a CDS view, so they get picked up with you create a Odata service from that view.
Does that sound right?
Also almost everything I read seems to treat creating a BOPF model and a SEGW service as one and the same thing. Are these two things bundled or independent?
Cheersy Cheers
Paul
It works! It works!
As usual, the standard SAP help does not actually tell you how to do this, it gives vague hints. In the end I got it going by using some annotations from the help page you pointed me to and some from an SCN posting called "Deep Insert on BOPF CDS Views".
Then I went from getting nothing when I activated the two linked views to getting error messages, which was a good thing, because as vague and unhelpful the error messages are in ABAP in Eclipse usually you can have a stab at guessing what they are talking about.
The result, successful though it is, is what the "pragmatic programmer" book calls "programming by accident". I added assorted annotations and made assorted changes until it worked, but I cannot be sure exactly what changes caused it to work!
Still, as they, say, first make it work, then make it good. As long as the second bit is not ignored, all will be well.
Once again, many thanks for pointing me in the right direction, if you had not I had today earmarked as "give up and try again after the next support stack" day. I had even got as far as sending BASIS an email asking when the next support stack was due (expecting an answer of about six months minimum).
Cheersy Cheers
Paul
My pleasure! 🙂
Cheers,
Bjorn
Hi Thea,
regarding this statement:
Can you provide us with some more insight regarding these missing features? Are there plans to close these gaps with upcoming SPs? With 7.50 I have noticed an SEGW feature for referencing CDS-based models while defining OData entities, can we expect a similar functionality for BOPF models?
Thanks
Victor