EDUCAÇÃO E TECNOLOGIA

I can see ABAP Moon Rising – Part Seven of Eight

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. Only two to go now!

Cool%20Yule%20with%20a%20Ghoul

Cool Yule with a Ghoul

Previously on this channel:-

https://blogs.sap.com/2021/11/16/i-can-see-abap-moon-rising-part-one-of-eight/

https://blogs.sap.com/2021/11/23/i-can-see-abap-moon-rising-part-two-of-eight/

https://blogs.sap.com/2021/11/30/i-can-see-abap-moon-rising-part-three-of-eight/

https://www.youtube.com/watch?v=9Y0KGYB1mR4

https://blogs.sap.com/2021/12/07/i-can-see-abap-moon-rising-part-four-of-eight/

https://blogs.sap.com/2021/12/14/i-can-see-abap-moon-rising-part-five-of-eight/

https://blogs.sap.com/2021/12/21/i-can-see-abap-moon-rising-part-six-of-eight/

https://blog.sap-press.com/abap-room-101-the-worst-thing-in-the-world

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 have arrived and are having a wonderful time – but  on that – fateful – night the guests suddenly found themselves being attacked by a werewolf! Meanwhile there was some sort of stupid book being written.

*———————————————————————————————-*

Book Writing

*———————————————————————————————-*

PDH: Thus far 12 out of the 14 chapters have been updated. As you may recall the idea was to start with the chapters were the least changes had occurred in the last three years and end with chapters where the most changes had happened. Thus every chapter would be harder than the last.

Nelly the Fiori Elephant – Chapter 13 – UI5

I had 21 items in my list of UI5 changes and most of them were non-trivial. At one point in that period it was claimed the entire JavaScript library that comprises UI5 was getting totally rebuilt from the ground up. I am not sure how true that was, most of the code from three years ago still works, but I imagine there has been a lot of change „under the hood“

The biggest change is the IDE – in the prior books you used Eclipse to manually code UI5 applications, now you use the BTP or VS Code. That change in and of itself means the chapter had to be 99.9% re-written.

The chapter in the book focuses on the those two new things. Here I would like to dwell on what has „died“ in the last three years.

It’s Dead! It’s Dead! It’s Dead! Eclipse Tools for UI5 Development

At one stage Eclipse was supposed to be used for both ABAP Development and UI5 development and hence as well as an ABAP plug-in there was a UI5 tools plug-in. No more. That plug-in is not guaranteed to work in Eclipse version 2019/12 or above and/or UI5 release 1.71 or above (not guaranteed means it won’t work) and when you do a fresh installation of the ADT plug-in for Eclipse the UI5 option is simply not there anymore. As you will see in this chapter the replacement options are using the BAS or using VS Code

It’s Dead! It’s Dead! It’s Dead!  SAP WEB IDE

When SAP decided that Eclipse was no longer the best place to do UI5 development then the recommendation changed such that the way to go was the SAP WEB IDE which was a separately licensed product. This was used to automatically generate UI5 applications using templates. This is now obsolete and has been replaced by the BAS.

It’s Dead! It’s Dead! It’s Dead! BUILD

BUILD was a rapid prototyping tool where you could easily mockup an application, feed it some dummy data and even have it navigate from screen to screen when the user pressed a button. The idea was that instead of spending weeks coding something, create the mock-up in a few hours, show it to the end users and see what they think, adjust the mockup based on the feedback, repeat process, stir, then add salt. When the users were as happy as they ever would be you could then use the mockup to autogenerate the code for a UI5 application which you could then change to read the real database and have proper business logic.

However you main point here was that you could generate the prototype UI5 application without writing one line of code!

AUDIENCE: (Sings) Code Code Go Away! Come Again Another Day!

All well and good – but this is now obsolete as well. The planned date of its death is December 2024. SAP’s position is that is now so easy to create the first draft of an application using standard tools in virtually no time that there is no need for a standalone tool to do the same thing. There is a replacement for some aspects of BUILD called “SAP Fiori Tools” which works in both SAP BAS and VS Code.

