Skip to end of metadata
Go to start of metadata

Summary

The Object Link framework of SAP Portfolio and Project Management in SAP S/4HANA is a very powerful tool; many pre-configured object link types are part of the delivery customizing. In addition you can also create your own object links to a variety of objects within your SAP system. But the SAP system boundaries are no limit for this functionality: You can also use data from  external systems - if the necessary APIs are available and the system offers appropriate authentication mechanisms. Ruum by SAP fulfils these criteria: it offers both a comprehensive REST based API and OAuth 2.0 protocol based authentication.

This article describes how you can use the Object Links framework to integrate your projects with Ruum by SAP. It contains example coding, necessary DDIC elements to be created, and a guide to set up your object link customizing that will work for SAP S/4HANA 1809 FPS1 and Ruum's REST API. You can also downport the SAP S/4HANA code to SAP Portfolio and Project Management 6.1.

Business Use Case

Classical Project Management tools focus on larger context: Project Milestones, budget controlling & resource management however they are too heavyweight to be used by project members for daily task planning & execution, therefore adoption is low. Execution happens in silos & management have no visibility into daily execution. Ruum bridges the gap between Larger Project Management context and work management for day-to-day business use.
With Ruum by SAP integration with SAP PPM, you can
  • Spin up Ruum projects for dedicated workpackages in  SAP S/4HANA PPM
  • Auto-onboard participants
  • Drive efficient handling with simple yet powerful PM features + AI powered automation
  • Sync back status and execution information automatically to EPPM: Management has full visibility from bigger project down to the single work package and task level.

Author(s):

Company: SAP SE

Created on: 16-08-2019

Author(s) Bio

Vytas Cirpus is a Development Architect at SAP and works in the area of Enterprise Portfolio and Project Management. One of his focus topics is the integration of Enterprise Portfolio and Project Management with cloud platform based applications.

Disclaimer

This article is a guidance how you can implement and configure object links to Ruum by SAP. It is not a standard software delivery; all code and customizing setting examples are illustrative only. We can not warrant that the examples are error-free nor that this example will work forever. However, after working through this example, you will have the necessary knowledge to create your own implementation and customizing setting for a straight forward integration of SAP Portfolio and Project Management and Ruum by SAP.

Features of the Integration

Key Features:  

  • You can create or link existing Ruums to your SAP S/4HANA projects via object links
  • Ruum project link is available in AP S/4HANA project. This will allow navigation to the Ruum project. Optionally, a link to the related project on S/4HANA can be added to the Ruum
  • Status information from Ruum tasks is made available in the SAP S/4HANA projects 
  • Ruum task's status information is used to automatically set project severities ( for example: Project severity is “At risk” if a Ruum task status is overdue).

Prerequisite

Any well designed integration makes sure that users can only see data they are entitled to, regardless of which of the integrated systems they are using. In our example this is ensured by using the OAuth 2.0 protocol to establish secure system-to-system communication. Article Access Ruum by SAP using the OAuth 2.0 Client describes the steps you need to take to have this possibility available on your system. Perform these steps before starting with this project.

To implement this integration, basic ABAP developer skills are required. You should know how to create DDIC elements and ABAP classes. To adapt the code to your requirements, you should be a bit more experienced.

Prerequisite for using Ruum by SAP APIs is that you need to have an Enterprise Version of Ruum by SAP. Trial users will not be sufficient.

Limitations

The solution described in this article is simplified and it is build to show the basic (first level) integration. For example, it does not synchronise team members between systems . However, as the corresponding APIs are available, you should be able to enhance the functionality on your own: The basics are already there.

Implementation Steps

The implementation of this Ruum integration requires the creation of multiple Data Dictionary objects, a class with some local classes and exceptions, and setting up both object link and evaluation customizing. Repetitive steps cannot be described in detail here - this article would get too large then. So for creating DDIC elements, we'll describe their creation in detail once only. You will have to repeat the steps based on a list of attributes as described for one example.

Preparation

Make sure that you performed all steps described in the article Access Ruum by SAP using the OAuth 2.0 Client. Below described object links will not work without that.

Create Domains

Step
Description
Create Domain

