Skip to Content
Technical Articles
Author's profile photo Ana Goncalves

Custom Situation Handling Use Case for Professional Services: Unstaffed Resource Requests

Here’s the deal: There’s an urgent business issue that you want to bring to the attention of the end users, but none of the available predelivered Situation Handling use cases fulfill your requirements.

While we continue increasing the number of standard situation templates with each SAP S/4HANA Cloud release, did you know that you can also create your own? That’s right, you can model custom situation use cases with the extended framework of Situation Handling.

Read this blog post to get an overview of the new features available with the extended framework.

I’ll share a few tips and tricks with you that will help you get started with your own Situation Handling use cases in SAP S/4HANA Cloud by using an example in Professional Services.

Use case description

In SAP S/4HANA Cloud, project managers use the Plan Customer Projects and Plan Internal Projects apps to manage their projects, including planning work packages and resources. It can be challenging to keep track of resource staffing, especially when there are several resource requests to be processed. Staffing the needed resources to a project in a timely manner is crucial to ensure that the expected scope is successfully delivered within the planned budget.

In this blog post, I’ll show you how Situation Handling can help project managers avoid project delays by notifying them about pending resource requests 30 days before the start date of the work package.


Work package view in the Plan Customer Projects app

Model your use case

You can configure your custom use case for Situation Handling in 5 steps:

  1. Think about the outcome you want to achieve and work backwards.
  2. Identify the technical artifacts needed for your use case.
  3. Define the responsibility context.
  4. Create your situation object, situation scenario, situation template, and one or more situation types.
  5. Prepare your business data and test your custom use case.

Let’s look at this in more detail.

Step 1: Think about the outcome you want to achieve and work backwards

Maybe you know from the standard framework of Situation Handling that a situation template serves as a blueprint for creating a situation type. It includes all the elements that you need to define your use case. When the conditions defined for the situation type are met, a situation instance is detected, and the user responsible for it is automatically notified. This is also applicable to the extended framework. To create a custom use case, you need to define a situation template based on a situation scenario and one or more situation objects.

Before looking into the technical feasibility, think about which fields should be included as condition filters for your situation template and which related information could help the user understand and solve the issue.

For Unstaffed Resource Requests, I came up with the following condition filters:

  • Project Type (customer project ‘C’)
  • Resource Type (team resources ‘0ACT’)
  • Project Stage (in progress ‘P003’)
  • Resource Request Status (pending staffing ‘P’)
  • Work Package Start Date (next 30 days)


Situation trigger filters in the Manage Situation Types – Extended app

It’s also important to consider the notification text and the situation page content from the get-go.

The notification is the user’s first contact with the situation, therefore it should be meaningful. Using variables such as project, work package, work item, and activity type in the text quickly help identify the unstaffed resource requests.


Situation notification 

The user can access the situation page by clicking on the notification or with the My Situations – Extended app. In my custom use case, the situation page should display additional project, work package, and resource request data to contextualize the situation and support the decision-making process.


Situation page in the My Situations – Extended app

Step 2: Identify all the technical artifacts needed for your use case

Identify which CDS views (and business events, if applicable) are needed to ensure that the situation is detected. But also keep in mind the condition filters, the notification text, and the situation page mentioned in step 1.

In this case, the required data is not available in a single allow-listed view, so I had to build my own. I created YY1_ResourceRequest using a custom CDS view with I_ResourceRequest as the primary data source for the project header, work package and resource request data, along with custom views based on I_EngagementProjectStageText, I_EngagementProjectSrvcOrgText, and I_EngmntProjResourceText filtered by language (in this case, English ‘E’) as the associated data sources. The latter views are needed for the descriptions of the project stage, service organization, and activity type that should appear on the situation page.


Create custom CDS view in the Custom CDS View app

Step 3: Define the responsibility context

Consider who should be automatically notified about your business situation. With Responsibility Management, you can use team structures and responsibility rules to define responsibilities and get the right users to take care of the situation. The responsibility context is a collection of team categories and agent rules that you’ll be able to use in your situation scenario.

In this case, project managers should be informed about pending resource requests in their projects. For this purpose, I created a custom responsibility rule to determine the responsible project managers.

I started by implementing the Responsibility Rule BAdI in the Custom Logic app, using the following logic:

       DATA(lo_iterator) = parameter_name_value_pair->get_iterator( iv_reset_current_iteration = abap_true ).
      CATCH cx_ble_dynamic_table_error. " Dynamic table handling errors.
        RAISE EXCEPTION TYPE cx_ble_runtime_error.
    WHILE lo_iterator->next_row( ).
        DATA(lv_projectid)    = lo_iterator->get_value( 'PROJECT' ). "PROJECT is the parameter name.

        CATCH cx_ble_dynamic_table_error. " Dynamic table handling errors.
          RAISE EXCEPTION TYPE cx_ble_runtime_error.

    DATA lv_projectmanagerid(8) TYPE N.
    DATA lv_businesspartnerid(10) type c.
    DATA lv_userid(12) type c.
    IF lv_projectid is not initial.
      SELECT single ProjectManagerWorkAgreement FROM I_EngagementProject
      where EngagementProject = @lv_projectid
      into @lv_projectmanagerid.
      SELECT single Person FROM I_PersonWorkAgreement_1
      where PersonWorkAgreement = @lv_projectmanagerid
      into @lv_businesspartnerid.
      SELECT single UserID FROM I_BusinessUserBasic
      where BusinessPartner =  @lv_businesspartnerid
      into @lv_userid.