Not everyone took the “sunsetting” of BUILD lying down, especially not Nik Kershaw. In fact a campaign was launched along the lines of “if SAP does not want to maintain the product anymore then open source the code and let the developer world look after it”.

Have a look at the comments section to the following blog

https://blogs.sap.com/2020/02/04/sap-build-product-sunset/

It’s not often you see passion like that, so many people trying to save a product that had been condemned to death. The rescue attempt did not work. It’s like the UK and French Governments concluded they were never going to make a profit out of the Concorde aircraft. There were people (like Richard Branson) queuing up to buy the things but instead of selling them and getting even some money back the governments burned the planes to ashes in font of all the potential buyers and then jumped up and down on the ashes screaming „if I can’t have her, no-one can have her!“  as they felt they might look silly if someone started running the service at a profit after doing that had just been deemed „impossible“. After all, no-one can run a commercial enterprise better than a government department.

In any event you have to give up the dead things and jump into the new things – because it is an important part of your DIGITAL TRANSFOMATION!

AUDIENCE: (Sings) Transformers! Transformers! Optimus Prime! DARE TO BE STUPID!

https://www.youtube.com/watch?v=SMhwddNQSWQ

Chapter 3 – ABAP

I just had a thought whilst looking at my grid of ABAP versions. Inline declarations came out in Version 7.40 of ABAP in January 2013. Next month that will be nine years ago. And lots of people do not know what inline declarations are yet. Maybe SAP is correct when they say there is a severe skill shortage in the area of ABAP programmers and the only way out is to buy solutions from SAP where you can create applications without writing one line of code!

AUDIENCE: (Sings) Code Code Go Away! Come Again Another Day!

Another possible solution to the skills shortage would be ABAP programmers learning about things that have been invented in the last 20 years. Maybe I am being unrealistic here. But if it did happen that would be a GAME CHANGER!

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

Anyway, I had the ABAP chapter as the last on the (what I thought were) quite reasonable grounds that starting in September 2018 a new version of ABAP comes out every four months. So we are three years on from that i.e. 12 new versions of ABAP in 3 years. Moreover the SCN blogs announcing each new version make much of the fact that in every release there are more changes than the last. So I presumed there must be hundreds of changes to put in the ABAP chapter.

It turned out there were only 16 changes that needed to be made, mostly minor. How can that be? There are two reasons.

I walk the Code Line

When you are trying to work out what ABAP versions there are you have different sorts of numbers flying at you like you are standing in front of a tennis ball machine with your mouth open. And the tennis balls all have numbers on them.

First off you have the kernel versions which have number a like 7.58 and do not appear to have any relation to anything else.

Then you have the on-premise release of ABAP for S/4HANA. 7.50 was the final ABAP Release for ECC 6.0. In January 2016 you had 7.51 and that and higher releases are for S/4HANA only. So we have had five versions since then, one a year, the latest being 7.56 which came out last month, November 2021, just in time for it to miss being included in the book.

Just to baffle you even more, each such version of ABAP had two names. Version 7.53 is also known as 19/08 for example, and version 7.54 is known as 19/09. In official SAP slide decks the two names would be used interchangeably, at random e.g. on even numbered slides it would be 7.54, on odd numbered slides it would be called 19/09.

Then just when you got used to that the naming convention changed from YY/MM to YYYY. So version 7.55 is also known as 2020 and version 7.56 is also known as 2021. Again on the official slides the terms are used interchangeably, sometimes one, sometimes the other, sometimes written upside down, sometimes back to front, sometimes both names superimposed on top of each other, sometimes spelt out in Morse Code.

Next year the naming convention is going to be changing once again, and this time there will be twenty three different names for the annual new ABAP version, that way you can have a different name on every slide in the presentation, all meaning the same thing.

The next question is – what is the difference between ABAP version 19/08 and ABAP version 19/09? the difference is the former is a version specific to ABAP in the Cloud (aka Steampunk or BTP) and the latter is a version specific to S/4HANA on-premise. That is why they changed the name of the on-premise one to YYYY to try and clear up some of that confusion.

