Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
Showing results for 
Search instead for 
Did you mean: 
Active Contributor
NARRATOR: There have been two horrible crime's committed on the 23rd of November2021. One was murder most foul, the other the release of a new ABAP related book and associated musical. It is difficult to say which is worse but this series of blogs will help you decide whilst singing and dancing and solving a crime and thus winning prizes.

Abbot and Costello meet Frankenstein

Previously on this channel:-

NARRATOR: The SAP Press Gala Party to celebrate the fourth edition of „ABAP to the Future“ was slated for 23/11/1792. The guests pay a million dollars a shot for a ticket and travel backwards in time from 23/11/2021 through the BW bridge time tunnel to get to the party – and are about to start arriving in this very blog - but  on that – fateful – night the guests were in for some very strange surprises indeed....


Book Writing



The Most re-Invented Wheel in History - Chapter 11 - ABAP2XLSX

ABAP2XLSX is a tool for creating spreadsheets in Excel using ABAP code. It was invented by Ivan Femia in the year 2010.

At my company I started Excel enabling all the ALV reports round about June 2012. I encapsulated the code such that changing a report (so that the output could be rendered as a spreadsheet and emailed to whoever you so desired, even if the report was run overnight as a batch job) only took about two hours if that. By about 2013 every ALV report had that facility.

You would not believe how much time this saved our business people every year – not having to send ages downloading spool requests and changing them into spreadsheets, not having to change the print settings manually and so forth. You could even call it a GAME CHANGER.

AUDIENCE: (Stand up, wave their hands in the air) Changer! Changer! Game Changer Will Robinson!

So – ABAP2XLSX is eleven years old. What is it doing in a book with the word „future“ in the title? Quite simply because obviously no-one in the entire world knows that ABAP2XLSX exists.

Why would I make such a claim? Because in that 11 year period there have been hundreds of blogs on SCN – at least one every single month, sometimes one every week – all of which are about some new tool someone has written to create spreadsheets in Excel using ABAP. Some of those new inventions even use the OLE technology ABAP2XLSX was invented to replace (OLE only works online and is really slow).

On many of those blogs you will see me and the the „usual suspects“ informing the poster about the existence of ABAP2XLSX and pointing them to the blogs and/or GitHub site. This is shocking news to the majority of the people who create such blogs. So I want to write in letters of fire a thousand miles high that there is such a thing as ABAP2XLSX and you can use it to create spreadsheets out of ABAP.

Here is one such blog:

There are three other arguments used in such blogs once the subject of ABAP2XLSX comes up. One is that it is too „big“ to install, which is silly, and one is that is too complicated to use, which is utterly ridiculous and not even worth responding to. I think the latter argument is really saying „It is all classes and methods – it is that OO nonsense and no one knows how to program using that! It even has automated Unit Tests! Arrrrgggghhhh! Send for the Fire Brigade! Pugh, Pugh, Barley McGrew, Cuthbert, Dibble, Grubb!“

The remaining argument goes like this. In the morning at breakfast the poster reads my comment talking about ABAP2XLSX on their company phone which is crawling with open source software. They think to themselves „he just does not understand“ but there is no time to reply instantly, it is time to drive to work.

So they get into their company car, which is crawling with open source software. They arrive at work and switch on their company supplied laptop/desktop which is crawling with open source software. They log onto the SCN via a browser that crawls with open source software and post a reply to me explaining they cannot install ABAP2XLSX at their company, because the company has a „no open source“ policy.

Next argument – ABAP is a special snowflake, nothing like other languages.

Let us put it this way – if I have a problem and i find that it is (what I consider) an obvious bug in standard SAP code then because I am paying a very large amount of money on license fees I raise a ticket in OSS. After many weeks of back and forth I am told either it is working as designed or this is consulting matter and please stump up oodles of extra cash.

In an open source ABAP project you do not have this type of support because you are not paying any money. Instead what you are supposed to do is fix the problem yourself and then submit a „pull“ request with your changed code so the problem is fixed for everybody (i.e. instead of paying someone to maybe fix it for you instead you fix it yourself and other people benefit) or if you cannot work out the problem submit an issue on the GitHub site. I go through an example of this in the book which in the end resulted in a clear cut improvement in the functionality of the ABAP2XLSX product.