agents = VALUE #( ( lv_userid ) ).


Publish the custom logic for the responsibility rule in the Custom Logic app

After the custom logic, I created a custom responsibility rule in the Manage Responsibility Rules app and used the BAdI filter value as the custom responsibility rule ID.


Create custom responsibility rule in the Manage Responsibility Rules app

Finally, I configured the responsibility context YY1_PROJECT_MANAGEMENT. As it is mandatory to maintain a team category when creating a custom situation template, I included a category in the responsibility context along with the agent rule described above. We don’t have a standard team category available for Professional Services, so I created my own (YY1_COMMPROJECT). Check our documentation to find out how to create team categories, as well as configure team types, responsibility definitions, and team member functions.

You can use teams and responsibility rules simultaneously to inform the responsible users about business situations. In the context of this use case, you can inform project managers about unstaffed resource requests in their projects via rule and use the team option to bring these situations to the attention of additional stakeholders, for example resource managers.


Create custom responsibility context in the Manage Responsibility Contexts app

Step 4: Create your situation object, situation scenario, situation template, and one or more situation types

With all artifacts in place, you can now start modeling your custom use case with the apps Manage Situation Objects, Manage Situation Scenarios, and Manage Situation Types – Extended, in this sequence.

Situation Object: Resource Request

Start with the Manage Situation Objects app to create the Resource Request situation object. A situation object includes a collection of all technical artifacts that are needed to identify situations related to it.


A structure represents the object that can be affected by a situation or that triggers a situation. In the Resource Request object, I defined the custom CDS view YY1_ResourceRequest created in step 2.


Add structures to the situation object

Navigation targets as end-user actions

In addition, I also maintained navigation options to the Plan Customer Projects and Plan Internal Projects apps.


Create navigation targets in the situation object

The navigation options can be offered as buttons on the situation page to help users solve situations.


Maintain end-user actions for the navigation targets

Situation Scenario: Resource Request Status

Then connect your situation object to a situation scenario in the Manage Situation Scenarios app. In this app, you can map the anchor and trigger objects, define the layout of the situation page and associate your responsibility context with the situation scenario.

General information

In the Resource Request Status scenario, I maintained the Resource Request situation object as the anchor object, represented by the unique key field Resource Request GUID from the underlying custom CDS view, and assigned the responsibility context defined in step 3.


Assign responsibility context and maintain anchor object in the situation scenario

Situation triggers

A daily check is sufficient for this use case. That’s why I created a batch-based situation trigger with the Resource Request object as the trigger object. For Unstaffed Resource Requests, both the affected object (anchor) and the object that triggers situations (trigger) are the same.

There are two types of situation triggers – batch-based and event-based. The former is based on periodical checks via batch runs, while the latter triggers situations when certain business events occur. If you’re thinking about which one to choose, keep in mind that

  • event-based triggers are more relevant for time-critical issues that are not expected to occur too
  • often batch-based triggers are a better control especially for larger number of situations.



Create situation trigger in the situation scenario

Within the situation trigger, you can define the layout of the situation page. I defined two sections for the situation page – Project and Resource Planning – and for each of them, I linked the CDS view data fields that should be displayed to the user.



Maintain the situation page layout in the situation trigger

Last but not least, I chose the navigation targets defined in the situation object as trigger-specific actions.


Add relevant actions to the situation trigger

Situation Template: Unstaffed Resource Requests

Based on the scenario, you can now configure your custom situation template and situation type in the Manage Situation Types – Extended app. In the situation template you can define the default notification text, any default condition filters, and add the team category and responsibility rule (or rules) from the responsibility context.

Situation triggers

I created the Unstaffed Resource Requests situation template based on the Resource Request Status situation scenario and added the batch-based trigger from the scenario to this template.


Add situation trigger to the situation template

For the batch-based trigger, I defined one condition with a couple of default configuration values. This use case generally focuses on requested team resources with status pending. That’s why I maintained those as default parameters to be included in subsequent situation types.


Configure condition filters for batch-based trigger in the situation template

Furthermore, in the Situation Display section I entered the situation text that appears at the top of the situation page, the notification text, and the public text used for email alerts.


Maintain situation display text for trigger condition in the situation template

Under Navigation Actions, I defined the relevant navigation targets for this trigger. These are offered as buttons on the situation page in the My Situations – Extended app under Related Apps.


Define navigation actions for batch-based trigger in the situation template

Batch job scheduling

Whenever you’re working with batch-based triggers, you’ll need to schedule a background job. You have the flexibility to schedule different recurrence patterns for your batch jobs. I chose to run the job daily at 9:00 AM GMTUK.