Anyway it is the BTP ABAP version that comes out every three months and whilst this does indeed have a bucket load of changes they are mostly to do with the RAP (and hence those types of changes are mentioned in the RAP based chapters as opposed than the ABAP one) or to do with bringing ADT up to functional parity with SE80 inside the SAP GUI which has become vital as there is no embedded GUI option in ADT for BTP. I don’t tend to mention the latter type of changes at all as I don‘t feel anyone is going to get all excited when I say „You can now do something in ADT you have been able to do in the SAP GUI for the last 30 years!“

It’s like the „Universal Workflow Inbox“ – SAP proudly announced this concept as a new thing last month (i.e. November 2021) with a brand new name. There have been thousands of attempts at this going back at least as far as 2000. You would have thought one of them would have caught on by now.

Anyway, moving back to ABAP, the biggest real new thing in the last two years has been the „Clean ABAP Code“ guidelines and associated ATC static code checks.

https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md

There was already the ABAP Open Checks by Lars (who invented GitHub) and on that subject here is a top tip. Install those ATC checks in your system – see https://docs.abapopenchecks.org/

Then be to sure to switch on the „use expressions“ check. Then when you run the code inspector you will be prompted to make assorted changes e.g. replace

Helper = Source.

TRANSLATE helper TO UPPER CASE.

Target = Helper.

To

Target = to_upper( Source ).

There are loads of changes like that to be made, and the end result is your code is shorter and easier to understand plus you will have learned all about assorted new functional expressions in ABAP.

NARRATOR: Excuse ME! What was that title about the „Code Line“?

PDH: Oh! I forgot! According to the official SAP slides both the BTP ABAP versions and the on-premise ABAP versions share the same „code line“. I am not sure how that can be given there are a whole bunch of things you can do in the BTP version you cannot do in the on-premise version and vice versa, but who am I to argue.

SQL Like a Pig

OK so I belatedly realise most of the million changes in ABAP had actually been to do with the BTP version which you would imagine would change rapidly as it is brand new and so rapidly evolving. Nonetheless there were still the release notes for two versions of the on-premise ABAP version so I guessed when i went through those there would be bucket loads of changes.

Indeed there were, but 90%+ of them were to do with ABAP SQL and CDS Views (and entities). So those type of changes went into Chapter 6 which is all about the database.

Edit/Copy-Edit Process

All the chapters have now been updated. Now they have to be sent off to SAP Press for editing. This mainly involves my poor editor having to remove the reams of nonsense with which I surround the various explanations of new ABAP features. Happily a surprising amount of nonsense always manages to slip through into the final version.

The editing process is all about the logical structure of each chapter which in some senses is like a live presentation in that you:

  1. Tell Them What You are Going to Tell Them
  2. Tell Them
  3. Tell Them What You have Just Told Them

This is the rule of three and it is how the human brain works. Humans just cannot take in four or more things at once and moreover the three things they can take in have to be related.

The copy-edit process is more about spelling and grammar and making sure if I refer to something in a screen shot then that something is actually in the screen shot.

In addition I am English and so often – without even thinking about it  – use phrases that no-one outside the United Kingdom would understand such as

„Alright my son, say no more, Leave it out

No bother, As it ‘appens its – your shout

Straight up, Pull the other

In a right 2 and 8

‘Ang about, What’s the damage Chief?

‘Ere….Who’s your mate?“

Which means … nothing at all really. Which doesn’t mean people in London don’t say that sort of thing all day long.

The other day i was talking to my USA mate and I was using the term „Z“ code to refer to custom code on the grounds that custom code starts with the letter „Z“. He had no idea what i was talking about because I was saying ZED instead of ZEEEE.

In the same way if you were a stranger to Australia and walked past a pub you would see signs saying something like „Come inside for Pokies!“. You might get quite excited until you realised that what is called a „Pokie“ in Australia is called a „Fruit Machine / Slot Machine / One Armed Bandit“ in other countries.

Dependency Analyser