Call transaction SE11. Mark radio button "Domain" and enter domain name "ZEPPM_RUUM_CHAR50". Choose button "Create".

Maintain Domain Definition Data

Chose the Definition tab. As short description, maintain "Ruum Character Field". For Data Type, select "CHAR" with "50" for No. of Characters. Select checkbox for Case-sensitive. Choose button "Activate (Ctrl+F3)".

Assign Package to Domain

the now triggered pop-up, choose a transportable package from your namespace or select button "Local Object" if transport is not planned. Assign a transport request if required by the system.

Repeat the Steps

Repeat the steps above, so that you have the domains of the following list available:

Domain
Short Description
Data Type
No. Characters
Case-sensitive
ZEPPM_RUUM_CHAR50Ruum Character FieldCHAR50Yes
ZEPPM_RUUM_STRINGRUUM StringSTRING
Yes

The created domains allow retrieving and displaying texts without conversion to all-caps.

Create Data Elements

Step
Description
Create Data Element

Call transaction SE11. Select radio button "Data type" and enter name "ZEPPM_RUUM_CHANGEDAT". Choose button "Create".

Select Type "Data Element"

On the pop-up, mark radio button "Data element" and select "Continue (Enter)"

Maintain Data Type Data

As short description, maintain "Ruum Changed At". On the Data Type tab, select radio button "Elementary Type" and radio button "Domain". For domain, maintain domain ZEPPM_RUUM_STRING created in the previous section.

Maintain Field Label and Activate

Switch to tab "Field Label" and maintain "Changed" for the field labels for short, "Changed at" for medum, long, and heading. Press "Enter" to get values for the default length. Choose button "Activate (Ctrl+F3)".

Assign Package to Data Element

On the now triggered pop-up, choose a transportable package from your namespace or select button "Local Object" if transport is not planned. Assign a transport request if required by the system.

Repeat the Steps

Repeat the steps above, so that you have the data elements of the following list available:

Data Type
Short description
Domain
Field Label Short
Field Label Medium
Field Label Long
Field Label Heading

ZEPPM_RUUM_CHANGEDAT

Ruum Changed AtZEPPM_RUUM_STRINGChangedChanged atChanged atChanged at
ZEPPM_RUUM_COMPLETIONRuum Completion (Closed Tasks by Tasks times 100)Predefined Type CHAR, Length 3POCCompletion (%)Percentage of CompletionPOC
ZEPPM_RUUM_CREATED_ATRuum Created AtSYDATSCreatedCreated atCreated atCreated at
ZEPPM_RUUM_IDRuum IDZEPPM_RUUM_CHAR50IDRuum IDRuum IDID
ZEPPM_RUUM_NAMERuum Name ZEPPM_RUUM_CHAR50RuumRuumRuum NameRuum
ZEPPM_RUUM_STATUS Ruum StatusZEPPM_RUUM_STRINGStatusStatusRuum StatusStatus
ZEPPM_RUUM_TASKS_COMPLETEDNumber of Completed Tasks in RuumPredefined Type INT4, Length 10Cmpl.TasksCompleted TasksNumber of Completed TasksCompleted Tasks
ZEPPM_RUUM_TASKS_OPENNumber of Open Tasks in RuumPredefined Type INT4, Length 10Open TasksOpen TasksNumber of Open TasksOpen Tasks
ZEPPM_RUUM_TASKS_OVERDUENumber of Overdue Tasks in RuumPredefined Type INT4, Length 10OverdueOverdue TasksNumber of Overdue TasksOverdue Tasks
ZEPPM_RUUM_TASKS_TOTALTotal Number of Tasks in RuumPredefined Type INT4, Length 10TasksNumber of TasksNumber of TasksTasks

Create Structures

Step
Description
Create Structure

Call transaction SE11. Select radio button "Data type" and enter name "ZEPPM_RUUM". Choose button "Create". 

Select Type Structure

On the pop-up, mark radio button "Structure" and select "Continue (Enter)"

Maintain Description and Components

Maintain "Ruum Data" as Short Description. Maintain the following components, each with typing method "Types":

Component
Component Type

NAME

