Skip to Content
Author's profile photo Matt Harding

Let’s Crowd Source a POWL Based Universal Worklist Design for ERP

The idea

Now while there’s a version 1.0 HTML5 All in One SAP Inbox due any day now (or so I’m told), some of us need to do something now about having a single place for a user to go to see there various workflows from multiple back-end systems. In the Portal, this was the UWL. In my mind, the Portal UWL was a good idea, but plagued with the fact that there was a chasm between the workflow people and the Portal people, and lots of strange configuration where it was hard to connect all the dots.

Now as of EHP5+, there was a semi-replacement available within ERP. You can find more about this in a great informative blog from Sagar Gadre  that can be found here.


While it looks like all the pieces are here, I wanted to extend this design somewhat, and make the solution in some ways, more generic, but not so in other ways.


The Warning

I put together this blog as I needed to demonstrate a solution for my customer’s SI partner to help them see how the solution can hang together from a pure prototype perspective, and because I have a forward thinking manager at my current customer who understands the power of community, they agreed that it would be a good idea to take my workings and put it on SCN to make sure people don’t scream at us saying “You’re butchering the intent of our solution” (which the combination of POWL_TYPE’s we use could be doing exactly that), or preferably offering the following advice: “Here’s a better idea rather than doing X”. e.g. My testing of this solution is very superficial.


Hence, below is a solution so far that does not contain custom development and can be configured (to a degree) completely out of the box. I’ve looked a little below the covers to see how caching of work items occurs for each query, but I realise that if a connected system is down, then I’m not sure how well that is handled if the user presses refresh right now (guessing it’s not). In my mind, considering the importance of the UWL, you could either train the users about this with outage notifications (if you happen to need one), or you could build a process to remove the system temporarily from refreshes during an outage.

You’ll also need to run this in a Portal or NWBC (I’m using NWBC), and understand how to use the API calls that the underlying framework uses (we’re using OBN for all navigation as I think it’s better as it potentially places the user in the right area of the solution when they process a task).

Substitution is limited to HR workflows built for substitution (as there’s security code involved), though could likely be extended for other workflows if you look into it further.

In other words, this is a start point for discussion, not a final design (though appears to be mostly working). So please provide direction so others reading can benefit!

The Requirements

So what do we want – well a picture is worth a thousand words so here you go:

FInal.jpg

In short, there are 3 categories – All tasks (with a filter for high priority tasks), People Related Tasks (e.g. Timesheets, Leave Requests, probably others should be listed too, but wasn’t in my scenario just yet – separated out because it’s usually something that needs focus), Incident Related Tasks (High Priority Tasks and Normal Priority Tasks since safety incidents should be focused on!).

The point of using this view is to see within a small area, what work do I have to help the users manage their tasks. Obviously this layout suits where I am, but the steps should be similar if you go the same way.

FYI – I also see this being the same source of data that could be used for the lanes page introduced by Renewal where you see dashboards of Workflow information, hence thinking also about the future and limiting the background tasks to support Worklists.

Other requirements include:

  • Multiple back-end systems (refer to Sagar’s blog about setting this up) – though at some point, need to consider what to do if planned down time of a connected system occurs.
  • Refresh of the UWL so the user doesn’t get a time-out if they leave the tab open in NWBC
  • Substitution (though haven’t explored this yet and would refer you again to Sagar’s various contributions)
  • Fast

How to configure the initial guts of it all

The high level steps are:

  1. Create application
  2. Create categories
  3. Link relevant POWL types (feeder classes) to our application
  4. Create our POWL queries
  5. Link the queries to our application
  6. Create PFCG Role
  7. Configure new Application Configuration
  8. Set up batch job to refresh worklists
  9. Set up refresh rate of POWL when running
  10. Next steps not documented include defining all tasks, OBN’s, parameters, etc.

So let’s start with Step 1…

Note – I’m expecting you can figure out the steps involved between the statements/screenshots…Happy to field questions if required though.

Create Application

Start Transaction FPB_MAINTAIN_HIER and create your own application:

/wp-content/uploads/2013/03/1a_196787.png