The last two times I put some downloadable code on the SAP Press Website, and indeed on GitHub for the last edition, I kept getting people writing to me or raising issues saying that this data element or this function module or whatever was missing. That was driving me mad as I took so much care to make sure everything I had created was in the code samples, but it obviously was not.

When a programming has a problem – they write a program! In this case it was a question of doing an ST05 trace on the „where-used“ list and then working backwards using tables like CROSS and WBCROSSGT. I would start by getting all programs for a package and then all the function modules and global classes called by those programs, and then all the tables and structures used by the objects retrieved so far, and then the data elements and domains in those tables/structures.

I put all this in a class (pictured) and when I am a bit happier with it I will put that on GitHub as well.

Dependency%20Analysis%20Class

Dependency Analysis Class

Did that work? Sort of. I had to do some dirty workarounds which is why in the GitHub repository you will see a „manifest“ program for certain packages which does nothing except list the classes used in that package.

Nonetheless It picks up 99% of objects and every time I get a report of a missing object I debug the dependency checking program to see why it missed that object, thus making the program better for the next time I need it. Currently I am a bit too embarrassed to put this creation of mine on GitHub as although it works it is stuffed full of dirty hacks. It does not even have any unit tests. So I want to clean it up a bit first.

The other important use for this is to see if there are any custom objects being referenced in my various monster packages which are not in another monster package or one of the open source packages like ABAP2XLSX.

These are the checks I do before I export the code to GitHub. As you will see in the next blog there are also code checks done on the GitHub side after the code has been exported.

*———————————————————————————————-*

Code Base

*———————————————————————————————-*

In prior blogs we had got to the stage whereby all the database tables had been created to store the various business objects needed for the Baron Frankenstein business model, and these tables were all exposed via CDS Views.

Behavior Logic

Now is the time to return to the concept of „model classes“. Typically there are four parts to a business object like a sales order or a Monster.

  • The underlying data model (more on that in the next section)
  • Validations – whereby the data is checked for consistency e.g. a monster cannot have a hat size if it has no head.
  • Determinations – whereby some values are determined based upon other values. Perhaps if a sales order is not referenced to a contract it gets a billing block, or if a monsters has over six arms its smelliness factor goes up due to all the extra armpits. Which might be a good thing for a Monster.
  • Actions – the various behaviours the object is capable of. You might want to release a sales order that has been credit blocked or make a monster grow an extra head.

These aspects of business objects have remained unchanged forever – the only thing that has changed is how this is expressed inside SAP.

A DYNPRO program to maintain a sales order or monster does all the things mentioned in assorted FORM routines. You can code such things in a workflow business object or a series of BAPIS revolving around an object like BUS2032 or manually create a class called ZCL_SALES_ORDER with CRUD methods and action methods and determination methods and validation methods.

As time by this process got more formal i.e. there were special sections inside a BOPF definition for actions, determinations and validations. With the RAP things become even more specific – there is a class called a behavior class and that has methods where you specify in the code if the method is an action, determination or validation.

Nonetheless the one thing that has remained constant is – the framework keeps changing. So I am back to Graham Robinson’s two laws again – namely „Encapsulate all business logic in re-usable classes“ and „Encapsulate all business logic in re-usable classes“.

This is why I have a ZCL_MONSTER_MODEL class. The methods (actions, determinations, validations, CRUD operations) can be called from a DYNPRO program, or Web Dynpro, or a workflow SWO1 definition, or an ALV report, or the BOPF, or SEGW or even the RAP and more importantly whatever comes next after the RAP and you don‘t you tell me there won‘t be another framework ever! SAP will of course say just that like they did with all the previous frameworks.

There is a debate in ABAP world which is rather like the debate about how many angels can fit on the head of a pin. In this case we have a complex business object like a sales order in a system where there are ten business lines and a hundred countries.

In such a case you might have a thousand validations and a thousand determinations. The question is – do you have two thousand methods in the model class, or two thousand global classes with one method each?

You would think this would be a programming language independent / IDE independent type of debate but in fact often people dwell on how the ABAP tools in Eclipse behave. In SE80 if I am changing a method in a huge class I lock only that method. In Eclipse if I am changing a method in a huge class I lock the entire class.

