On 25/05/2019 it was SAP Inside Track RuhrPOTT in the German town of Essen. The term “RuhrPOTT” refers to a large industrial area stretching from Dusseldorf to Dortmund.
First things first – we all met up for beers and food the night before. I had a pizza you will be happy to know, and it was about ten times the size I expected. You need to know these things as I have been reliably informed that food reviews are the most important parts of blogs about SAP events. I did not get a chance to check the quality of the dustbins, for which I can only apologize.
It was boiling hot, especially for the ones opposite me who got the sun shining directly on them, and the sun did not go down till 10PM.
Anyway the next day was “Towel Day” which commemorates the death of Douglas Adams who wrote “The Hitch Hikers Guide to the Galaxy” which is he in Germany. Douglas Adams was also script editor on “Doctor Who” when he was young and wrote three corking serials – “The Pirate Planet”, “City of Death” and “Shada” where Tom Baker played the Doctor.
One of my fellow presenters actually wore a (SAP) towel round his neck whilst presenting. I was given an SAP towel at TECHED Barcelona last year but I managed to lose it (which is a serious crime in HHGTTG terms) but as I was the first speaker I had to get some sort of appropriate reference into my first slide. Can you spot it?
ME – THE FUTURE OF ABAP PROGRAMMING
My title slide
As with my other blogs about SIT this year I am going to gloss over the exact contents of my presentation (though as the whole event was broadcast live to YouTube you can see every single presentation using the URL at the end of this blog) – suffice it to say I talked about Unit Testing / TDD, abapGit and ABAP in the Cloud and the RESTful ABAP Programming Model (RAP).
Once again, by accident or design, this tied into later presentations e.g. there was a presentation about converting Z code to ABAP in the Cloud (I will talk about that later) and one about the RAP.
UWE FETZER (@SE38) – SOMETHING WITH ABAP AND BEER
Despite the tile there was not that much ABAP in this talk, though it was most certainly beer focused.
Uwe had to give a talk called “WTF is SAP HANA” which even after all these years is still quite a common question.
He, just like me, was bored to tears with the SFLIGHT model. I went for Monsters instead, he decided that a beer based data model would be just the ticket. So he found the “Open Beer DB” online which contained a set of CSV files with details of beers, breweries and so on.
Using native HANA development in the Web IDE it was easy enough to convert those CSV files to database tables with the same content. Then you could write an ABAP program to visualise the data but that is not what he wanted to demonstrate. He wanted to demonstrate two aspects of the HANA database which do not get mentioned much.
The first was the concept of a “graph database”. In this sort of data model you have “vertexes” which represent the objects and “edges” which represent the relationships between the objects. These both got a table each.
Then from right inside the Web IDE he used a language called “cypher” to do what I would call an SQL query on the HANA database to get a list of breweries. Instead of a tabular display each came up as a bubble and connected to that bubble by lines where various bubbles contacting the beers that brewery made, and another link to a bubble saying what city the brewery was in. The city bubble was in turn linked to a bubble saying what country the city was in. Double clicking on any bubble enable you to visualise any other relationships the bubble had.
It beats the hell out of SE16 for exploring data. This is not for end users by the way, it is for developers to get their heads round any given data model.
Then it was time to explore the spatial functions of the HANA database i.e. to have a look at a brewery in Honolulu and see where the nearest brewery which sold a certain type of beer was (San Jose as it turns out, do you know the way there?).
Uwe has put an open source project on GitHub to help with this called ZGEOJSON.
TRISTAN HAUPT – BEGINNERS JOURNEY TO ABAP
Tristan is 22, and a first year apprentice. He joined his current organisation straight from university as an ABAP programmer. There was no ABAP at university, he programmed in Java.
It has often been said that young “cool” people avoid ABAP like the plague, it is just dinosaurs like me who like it, and eventually us dinosaurs will all die off and ABAP will be no more. Thus it is fascinating to hear the experiences of someone young exposed to the horrors of ABAP for the first time.
As might be imagine, after only ever having programmed in Eclipse before he took one look at SE80 and thought “uuuuggh” and never touched it again even with a ten foot long bargepole, sticking with the known environment represented by ABAP in Eclipse (ADT).
What really puzzled him was the incredibly confusing “thing” that is SAP identity management, with S users and P users and all sorts, and do you create a new identity when subscribing to an Open SAP course and so on. It confused the hell out of him, and it confuses the hell out of me as well.
We have been promised by SAP a “universal” ID for many years now but it is rather like Nuclear Fusion – always ten years in the future.
I had to ask him which was the better language to program in. He said that Java was far better for programming algorithm’s but when it came to SQL database access ABAP won hands down. That sounds right, all my reading about Java suggests that connecting to a database is a right royal pain compared to such things being “baked in” to an SAP system.
Some years ago in a blog on SCN someone (cannot remember who) ended by asking the question “Do you think SAP has ‘got’ the idea of OO programming?” the inference being that no it had not.
I do not want to put words into someone else’s mouth but I sort of got the idea that Tristan also felt that ABAP as a language had not really “got” OO in the same way “real” OO languages had.
At this point I would just like to mention one of the most important things about living in Germany, and that is the abundance of Gummy Bears. I am sure you can buy them in other countries as well, but they are vital to life here. We do not have them in Australia, we have Drop Bears instead, but you cannot eat them, they eat you.
As an example at the hotel I was staying at they had a big jar of Gummy Bears at reception so you could eat some whilst checking in, and a packet on each of the pillows in the room.
In 2018 the German world almost ended due to an unexpected Gummy Bear shortage.
Happily in the SIT POTT venue there were Gummy bears all over the place (pictured).
Help Help! Here come the bears
BTW that article above talked about the disaster which was the aborted LIDL SAP project. Their “integration centre” was in the very building where I work, but obviously, it is there no more.
FRED VERHAUL – CLOUD APPLICATION PROGRAMMING MODEL – CAP(M)
There is usually a talk on this at SIT events and a good thing too, as I get the feeling this is really important. What you will NOT get though is two people sitting in the same room talking about the CAPM and then the Cloud SDK. Instead the Cloud SDK talk was in Belgium last week and the CAPM talk was in Essen this week. They are supposed to work together but everyone is really cagey about how exactly this works, and a talk on one will generally ignore the other.
The CAPM has the same CDS concept as ABAP or indeed native HANA development, but the CDS in the CAPM (we love acronyms) is far more advanced – inside SAP it is called CDR for “CDS done Right” – which is why I say the equivalent ABAP concept should be beefed up to match.
For example in the CAPM you define the CDS “entities” and then the database tables are generated to match, which is the opposite way around from how that works in ABAP.
One thing which is exactly the same between ABAP and the CAPM CDS is that you use annotations in the CDS definition to control the UI behaviour. I am not actually sure I like that all that much, having the UI annotations in an extension file seems much better (which you can do in ABAP to an extent), but that is the way it is, so that is the way it is at the moment.
An important point to note about the CAPM is you can develop locally – all the demonstrations use a development environment based on VSCODE with a CDS plug-in. The command line is usually used for a lot of the development work, just like when I was 14 (36 years ago). I think there is a GUI equivalent for most tasks but “proper” developers prefer command lines, just like my 14 year old self. Back then there was no “mouse” so when the GUI concept came along I used a joystick to move the cursor and fired at whatever option I wanted as if it was a Space Invader.
I think that V4 thing came out quite a long time ago (in IT terms, IT years are somewhat like dog years) but a lot of SAP technologies do not support it yet. Mind you inside ABAP the SQL still does not fully support the SQL 1992 standard, so we may have to wait a bit for this one).
It is not all command lines – you also get to do some coding!
In a file called data-model.cds you can define your “entities” – Monsters or Breweries or what have you. In another file called something-service.cds you define the services which expose the data model to the internet. Back in ABAP world the RAP works pretty much like that as well.
Once those files are written you can type SERVE in the command line and then everything comes to life and you can use the browser to look at the metadata and contents, just like you do when creating SEGW services in R/3. I am sure someone will tell me it is utterly different but that is what it looks like to me. I suppose it is human nature to look for the familiar in the unfamiliar, even if it does not exist.
On that subject what is familiar to ABAP programmers are INCLUDES and more specifically the sort of system based INCLUDE known as a TYPE-POOL. Both concepts are now of course obsolete – you use constants and TYPES fro global Z classes or interfaces instead.
In CAPM world you have a file called “common” which is a just like a TYPE-POOL in my mind, with lots of elements which programmers would want to use all the time. For example if you add the “managed” reference from “commons” into your CDS definition you magically get the fields created by / created on / changed by / changed on in your table without having to manually specify each one. ABAP in the Cloud could do with something like that as well.
If, in the definition of the fields in your “entity” you add the words “localized string” then a text table is magically generated for that element.
This is all good stuff. SAP just needs to do two things going forward:-
- Enhance the RAP a bit so it fits better with the CDS concept in the CAPM
- Find a way to explain the relationship between the extension factory, the Cloud SDK and the CAPM in a way that a human being can understand
ACHIM TOEPER – PIPELINE INGREDIENTS FOR CI/CD
This was a sales pitch in some senses, which does not have to be the end of the world if done right. In this case he mentioned at the start and the end that his company sold a CI/CD automation tool for ABAP and the other 90%-95% was talking about the general concepts i.e. why you need CI/CD in ABAP in the first place. This also tied into one of the slides in my presentation.
Also I am in no position to slag off sales pitches as at one point in my talks I always flash up a picture of my book, so me having a go at someone else for doing something similar would be “Dear Kettle, Love Pot”. Plus I sat opposite Achim and his marketing colleague at the beers the night before.
The philosophy is really simple – there is a need to have faster cycle times e.g. more change more often without blowing up the universe every time you make a change. A so called CD/CI pipeline (I won’t say what the initials stand for, as everyone you ask would give a different answer) is the answer, to run a whole bunch of automated static and dynamic (unit / integration) tests after every time you want your new or changed code to go somewhere (e.g. TEST).
This is also called “shifting testing left” as the earlier in the development process you find a bug the cheaper it is to fix. The opposite would be “shift right” where you only test in production after the change has gone in – and LOADS of people do this, even if they tell you they don’t – leading to the great Gummy Bear shortage of 2018.
It is easy to say “avoid rework and waste” but what does this mean in an SAP sense? I would say it means transporting to TEST finding an error, fixing it in DEV, transporting it to TEST and repeating that process half a hundred times before the application actually works half way properly.
That is why should test as much as possible in development, so you can, say, sit in a room with the testers and fix the code right in front of them. That is what I do and it works great. Sometimes the testers are end users. I recall doing that on “Hope Island” in Queensland which is not an island at all, it is miles inland and is only an island in the sense it is 100% encircled by a river, a river so narrow in places you can step over it.
Do you know there are some companies where no-one is allowed to test in development? Instead every time you make a code change you have to cross your fingers, hope for the best, transport it to TEST and see how many things are broken. That is obvious, barking at the moon, foaming at the mouth, burn all your money up, free energy crazy, but it actually happens in some organisations. You just cannot make these things up, truth is stranger than fiction.
At this point the book from IBM “Elephant’s cannot Dance” was mentioned:-
That was all about how IBM turned itself around from going the way of Blockbuster Video and Kodak. The point is that no matter how big your organisation is there is no logical reason that your It department should not be able to turn on a sixpence to respond to some sort of unexpected new law or market change or whatever.
INGO BRAEUINGER / THOMAS FIELDER – Quick Fixes in ABAP in the Cloud
The concept here is very simple – if you were to cut and paste your Z code to ABAP in the Cloud you would get a bucket load of syntax errors. However ABAP in Eclipse has a “quick fix” facility which is able to spot a lot of these syntax errors and automatically correct them en masse.
This is not new – a similar set of quick fixes are available when you paste your Z code to S/4HANA on premise.
What I did find interesting is that there will be a Fiori App you can run from ABAP in the Cloud and analyse custom code that has been moved to a Git repository via abapGit. This is coming in ABAP version 1908 (1905 is the latest at time of writing).
Also very interesting is that coming up is a Fiori App whereby you can schedule a batch job in ABAP in the Cloud which triggers a static method of a global class (there are no REPORTS in ABAP in the Cloud). Well done, and well overdue. Some would argue that a good time for this facility to have been added would have been in 4.6C when ABAP Objects first came along in the year 2000.
The presenters did not dwell too much on exactly what will break but I was frantically looking at the error messages to see what commands were not allowed in ABAP in the Cloud.
Here are some commands which will give a hard syntax error in ABAP in the Cloud:-
PERFORM – Ha! Ha! Ha! What do you think of that? You are only allowed to do OO programming. I imagine a great deal of programmers get a huge sinking feeling when they read that. Sadly you can still use function modules, and even worse the obsolete (in fact should never have been invented) function module like way of calling methods, namely CALL METHOD.
REFRESH – the only purpose of this was to empty internal tables with header lines, as if you did a CLEAR on LT_SOMETHING then only the header line was cleared. Now there are no header lines, as ABAP OO does not allow them, so CLEAR can empty the table, and REFRSH is redundant.
MOVE – as in MOVE ‘123’ TO SOME_VARIABLE. I started programming in ABAP in 1999 and I’ve never used MOVE, I always say SOME_VARIABLE = ‘123’ which made a lot more sense t me, plus that was how you did it in BASIC.
FREE – I am not sure about that one. It has two purposes in current ABAP world. It releases the memory area held by an internal table you have just emptied, and is sometimes needed to clean up GUI controls after you do not want them any more. For the former I can only presume the memory management in ABAP in the Cloud is better so this is no longer needed, and for the latter there is no GUI and hence no controls to clean up.
DESCRIBE – as in DESCRIBE MY_TABLE LINES TABLE_SIZE. You can use the built in LINES operator instead and save yourself a helper variable in the process.
As can be imagined you can start making such changes right now, and in some cases (MOVE) should have started making such changes 15+ years ago. I went through the huge program I am working on the very next working day and found far too many MOVES, several REFRESHES but no DESCRIBES. They are all gone now.
The LANGU data element is also gone, you use SPRAS instead. Data element BOOLEAN is gone as it was not Boolean at all in that it had three possible values, which is OK if you are a Quantum computer but not for ABAP. At long last we have data element ABAP_BOOLEAN which is ABAP_BOOL only you can use it in structures and so on. Again, something very long overdue.
This is of course just the tip of the iceberg. Those were just the ones I managed to spot on the screen, I am sure there are tons more.
The next point has nothing t do with the SIT event or even ABAP in the Cloud but I came across it at work today and felt a burning need to share it with the world.
The “Clean ABAP” guideline says that if you have your class as “Create Private” you need to make the constructor a public method otherwise the compiler will not like it. That sounds crazy, so I set up just such a class to see what the error message was. I had a class with “create private, set the constructor to “private” and here is what I got:-
Frankie Goes to Hollywood
That is the best pragma name I have ever encountered. It does not pop up on the official list, but I added it to my code and did not get the “unknown pragma” error so there must be a secret “Easter egg” list of cool sounding pragmas. Let me know if you come across any others.
VALENTIN CHERNOMAZ – UI TO UNIT TEST IN SAP ERP
This was another sales pitch, but once again done in such a way that 95% of the presentation was theory.
I understand that SAP events need a few sales presentations as all that “free” beer and food I consume does not magically fall out of the sky. So you need them, but if you are going to do when then the style of the two I say today – mention what is being sold only peripherally, concentrate on the problem – is the way to go.
Tests have shown that an advert which says “Drink Coca Cola” is only about 1% as effective as an advert which says “Thirsty? Try Coca Cola”. People do not like being given orders, but they do like being given potential solutions to problems.
I have lost count of presentations I have been to where the opposite ratio is applied – 5% on the problem, 95% showing the “whatever it is:” being sold. If the person doing this works for SAP they have the added disadvantage that the “whatever it is” is so new it does not actually work yet, and they have to gloss over this and hope no-one notices.
I am not allowed to say where I heard the following Q&A exchange, but it the most honest answer I have ever heard in my life.
Q: But does it actually WORK?
A: On a PowerPoint slide, yes.
Anyway at his company they have produced an all singing all dancing test automation tool. They never originally intended to market this, they came up with a list of requirements of what they wanted from an automatic testing system, concluded the range of tools available from SAP sucked like a donkey, and wrote their own for internal use.
An example requirement, for example, was that the regression tests should not break when a new release of the software being tested is installed. So ECATT is out. That always drove me mad. You do an upgrade, one field on the screen changes, and the whole script stops working and needs to be recreated. So the tool lets you down just when you need it the most.
One of his points linked to a picture I always show in my presentations. The point is that automatic testing only becomes worthwhile over time, and people only think in the short term. I show that as a pie chart with the build being 5% and the benefit being the 95%. However that is looking at things from a 20 year perspective. From a 3 month perspective the pie chart would look totally different. The question is – if you cannot get whatever it is out of the door in three months are you going to get sacked? If so adding the extra time needed for automated testing might not look that attractive an idea.
Going back to automated unit testing now he raises a point which should be obvious, but an amazing amount of people just cannot see it. If you only use manual testing, and you add your 6h feature, you have to test the nee feature, and also the first five in case they have broken. Not the end of the world, but what about when you add your 100th feature? In other words the scope of regression testing increases forever. How do people handle this currently? It is really simple – just test the new thing and the existing features can go jump off a bridge.
He made two further points in relation to automated unit testing in ABAP. Firstly that it is technically impossible (this is incorrect) and secondly that no-one does it (this is correct). Apart from me, and I don’t count because I have gone way past the point I can be objective about this.
The next point I wrote down was that when doing a performance test if you have 100,000 lines of data, each row identical, then that is no good. The example was that the program might aggregate identical records so the test data would be processed really fast, production data which is naturally all different, really slowly. As an aside one way around this is to use a “combinatorial test design” or “all pairs” tools to generate test data which covers all reasonable possibilities. That was not intended for performance testing but it beats the pants off 100,000 lines of identical data.
I have two further points I felt worth noting down, one was something I had to look up, the other was the most interesting observation I have heard for a long time.
The first one was the term “SAP CBTA”. I had no idea what that was, I had to look it up on my phone. The record playing RIGHT NOW in the pub is “Soul Man” and CBTA comes from SOLMAN and stands for “Component Based Test Automation”.
Now the important bit – if you have read anything about testing, you will have most likely have heard of the “Test Pyramid”. I must have read ten billion articles online and seen a similar number of presentations showing the same sort of diagram.
Below is the technology agnostic “agile testing pyramid”:-
The point the presenter made is that in 99.99999% of SAP environments that pyramid is upside down. You have one or two unit tests, if any, at the bottom, maybe some API tests if you are lucky maybe using a tool like HPQC and then a whacking great amount of manual tests at the top.
I put it to you, ladies and gentlemen of the jury, that if the ancient Egyptians had tried to build their pyramids upside down, with the pointy bit sticking into the ground, they would have been in serious trouble, even with Asterisk the Gaul helping them.
LIVE STREAMING – OLIVER KOHL
The last talk I attended was not about SAP at all really, it was Oliver Kohl and Gregor Wolff explaining how they were able to broadcast some SAP Inside Tracks live on YouTube.
The whole SIT RuhrPOTT event was broadcast live, warts and all, and then there was a bit of post-production and starting from 31/05/2019 all the talks should be available on the following site:-
Then it was wrap-up time. There are always some raffle prizes on offer at SIT event these days, as sponsor “Espresso Tutorials” donates a few books to give away.
Us speaker types got a little package with some typical RuhrPOTT products (pictured):-
Points mean prizes
Then it was beer time, and we sat outside and it was freezing, a 180 degree temperature pivot from the day before. There was an artificial beach in the big square in the old town we were in, and some local tramps treated us to a dancing contest.
That is neither here nor there, the point is that the inaugural SIT POTT was a great success, with a lot of wonderful content which – by accident or design – tied in together quite well. If you get a chance to go to this event next year I say go for it, or indeed any SIT in your area.
There are a vast number of SAP Inside Tracks each year now, all over the world. In Europe there used to be one a year in 2010/2011, now there is more than one a week on average.
I am not going to any for the next two months (I had three this month alone) but in August I hope to go (and speak) at the Oslo and Berlin ones.