ZEPPM_RUUM_NAME
RUUMIDZEPPM_RUUM_ID
CREATEDAT ZEPPM_RUUM_CREATED_AT
CHANGEDAT ZEPPM_RUUM_CHANGEDAT
TASKS_COMPLETED ZEPPM_RUUM_TASKS_COMPLETED
TASKS_OPEN ZEPPM_RUUM_TASKS_OPEN
TASKS_OVERDUE ZEPPM_RUUM_TASKS_OVERDUE
POC ZEPPM_RUUM_COMPLETION
STATUS ZEPPM_RUUM_STATUS
Maintain Enhancement Category and Activate

Chose menu path "Extras" → "Enhancement Category..." to maintain the enhancement category of this structure. Select radio button "Can be enhanced (deep)" and press button "Copy (Enter)". Activate using button "Activate (Ctrl+F3)".

Assign Package to Structure

On the now triggered pop-up, choose a transportable package from your namespace or select button "Local Object" if transport is not planned. Assign a transport request if required by the system.

Repeat the Steps

Repeat the steps above, so that you have the data elements of the following list available in addition:

Structure
Short Description
Components
ZEPPM_RUUM_IDENTIFICATIONRuum Identification (Human Readable)
Component
Component Type
NAMEZEPPM_RUUM_NAME
ZEPPM_RUUM_SEARCHHELPRuum Searchhelp
Component
Component Type
NAME

ZEPPM_RUUM_NAME

Create Message Class ZRUUM

Step
Description
Create Message Class ZRUUM

Open transaction SE91. Enter message class ZRUUM and choose button "Create". Switch to tab "Messages".


Assign Package to Message Class

On the now triggered pop-up, choose a transportable package from your namespace or select button "Local Object" if transport is not planned. Assign a transport request if required by the system.

Maintain Message Short Texts

On tab messages, maintain the following entries:

No.
Message Short Text
Self-Explanatory
001No authorization to access Ruum. Grant access via link &1&2&3&4Yes
002A connection error occurred (&1&2&3&4)Yes
003Connection error: URL &1&2&3&4 cannot be reachedYes
004Object link customizing for type &1 missing or incompleteYes

Save your entries and leave the transaction.


Create the Object Link Proxy Class

Step
Description
Create Proxy Class

Call transaction SE24. Maintain "CL_EPPM_RUUM_PROXY" for Object Type and select "Create".

Maintain Class Description

As class description, maintain "Proxy Class for Object Links to Ruum". Keep all other default values. Select "Save"

Assign Package to Class

On the now triggered pop-up, choose a transportable package from your namespace or select button "Local Object" if transport is not planned. Assign a transport request if required by the system.

Toggle to Source Code-Based Class Builder

Toggle the the mode of the Class Builder by choosing Button "Source Code-Based (Shift+Ctrl+0)". In the editor, remove all generated coding.

Paste Class Source Code

Copy the code contained in page zcl_eppm_ruum_proxy to the clipboard by marking all content of this file with Ctrl+A followed by Ctrl+C. Paste the buffered code into the source code-based class builder using Ctrl+A followed by Ctrl+V. Save.

Add Local Definitions / Implementations

To add local classes and exceptions, select button "Local Definitions/Implementations (Ctrl+F10)". In the editor, remove all generated code and comments.

Paste Local Class Source Code

Copy the code contained in page zcl_eppm_ruum_proxy: Loc. Definitions/Implementations to the clipboard by marking all content of this file with Ctrl+A followed by Ctrl+C. Paste the buffered code into the source code-based class builder using Ctrl+A followed by Ctrl+V. Save.

Assign Package to ClassOn the now triggered pop-up, choose a transportable package from your namespace or select button "Local Object" if transport is not planned. Assign a transport request if required by the system.

Preparing Templates in Ruum by SAP

You need to create a Ruum template which your user can access and then you can use this Ruum Template to create a Ruums from SAP S/4HANA projects via object links.

Please follow the below steps to create a new Ruum Template.

  1. Go to 'Global Navigation Side Panel' and click on 'Template' , then click on 'New Ruum Template'


  2. Once you have created your template, you can copy the template's internal ID as shown below

Note down the template ID that looks similar to ruum_123456789012_abcdefghijk ( shown above). This is a unique ID and cannot be changed. Kindly use the template ID on your customization table.

Customizing Settings