Business Objects in SAP Attempt 94 - Chapter 7 – BOPF

There have been multiple attempts to represent business objects (like sales orders or monsters) inside SAP. Workflow objects, CRM objects, BAPIs and „persistent“ objects to name but a few.  Usually the idea was to create a business object in a declarative fashion – without writing one line of code.

AUDIENCE: (Sings) Code code, go away! Come again another day!

Attempt number 94 was the Business Object Processing Framework (BOPF) which was to be the final version, the be-all and end-all, never to be replaced.

You may remember when the first edition of A2TF came out Oliver Jaegle from Germany wrote a series of blogs lambasting me in regard to my BOPF chapter and describing how he would have written the chapters e.g.

He made some very valid points but I am never going to agree with him on the main point which is thus:-

  • His position was that a „model“ class was not needed. He wanted the business logic to be in a BOPF specific class (i.e. implement a BOPF specific interface to communicate with the BOPF framework). Then when a new framework came along one could just add another interface to communicate with the new thing.

  • I on the other hand have a “model class” which knows nothing about the framework. Thus the same class can be used for Web Dynpro / BOPF / The forthcoming new thing / whatever. The framework depends on the class, the class does not depend on the framework, hence I (think I) have achieved dependency inversion. This is in line with Graham Robinson’s two laws for Gateway services which are “encapsulate all business logic in re-usable classes” and “encapsulate all  business logic in re-usable classes”. I might like to add a third law which is “encapsulate all  business logic in re-usable classes”.

However leaving aside that major difference in philosophy from the start I had no doubt a lot of things that Oliver said I had done incorrectly were in fact done incorrectly. Unfortunately it was about five years before I got round to printing all his blogs out and reading them in great detail and working out what criticisms were valid and thus what corrections I had to make. It wasn’t very many at all I was pleased to find, mainly tweaks to the code. However I only managed to make half of those corrections before the timer ran out, as it were.

Oh What a Tangled Web we Weave! - Chapter 12 – WDA

Classic Method of UI Design

There is one thing that BOPF and WDA have in common, at least for me. Until I embarked on the quest to write SAP books I did not know anything about either of them. Five years later on and I know a great deal about both and I have become very comfortable with both technologies, just at the point they both have become obsolete.

Oh well, at least it is not raining.

What I will say as someone who has gone through the process of learning how to wite a WDA app and a UI5 app from scratch, the UI5 learning curve was much easier, and I am talking about coding the app oneself in JavaScript, not automatically generating it. I want to stress this because it is really important – learning to write a UI5 application in a programming language I did not yet know was easier than doing the equivalent with a technology where the code was in ABAP.

That is partially because WDA is far too over-complicated with so many moving parts and is in some ways more an exercise in configuration than coding, but mainly because programmers find it easy to learn new languages – even if they think otherwise. Put another way many ABAP programmers have a mental block when it comes to anything that is not ABAP and so don‘t even try to have a crack at JavaScript. If they even tried they would find it much easier than they could have ever imagined.

Think about it – I went from BASIC to PASCAL to ABAP and they all have different syntax, but they all have IF statements and various sorts of loops and ways to store a collection of data. Put another way – lots of ABAP programmers have managed to use the „new“ syntax without having a nervous breakdown. As an example if you can work out how to replace the CASE statement in ABAP with the SWITCH statement in ABAP why should you break down in tears trying to achieve the same thing in JavaScript (which uses a SWITCH statement)?

There are some fundamental differences in JavaScript – it is a functional language and has some „funny“ ideas like immutable variables (once a variable gets a value it cannot be changed) and variables changing their type at runtime depending on what value goes into them, and lastly the „function as first class citizen“ whereby a function can be passed as a parameter. That last bit takes a while to get your ahead around but when the light bulb finally goes on you say „Oh! That’s Really Good!“

