Purchase order release in Personas
My first Personas project joined together a lot of transactions – 23 in total – into a single package designed to simplify SAP interactions for a relatively small group of users. You can read about that project here – Putting everything together – the finished Personas project. My second project is very different – simplifying just two transactions for a much larger group of users. Those users are department heads and senior managers, and pretty much all they do on SAP is release purchase orders and billing blocks on sales orders. I started by looking at the transactions to do this and at how they might be simplified. However, one thing I learned from the first project was that our users very much appreciate the “launchpad” design where the transactional nature of SAP is hidden as much as possible. In many cases tasks are carried out directly in the launchpad screen without ever being aware that an SAP transaction is being executed at all. So I changed my approach and looked at how to do the same for PO and SO releases. So far I’ve just implemented PO release, but I think the design works well and hides many aspects of SAP that our infrequent users find confusing. First, everything happens on the launchpad screen, and second, there are no release codes in sight.
Before I describe the implementation, here’s what it looks like. I’ve skipped the login process and we pick it up just as the initial launchpad is being rendered. On the left side is a list of all the POs waiting for release for the current user. You can push a button to see more detail over on the right hand side, and if the PO has multiple lines you can scroll through the line item details. If necessary you can also hit the “Display” button to see the whole PO (using ME23N). Once you’re happy that the PO is OK, you hit the “Release” button and you are asked for confirmation before the PO is released. After release, the left hand list is updated.
The most complex part of this implementation was the scrolling list on the left. The implementation of this is described in detail in this blog – Creating a custom table in Personas. It isn’t pretty but it does work well. You may notice that the table scrolls more slowly in the video in that blog than it does in the video in this one. My new implementation uses an interesting technique to improve performance – I’ll describe it in a separate blog. This table contains all of the POs that can be released by any release code the use has access to. I use the “OnCreateHandler” property of the screen to build the list automatically when the screen is rendered, so that when a user logs in the list is right there waiting for them. You’ll notice through this entire process the user needs to have no knowledge of release codes, or that they even exist.
Once a PO is selected and the details displayed, things get a lot more straightforward. The details for the selected PO use the quick lookup technique to run ME23N and copy the necessary details back to the launchpad screen. Scrolling through the line item details again calls ME23N for each scrolling action. I’m actually considering replacing that section with a second table of line item details. I think that will perform better and the users will prefer it. The right hand side will then effectively be a cut down ME23N. The “Display” button obviously runs ME23N to display the selected PO. Coming back via the “Home” button is interesting. You may have noticed that if you navigate away from a screen and then return, any custom fields you have added to that screen typically lose their values. In this case, since the “details” section on the launchpad contains values that originally came from ME23N, I simply make the “Home” button copy them all back!
To achieve the “Are you sure?” effect, I have a text label consisting entirely of spaces and positioned in front of the Yes/No buttons so that it hides them. The “Release” button simply changes the value of that label to be blank, revealing the buttons. The release operation is carried out by the “Yes” button. Here I use a WebRFC to carry out the release but scripting ME28 to release a specific PO should be a simpler option.
This is still a work on progress. It hasn’t yet had any significant end-user input and that is important. As a result the final version may well be a little different from this. And obviously I still need to add SO billing block release to the bottom half of this screen. I’m hoping it can be done in a similar way.