You now have all necessary ABAP artifacts on your system. They can now be used for creating the object link customizing entries. The customizing will also cover a severity calculation that allows to set a red traffic light on an object link to Ruum if an open task is overdue.

You can of course deviate from the below, for example, in case you want to show your object link types in other groups, or in case you want to have deviating severity calculations.

Group Object Types

Step
Description
Open SettingsNavigate to the object links customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Basic Settings. Open the IMG Activity Group Object Types.
New Entries

Select "New Entries". Maintain the following data and save:

Field
Value
GroupZCOLLABORATION
NameCollaborations
Used InProject Management
ActiveYes


Make Settings for Calling an SAP Transaction

Step
Description
Open SettingsNavigate to the object links customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Connection to External Systems → Object Links in SAP Systems. Open the IMG Activity Make Settings for Calling an SAP Transaction.
Maintain Service for an SAP Transaction


In the Dialog Structure, double click on the entry Service for an SAP Transaction. Choose "New Entries" and add the services "ZRUUM_BO" with description "Backend Access Ruum" and "ZRUUM_FO" with description "Frontend Access Ruum". Save.

Alias for the Web Server of an SAP Transaction

Double click on the entry "Alias for the Web Server of an SAP Transaction". Chose New Entries and maintain the following entries.

Web Server Alias
Web Server Address
ZRUUM_BOHTTPS://API.RUUMAPP.COM/V1/
ZRUUM_FOHTTPS://OPEN.RUUMAPP.COM/RUUMS/
Maintain Parameters for the Web Server

Select the entry ZRUUM_BO and choose Parameters for the Web Server Alias.Choose New Entries and maintain the following data: Parameter Name = ZTEMPLATE, Parameter Value: Maintain the internal template ID from the template you created in Ruum.

Save your entries.

Make Settings for the Linked SAP Objects

Object Link for Object Type Ruum

Step
Description
Open SettingsNavigate to the object links customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Connection to External Systems → Object Links in SAP Systems. Open the IMG Activity Make Settings for the linkes SAP Objects.
Maintain Object Types for Object Links

In the dialog structure, select top entry "Object Types for Object Links". Choose "New Entries".

Maintain the following data:

Field
Value
Object TypeZRUUMPROJECT
Object Type NameRuum
ActiveYes
KeyZEPPM_RUUM_IDENTIFICATION
GroupZCOLLABORATION
Existence CheckYes
Search HelpYes
Read DataYes
Search FieldsZEPPM_RUUM_SEARCHHELP
Proxy ClassZCL_EPPM_RUUM_PROXY
Web Server

ZRUUM_BO

Maintain Fields per Object Type

In the dialog structure, select "Fields per Object Type". Choose "New Entries". Maintain the following data:

Field Name
Field Name for Evaluation

ZEPPM_RUUM-CHANGEDAT


ZEPPM_RUUM-CREATEDAT
ZEPPM_RUUM-NAME
ZEPPM_RUUM-POCZPOC
ZEPPM_RUUM-STATUSZSTATUS
ZEPPM_RUUM-TASKS_COMPLETEDZTASKS_COMPLETED
ZEPPM_RUUM-TASKS_OPENZTASKS_OPEN
ZEPPM_RUUM-TASKS_OVERDUEZTASKS_OVERDUE
Maintain Frames per Object Type

In the dialog structure, select "Frames per Object Type". Choose "New Entries". Maintain the following data and save:

Frames
Frame Type
Sequence
Active
Frame Name
0FRAME111YesRuum
0FRAME222YesAdministrative Data
0FRAME313YesProgress
Maintain Frames per Object Type - Fields per Frame

Select the entry 0FRAME1 and choose "Fields per Frame" in the dialog structure. Press button "New Entries". Maintain the following values:

Counter
Field Name
Sequence
Active
1

ZEPPM_RUUM-NAME

1Yes
2ZEPPM_RUUM-STATUS2Yes

Navigate back to Frames per Object Type.

Select the entry 0FRAME2 and choose "Fields per Frame" in the dialog structure. Press button "New Entries". Maintain the following values:

CounterField NameSequenceActive
1

ZEPPM_RUUM-CREATEDAT