At SAP TECHED this year SAP were spinning the line „ABAP Developers are the only full stack developers“. What they mean by that is that if you can program the back end in ABAP and the front end in JavaScript and XML then that means you are an expert on all the various pancakes in the „full stack of pancakes“ that make up a web application.

If you do become conversant with all those layers then your earning ability shoots through the roof and the statement from SAP becomes true, but that statement sadly remains false whilst so many ABAP programmers maintain a psychological block on learning new languages.

Business Objects in SAP Attempt 95 - Chapter 8 – Business Objects in RAP

There have been multiple attempts to represent business objects (like sales orders or monsters) inside SAP. Workflow objects, CRM objects, BAPIs, „persistent“ objects and BOPF to name but a few. Attempt number 95 is the idea of a Business Object Definition (which is a CDS entity) and a Business Object Implementation (which is a global ABAP class) which is to be the final version, the be-all and end-all, never to be replaced.

I did have a chapter on the RAP in my last book. In the 2.5 years between editions the RAP had two product name changes, which is quite mild in SAP terms. It started out as the RESTful ABAP Programming Model (RAP) and then changed into the ABAP RESTful Programming Model (ARP) for a while. The problem of course is that many people added the word „Cloud“ on the front, as that is what you do these days, but adding a „C“ at the start did not make either acronym sound better.

Anyway after a while the name changed to „ABAP RESTful Application Programming Model“ (RAP). Now if you try to stick a „Cloud“ on the front of the name then you will have to add the „A“ for ABAP as well as the „C“ at the front so you end up with CARAP and thus the rude acronym problem goes away, sort of. People get paid several million dollars a year to solve problems like this.

In any event in the period between edition 3 and edition 4 the RAP itself changed somewhat dramatically, and is still mutating faster than the Coronavirus to this day. So in this edition instead of a dedicated RAP chapter I split out the various components into different chapters so you could compare the „old“ way (which many people have not even heard of) of doing things vs the new way e.g. Service Definition vs SEGW and Behavior Classes vs BOPF.

Pretty much every single word I had written about the RAP in the last book had to be changed. Certainly the syntax you use is utterly different. I would stress this is a Good Thing. The RAP has loads more functionality than it did 2 years ago, and each change in the syntax is an improvement. I reckon in another two or three years it will be ready for productive use.


Code Base


Structures / Tables

There are two types of code in the book which serve the same business model. There is the code written in a 7.52 system which uses the BOPF for the business objects, and the code written in ABAP in the Cloud (BTP) which uses the RAP for the business objects.

In the 7.52 code during the creation of BOPF business objects assorted structures are manually created as and when needed by the BOPF and as a result further assorted structures and table types and transparent tables are automatically generated. The tables for examples contain the structure you define for persistent fields plus a BOPF specific addition at the start for the primary key.

The RAP takes a different approach – in fact two slightly different approaches depending on what version of the RAP we are talking about (it evolves vey quickly).

Initially you started creating a business object in the RAP with one or more related database tables e.g. Monster Header / Monster Items. Then you created CDS Views based upon these tables, defined the association(s) between them, and created behaviour definitions/implentations for those CDS Views. The whole process can be automated by the „RAP Generator“ which despite the name does not create rhyming lyrics.

As you may have heard CDS Views are in some sense obsolete before hardly anyone has heard of them. I have been writing about them since I started on the first edition of ABAP to the Future in 2014, but in SAP TECHED 2021 SAP Mentor Mike Doyle did a (very good) Q&A session on „Channel One“ introducing the basic concepts of CDS in ABAP. The fact this needs to be done indicates to me that the whole CDS thing is still a bit of a mystery to many people.

It is quite possible that someone has just got their head around CDS Views and BOPF and then hears me say both are obsolete and has a nervous breakdown as a result. So I will tone it down and say that there are replacement technologies available for both and SAP strongly recommends you switch to the new ones as and when you have an ABAP environment which supports them.