So my colleague and I who both work on a big class at the same time had to give up the idea of using ADT. When pressed, the advice from SAP was to go down the 2000 separate classes road – but I want a better reason to go that way than „one particular IDE works differently from another and we don‘t want you to use the one that works better in this area because it is old-fashioned“.

There is even a concept in the RAP called „groups“ which acknowledges that the design of a RAP business class is such that all the methods are in one big local class, so cannot be edited/locked independently. Therefore have several different classes which can be locked by different people working on different areas of the business object. Is that what you should do if you think a fundamental design is wrong? Keep that design and then move Heaven and Earth to invent workarounds?

In OO the idea is that a class or method should do „one thing only“. I would say my Monster model class does one thing which is to show the outside world what a Monster is capable of. Some would say the whole idea of an OO class is to put the data and related behavior in the one place.

If such a class has both validations and determinations is it doing two different things? If you have a validation class and it has a thousand validations are they a thousand different things? Is it odd to have a class with only one method? If I have a thousand validation classes only ever used by the monster model then they would all have to have their single method being public and doesn‘t that break the entire OO idea of hiding the internal details?

Answers on a postcard please (That is just what we say in the UK, based on some old TV show. Nowadays answers go in comments to blogs)

Persistency Classes

This area is a lot clearer. This is all to do with unit tests / ABAP Unit / TDD. The ABAP to the Future books are crawling with references to unit tests in virtually every chapter.

I honestly think I have convinced the powers that be at work of the benefits of automated unit tests. Based on actual factual evidence i.e. pretty graphs showing the number of defects going down the more unit tests there are in a program. It even looks like all the developers will have as one of there (pay related) targets next years to write unit tests. I will let the world know how that goes but I think it will go very well indeed.

Anyway to write unit tests you need to extract dependencies such as database access. So it does not matter if you want to read database data from a table or a CDS View or via some bizarre BOPF mechanism, in every case you need to have a special persistency class  which can then be mocked in your business logic code so you can have automated tests for the business logic.

A unit test is supposed to test one small thing only. So the model class will have a test where a test double will bring back fake data as if it has read the database. What is being tested is the business logic which reacts to that data.

Taking this one level down you can ask the question – have I designed my ABAP SQL query correctly? Have I written my CDS View/Entity correctly? How do I know? How do I know if he really loves me? Is it in the program? Oh no that’s just his code. Is it because he’s coloured green? Oh no he’s just a toad. If you want to know (Shoop, shoop, shoop, shoop) if the SQL query is a go (Shoop, shoop, shoop, shoop) it’s in the tests, that’s where it’s best.

Put another way there are separate unit test frameworks for ABAP SQL statements and CDS Views.  So a persistency class can have its own set of unit tests which test if the query as you have written it will actually bring back from the database what you were expecting. A CDS View can have a dedicated test class which runs tests upon it.

At this point you might be spluttering and quacking like a duck and barking like a dog and trumpeting like an elephant and soiling your trousers in rage at the thought of such a pointless exercise. This is all about code pushdown – as more and more work is pushed down to the database (i.e. functional expressions inside SQL statements, CASE statements inside CDS views and so on) some of the business logic has moved from the application layer (model class) to the database layer (persistency class) and obviously you still want to test that logic.

So what I do in the book is talk about testing in the business logic in ABAP in the Chapter about TDD in general, and talk about framework specific automated unit tests in the related chapter e.g. the CDS test double framework is in the chapter about CDS and so on….

*———————————————————————————————-*

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

Lets%20Build%20a%20Monster

Lets Build a Monster

*———————————————————————————————-*

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 onto Castle Frankenstein where they encounter the Baron, singing dancing Monsters, Werewolf Larry „Talbot“ Ellison and Gypsy Girl Beatty Pea.

The SAP Press Gal aParty commences and is off to a great start. It is thus far the best party ever in the history of the universe, partly due to the Barons special gas. There are so many new and exciting things happening that the party itself could be described 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!