1Yes
2ZEPPM_RUUM-CHANGEDAT2Yes

Navigate back to Frames per Object Type.

 

Select the entry 0FRAME3 and choose "Fields per Frame" in the dialog structure. Press button "New Entries". Maintain the following values:

CounterField NameSequenceActive
1ZEPPM_RUUM-TASKS_OPEN1Yes
2ZEPPM_RUUM-TASKS_COMPLETED2Yes
3ZEPPM_RUUM-TASKS_OVERDUE3Yes
4ZEPPM_RUUM-POC4Yes
Maintain Table/View in SAP System per Object Type and Meth.

Select Entry "Table/View in SAP System per Object Type and Meth." in the dialog structure. Press button "New Entries". Maintain the following values:

Method
Strategy
DDIC Structure
Strategy Description
41ZEPPM_RUUM
Maintain Service for an Object Type


Select Entry "Table/View in SAP System per Object Type and Meth." in the dialog structure Press button "New Entries". Maintain the following values:

Service for an Object Type
Item
Active

Web Server

ZRUUM_FO1YesZRUUM_FO

Setting Traffic Lights: Example Customizing for Evaluation

Severity calculation within SAP Portfolio and Project Management is a rule based tool that allows to visualize within a project structure if issues exist.In the context of this article we use this tool to influence the severity of project objects (which is then visualized as traffic light) based on data from Ruum. Due to the flexibility of the tool, a lot of different scenarios can be realized, however, here we we focus on a very simple example to show the principle. If you have other requirements, you can use the example as a starting point for your implementation.

This example checks if a Ruum task which is in process has an end date that lies in the past, indicating a potential delay of a project element. If such a situation is detected, a traffic light is set on an object link, which then is passed to super-ordinate project elements. A project lead can then check for influence on the current project plan, so that he can adjust project or Ruum data if necessary.

Define Attributes and Object Types for Evaluation

Step
Description

Define Attributes and Object Types for Evaluation

Navigate to the evaluations customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Evaluations. Open the IMG Activity Define Attributes and Object Types for Evaluations.
Maintain Secondary Object Categories

In the dialog structure, select "Secondary Object Categories" and choose "New Entries". Maintain the following values:

Secondary Object Type
Secondary Object Category Description
Object Category
Icon name
ZRUUMPROJECTObject Link to RuumOBJECT_LINKICON_DEFECT
Maintain Attributes

In the dialog structure, select "Attributes" and choose "New Entries". Maintain the following values:

Attribute
Attr. Type
Type Name
Summ. Rule
Summ. Res.
Init. Vals

ZTASKS_OVERDUE

Data Element

ZEPPM_RUUM_TASKS_OVERDUENo SummarizationInclude Higher LevelIgnore During Summarization
Maintain Attributes, Objects for Attributes

Mark the entry for attribute ZTASKS_OVERDUE. In the dialog structure, choose Objects for Attributes and select "New Entries". For ObjectCat., add the entry "OBJECT_LINK" and press Enter.


Mark the new entry "OBJECT_LINK". In the dialog structure, choose "Secondary Objects for Attributes" and select "New Entries". For Secondary Object Type, add the value "ZRUUMPROJECT". Save.

Define Extract Layouts

Step
Description

Define Extract Layouts

Navigate to the evaluations customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Evaluations. Open the IMG Activity Define Extract Layouts.
Maintain Extracts


In the dialog structure, select "Extracts". Choose "New Entries". Maintain a new entry with the following values:

Extract Layout
Extract Name
Iterator
ZRUUMOVERDUEOverdue Ruum TasksPROJECT
Maintain Extracts → Objects

Mark the new entry ZRUUMOVERDUE. In the dialog structure, select Objects and choose "New Entries". Add Object Cat. "OBJECT_LINK".

Maintain Extracts → Objects → Secondary Objects

Mark the new entry OBJECT_LINK. In the dialog structure, select Secondary Objects and choose "New Entries". Add Secondary Object Type "ZRUUMPROJECT".

Maintain Extracts → Attributes

In the dialog structure, select Attributes and choose "New Entries". Maintain the following Attributes and save.

Attribute
Always Extract
Calculate after Aggr.
ZTASKS_OVERDUEYes