In the case of CDS Views they are superseded by CDS Entities which only work with a HANA database. The other subtle difference is that a CDS View needs an (automatically generated) associated DDIC View on the underlying tables, and a CDS Entity does not. The latter needs one less step as it were. Put another way in ABAP SQL you can do a query on a CDS Views using either of its names – the CDS View Name or the DDIC View Name (though SAP said doing the latter was very naughty) but with a CDS Entity there is only one name so you have to use that.

You are Number 6. I am the new Number AEFGH89HJIKL98EW65432KLOMPO4523ERRRSDF.

A little while ago we were talking about automatically generated BOPF tables. Now is the time to talk about primary keys. One of the purposes of a CDS View/Entity is to be close to „conceptual thinking“ i.e. a human does not think of a car as a set of database tables but a human would say „a car has four wheels“. In other words a wheel is associated with the car it is attached to.

In the same way a human would identify a car via its number plate (at least in countries like the UK where number plates are unique) for example ABC123 on the very reasonable grounds you can see the number plate when looking at the car. That way the police can identify your car if you have just robbed the bank. So if you represented the car in a database table – say EQUI – then the license plate would be the „semantic key“ and you would use that as the primary key (EQUNR). Sadly that example falls down in countries like Australia where you can have duplicated number plates (between states) which is why there is also a license plate number field in the equipment data model in SAP.

Anyway traditional SAP tables always had semantic keys as the primary key – sales order number,  invoice number, monster number, customer number and so on. Often that number is printed on pieces of paper (e.g. invoice) or their digital analogue. As an example I have a five digit personnel number in SAP which is the key to assorted HR tables starting with „PA“. That appears on my (virtual) pay slips and I also need to type it into the printer if I want to photocopy or print anything. Hold that thought, it is important.

In more recent times, and particularly with the BOPF, SAP decided that the primary key of a table should be a unique GUID which is usually 32 characters long with a name like AEFGH89HJIKL98EW65432KLOMPO4523ERRRSDF. So generated BOPF database tables traditionally has GUID keys.

Now, if the HR tables had such a primary key, I would not like to have to type in a thirty two digit alphanumeric string into the printer each time. That is just not how humans think of things, no matter how efficient using a GUID is behind the scenes. Also from a system point of view - is it really faster? I don’t see the difference between searching the database for a unique sales order number vs a unique GUID.

And – prior to HANA – because all end user based searches would be using the semantic key you would need to have a secondary index on the semantic key field. So each table had one more index than was strictly needed and for really big tables indexes can take up a a lot of disk space – and that costs real money.

With the RAP you can have both GUID primary keys and semantic primary keys. I have no way of knowing but my guess is that people who work for SAP prefer GUID keys for academic reasons and „customers“ who have to use SAP in the real world and pay for disk space prefer semantic keys,

In any event at time of writing it is possible to have semantic keys in the RAP and in theory in the BOPF as well, not that I have ever tried the latter out.




Every day my wife comes to me to show me some more prizes she has made. There are loads of them and they are all fantastic. So I would re-iterate that solving the murder of Count Dracula would be a very beneficial thing for you to do.


Plot – loosely based on „House of Frankenstein“ (1944) – Part 5


NARRATOR: Evil Criminal Mastermind Frank BOPF and his hunchbacked assistant Slin Shady have escaped from prison in the year 2156 and fled back in time across the BW bridge to the year 1792.  After reviving Count Dracula only for him to be murdered they move on to Castle Frankenstein. There – apart from the Baron and assorted singing dancing Monsters – they encounter Larry „Talbot“ Ellison who turns into a werewolf and rushes into the nearby village, eating assorted villagers.

BOPF and Slin Shady mount a rescue mission to the village. They are just in time – the villagers have surrounded Ellison who has by this point turned back into an innocent looking database company CEO. The villagers are not fooled however and they would have already burnt him at the stake at this point were it not for the last minute intervention of a passing Gypsy Girl, Beatty Pea, who begged the villagers for mercy and has thus far managed to stop them lighting the bonfire inside which Ellison is tied to the stake.

