NARRATOR: There have been two horrible crimes' 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.
Destroy Them All
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/
NARRATOR: As we left last weeks episode it was the – fateful – night of the SAP Press Gala party in 1872. The guests have now arrived at Castle Frankenstein through the time tunnel from 2021 but are unaware of a somewhat nasty surprise the Baron has laid on for them, let alone assorted gatecrashers and a werewolf on the loose. Far less importantly some work has been going on in regard to the fourth edition of „ABAP to the Future“ which is the nominal excuse for the party in the first place....
*----------------------------------------------------------------------------------------------*
Book Writing
*----------------------------------------------------------------------------------------------*
PDH:
It is time to witter on randomly about another four chapters in the book. I am going through them in the order I wrote them – which was in the order from the chapter were the technology had changed the least in the last two and a half years to the technologies that had changed the most. We have just passed the half way mark.
Indecent Exposure - Chapter 9 - Service Layer
In the previous editions the concept of SAP Gateway and service exposure via SEGW lived in the same chapter as UI5, on the grounds that SEGW was the way you exposed your business objects as services to be consumed by a UI5 application.
Now of course we have the RAP as well so there is a need to decouple the service layer into its own chapter. Now we have two mechanisms - SEGW for BOPF business objects and a service definition/binding for RAP business objects. They both achieve the exact same goal.
The bulk of this chapter is to do with SEGW as when creating a SEGW definition manually there is a great deal to do, whereas with the RAP there is pretty much bog all to do in this area to get things working.
Thoughts like that sink home – to you We’re Not Deep
Business objects are usually stored in several related tables inside SAP. A fixed asset for example can be stored in up to 26 different tables (for one asset e.g. a chair) all starting with „ANL“. From a programming point of view you want to update either all 26 tables at once when the user presses SAVE or none at all. The so called illogical unit of work concept.
You are used to that in old-style DYNPRO programs. You just code a string of direct database updates and only if they all work do you do a COMMIT and if even one fails you do a ROLLBACK WORK and abort the process.
So you will be puzzled when you see that in both the SEGW and the RAP the business objects have dedicated update methods at every level e.g. a create item method which makes no sense on its own as you cannot have a monster item without an associated monster to attach it to.
In fact both frameworks have the ability to create a monster with all its items in one hit – as you would hope. In the RAP this is called „create by association“ in the SEGW this is achieved via a method in the data provider class called CREATE_DEEP_ENTITY.
There was not enough room in the book to show the code for this – but there was nothing to stop me adding the code to the data provider class in the downloadable code on the GitHub repository so that is just what I did. You even get an extra clue to the identity of the murderer.
Eclipse being Eclipsed - Chapter 1 – IDE
It has been a fair few years now since the „new“ ABAP debugger was introduced. However at that point I had been using the old debugger for years and had gotten to like it and so at first glance I did not like the new debugger one little bit. However i realised on an intellectual level if was better in lots of ways even if I did not like the look of it. I had the choice of changing my settings and sticking with the old one but I realised if I did I would
never change until the day SAP took the old one away. So I used the new one from the start.
In the same way you have no doubt seen many developers raving on the internet about how much ABAP in Eclipse (hereafter ADT) has made their daily programming lives so much more efficient. However when you first start using ADT it is a touch on the agonising side. All the basic things you can do in SE80 are there e.g. forward navigation by clicking on a data element or whatever – but the keys you press are all in a different place e.g. F3 to drill down instead of a double click.
I could be wrong here but I think the reason for all the „hot keys“ being different between SE80 and Eclipse is that there is some sort of universal convention as to what key should do what which is shared by every language except ABAP because traditionally SAP was not much for following universal standards. So in Eclipse the „hot keys“ follow the convention used by the vast majority of languages and ABAP people just have to get used to it.
That is easier said than done however. As an analogy after a lifetime of being used to UK / USA / Australian computer keyboards where the „Z“ is on the left of the bottommost row (as in ZXCVBNM) I moved to live in Germany and the Z key is somewhere else. Once again there is a perfectly logical reason for this – when typewriters were designed based on the English languages the keys were arranged so when typing quickly the moving parts did not crash together so common combinations of letters were moved apart. In German of course everything was spelt differently so avoid the crashing together of the moving parts some letters had to be in a different place. All well and good and of course when there were no moving parts in both countries the layout of the mechanical typewriter was copied to the computer keyboard. Which is why the Z and a few other letters are in different places.
As might be imagined this is agony at the start, I am used to typing on the keyboard without even looking at it and was most surprised when the results came out all funny. Sadly „Z“ is quite an important letter in ABAP. You can of course change the computer settings and glue fake letters to your German keyboard, which is what I did.
Anyway moving to using ADT is like that. It’s like moving from the UK to the USA or vice versa and constantly getting in the front passenger seat of your car by mistake and wondering where the steering wheel is.
So it goes without saying that probably the worst thing you can do is to keep switching between SE80 and ADT. That would be like driving a European car on even numbered days and a USA car on odd numbered days – you would
always get in the wrong side.
Many people have found a solution to the ADT problem - it goes like this:
A: Stuff using ADT. All the keys are in the wrong place. So I will not bother with ADT.
Q: But sometimes you need ADT e.g. to create CDS Views?
A: In that case stuff CDS Views as well. Database tables are good enough.
Q: But you really need CDS Views for UI5 applications?
A: In that case stuff UI5 applications. DYNPRO screens are good enough.
And so on.
As a result it is my job to try and explain that ADT is not just SE80 with all the keys in different places. What I have been aiming for is a chapter which is basically just a list of killer reasons why ADT is better than SE80 because it can do this, and can do that, and can do the other which SE80 cannot. On the fourth attempt I think I have finally nailed it. The bulk of the chapter is a non-stop stream of such examples. The end result is that – given the possibly not very likely case that someone cares about code quality and unit tests and is prepared to even entertain the idea of new technology – then this chapter taken as a whole is a killer argument as to why you should move to ADT as your IDE.
Just to add some more arguments here is a book by Łukasz Pęgiel on the subject of ADT
https://link.springer.com/book/10.1007/978-1-4842-6963-3
Yesterday (at time of writing) there was the first ever ABAP specific conference – a virtual event. Here is a video of all nine hours (of one of the two streams).
https://www.youtube.com/watch?v=GqsfIb1RnaU
Now you probably do not feel like watching a nine hour video given that most peoples attention span does not even last nine seconds but anyway there are at least four presentations dedicated entirely to ADT.
Let’s Plot Twist Again
Often when you are watching a TV show or movie right at the end there is a sudden plot twist e.g. one of the people you thought was a Good Guy suddenly turns out to be an Evil Villain, or the hero turns out to have been dead throughout the whole film, or the employer of the Private Eye turns out to be Satan, or a character who has spent the whole three hours of the film trying to connect to the BAS actually succeeds, or something else you were not expecting in the least. That last example is a bit unbelievable but I am sure you have seen films that use this technique.
In this case I spend the whole chapter saying how wonderful ADT is and then at last second I turn around and say you do the same thing in the IDE which is VS Code and that is just as good if not better. That is not quite as bonkers as it sounds because VS Code connects to the back end SAP system using the exact same mechanism as ADT, so you can have quick fixes and what have you even if not 100% the same. Many people think VS Code is a much better IDE than Eclipse and they have a point. Fans of both would spit on SE80.
In the ABAP Conference yesterday a lady was saying her company is on ABAP 7.50 and should she move to ADT or equivalent even if it is a huge change? Yes.
Tell them about Git-Hubby Mummy! - Chapter 2 – abapGit
Most people who were not alive in the UK in 1976 would not know too much about the Honey Monster and why that monster was convinced a man (Henry McGee, straight man for Benny Hill) was his mummy. But he was, let us just let it go at that.
https://www.youtube.com/watch?app=desktop&v=E9OPH-2CbgA
https://www.youtube.com/watch?v=WAc6ml9F_wU
Now here is a funny thing. I have been conducting some job interviews recently for an ABAP programmer. They had all been programming for 6 to 8 years in the ABAP space so from 2013+ and 2013 was 13 years after OO programming was introduced to the ABAP language.
Only one candidate had heard about inline declarations. None had heard about ABAP Unit i.e. the concept of automated unit tests in ABAP. None had ever created a class or method in ABAP. One wrote a program to to create sales orders via VA01 in 2019 using a BDC.
So I live in two worlds. In one world I am dealing with fellow SAP Mentors and the like, debating with SAP the exact best way to design Steampunk and the RAP, in the other world I am talking to programmers who do not yet know a header line for an internal table is actually optional and maybe not such a good idea and there are things like SORTED tables.
It is not because „they“ are stupid or anything like that, quite the opposite. That is just the way „they“ were taught to program (in 2013, by someone who learned ABAP in 1997))
and it works and many do not question this, especially given the enormous time pressure to deliver things as fast as possible. The irony is that all the modern nonsense I talk about (inline declarations, unit tests etc.) can actually speed up the development process.
NARRATOR: You were supposed to be talking about abapGit?
PDH: OK the point is if it is difficult to talk people out of header lines, and it is very difficult to talk people into using SORTED tables, and it is virtually impossible to talk about automated unit tests without people laughing at you, then what chance have I got to try and introduce a radical concept like abapGit?
This (abapGit) is all about doing version management the same way as all the non ABAP languages approach the problem.
In other languages people program on their local machine and then every so often „merge“ their code with the main development system. That concept just does not exist in ABAP due to all the code being in the repository (database) and the nature of the CTS system. Two people cannot work on the same object at the same time.
This has led some ABAP people to the conclusion that the way all the other languages do things is a load of old nonsense and the way SAP designed the ABAP system is the correct way.
If that was true – then why are SAP looking to move the way we do ABAP development to the same sort of way all those other „inferior“ languages do things?
To use a buzzword it is all about „velocity“. You want to dramatically speed up your development cycle. You want 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.facebook.com/AustralianBananas/videos/197711864678840/
PDH: The most obvious example is having to pay for two incredibly expensive SAP development systems. One for projects, one for emergency fixes, and then have to manually keep the two somehow synchronized.
That is agony in most SAP systems. And yet in other languages you have several versions of the code base – the current release (or train as some companies call it. Choo! Choo! Time flies by when I'm the driver of a train / And I ride on the footplate there and back again / Under bridges over bridges to our destination ) and the next release and the release after that.
Different developers can work on all three releases at once. If you make a change in the current release you can send it up to the two next releases.
And if there is a problem with a change you put into production you can whisk it back out just like that. That is because you can have an automated test or something in a „pipeline“ which runs the test when the change hits production ad then backs out the change if the test fails.
Is that sort of thing nonsense? Or is it the sort of thing we want in SAP world? In my opinion abapGit is the first step on the journey.
Chigley
Here are some song lyrics from children's show „Chigley“ in 1969. This song is about a biscuit factory. Has anything changed since then? Do software companies claim any of the below things in 2021 saying they are new concepts?
Efficiency efficiency, our watch word while we work
The customer is always right; a fact we never shirk.
Automation for the nation, time is not to waste,
Although at times we gain more speed by using much less haste.
That last line is about TDD and code quality, both of which appear to „slow down“ development and yet in fact speed it up, though in 1969 they may not have been thinking about that exact example when they wrote the song.
The Closed-Closed Principle - Chapter 6 – Database
Before we move on, here is Larry Ellison saying in-memory databases will never catch on and the whole idea of SAP HANA is so crazy he cannot talk about it with a straight face,
https://www.youtube.com/watch?v=4vKOb6HAz-8
The „Open-Closed“ principle is the „O“ in the acronym SOLID and refers to the idea that you can change the behaviour of a program without changing any of the code.
At first glance that sounds impossible – however SAP manages to achieve this by having load of rules configurable in the IMG, and having lots of user exits. In both cases the code of the core SAP program stays unchanged, and yet the behaviour changes.
So – what is the „Closed-Closed“ principle? It is nothing to do with the „Open-Closed“ principle; it is just me being silly.
In the past SAP used to sell itself on the streets, swinging its keys around, based on the fact it was database agnostic. You could have Microsoft, Oracle, IBM, Lack of IQ, Max Headroom, whatever as the database including the world famous brand ANYDB. As a result the Open SQL in ABAP was somewhat hamstrung – each individual database could met the 1992 SQL standard but they each of those databases did it in a different way. Moreover each individual brand of database had features none of the competitors had.
Since SAP was agnostic, open SQL could only support features implemented in the same way by every one of the supported databases. The middle of the Venn Diagram you might say. So an open SQL query in ABAP could not support all the myriad options a Microsoft SQL query could do, or an Oracle SQL query could do and so forth. You could do such things using „Native SQL“ from ABAP but that was always discouraged in case you ever changed databases.
As it turned out that was very good advice. SAP’s position used to be (per Horst Keller) „stay as open as you can“. That is – use open SQL if possible, if not then a CDS view (which worked on any database) and only as a last resort use an AMDP which only works on HANA.
Nowadays SAP has done a 180 degree pivot. Open SQL is now ABAP SQL as it only works with a HANA database. A CDS View is now a CDS Entity which only works with a HANA database. An AMDP only ever worked with HANA anyway though just to be perverse you have to specify what database you want in the definition of the AMDP and its the only one of the three where you do!
So the new state of affairs, database wise, is that
nothing works unless you have a HANA database. Hence the recommendation from SAP has changed from „stay open“ to „Closed- Closed“.
So – that means the Venn Diagram problem is now solved! That would seem logical. Now SAP only supports HANA then the range of options in ABAP SQL no longer have to be restricted to the lowest common denominator, and so naturally you would expect that ABAP SQL can now conform to the standards set by the SQL consortium in 1992.
That is what you would expect. Is that the case? It might be. I have asked various people at SAP directly five times now over the last three years. I have not yet got an answer. I am sure the answer will be yes if and when it comes.
*----------------------------------------------------------------------------------------------*
Code Base
*----------------------------------------------------------------------------------------------*
Whilst we are on the subject of database access, in the last episode the underlying database tables were created for the various business objects – monsters, sales orders, deliveries and so forth. Some of those tables were generated automatically from the BOPF based upon structures you define to hold the persistent values for that business object.
In the new world you quite often do not read data directly from the tables but rather from a CDS View (or its younger brother the CDS Entity). Moreover for some technologies you 100% require a CDS View.
I have more types of business objects than you might reasonably expect for a „textbook“ which is supposed to stick to the simplest example which can explain whatever it is that is supposed to be being explained. The reason for this is to show various different techniques which can be used with CDS Views.
For the Monster business object everything is created manually – the BOPF definition, the CDS view, the SEGW definition and the code in the UI5 application.
For the delivery business object a technique is demonstrated whereby the SEGW definition is created by „pulling“ from the CDS View i.e. you specify the name of the CDS view and the SEGW writes itself
with not one line of code.
AUDIENCE: (
Sings) Code Code Go Away! Come again another day!
For the sales order business object the recommended technique of the SAP Programming Model for Fairy Dust is followed. That is in the CDS View definition you have annotations saying that (a) you want to automatically generate a BOPF object definition and (b) you want to automatically generate the SEGW definition. When the CDS View is activated the BOPF and SEGW thingies create themselves.
Then we have CDS Views for the village and reservation business objects which are used for various examples in Chapter 6. All the CDS Views just mentioned are „interface views“. They read from one or more underlying database tables and are supposed to be application agnostic i.e. re-usable.
For two of the Baron’s business applications – the Monster Atrocity Due List and the Monster Atrocity Monitor – we need application specific CDS Views – so called consumption views.
In the RAP things are different yet again. You can create ever layer in the cake manually, and indeed I show how to do just that, but really all you need to do is to create the underlying database tables, document relationships between those tables and some other settings in a configuration file, press a big red button and ten seconds later all the components (e.g. CDS Entity, Behavior Definition, Service Definition etc.) have been generated for you and have a prototype application where you can create, change and delete monsters (or whatever). That takes care of all the boring bits which are the same every time and leaves you free to code the interesting bits which vary between applications.
*----------------------------------------------------------------------------------------------*
Prizes
*----------------------------------------------------------------------------------------------*
PDH: As you are surely aware by now you are supposed to be solving the murder mystery surrounding the destruction of Count Dracula. How did he die? Where did he die? What was the name and colour of the Monster responsible?
Due to the nature of the puzzle you will not be able to solve this until you have all of the clues, the final ones being delivered in the last blog of this series (Blog 8 of
😎 though with every single clue you get you can start making inferences.
At the end you will be asked to provide your reasoning – which will be a list of about thirty logical steps e.g. because the BLUE monster was in Castle X then he cannot possibly collect rare coins because XYZ.
What do you think of that, audience?
AUDIENCE: That sounds like
WORK! Why should we bother? We don’t want to write even one line of code, let alone go around solving murder mysteries! So – why bother?
PDH: Good Question. On the one hand it did occur to me I might get no responses at all. However on the other hand if programmer types did not like solving puzzles they would not have gone into programming in the first place.
And on the Gripping Hand we have the nature of the prizes. There are going to be enough for a fair few winners. As might be expected some are going to be some SAP type things but those are not the important ones. The important ones are being hand-made by my wife as I speak.
She had a difficult task. The prizes had to be something gender agnostic and even country agnostic, be something that every single person in the world would be glad to receive. She has done an exceptional job. You are not going to be disappointed. I’m still not going to say what any of the prizes are!
*----------------------------------------------------------------------------------------------*
Plot – loosely based on „House of Frankenstein“ (1944) – Part 6
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. As a joke the Baron fills the castle with a special gas to make everyone fall in love with random people who don‘t love them back, just in time for the guests to arrive for the SAP Press Gala Party.
Slin Shady is now madly in love with Beatty Pea but sadly for him she is madly in love with Larry „Talbot“ Ellison. So out of spite Slin tells her that Ellison is a Werewolf, but as she is now madly in love with Ellison, she promises Ellison that she will help him. Let us take a look at this in more detail.
SLIN: You see that Werewolf there?
BEATTY: Where Wolf?
SLIN: (
Points at Larry) There Wolf! Boom Boom! (That joke was stolen from ‚Young Frankenstein‘)
LARRY: Oh yes, very droll. Your stupid master was supposed to have found me a cure by now, but all he does is blow up his enemies and sing and dance with monsters. He is just as bad as the Baron. They are about as much use as the persistent object framework or Enterprise SOA.
AUDIENCE: Enterprise SOA! (
Entire audience falls about helpless with laughter for a full fifteen minutes. The characters wait for them to finish)
BEATTY: Do not despair! If those mad scientists will not help you then I will. I am a Citizen Developer so I will create a cure for lycanthropy –
without one line of code!
AUDIENCE: (Sings) Code Code Go Away! Come again another day!
BEATTY: My solution will be so good it will be 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!
BEATTY: My solution will be so good it will be a
GAME CHANGER!
AUDIENCE: (
Stand up, wave their hands in the air) Changer! Changer! Game Changer Will Robinson!
BEATTY: My solution will change the way werewolves are treated forever. Thus we are currently standing at an
INFLECTION POINT!
AUDIENCE: (
Sings) Two Inflection Points of Lager and a Packet of Crisps Please!
NARRATOR: Events reach a crisis point at the SAP Press Gala Party when BOPF leads the Monsters (who are now madly in love with him) in a song and dance act and Ellison once again turns into a Werewolf and starts eating the guests. Let us take a look at this in more detail.
BOPF: (
to BARON) Is it OK if I do the next song? You were scheduled to sing it according to the APO.
BARON: Please go ahead! I am otherwise engaged anyway. The guests have been asking me so
many questions! He he he! Catch me if you can! (
Runs off pursued by assorted Guests)
BOPF: (
To audience)
I am the leader of the Monster Pack
That makes me a Computer Jack
This party is Stomach Turning
So come on Monsters –
BEDS ARE BURNING!
*----------------------------------------------------------------------------------------------*
Song - Embedded Steampunk is Burning
https://www.youtube.com/watch?v=ejorQVy3m8E
*----------------------------------------------------------------------------------------------*
(BOPF puts bald wig on. He starts to wave his arms and legs around in abrupt jerky motions, like he was having a fit. The Monsters all do likewise, except the ones who have no head, as they cannot put a wig on)
(Monsters: BAA BAA BAA BAA!)
Where did SAP River go?
The blood runs high, the codes bespoke
Project train wrecks and management weasels
Steampunk in UI5 degrees
The time has come
To Move Off-Prem
To pay indirect licencing fees
Again and again
The time has come
For alternative facts
We’ve gone Off-Prem
F3 means BACK
How can we dance
When we get Free Learning?
How do we code
If Embedded Steampunk is Burning?
How can we dance
When we get Free Learning?
How do we code
If Embedded Steampunk is Burning?
The time has come
To Move Off-Prem
To pay indirect licencing fees
Again and again
(Monsters: BAA BAA BAA BAA!)
Industry 4.0 scares the cockatoos
They can code much better than you
The western desert lives and breathes
UI5 degrees
The time has come
To Move Off-Prem
To pay indirect licencing fees
Again and again
(
A Monster waves a paper mache full moon in the air. Ellison turns into a Werewolf)
The time has come
For alternative facts
We’ve gone Off-Prem
F3 means BACK
How can we dance
When we get Free Learning?
How do we code
If Embedded Steampunk is Burning?
(
Ellison eats a party guest)
How can we dance
When we get Free Learning?
How do we code
If Embedded Steampunk is Burning?
The time has come
To Move Off-Prem
To pay indirect licencing fees now
Again and again
(
Monsters:
Hit that Perfect BTP Boy!)
(
Ellison eats another party guest)
The time has come
For alternative facts
We’ve gone Off-Prem
And we can’t go back!
How can we dance
When we get Free Learning?
How do we code
If Embedded Steampunk is Burning?
(Monsters: BAA BAA BAA BAA!)
(
Ellison eats another guest. Burps)
*----------------------------------------------------------------------------------------------*
Clues
*----------------------------------------------------------------------------------------------*
ENTER „APPY“ „MAC“ GYVER
AMG: I am „Appy“ and I know it – clap your hands! It is getting more and more difficult to recall – BUT - 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.
- One Haunted Castle was built over a Gateway to Hell. It was strategically built over the hole (which is fabled to be bottomless) to seal up the gateway and keep demonic creatures from entering our world.
- One Haunted Castle is located at 134.6 degrees Longitude. Is that specific enough for you? Is it? Is it?
- One Haunted Castle is located at -7.8 degrees Longitude (i.e. negative). Negative longitudes represent the western hemisphere.
- There are more clues to the murder mystery scattered randomly throughout the downloadable code (in the form of comments) on the books GitHub repository - https://github.com/hardyp/ABAPToTheFuture04
- At the time of the murder the Monster whose hobby is Historical Re-Enactments was one castle away from the Blue Monster i.e. either in the castle directly to the east or the castle directly to the west. Each of the five suspect Monsters is a different colour.
- The Monster in the Centre Castle reads "Enterprise SOA". Why? Because he is BONKERS! BONKERS! BONKERS! BONKERS! That does not men he is the murderer however. The murderer may or may not be bonkers, Remember each Monster only ever reads one book,
- The Watch Repairing Monster has the Super-Power of Teleportation
- Monsters who are the same colour as the Monster called Rolf can play three different musical instruments at once due to having so many arms. The play the Guitar, the Piano and the Double Bass, all at the same time, and would never even think about touching any other sort of musical instrument.
- Paul works for a company called (in Australia) Hanson (which is 100% owed by Heidelberg Cement)
Going back to the subject of logical inferences here is another example.
You have been told "The Monster that does Historical Re-Enactments was in the west-most Haunted Castle"
You have also been told "The Monster who does Historical Re-Enactments was one Haunted Castle away from the Blue Monster"
The west most Haunted Castle is Haunted Castle One. So the Blue Monsters cannot possibly be to the west of that Haunted Castle so it must be in the Haunted Castle directly to the east. Therefore the Blue Monster is in Haunted Castle Number Two.
*----------------------------------------------------------------------------------------------*
Outro
*----------------------------------------------------------------------------------------------*
NARRATOR: As we leave this weeks episode, 12 chapters have now been updated, and all the database related objects for the downloadable code have been created. More ominously the SAP Press Gala Party is now in full swing and on that – fateful - night the combination of the Baron’s poison gas and a werewolf eating the guests means that things are not going as well as might have been expected by the organisers. Meanwhile the murder of Count Dracula remains unsolved. 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“
https://blog.sap-press.com/abap-room-101-the-worst-thing-in-the-world
https://blogs.sap.com/2021/12/28/i-can-see-abap-moon-rising-part-seven-of-eight/
https://www.sap-press.com/abap-to-the-future_5360/