https://www.youtube.com/watch?v=qcyZN5otF_I

NARRATOR: Anyway, as you recall from the last episode, in the middle of Frank BOPFs song and dance act with the Monsters, out of the blue Ellison suddenly turns into a Werewolf and starts eating the guests.

SLIN: Oh no! The werewolf must have eaten at least a dozen guests by now. They each paid a million dollars for a ticket, only to get eaten.

BOPF: At least they got to hear my song before getting eaten!

A Guest at the SAP Press Gala Party, shortly before being eaten by a Werewolf

SLIN: Never mind about that! What are we going to do?

BOPF: Send for the Fire Brigade! (Speaks into Phone) Hello? Captain Flak? Can you please mobilise your anti-werewolf squad?

FLAK: Pew, Pew, Barley McGrew, Cuthbert, Dibble, Grubb!

(The Fire Brigade arrive almost instantly and spray the Werewolf with water from their hosepipe. He eats them all)

SLIN: That idea did not work very well! It was about as much use as Enterprise SOA!

AUDIENCE: Enterprise SOA! (Entire audience falls about helpless with laughter for a full fifteen minutes. The characters wait for them to finish)

SLIN: Any more bright ideas? Oh no! The werewolf has run out of guests to eat and is now attacking Beatty Pea (who i am madly in love with)!

BEATTY: (To Werewolf) I cannot help but notice that you are starting to eat me. Is this all the thanks I get for being madly in love with you? Anyway – in my gun I have a Silver Bullet!

BOPF / BARON / NARRATOR : In Programming there is no such thing as a Silver Bullet!

BEATTY: (Now almost half eaten) Arrrrgh! (Shoots Werewolf with Silver Bullet)

ELLISON: (Finishes eating Beatty Pea) When SAP, and specifically Beatty Pea, said they were going to shoot me with a Silver Bullet I said „Oh God get me the name of their pharmacist. They must be on drugs!“ That was never going to work. Oh hang on, yes it is! (Dies)

BOPF: Oh well, all’s well that ends well!

BARON: Time for another song? Pity there are no guests left to hear it.

SLIN: Things did not end well! All the guests got eaten and more importantly so did Beatty Pea whom I was madly in love with. (To BOPF) This is all your fault! You promised me a new beautiful body to replace my hunchbacked one and then did not follow through. If you had maybe Beatty would have chosen me over Ellison. You promised Ellison to cure his lycanthropy and then did not. If you had he would not have turned into a Werewolf and eaten Beatty! You are too busy settling old scores and singing and dancing to fulfill any promises you make! Well – here is a promise from me! I promise to disremember you and then cut your head off! (Produces Chainsaw)

BOPF: Oh Dear! Still, at least it is not raining!

(BOPF runs off, chased by Slin Shady (with a chainsaw) who is turn chased by a line of Monsters who are in turn chased by a line of top models whist the Benny Hill theme plays. After running round a big circle several times BOPF manages to jump on top of a giant brown rotating ball whilst the Monsters manage to hold Slin Shady back for a while)

BOPF: You think I am guilty do you? Just because I was sent to prison in the year 2156 for killing loads of people, and as soon as I escaped and fled back here to the past I immediately started on a killing spree again? Well at least I did not kill Count Dracula. I have no idea who did that!

(Monsters all start shuffling uncomfortably, looking nowhere in particular, whistling and examining their claws which they suddenly find really interesting)

BOPF: Maybe I am guilty of everything else though. But even if so – what does it matter? Are you so squeaky clean yourself? I tell you – everyone is guilty – NO-ONE IS INNOCENT!

*———————————————————————————————-*

Song – No-One is Innocent – a SteamPunk Prayer by Frankie BOPF

https://www.youtube.com/watch?v=D19eYbbFCvQ

*———————————————————————————————-*

BOPF: God save all the Monsters
They’re a bunch of Evil Fiends
They just like telling filthy jokes
And wearing filthy jeans
God save ALV Grids
Whose data can’t be changed
God save SAP

From changing Product Names