Assign Extract Layouts to Project Types

Step
Description
Assign Extract Layouts to Project Types

Navigate to the evaluations customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Evaluations. Open the IMG Activity Assign Extract Layouts to Project Types. Choose "New Entries" and create a new line with project types relevant for your process and the Extract Layout ZRUUMOVERDUE. Save your entries.

Note: The screenshot above is for illustration only, you will have to adapt the project type here.

Define Evaluations

Step
Description
Define Evaluations

Navigate to the evaluations customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Evaluations. Open the IMG Activity Define Evaluations. Choose "New Entries" and maintain the following data:

Evaluation Layout
Evaluation Name
Ev.Inactv.
Extract Layout
ZRUUMOVERDUERuum Tasks Overdue<initial>ZRUUMOVERDUE
Maintain Evaluations → Objects

Mark the new entry ZRUUMOVERDUE. In the dialog structure, select Objects and choose "New Entries". Add ObjectCat. "OBJECT_LINK".

Maintain Evaluations → Objects → Secondary Objects

Mark the new entry OBJECT_LINK. In the dialog structure, select Secondary Objects and choose "New Entries". Add Secondary Object Type ZRUUMPROJECT.

Maintain Evaluations → Attributes

In the dialog structure, select Attributes and choose "New Entries". Maintain the following entries and save.

Attribute
Sort Order
ZTASKS_OVERDUE1

Define Threshold Values

Step
Description
Define Threshold ValuesNavigate to the evaluations customizing in the IMG using the following path: SAP Portfolio and Project Management → Project Management → Evaluations. Open the IMG Activity Define Threshold Values.
Maintain New Entry for Threshold Values

Select "New Entries". Maintain the following data:

Thres.Val.
Thresh.Val
Severity
Eval.Lay.
ObjectCat.
ZRUUMOVERDUEAlert on Overdue Ruum Tasks200ZRUUMOVERDUEOBJECT_LINK
Change Formula

In the new entry, press the button "Form. (a/b)". In the formula editor, switch to expert mode and maintain the formula:

ZTASKS_OVERDUE > 0

Go back (F3) and save.

Variations

The implementation as described above can be adapted easily. For example, it would perfectly work to use the Ruum status to calculate severities by simply adjusting the corresponding customizing settings. However, some use cases might require changes of the proxy class coding. Examlpe would be a deviating target for navigation from Rum to your Project data To change the URL used in Ruum, you just have to adjust the code in method if_dpr_appl_plug_in_subsystem~save() by changing the default value of variable lv_what_i_am to 'SolutionManager'.

As Ruum API changed the way how to add a variable to Ruums, the Ruum does not get a link to the SAP S/4HANA Project per default. However, iyou can re-introduce similar functionalities: For example, if you use workspaces in Ruum, you can introduce custom fields, and you can pass the corresponding link url to such a custom field. Please check the coments in class method ZCL_EPPM_RUUM_PROXY->IF_DPR_APPL_PLUG_IN_SUBSYSTEM~SAVE() for details. But maybe you find oher possibilities like adding a section with an url embedded in your section text? The only limit is that of the API (wink)

Testing Your Implementation

You are done with the implementation, now you should test:

Step
Description
Test System Connection

Make sure that you implemented the OAuth 2.0 based authorization grant process correctly:

  • Execute the test report from article Access Ruum by SAP using the OAuth 2.0 Client.
  • Then check if the search help on Ruum objects works fine. You will get an error message if the system connection isn't working and you try to create or assign Ruum objects explicitly.
Test EvaluationIf you can assign a Ruum, test the severity calculation. For that, assign a Ruum to your project via object links. Navigate to that Ruum and maintain some tasks. For at least one task being in the status 'In Process', maintain a due date in the past. If the evaluation is set up properly, you will see a change in project severity on save.

Version Information

February 11 2021: Text of this article and referenced code adapted to remove use of old, sunsetted API calls. If you detect http 503 errors during execution of the integration code, the changes might exactly be what you need: To get the newest version, just replace the code and the local class/definition of class ZCL_EPPM_RUUM_PROXY as described in sections "Paste Class Source Code" and  "Paste Local Class Source Code" with the current versions.

Child Pages

Back

  • No labels