Set up the batch job in situation template


To determine the users responsible for the situations, I added both the custom team category and the responsibility rule Notify Project Manager to the situation template.


Add rule to the situation template recipients

Situation Type: Unstaffed Resource Requests for Customer Projects

The final step is the creation of the situation type. Depending on your business requirements, you can create as many situation types as needed from the template.

Here I want to inform project managers about resource requests in ongoing customer projects that are not staffed yet, although the activities are set to start in the next 30 days. To do that, I created situation type Unstaffed Resource Requests for Customer Projects in the Manage Situation Types – Extended app.

Situation triggers

I made a couple of adjustments to the content inherited from the situation template, specifically to the situation trigger. I maintained additional filters for the project type (customer project), project stage (in execution), and resource request start date (in the next 30 days).


Configure condition filters for batch-based trigger in the situation type

Additionally, in the trigger-specific actions, I removed the navigation target for internal projects since we are focusing on customer projects.


Define navigation actions for batch-based trigger in the situation type

After enabling the situation type, the configuration to get this custom Professional Services use case running in SAP S/4HANA Cloud is complete.

Step 5: Prepare your business data and test your custom use case

Once your custom situation is defined, you need to test it to make sure that it produces the results you expect. To do that, you need to create the conditions that will lead to the situation. So, make sure you take into account the condition filters established in the situation type when preparing your test data.


Create a test project including a work package with start date 30 days after the current date and no staffed resources

If you’re assigned as the project manager, you’ll be notified about the unstaffed request and have access to the situation page. Here’s what the outcome looks like:


Situation notifications and situation page example for unstaffed roles in the test project

Once you’ve successfully tested the use case in quality, you can transport your situation objects, scenarios, and types to production through Software Collection.


In this blog post, I have provided an overview of the steps that you need to follow to enable the custom use case Unstaffed Resource Requests. This is only one example of how you can use our 5-step approach to create custom situations. Stay tuned for more use case examples.

Interested in learning more?

  • Learn more about Situation Handling in SAP S/4HANA Cloud on SAP Help Portal
  • Check out the latest updates on Situation Handling on our Community page

Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Kris Stono
      Kris Stono

      Hi Ana Goncalves ,

      Thanks for the detailed blog!

      I do have a quick question about  pre-requisites for this use case under Professional Services.

      Does Scope item 1KC (Advanced Resource Management - Project-Based Services) need to be activated?

      It does not look like the Resource Management specific CDS views are being used, but I just wanted to make sure.


      Thanks in advance.


      Author's profile photo Ana Goncalves
      Ana Goncalves
      Blog Post Author

      Thank you, Kris!

      This use case is applicable both to Basic Resource Management (2MV) and Advanced Resource Management (1KC).

      Kind regards,

      Author's profile photo Saumitra Deshmukh
      Saumitra Deshmukh

      Wow! @Ana Goncalves: Great and detailed explanation.

      I am sure this is going to absolutely help on our SAP S/4HANA Cloud, Public Editions Professional Services LoB as well as Intelligent Technologies adoption across our ecosystem. Great going and looking for more such informative blogposts from you 🙂

      - Saumi

      Author's profile photo Ana Goncalves
      Ana Goncalves
      Blog Post Author

      Happy to hear that! Thank you for your comment Saumitra Deshmukh 🙂

      Kind regards,

      Author's profile photo Pavan Kumar Mallipamu
      Pavan Kumar Mallipamu

      Dear Ana,

      Thanks for the blog and we found it very useful.

      I have one clarification on the team category creation and enabling teams. In the latest version of SAP S/4 HANA Cloud CBC is being used.

      Can you please let us know if this configuration has to be done in CBC or still in Manage your solutions in the latest versions. Also, Can you provide some screenshots related to this.

      Thanks & Regards

      Pavan M

      Author's profile photo Abinash Routray
      Abinash Routray

      Dear Pavan,

        For creating custom team category, you should use key user app “Manage Team Categories” & export/import using ATO apps  “Export Configuration” & “Import Configuration”. So there is no need to use CBC / Solution Builder for just creating custom team category.


      But after creation of team category, you will need to perform some customizing as explained in configure team types, responsibility definitions, and team member functions. For these, you will need to login to CBC system in 3 system landscape (3SL) to use the fine tuning steps which in turn call the “Manage your Soulutions” app of the corresponding Development system of the 3SL. The changes to customizing in Development system are automatically back-synced to CBC periodically.


      Best Regards,


      Author's profile photo Pavan Kumar Mallipamu
      Pavan Kumar Mallipamu

      Thank you Abinash.

      Author's profile photo Ana Goncalves
      Ana Goncalves
      Blog Post Author

      Hi Pavan Kumar Mallipamu,

      In addition to Abinash Routray's feedback, here's a screenshot:

      You can find the Responsibility Management configuration activities in General Settings - Further Settings - Responsibility Management.

      Kind regards,

      Author's profile photo Pavan Kumar Mallipamu
      Pavan Kumar Mallipamu

      Thank you Ana.