BOPF shouts out the traditional cry of „Four to Beam Up!“ and the Baron transports BOPF, Slin Shady, Ellison and Beatty Pea back to the castle just as the villagers thrust laming brands into the bonfire. There is a clear moral here – the use of advanced computer technology gives you a competitive advantage in almost every situation. You could even describe the use of such technology as a PARADIGM SHIFT!

AUDIENCE: Whooooooooooooooooooo! (Does Mexican Wave) (Sings) Bananas, bananas, one million tons of bananas! Ba-na-na-na-na-na, na-na, na-na! Ba-na-na-na-na-na, MAKE YOUR BODY SING!

NARRATOR: From now on there will be a different banana video in each blog – don‘t be fooled if the first five seconds look the same each time. Anyway, let’s look at the plot for this weeks episode in more detail.

(Castle Frankenstein – Transporter Room)

BOPF: (Over Radio) Four to Beam Up!

BARON: No problem ducky! (Pulls switch, turns to audience) But what he doesn‘t know is that  I am about to release the Atomic Neutronic Mega-Gas!

AUDIENCE: Not the Atomic Neutronic Mega-Gas!

BARON: Oh yes – that gas is laced with the element of surprise (pictured) - Engage!

Element of Surprise

(Monsters start pumping gas into room)

BARON: When that gas takes effect anyone breathing it in will fall madly in love with the first person to ask them a question! It’s practical jokes like this which make my castle such an interesting place to visit! Boo ha ha! Boo ha ha!

(Transporter pads tingle. BOPF, Slin Shady, Ellison and Beatty Pea materialize)

BARON: Shields up! We are safe from the villagers now. Just as well really - the first guests for the SAP Press Gala Party will be arriving soon through the time tunnel.

SLIN SHADY: Thank goodness for that! That we are safe I mean. I don't actually care about the party.

BEATTY: (As Slin was the last to talk she turns to him) What happened? Where am I? Who are you? Why is that man over at the transporter console dressed in drag?

SLIN: BOOOOING! (Falls madly in love with Beatty) I am Slin Shady, the real Slin Shady. I am the real Slin Shady and I have just stood up.

ELLISON: Stop talking nonsense. (To Beatty) OK - we have been transported to Castle Frankenstein – you must have heard of it. I am Larry „Talbot“ Ellison and by the way thank you for saving me from the villagers – does that answer your questions?

BEATTY: BOOOOING! (Falls madly in love with Ellison)

BOPF: The important thing is we are all safe now! I don’t know about you but scary adventures always make me thirsty and hungry! Can one of you Monsters please fetch me some wine and cheese?

EVERY SINGLE MONSTER: BOOOOING! (Falls madly in love with BOPF)

BARON: (Trying to hold back laughter) Would you like them to bring you red wine or white wine?

BOPF: BOOOOING! (Falls madly in love with the Baron)

BARON: (To audience) A-HA HA HA! MUAHAHAHA! MWAHAHAHA! HOO-HAA! That worked really well! What’s more the guests for the SAP Press Gala Party will start arriving any second so I think I will play the same joke on them! Monsters – pump the entire Castle full of the Atomic Neutronic Mega-Gas!

AUDIENCE: Not the Atomic Neutronic Mega-Gas!

BARON: Oh yes – this is going to be the best party ever!

(Monsters start the gas pumps. Guests start arriving through the time tunnel. Baron starts singing)


Song – Poisoned Atmosphere



Oh what an atmosphere!

I love a party with a poisoned atmosphere,

So let me take you there,

I want you to ask questions in the poisoned air!

Well we're at the SAP Press Gala Party,

And you're out there havin' fun,

And a Monster is beside you,

And you feel like number one!

So ask someone a question,

Then the fun has just begun...

OH WHOA! Let it go!

WHOOA! Let it show...

(Monsters: Aaah Aaah Aaah Aaah!)

(More guests arrive through the time tunnel)

Oh what an atmosphere!

I love a party with a poisoned atmosphere,

So let me take you there,

I want you to ask questions in the poisoned air!


Oh what an atmosphere!

I love a party with a poisoned atmosphere, yeah mmmm,

Monsters everywhere,

Just wait till you ask a question in the poisoned air!

We were out here all together,