As you can see, I don’t think the UWL name or Inbox naming is very nice, and coming from a process navigation user experience here, I’ve gone with Centralised Task Processing. Still a bit crappy, so if you have come up with a great name for end users; would love to hear your application name.


Create Categories

Start transaction POWL_CAT and create your categories.


New Entries as follows:

/wp-content/uploads/2013/03/1b_196788.png

Link relevant POWL types (feeder classes) to our application

Run transaction POWL_TYPER and assign POWL types being used to our application.

/wp-content/uploads/2013/03/2a_196821.png

/wp-content/uploads/2013/03/2b_196873.png

For reference, we’re using IBO_INBOX_WI as the main feeder for most of the scenarios, except for timesheets where we use the dedicated feeder (MSS_POWL_CATS_APPROVAL_1) from the latest MSS inbox example, since timesheets are a single workflow item now days, but it’s nice to see the number of timesheets entered for the week so you easily know when everyone has submitted. Note – I’m assuming by using mainly IBO_INBOX_WI, that the singleton usage within this application will protect us from unnecessarily retrieving worklists from all systems multiple times, but that’s purely hypothetical as I’ve only scratched the surface of looking into these feeders.


Create Queries

We need to create:

  • All Tasks based on IBO_INBOX_WI (no filter)
  • High Priority Tasks based on IBO_INBOX_WI (Filter high priority)
  • People Related Tasks
    • Timesheet Tasks based on MSS_POWL_CATS_APPROVAL_1
    • Leave Requests based on IBO_INBOX_WI (filter by task id)
  • Incident Related Tasks
    • High Priority Tasks based on IBO_INBOX_WI (but needs enhancement) (Filter by task ids!)
    • Normal Priority Tasks based on IBO_INBOX_WI (but needs enhancement) (Filter by task ids!)

To do this, start transaction powl_query then create relevant queries, grouped by Categories using underlying POWL Type (Feeder). Set parameters to differentiate each Query.

/wp-content/uploads/2013/03/1c_196822.png

No parameters required for All tasks

/wp-content/uploads/2013/03/1d_196874.png

After selecting the query id (and I recommend saving before doing the next step due to an SAP bug I experience every now and then) – Press Query Parameters to only select High Priority items.

/wp-content/uploads/2013/03/1e_196875.png

etc.; except for Timesheets which looks like as follows:

/wp-content/uploads/2013/03/1f_196876.png

Notes:

  • Leave sync off as it’s a nicer experience IMO.
  • The query parameters support filtering on a single task, but really I need an option to select multiple tasks in the future. Guessing I’ll need to use the existing feeder class as a super class to add this option…


Link the queries to our application

Start Transaction POWL_QUERYR and assign your queries.

/wp-content/uploads/2013/03/1g_196880.png

Create PFCG Role

Now if security gives you access, we create a test role to try this out (you would also use this role to test out the OBN connectivity potentially).

Run transaction PFCG.  Create new Single Role, add Folder, then add Web Dynpro Application:


/wp-content/uploads/2013/03/2c_196882.png

Use IBO_WDA_INBOX Web Dynpro Application as your application (though note – This locks the name of the application to Lean Workflow Inbox which sucks, so for the real version, you probably need to create your own Web Dynpro application to configure against. Not sure why SAP haven’t addressed this as config yet.)

Configure new Application Configuration

Name the new Application Configuration and press Application Configuration to launch the browser.

/wp-content/uploads/2013/03/2d_196883.png

Copy HRMSS_AC_POWL_INBOX_2 application configuration to your new Application Configuration name (since it looks a little more appropriate than the default IBO application configuration)

/wp-content/uploads/2013/03/2e_196886.png

/wp-content/uploads/2013/03/2f_196887.png

Once created, you need to copy the both design configuration items to your own configuration. Do this by clicking on the links, cancelling going into change mode, then copying the HRMSS config to your own config. For each config, you need to change the POWL Application id over to your own Application Id.

/wp-content/uploads/2013/03/2g_196888.png

/wp-content/uploads/2013/03/2h_196889.png

/wp-content/uploads/2013/03/3a_196890.png

/wp-content/uploads/2013/03/3b_196891.png

Once created, the Assign configuration button hidden away in the table area of the application configuration can be used to change it to your configuration.