MONSTERS: Frankie BOPF was doing time
Until he done a bunk
Now he’s travelled back in time
And he’s sold his soul for Steampunk

BOPF: God save Baron F-Stein
And Monsters on the run
They wasn’t being wicked, God
That was their idea of fun
God save WD ABAP
God save BRF+
Even though they’re horrible
And only used by Ducks

MONSTERS: Frankie BOPF was doing time
Until he done a bunk
Now he’s travelled back in time
And he’s sold his soul for Steampunk

(Monster with punk hair on one of its heads does a guitar solo)

Frankie BOPF was doing time
Until he done a bunk
Now he’s travelled back in time
And he’s sold his soul for Steampunk

BOPF: God save Embedded Steampunk
God save INCLUDES called TOP

God save Logical Databases
MONSTERS: And God save Frankie BOPF!
BOPF: God save the Low Code Notion
God save your darkest dark mode
God save Hungarian Notation
And God stop us writing code

MONSTERS: Frankie BOPF was doing time
Until he done a bunk
Now he’s travelled back in time
And he’s sold his soul for Steampunk

BOPF & MONSTERS: Frankie BOPF was doing time
Until he done a bunk
Now he’s travelled back in time
And he’s sold his soul
Sold his soul
He’s sold his old soul for Steampunk
Whoo!

*———————————————————————————————-*

Clues

*———————————————————————————————-*

ENTER „APPY“ „MAC“ GYVER

AMG: It looks like we have another murder coming up – with a chainsaw – but that is not important. There is only one murder victim you need to worry about – namely Count Dracula. I think it is fairly clear he was killed by a Monster  (see how guilty they all looked just now?)– but which one – and where? If you want to win a mystery prize you need to answer that – and more – and supply your reasoning.

With every extra clue it becomes that much easier to deduce the murderer. You have so many clues by now it could be said you are standing at an INFLECTION POINT!

AUDIENCE: (Sings) Two Inflection Points of Lager and a Packet of Crisps Please!

  • One Haunted Castle can be found at 14.6 degrees Longitude
  • One Haunted Castle is in South Africa
  • One Haunted Castle is in England
  • There are more clues to the murder mystery to be found in a (free) Quiz spreadsheet on the books SAP Press Web Page in the „Product Supplements“ section at the bottom. Within that spreadsheet you questions about each chapter and clues will appear as a reward. https://www.sap-press.com/abap-to-the-future_5360/
  • At the time of the murder the 1 Foot Tall Monster was one Haunted Castle away from the Monster that reads “SAP Service and Support” – which as we know was really written by Elon Musk and is the true source of his one trillion dollar wealth. It’s obvious really „Gerhard Oswald“ is an anagram of „Elon Musk“ provided you take most of the letters away and add extra ones.

SERVICE AND SUPPORT PICTURE

PDH: How I got my copy of this fine book was on the 2011 festival day in Heidelberg, Germany. On that day the rule in Germany is that you get the day off provided you promise your employer you will go to the festival. All the shops shut and there are stalls outside each one. And there is lots of beer. I was on my way to meet my USA mate for the purposes of heavy drinking and I noticed one house had what i would call a „garage sale“ in progress. I went to see if there was anything interesting and saw the „SAP Service and Support“ book was being sold for one euro. So I bought it to put on my bookcase to sit alongside all the other SAP Press books. I have never actually opened it, but anyway that was one more euro added to Elon Musk’s fortune.

*———————————————————————————————-*

Outro

*———————————————————————————————-*

NARRATOR: As we leave this weeks episode, all the chapters have been updated and the downloadable code is pretty much ready. Meanwhile events at the SAP Press Gala Party on that – fateful – night have reached crisis point with all the guests eaten and Slin Shady attacking Frank BOPF with a chainsaw! Moreover we are still no closer to knowing who murdered Count Dracula! Can you solve the crime and be one of the lucky first few to win prizes? In fact there are bucket loads of prizes and they are FANTASTIC! Anyway, stay tuned for the Grand Finale episode of „I can see ABAP Moon Rising“

https://www.sap-press.com/abap-to-the-future_5360/