Now everybody's in the lift,

I think that is much better,

Because it’s a PARADIGM SHIFT! (Monsters: Bananas, Bananas!)

Well you've got your favourite records,

And Frankenstein’s Gone to Hollywood!


OH WHOA! Let it go!

WHOOA! Let it show...

(Monsters: Aaah Aaah Aaah Aaah!)

(More guests arrive through the time tunnel)

Oh what an atmosphere!

I love a party with a poisoned atmosphere,

So let me take you there,

I want you to ask questions in the poisoned air!


Oh what an atmosphere!

I love a party with a poisoned atmosphere, mmmm yeah,

Monsters everywhere,

Just wait till you ask a question in the poisoned air!

(The remaining guests arrive through the time tunnel)





AMG: I am „appy“ to be here! Everyone is so obsessed with the party and all the silly things happening. However can you recall that we have a murder victim – namely Count Dracula? I think it is fairly clear he was killed by a Monster – but which one – and where? If you want to win a mystery prize you need to answer that – and more – and supply your reasoning.

  • In one Haunted Castle in what is called ‘The Inner Pantry’, a frail figure in white still appears. The silver was stored here and a footman employed to sleep here and guard it. Historically, one night, when the footman had turned in to sleep, he was accosted by this lady in white. Very pale, she begged him for water. Thinking it was one of the castle guests, he turned to obey.  Suddenly he remembered he was locked in and no visitor could have possibly entered!

  • In one Haunted Castle while a priest was holding mass for a group of his family (in what is now called the "Bloody Chapel"), his rival brother burst into the chapel, plunged his sword into him and fatally wounded him. The butchered priest fell across the altar and died in front of his family.

  • In one Haunted Castle according to the legend, the architect of the castle was dissatisfied with his construction, feeling that the keep leaned a little to the southeast. Eventually, he became distraught and climbed to the top of the keep, where he jumped to his death with a chisel in his mouth.

  • Paul lives in Australia normally so his email address ends with .AU

  • The Monster whose name is Jeffrey plays the saxophone. In fact all Monsters the same colour as him play the saxophone, whilst hovering in the air.

  • The Purple Monster is 8 Feet Tall. That is pretty obvious really. I mean in your day to day life, as you commute to work for example, who many Purple Monster's do you see who are not eight feet tall?

  • The Train Spotting Monster is Colored Red. Again - think about it - all the times you are out and about spotting trains, which you do every day, how often do you see a Train Spotting Monster which is not red?

  • The Monster whose hobby is collecting Rare Coins is 6 Feet Tall. Each Monster has a different hobby and each hobby is really boring.

With each blog at this point I will be giving you more clues and as the blogs go by the clues will become more useful. By now you will probably have worked out where all the Haunted Castles are by means of detailed analysis or possibly cutting and pasting the clues into Google. Now you can sort the Haunted Castles from left to right / west to east, however you want to think of it. In any event please do not put the answers into the comments, that would just spoil the fun.

Going back to the subject of logical inferences, here is another example.

If someone says to you "The Monster that does Historical Re-Enactments was in the west-most Castle" then what you do on your murder solving spreadsheets is to colour the cell containing hobby of "Historical Re-Enactment" green in the west most castle (castle 1) and thus in castle one none of the other hobbies are possible so colour them all red. Likewise no other castle than castle 1 can have that hobby so colour the "Historical Re-Enactment" cells for the other four castles red.

These prizes are going to be great by the way. So much work is going into them. There will be enough to go round for multiple winners.




NARRATOR: As we leave this weeks episode, the changes to eight chapters have so far been discussed along with the basic elements of the downloadable code. Moreover the guests have now arrived through the time tunnel to 1872 to attend the SAP Press Gala Party. They are unaware of a somewhat nasty surprise the Baron has laid on for them, let alone assorted gatecrashers and a werewolf on the loose.

More importantly there is still the murder of Count Dracula to be solved! Can you solve the crime and be one of the lucky first few to win prizes? Stay tuned for next weeks exciting episode of „I can see ABAP Moon Rising“
Labels in this area