/wp-content/uploads/2013/03/3c_196892.png

/wp-content/uploads/2013/03/3d_196893.png

Back in pfcg land, save your PFCG role, and test within NWBC using the URL: sap-nwbc://http://<ERP FQDN>:8000/nwbc/~roletest/YDEMO_UWL

Hey presto:

/wp-content/uploads/2013/03/3e_196904.png

Set up batch job to refresh queries

Now this needs a lot more thinking through and knowing how the feeders actually work, but schedule carefully how the POWL_WLOAD batch program should run to populate users’ inboxes. I’d go with 30 minutes, and just use my whole Application as the batch job in this case. Also, small test system, so 1 query per job, and max 1 parallel jobs. Default values in this batch job can bring down your dev system! (FYI – This is obvious, not learnt from my own mistake)

/wp-content/uploads/2013/03/3f_196894.png


Set up refresh rate of POWL when running

A useful feature (if I understand it correctly), is to set the timer on the Inbox to refresh regularly, which theoretically, should mean the Web Dynpro application doesn’t time-out. I’ve tested this and noted it does refresh, but not sure if it completely stops time-outs.

/wp-content/uploads/2013/03/3g_196905.png


Will this work? Is there a better way?

Now time to hand it over to anyone out there involved in something similar, or experienced with why it’s the “Lean” inbox rather than the new UWL…My job to set direction for the project I’m on is done (not really, but technically I shouldn’t have done this either), but I know this is all new to everyone on implementations, and it does suck when you get a direction from an architect (or SAP) which is impossible to make work.

As stated, I still have not addressed:

  • Connected system failures that may arise;
  • Optimising performance for larger user bases;
  • Different queries for different user groups (e.g. Non-Managers typically don’t approve timesheets)
  • Running real workflows through this beyond minimal unit testing.
  • Substitution functionality (since substituting all workflows is unlikely to work without changing non-HR workflows from a security perspective).

Thanks for reading and hope we can make this better and usable until 2.0 of the new truly universal inbox comes out from SAP!

Assigned Tags

      15 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Matt Harding
      Matt Harding
      Blog Post Author

      BTW - If you're after a good guide to POWL in general, here's an oldie but a goody:

      Link

      And note - Unless you get this right first time you'll need to run reports POWL_D01 and/or POWL_D04 as POWL seem to cache everything in separate tables (plus shared memory for actual object lists which you can clear in a dodgy way via transaction SHMA if basis give you this transaction)

      Refer to http://wiki.sdn.sap.com/wiki/display/WDABAP/POWL+Reports

      Author's profile photo Sagar Gadre
      Sagar Gadre

      Great blog Matt!

      It demonstrates the flexibility offered and just by configuration you are getting better out of it!

      Author's profile photo Matt Harding
      Matt Harding
      Blog Post Author

      Thanks Sagar - We've come across your name in the code - and appreciate the flexibility of the solution that's in place! Seems not enough people are really using it yet, hence the lack of comments/feedback, but from our initial work, it appears to work really well (except for going more than 1 deep into Workflow container to pull out container parameters which we need to do an implicit enhancement to make work for Travel Expense Management (2nd hand information from SI)...Still worried about overall performance not understanding the underlying caching across multiple query types...

      Cheers,

      Matt

      Author's profile photo Sagar Gadre
      Sagar Gadre

      Hi Matt,

      Could you additionally tag the blog with ess, mss, hcm ?

      I think people are using it and this blog will give them good overview of possibilities offered. I think there would be more scenarios thrown up..

      Author's profile photo Matt Harding
      Matt Harding
      Blog Post Author

      Done, though not sure what the official tags are for those (used what you put up)...

      Author's profile photo Steve Oldner
      Steve Oldner

      Ok Guys, I'm in.  We moved to EHP6 last year and just rolled out Leave Requests (its buggy, have open high priority OSS note that has no action on it...). Now we are starting the CATS and just saw a demo from our consultants. 

      My Boss didn't like the 2 POWL solution, so now I'm doing the combo - or the People Related Tasks portion.  Now, what do I need do?

      Author's profile photo Matt Harding
      Matt Harding
      Blog Post Author

      Hi Steve,

      Probably best you read through the above information, combined with Sagar's blogs, and see what you can determine as the best approach for your specifics (it's pretty much all there). And make sure you report back here (or in your own blog) on your experiences so others can benefit.  For reference, while there are some specifics in HR that make this a little tricky, it's been working fairly well for the place where I'm working.

      Cheers,

      Matt

      Author's profile photo Steve Oldner
      Steve Oldner

      Sounds good to me.  We have consultants in to get the CATS Timesheet to work, I will be doing any abap needed.  So pretty soon I'll start.  Just about finished reading all you recommended.

      Author's profile photo Steve Oldner
      Steve Oldner

      Update - currently stopped at step 5.  Need to discuss the role creation with our security guy before going on.

      I started this morning and ran into a issue.  Couldn't create using FPB_MAINTAIN_HIER, was getting a config cross client error.  This was new to me since I basically ABAP everything and have only configured 3 times in 10 years. After talking with my BASIS guys, they opened it for me to start.

      Steps 1-4 were pretty straightforward and detailed enough for me.  I would really have liked playing with them first so I could at least have a better understanding of it.

      Sine I am only looking for TIME and TIMESHEET, I named mine Time/Attendence.

      After a few more steps, I'll update again.

      And once more - a big thanks to Matt for the great tutorial!!!

      Author's profile photo Paul Bakker
      Paul Bakker

      Awesome job Matt - this is exactly what I was looking for. I am going to have a crack myself. It doesn't look particularly easy, but _anything_ is better than UWL.

      Qn: I notice that your queries end up as hyperlinks on your Inbox page. Is it possible to assign queries to tabs instead? So if I click on a 'High Priority' tab it runs the High Priority query?

      thanks again

      PaulB

      Author's profile photo Sagar Gadre
      Sagar Gadre

      Hi Paul,

      To change to tab strip based layout you can personlize at user level. Just click on personlaize button and go to layout tab. You can change the view to a tab strip based view.

      Regards

      Sagar

      Author's profile photo Former Member
      Former Member

      Ditto on the thanks, Matt.  This is a really nice explanation.  We are using POWL for approval of Leave Requests and Corrections to time clock punches.  What we're stuck on is that the item in the worklist seems to be a link - but the "link" does not open anything.  Any idea what we're missing?

      Author's profile photo Former Member
      Former Member

      Hi Sherryanne,

      There are 2 possibilities on why the link may not work. Do you get any error messages or none at all? If you get an error message stating that the work item cannot be read it's most probably because the application doesn't know to read the work item details from the backend system even though you have configured the backend system. Sounds strange given that the backend work item won't be displayed in the POWL if it didn't know the backend! The reason for this is a bug, so please apply note 1632320.

      If you get an OBN error, then please check that the OBN does exists and is linked to the WDA screen that you want to display. Use program NWBC_LIST_OBN_TARGETS to identify which roles hold the OBN. You need to ensure the OBN is held in the same role as POWL WDA.

      If it's not either of the 2 above then you might have to debug the application. The method to debug is CL_IBO_INBOX_FEEDER_WI~HANDLE_SPECIAL_ACTION from line 212 where case statement "WHEN if_ibo_inbox_feeder_c=>gc_fieldcat_wi_text."

      Hope this helps ...

      Also if anyone is interested, with reference to Matt's comments on the workflow container values having to be at the first level, the solution is restricted to only reading custom workflow variables that exist at the top most level. Any workflow variables that are within nodes in the container will not be read. If you are interested to see where the code is for this navigate to method CL_IBO_WF_INBOX_CFG_PROV~RESOLVE_DYNAMIC_PARAMS_FOR_WI.

      Cheers,

      Liam

      Author's profile photo Former Member
      Former Member

      I really appreciate your input.  We believe it may be security.  We added NW MSS role; still no luck; added workflow transactions and - Im at TEC ED now so not sure of teams results - will let you know!

      Author's profile photo Former Member
      Former Member

      Great blog Matt. Very helpfull. Thank

      Having issue in fetching substituted tasks. We have created a A210 relation (Position Based Substitution). I was able to see substituted tasks in GUI inbox but not in IBO_WDA_INBOX. What could be the reason?

      Baba