SAP SuccessFactors Platform - ERP Q&A https://www.erpqna.com Trending SAP Career News and Guidelines Thu, 24 Jul 2025 09:19:45 +0000 en-US hourly 1 https://wordpress.org/?v=6.8.3 https://www.erpqna.com/wp-content/uploads/2021/11/cropped-erpqna-32x32.png SAP SuccessFactors Platform - ERP Q&A https://www.erpqna.com 32 32 Integrating SAP CIS with SAP SuccessFactors: A Guide to Standard and Hybrid Integration https://www.erpqna.com/integrating-sap-cis-with-sap-successfactors-a-guide-to-standard-and-hybrid-integration/?utm_source=rss&utm_medium=rss&utm_campaign=integrating-sap-cis-with-sap-successfactors-a-guide-to-standard-and-hybrid-integration Thu, 24 Jul 2025 09:02:16 +0000 https://www.erpqna.com/?p=93238 Overview SAP Cloud Identity Services (CIS) is a robust suite of tools designed to manage identity and access across the SAP ecosystem. This blog explores how CIS integrates with SAP SuccessFactors, focusing on hybrid integration patterns that enable seamless user authentication and identity provisioning in complex enterprise landscapes. There are three primary flavors to integrating […]

The post Integrating SAP CIS with SAP SuccessFactors: A Guide to Standard and Hybrid Integration first appeared on ERP Q&A.

]]>
Overview

SAP Cloud Identity Services (CIS) is a robust suite of tools designed to manage identity and access across the SAP ecosystem. This blog explores how CIS integrates with SAP SuccessFactors, focusing on hybrid integration patterns that enable seamless user authentication and identity provisioning in complex enterprise landscapes.

There are three primary flavors to integrating

  1. Standard Integration (Recommended)
  2. Proxy Integration using CIS(external IDP as authentication provider)
  3. Hybrid Integration using CIS (external IDP or both external IDP and CIS as authentication provider) without SF being the source of user records to CIS

SAP SuccessFactors with SAP Cloud Identity Services:

Option 1: Integration Between SAP SuccessFactors and SAP CIS (Standard)

This is the most recommended method, fully aligned with SAP’s best practices for managing user identities. It involves the following steps:

  1. Integrate SAP SuccessFactors with Identity Authentication: Run the upgrade job in the SAP SuccessFactors Upgrade Center to enable features and establish trust between SF and CIS.
  2. Confirm that user sync is set up in Identity Provisioning in SAP Cloud Identity Services: Set up sync jobs with Identity Provisioning. Ensure that the user that is configured in the Identity Provisioning
  3. Review the default configurations: Review the default configuration of the Identity Authentication service to determine if it meets your requirements or if additional configuration is required.
  4. Additional configuration optional features:Configuration options in Identity Authentication include: Password policy settings, Single sign-on (SSO) etc
  5. Activate Identity Authentication (IAS): Turn on the Identity Authentication service

This ensures standardized, low-effort configuration and a consistent integration experience.

Option 2: Using SAP CIS as a Proxy (Standard)

Many enterprises already use external identity providers (e.g., Azure AD, Okta) and want to continue doing so while adopting SAP applications.

By integrating the external IdP with CIS, organizations can:

  • Maintain centralized identity governance.
  • Enable secure authentication across SAP SuccessFactors, SAC, and Joule.

In this approach CIS acts as a proxy and user authentication is taken care by the external Identity provider like Entra, OKTA, etc. CIS may/may not have user records in its internal store (based on your requirements). Federation can be used if user records exist. Synching user records in CIS unlock features like SAC and future innovations such as SAP Joule, as they’re a key prerequisite for access. Ideal for customers wanting minimal disruption to existing identity infrastructure while gaining access to SAP’s innovation roadmap.

Option 3: Hybrid Integration — Using SAP CIS as a Proxy Without Standard SF User Sync.

Further details in this blog primarily focuses on this hybrid model.

Key Characteristics:

  • SAP SuccessFactors is not the user provisioning source.
  • CIS can act as a proxy or both proxy and IDP
  • User profile data is synced to CIS from a different /external source to enable:
    • Access to services like SAP Analytics Cloud (SAC) and SAP Joule
    • Federated authentication via external IdPs

This method provides the flexibility to maintain external Identity manager to keep managing users in an enterprise while using SAP CIS to enabling access to SAP applications and to access new features and innovations.

Understanding Standard Integration Behavior

SAP’s standard SF-to-CIS integration includes two background jobs(in case if SAC exist):

Job 1: User Sync from SuccessFactors to IAS

  • Reads user data from SF.
  • Creates users in CIS.
  • Generates a Global User ID, and store it in personKeyNav/GlobalUserId in SF.
  • Populates CustomAttribute1 if the user has SAC access permissions.

Job 2: Sync to SAP Analytics Cloud (SAC)

  • Reads user data from SF and syncs only users with access to embedded analytics to SAC
  • Prevents SAC user creation for ineligible accounts.

Adapting the Integration for an External Data Source

If you’re not syncing users from SAP SF (i.e., using an external Data source like Identity manager), the standard jobs need to be customized to use IAS as the source and SAC as the target. It is very important to make sure that only users who have permission to embedded analytics should be synched to SAC. This step can be done either inside the cync job or can be taken care at source level (making sure to populate the custom attribute only if user has permission to access SAC)

To configure this job, you can modify the existing target or create a new one. If creating a new target, an SAP support ticket is required to set credentials (OAuth token URL, Client ID, and Secret).

Step-by-Step: Hybrid Integration with External Source

  1. Integrate SAP SuccessFactors with Identity Authentication: Run the upgrade job in the SAP SuccessFactors Upgrade Center to enable features and establish trust between SF and CIS.
  2. Review the default configurations: Review the default configuration of the Identity Authentication service to determine if it meets your requirements or if additional configuration is required.
  3. Create Admin User for SCIM Access: Use SCIM APIs to push user records from the external system.
  4. Retain Global User ID (Optional): If needed, set the Global User ID in CIS to a unique external ID or let the system generate one. This Global User Id needs to be updated in SF at (personKeyNav/GlobalUserId).
  5. Sync to SAC
    Run a custom job (IAS → SAC) to:
    • Check SAC access rights.
    • Create users accordingly.

Addressing Common Technical Challenges in Hybrid Integration

1: Managing Different Subject Name Identifiers (SNI) Across Applications

In hybrid, multi-application environments, it’s common for login identifiers to vary across systems. SAP CIS supports multiple Subject Name Identifiers (SNI) per application, allowing flexibility. For scenarios where CIS login name is taken by another application as the identifier and it doesn’t have the same value as username in SF then any other field supported field can be used for SNI.

For SAP SuccessFactors (SF), it’s essential to ensure that the runtime value of the SNI must align with the SF username field to enable proper user identification.

Note: Expression-based SNI mapping is supported, but functionality is currently limited. Use with caution and review configuration thoroughly before implementation

SAP Cloud Identity Services, SAP BTP Security, SAP SuccessFactors Platform, Security, SAP Business Technology Platform

2: Can SAP Analytics Cloud (SAC) Work Without a Direct Sync from SF to CIS?

Yes, Though it is recommended to sync it from SF SAC does not require a direct user synchronization from SF. However, there’s a critical requirement to enable user access:

Ensure CustomAttribute1 is correctly populated, as it is used to determine analytics access. Regardless of the data source, this attribute must be synced to SAC via CIS.

3: Can CustomAttribute1 Be Replaced with Another Attribute?

Absolutely. CustomAttribute1 is just a label. In SAP CIS, custom attributes are internally stored as an array, offering flexibility in how they’re used.

If you choose to use a different custom attribute:

  • Ensure the transformation logic is updated accordingly, to confirm that consuming applications (e.g., SAC) are configured to read the new attribute.
  • Update the SNI mapping to reference the correct custom attribute.
SAP Cloud Identity Services, SAP BTP Security, SAP SuccessFactors Platform, Security, SAP Business Technology Platform

4: Connecting Multiple SF Tenants to a Single CIS Tenant (with SAC for Each SF)

While technically possible, connecting multiple SuccessFactors tenants to the same CIS tenant, each with its own SAC instance, but it is not recommended. This setup introduces significant complexity in Managing user states across tenants.

Conclusion

Integrating SAP SuccessFactors with SAP Cloud Identity Services offers flexibility, security, and alignment with SAP’s innovation roadmap. Whether through standard integration or a hybrid identity landscape using external IdPs, these methods empower organizations to centralize access control, reduce redundancy, and prepare for emerging technologies like SAP Joule.

Rating: 5 / 5 (1 votes)

The post Integrating SAP CIS with SAP SuccessFactors: A Guide to Standard and Hybrid Integration first appeared on ERP Q&A.

]]>
Job Rotation Solution Using MDF and Integration Center https://www.erpqna.com/job-rotation-solution-using-mdf-and-integration-center/?utm_source=rss&utm_medium=rss&utm_campaign=job-rotation-solution-using-mdf-and-integration-center Fri, 08 Dec 2023 12:27:20 +0000 https://www.erpqna.com/?p=80072 Business Scenario Some organizations adopt job rotation as a common practice for the professional development of their employees. The main objective of this process is to provide their employees the opportunity to work on other areas beyond their responsibility. A job rotation process usually involves multiple employees at the same time, where an employee moves […]

The post Job Rotation Solution Using MDF and Integration Center first appeared on ERP Q&A.

]]>
Business Scenario

Some organizations adopt job rotation as a common practice for the professional development of their employees.

The main objective of this process is to provide their employees the opportunity to work on other areas beyond their responsibility.

A job rotation process usually involves multiple employees at the same time, where an employee moves to the position of another one in a sequential order, forming a cycle. For instance, if we have 3 employees involved in a job rotation process as detailed below, before the job rotation:

  • Employee A occupying Position A
  • Employee B occupying Position B
  • Employee C occupying Position C

The job rotation would result in the following scenario:

  • Employee A occupying Position B
  • Employee B occupying Position C
  • Employee C occupying Position A

The Figure 1 below shows this scenario in a visual manner:

Figure 1: Before and After Job Rotation

Depending on the volume of job rotations during a period and the number of employees involved on each process, the system maintenance can be very challenging, especially if the company uses a 1 to 1 relationship between employee and position.

Solution Overview and Concepts

The solution proposed in this blog considers the following steps:

  • The manager requests a job rotation providing details of the positions involved in the process. The selected positions should be occupied by employees. Note: It is also possible to create an alternative solution where the manager selects the employee, rather than the position, but here we will consider the position as the selection entity for the job rotation.
  • An HR administrator reviews the request and approves or sends back the job rotation proposal to the manager for any necessary updates.
  • A scheduled job in Integration Center runs to update the job rotation data for the involved employees.

The solution presented here will consider that a maximum of 5 positions (occupied by employees) can be included in a single job rotation process. However, the solution can be extended to allow a greater number of positions.

A high-level process diagram is depicted in Figure 2:

Figure 2: High-Level Job Rotation Process Diagram

Detailed Solution

Solution Configuration Steps

This solution will require a couple of configuration steps:

  • Create a custom Job Rotation MDF object, which will be used by managers to request the job rotation.
  • Create business rules for validations and to bring additional information on Job Rotation MDF object to help managers when they are providing the data of the positions involved in the process.
  • Create an optional workflow for Job Rotation MDF approval.
  • Create the UI for the Job Rotation MDF object.
  • Create a new section for People Profile and add supporting links for the manager.
  • Create an Event Reason for the job rotation process to be used when the Job Information records of the selected employees are updated.
  • Create multiple integrations in Integration Center, depending on the possible variations on the number of positions involved in the job rotation.
  • Schedule the integrations configured in Integration Center.

Step1: Create an MDF Object for the Job Rotation Requisition by Managers

This MDF object will have the following fields:

  • externalCode:
    • Data Type = User
  • effectiveStartDate:
    • Data Type = Date
  • cust_Z_instructions, containing instructions on the job rotation process for the managers. The instructions are defaulted by a Business Rule, which populates the text based on another custom MDF object. The reason why the solution was designed this way is because the Default Value attribute of a field has a limit of 255 characters in length. Another advantage using another object to add the instructions is because it is possible to add Line Feed and Carriage Returns, making the text easier to read:
    • Data Type = String, with Maximum Length = 4,000. It cannot be a Translatable Data Type, because, on Manage Configuration UI, at least as of b2211, it is not possible to configure the attribute “Display As” for the field (to configure as Large Input Field), like in the Figure 3 below:
Figure 3: “Display As” Attribute in Manage Configuration UI
  • Sample content for the Instructions:

(1) Select the number of employees involved in Job Rotation.

(2) In Position 1, select the position of the employee who will be moved to Position 2.

(3) In Position 2, select the position of the employee who will be moved to Position 3, and so on.

(4) In the last Position, select the position of the employee who will be moved to Position 1, closing the cycle.

  • cust_Z_numberOfEmployees, for the number of employees that will be involved in the job rotation request:
    • Data Type = Picklist
    • Valid Values Source = Z_numberOfEmployees
  • cust_Z_position1, for the position of the first employee involved in Job Rotation:
    • Data Type = Generic Object
    • Valid Values Source = Position
  • cust_Z_employeeName1, for the name of the first employee involved in Job Rotation:
    • Data Type = User
  • cust_Z_department1, for the department of the first employee involved in Job Rotation:
    • Data Type = Generic Object
    • Valid Values Source = Department
  • cust_Z_userId1, for the userId of the first employee involved in Job Rotation. This field can be hidden from the UI, but is important for the actual update of the Job Information entity:
    • Data Type = String
  • cust_Z_position2, for the position of the second employee involved in Job Rotation:
    • Data Type = Generic Object
    • Valid Values Source = Position
  • cust_Z_employeeName2, for the name of the second employee involved in Job Rotation:
    • Data Type = User
  • cust_Z_department2, for the department of the second employee involved in Job Rotation:
    • Data Type = Generic Object
    • Valid Values Source = Department
  • cust_Z_userId2, for the userId of the second employee involved in Job Rotation. This field can be hidden from the UI, but is important for the actual update of the Job Information entity:
    • Data Type = String
  • Note: create similar fields for 3, 4 and 5 positions.

The solution detailed here considers the possibility of selecting up until 5 positions in a single job rotation request. However, it is possible to have more positions by just adding more fields in the MDF object.

The object should be created with Effective Dating = Basic, to keep the historical data of job rotation requisitions by the managers.

For the Security section, at the bottom of the object definition, set Permission Category = Miscellaneous Permissions.

The Figure 4 shows the definition of Job Rotation MDF object.

Figure 4: MDF Object for Job Rotation Request

To improve the user experience, the visibility of the fields “Position X”, “Employee Name X”, “Department X” and “UserId X” can be controlled using the Conditional Fields feature of MDF objects. So, for instance, if the manager selects 2 as the number of employees for job rotation, only the “Position 1”, “Employee Name 1”, “Department 1”, “UserId 1”, “Position 2”, “Employee Name 2”, “Department 2” and “UserId 2” should be displayed. This feature can be accomplished with a configuration like the one in Figure 5 below for each of those fields:

Figure 5: Condition Fields Configuration Example

Permission should be granted to this object through: Manage Permission Roles –> –> Permission –> Miscellaneous Permissions (Figure 6).

Figure 6: Permissions for the Job Rotation MDF Object

The picklist values for Z_numberOfEmployees can be defined as in Figure 7 below:

Figure 7: Picklist Values for Z_numberOfEmployees

Step 2: Create Business Rules for Data Propagation, Validation and Approval Workflow

In order to populate the “Instructions” field, an MDF object should be created:

  • externalCode:
    • Data Type = Auto Number
  • externalName, to define the language (for instance, en_US and pt_BR). With this, the object can be used to define Instructions in multiple languages:
    • Data Type = String
  • cust_Z_instructionsForJobRotation, for the content of Instructions:
    • Data Type = String
    • Maximum Length = 4,000

Figure 8 shows the contents of the Instructions MDF object in English and Portuguese as an example:

Figure 8: Example of Instructions in English and Portuguese

The instructions can be defaulted through a Business Rule assigned to Effective Start Date field of Job Rotation MDF object (Figure 9):

Figure 9: Business Rule to Default Instructions in English and Portuguese

It is also important to have a Business Rule to initialize the fields for job rotation, because multiple requests can be created over time by a manager (Figure 10):

Figure 10: Business Rule to Initialize Job Rotation Fields for a New Request

For each Position field (1 through 5 in our example), create a Business Rule to default the other attributes, Employee Name, Department and User Id (Figure 11):

Figure 11: Sample Business Rule to Default Employee 1 Attributes Based on Position 1

Another interesting Business Rule that can be created is one to raise a warning message to the manager in the case the selected position is from another hierarchy. Depending on the customer scenario, it can be configured as an error message to prevent the manager to move forward with the job rotation request if he/she selects a position out of his/her own hierarchy. This Business Rule should also be assigned to the corresponding Position field (Figure 12):

Figure 12: Business Rule to Raise a Warning Message if the Selected Position is From Another Hierarchy

Note: If the customer wants the manager to be able to access positions only under his/her hierarchy, there is a setting in Provisioning to restrict the Value Help of the Position to his/her own structure (Figure 13). However, this setting applies for all Generic Object type fields, which might be inconvenient for the customer.

Figure 13: Optional Provisioning Setting to Restrict the Positions on Value Help

Another Business Rule proposed with this solution is one to trigger a workflow for the validation of the job rotation request, e.g., by an HR person (Figure 14):

Figure 14: Business Rule to Trigger a Workflow for the Job Rotation Request

Step 3: Create the UI for Job Rotation MDF Object

Use the “Manage Configuration UI” tool to create the UI for Job Rotation MDF object created before. It is recommended to use Groups to have the screen presented in a more structured way for the end-user. The “Last Modified By” and “Last Modified Date” fields were added for validation and auditing purposes (Figure 15):

Figure 15: UI for Job Rotation Object

The “Flow” Layout was used for each of the Groups created before (Figure 16):

Figure 16: “Flow” Layout for Each of the Groups

Step 4: Create a New Section on People Profile and Add Supporting Links

Create a new section on People Profile and add links to provide support/help for the end-user (Figure 17). The links can be used, for instance, to direct the user to a detailed guide (not included in this blog) on how to use the Job Rotation section and also to open another page with the Position Org Chart (Figures 18, 19 and 20):

Figure 17: New Section for Job Rotation Request Information on People Profile
Figure 18: Links for the Manager on Job Rotation Request Information Section
Figure 19: Sample Link to a User’s Guide (Not Covered in this Blog)
Figure 20: Link to the Manager’s Position Org Chart

Step 5: Create an Event Reason for the Job Rotation Process

Create an Event Reason to be used for the job rotation process through “Manage Organization, Pay and Job Structures” tool (Figure 21):

Figure 21: Event Reason for Job Rotation Process

Step 6: Create and Schedule the Integrations Configured with Integration Center Tool

In this step, the integrations to effectively rotate the employees will be created through Integration Center tool:

  • For each number of employees involved in job rotation process, an integration should be configured in Integration Center.
  • In this blog, we are considering a maximum of 5 employees taking part in a job rotation process simultaneously. So, 4 integrations should be configured (one for 2 employees, one for 3 employees, one for 4 employees and one for 5 employees).
  • The integrations will basically do the following:
    1. Change “Mass Position” attribute of the selected positions to “Yes”.
    2. Change “FTE” attribute of the selected positions to “2”.
    3. Update the Job Information record of the employees included in job rotation.
    4. Change “Mass Position” attribute of the selected positions back to “No”.
    5. Change “FTE” attribute of the selected positions back to “1”.
  • Schedule the integrations

As an example, let’s see the screen shots related to the integration configuration considering 3 employees:

General information of the integration (Figure 22):

Figure 22: General Information of the Integration for 3 Employees

Field mapping (Figure 23):

Figure 23: Field Mapping

Detailed field mapping for Position object – changing “Mass Position” to “Yes” and “FTE” to “2” (Figure 24):

Figure 24: Field Mapping for Position Object – “Mass Position” = “Yes” and “FTE” = “2”

Detailed Field Mapping for Job Information (Figure 25):

Figure 25: Field Mapping for Job Information

Detailed field mapping for Position object – changing back “Mass Position” to “No” and “FTE” to “1” (Figure 26):

Figure 26: Field Mapping for Position Object – “Mass Position” = “No” and “FTE” = “1”

Filter settings (Figure 27):

Figure 27: Filter Settings for Integration Considering 3 Employees

Scheduling example (Figure 28):

Figure 28: Scheduling Example

Integration Configuration Summary Page (Figure 29):

Figure 29: Summary of Integration Configuration

End-User Experience

Once the solution is configured as explained before, the Manager will be the main role for the job rotation process. Let’s take an example, considering a job rotation consisting of 3 employees.

Manager: Claire James (Position1526)

Employees/Positions for Job Rotation:

  • Fiona Marston (Position1533)
  • Aurie Cooper (Position1527)
  • Thomas Soames (Position1530) à other hierarchy

Effective Start Date for Job Rotation: 05/25/2023

Position Org Chart before the job rotation process (Figure 30):

Figure 30: Position Org Chart Before the Job Rotation

Job Rotation Request Information content for this scenario (Figure 31):

Figure 31: Job Rotation Request Information

Position Org Chart after the job rotation process (Figure 32):

Figure 32: Position Org Chart After the Job Rotation
Rating: 0 / 5 (0 votes)

The post Job Rotation Solution Using MDF and Integration Center first appeared on ERP Q&A.

]]>
Filtering Data Dynamically in SAP CPI using XSLT Mapping https://www.erpqna.com/filtering-data-dynamically-in-sap-cpi-using-xslt-mapping/?utm_source=rss&utm_medium=rss&utm_campaign=filtering-data-dynamically-in-sap-cpi-using-xslt-mapping Sat, 19 Aug 2023 06:16:58 +0000 https://www.erpqna.com/?p=76912 You may have encountered various scenarios where you configured more than three filters and created different paths yet performed the same task in all these paths. The first filter has the department equal to HR, while the others correspond to Finance, Sales, and Audit, respectively. Even though the data processing occurs in different paths, the […]

The post Filtering Data Dynamically in SAP CPI using XSLT Mapping first appeared on ERP Q&A.

]]>
You may have encountered various scenarios where you configured more than three filters and created different paths yet performed the same task in all these paths. The first filter has the department equal to HR, while the others correspond to Finance, Sales, and Audit, respectively. Even though the data processing occurs in different paths, the same task is being executed in each path.

Complex Integration

As you can see above, the integration appears complex. The architect responsible for the integration would be able to debug it, but it might be a bit time-consuming for other architects to understand the process of the above integration. Validating all the integration steps, by reviewing each one and either removing or adding filter criteria, would also increase the complexity of the integration.

It will also impact the performance of the integration, as it involves multiple steps that need to be executed. This will subsequently increase the processing time of the integration. The API calls made by the above integration will raise the load on the SuccessFactors system due to multiple API calls being made for performing the same task.

Simplified Integration

Solution:

To reduce the complexity of integration and decrease the processing time, as well as to alleviate the load on the SuccessFactors API, we can utilize the ‘XSLT Mapping’ function within the integration. This function enables us to filter data, map fields, and execute necessary distinct functions.

What is XSLT Mapping?

XSLT (Extensible Stylesheet Language Transformations) mapping in SAP CPI refers to the process of using XSLT to transform and map data between different formats during integration scenarios. XSLT is a language used to transform XML documents into various formats.

In the context of SAP CPI, XSLT mapping allows you to:

  1. Transform Data: Convert XML data from the source format to the target format using XSLT templates. This is particularly useful when you need to map data from one XML structure to another.
  2. Perform Complex Mapping: XSLT provides a powerful way to perform complex transformations, conditional mapping, and data enrichment during integration.

Overall, XSLT mapping is a powerful tool in SAP CPI that enables you to manage complex data transformations and mappings in integration scenarios, easing seamless communication between different systems with varying data formats.

Methodology:

In this scenario, we are going to filter out cost centers and calculate the sum of course costs for all the users, storing it as Total Cost. Generally, most customers have multiple cost centers within their organization, and many new cost centers are created and removed from the system at regular intervals.

Ideally, it is not feasible to have multiple filters and add them manually when new cost centers are created or deleted post Go-Live.

We are going to use “group by” function which is a mechanism in XSLT mapping that allows you to group and aggregate data based on specific criteria. This is particularly useful when you’re dealing with XML data and need to perform operations on grouped data sets.

Here’s how the “group by” function works in XSLT within the context of SAP CPI:

  1. Grouping Data : The “group by” function lets you group XML elements based on a common attribute or element value. This means that elements with the same value for the specified attribute or element are treated as a group.
  2. Aggregating Data : Once the data is grouped, you can use aggregate functions (like sum, count, average, etc.) to perform calculations on the elements within each group. This allows you to calculate values for each group separately.
  3. Output Transformation : After grouping and aggregating, you can define how the resulting grouped and aggregated data should be transformed into the desired output format.

Here’s a simplified example of how you might use the “group by” function in XSLT within SAP CPI:

<!-- Group employees by Cost Center -->
<xsl:for-each-group select="{Entity Name} /{Entity Name}" group-by="{Enter Field to Filter}">
                <CostCenter ><xsl:value-of select="current-grouping-key()" /></CostCenter>
<!-- Calculate the Total Cost within the Cost Center -->
                <Total_Cost><xsl:value-of select="sum(current-group()/{Enter Field to Sum})"/></Total_Cost>

Suppose you have the below input XML data having Cost Center Details:

Input XML :
<CostDetails>
    <CostDetails>
        <externalCode>1982</externalCode>
        <cust_costcenter>3748</cust_costcenter>
        <course_cost>960</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1984</externalCode>
        <cust_costcenter>3748</cust_costcenter>
        <course_cost>850</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1986</externalCode>
        <cust_costcenter>3746</cust_costcenter>
        <course_cost>740</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1988</externalCode>
        <cust_costcenter>3746</cust_costcenter>
        <course_cost>630</course_cost>
    </CostDetails>
</CostDetails>

If you want to group the cost centers and calculate the cost of the course for each user, you could use the following XSLT code for your requirements.

Code :
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <output>
            <xsl:for-each-group select="CostDetails/CostDetails " group-by="cust_costcenter">
                <Center><xsl:value-of select="current-grouping-key()"/></Center>
                <Total_Cost><xsl:value-of select="sum(current-group()/course_cost)"/></Total_Cost>
                <employees>
                    <xsl:for-each select="current-group()">
                        <employee>
                            <userId><xsl:value-of select="externalCode "/></userId>
                            <cost><xsl:value-of select="course_cost"/></cost>
                            <costcenter><xsl:value-of select="cust_costcenter"/></costcenter>
                        </employee>
                    </xsl:for-each>
                </employees>
            </xsl:for-each-group>
        </output>
    </xsl:template>
</xsl:stylesheet>	

The response payload below has filtered 2 cost centers, calculated the cost of the course, and provided us with the required output.

Output XML :
<?xml version="1.0" encoding="UTF-8"?>
<output>
    <Center>3748</Center>
    <Total_Cost>1810</Total_Cost>
    <employees>
        <employee>
            <userId>1982</userId>
            <cost>960</cost>
            <costcenter>3748</costcenter>  
        </employee>
        <employee>
            <userId>1984</userId>
            <cost>850</cost>
            <costcenter>3748</costcenter>   
        </employee>
    </employees>
    <Center>3746</Center>
    <Total_Cost>1370</Total_Cost>
    <employees>
        <employee>
            <userId>1986</userId>
            <cost>740</cost>
            <costcenter>3746</costcenter>   
        </employee>
        <employee>
            <userId>1988</userId>
            <cost>630</cost>
            <costcenter>3746</costcenter>
        </employee>
    </employees>
</output>

Scenario 2:

If you want to apply a filter within another filter, you can perform a ‘group by’ operation on both the cost center and status in XSLT mapping. To achieve this, you can utilize nested ‘’ elements for each level of grouping.

<!-- Within each Cost Center, group by Status -->
          <xsl:for-each-group select="current-group()" group-by="{Enter Field to Filter}">
                    <Status><xsl:value-of select="current-grouping-key()" /></Status>

Suppose you have the below input XML data having Cost Center Details and Status:

Input XML :
<CostDetails>
    <CostDetails>
        <externalCode>1982</externalCode>
        <course_status>Active</course_status>
        <cust_costcenter>3748</cust_costcenter>
        <course_cost>960</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1984</externalCode>
        <course_status>Active</course_status>
        <cust_costcenter>3748</cust_costcenter>
        <course_cost>550</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1981</externalCode>
        <course_status>Completed</course_status>
        <cust_costcenter>3748</cust_costcenter>
        <course_cost>950</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1983</externalCode>
        <course_status>Completed</course_status>
        <cust_costcenter>3748</cust_costcenter>
        <course_cost>250</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1986</externalCode>
        <course_status>Completed</course_status>
        <cust_costcenter>3746</cust_costcenter>
        <course_cost>740</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1988</externalCode>
        <course_status>Completed</course_status>
        <cust_costcenter>3746</cust_costcenter>
        <course_cost>630</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1987</externalCode>
        <course_status>Active</course_status>
        <cust_costcenter>3746</cust_costcenter>
        <course_cost>330</course_cost>
    </CostDetails>
    <CostDetails>
        <externalCode>1989</externalCode>
        <course_status>Active</course_status>
        <cust_costcenter>3746</cust_costcenter>
        <course_cost>430</course_cost>
    </CostDetails>
</CostDetails>

The XSLT code will group employees first by cost center and then within each cost center, group them by status. It calculates the total cost for each status within the cost center and outputs a structured XML accordingly.

Code :
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <output>
            <xsl:for-each-group select="CostDetails/CostDetails " group-by="cust_costcenter">
                <Center><xsl:value-of select="current-grouping-key()"/></Center>
                <xsl:for-each-group select="current-group()" group-by="course_status">
                    <Status><xsl:value-of select="current-grouping-key()"/></Status>
                    <Total_Cost><xsl:value-of select="sum(current-group()/course_cost)"/></Total_Cost>
                    <employees>
                        <xsl:for-each select="current-group()">
                            <employee>
                                <userId><xsl:value-of select="externalCode "/></userId>
                                <cost><xsl:value-of select="course_cost"/></cost>
                                <costcenter><xsl:value-of select="cust_costcenter"/></costcenter>
                                <status><xsl:value-of select="course_status"/></status>
                            </employee>
                        </xsl:for-each>
                    </employees>
                </xsl:for-each-group>
            </xsl:for-each-group>
        </output>
    </xsl:template>
</xsl:stylesheet>

As you can see below, the XSLT performed the ‘group by’ function for both the Cost Center and Status successfully.

Output XML :
<?xml version="1.0" encoding="UTF-8"?>
<output>
    <Center>3748</Center>
    <Status>Active</Status>
    <Total_Cost>1510</Total_Cost>
    <employees>
        <employee>
            <userId>1982</userId>
            <cost>960</cost>
            <costcenter>3748</costcenter>
            <status>Active</status>
        </employee>
        <employee>
            <userId>1984</userId>
            <cost>550</cost>
            <costcenter>3748</costcenter>
            <status>Active</status>
        </employee>
    </employees>
    <Status>Completed</Status>
    <Total_Cost>1200</Total_Cost>
    <employees>
        <employee>
            <userId>1981</userId>
            <cost>950</cost>
            <costcenter>3748</costcenter>
            <status>Completed</status>
        </employee>
        <employee>
            <userId>1983</userId>
            <cost>250</cost>
            <costcenter>3748</costcenter>
            <status>Completed</status>
        </employee>
    </employees>
    <Center>3746</Center>
    <Status>Completed</Status>
    <Total_Cost>1370</Total_Cost>
    <employees>
        <employee>
            <userId>1986</userId>
            <cost>740</cost>
            <costcenter>3746</costcenter>
            <status>Completed</status>
        </employee>
        <employee>
            <userId>1988</userId>
            <cost>630</cost>
            <costcenter>3746</costcenter>
            <status>Completed</status>
        </employee>
    </employees>
    <Status>Active</Status>
    <Total_Cost>760</Total_Cost>
    <employees>
        <employee>
            <userId>1987</userId>
            <cost>330</cost>
            <costcenter>3746</costcenter>
            <status>Active</status>
        </employee>
        <employee>
            <userId>1989</userId>
            <cost>430</cost>
            <costcenter>3746</costcenter>
            <status>Active</status>
        </employee>
    </employees>
</output>
Rating: 0 / 5 (0 votes)

The post Filtering Data Dynamically in SAP CPI using XSLT Mapping first appeared on ERP Q&A.

]]>
Principal Propagation (Run a Step on Behalf of) in SAP Build Process Automation https://www.erpqna.com/principal-propagation-run-a-step-on-behalf-of-in-sap-build-process-automation/?utm_source=rss&utm_medium=rss&utm_campaign=principal-propagation-run-a-step-on-behalf-of-in-sap-build-process-automation Wed, 28 Jun 2023 11:08:32 +0000 https://www.erpqna.com/?p=75833 Introduction: With the latest release of SAP Build Process Automation, you can now allow other business users who participate in the business process to perform an action on external systems, such as S/4HANA, Ariba, or SuccessFactors. This feature also provides clear information on who triggered a business process in the system . Pre-requisites: You can […]

The post Principal Propagation (Run a Step on Behalf of) in SAP Build Process Automation first appeared on ERP Q&A.

]]>
Introduction:

With the latest release of SAP Build Process Automation, you can now allow other business users who participate in the business process to perform an action on external systems, such as S/4HANA, Ariba, or SuccessFactors. This feature also provides clear information on who triggered a business process in the system .

Pre-requisites:

You can enable principal propagation by setting Run step on behalf of field of Action and Subprocess activity with preceding step. Details will be explained subsequently.

What is Principal Propagation?

Principal propagation forwards the identity of cloud users to a remote system or service (Cloud Foundry environment).

The Destination services let you forward the identity of a cloud user to a remote system. This process is called principal propagation (also known as user propagation or user principal propagation). It uses a JSON Web token (JWT) as exchange format for the user information.

The Destination service provides a secure way of forwarding the identity of a cloud user to another remote system or service using a destination configuration with authentication type OAuth2SAMLBearerAssertion. This enables the cloud application to consume OAuth-protected APIs exposed by the target remote system.

Supported scenarios:

  • Cloud to on-premise (using the Connectivity service)
  • Cloud to Cloud (using the Destination service).
  • Scenario: Cloud to On-Premise: The user is propagated from a cloud application to an on-premise system using a destination configuration with authentication type Principal Propagation.
  • Scenario: Cloud to Cloud: The user is propagated from a cloud application to another remote (cloud) system using a destination configuration with authentication type OAuth2SAMLBearerAssertion.
    In this blogpost ,I would cover the use cases related to the scenario Cloud to Cloud.

Scenario Cloud to Cloud:

Use Cases: Cloud to Cloud

  • User Propagation from the Cloud Foundry Environment to SAP S/4HANA Cloud
  • User Propagation between two Cloud Foundry Applications
  • User Propagation from the Cloud Foundry Environment to SAP SuccessFactors

Configuration steps:

Now ,let’s see the use cases in detail.

Use Case- 1: Execute Principal propagation end to end in from CF to SAP S/4HANA Cloud

Steps:

Configure Destination in SAP BTP cockpit

Configured OAuth2SAMLBearerAssertion Destination
  • Create a business Project.
Create Project
  • Create a process with a subprocess, which will be configured to be executed by the preceding approver using principal Propagation mechanism.
Model a process
  • Click on the subprocess and select Form user as ‘Run step on behalf of’ section in Subprocess’s side panel.
map Run step on behalf of field
  • Configure the subprocess to create business partner by connecting to S4 system. Click on the action in the subprocess and select ‘Process Start’ as ‘Run step on behalf of’ section.
Add an action to connect to S4 system
  • Release and deploy the project with the below destination (as configured above)
Deploy process
  • Trigger the process from Monitor tab with relevant payload.
  • Open ‘Process and Workflow’ section and search for the triggered process instance.
Workflow instance in Monitor tab
  • Check if the subprocess is executed by the user who submitted the form as ‘Run step on behalf of’ was selected as ‘Approver’.
Subprocess started by the propagated Approver user
Action inside subprocess executed by Propagated user

Use Case- 2: Execute Principal Propagation E2E from One Cloud Foundry environment to another Cloud Foundry environment

Concept:

  • User logs in to the cloud application. Its identity is established by an identity provider.
  • When the application retrieves an OAuthSAMLBearer destination, the user is made available to the Destination Service by means of a user exchange JWT.
  • The service then wraps the user identity in a SAML assertion, signs it with the SubAccount’s private key and sends it to the specified OAuth token service.
  • The OAuth token service accepts the SAML assertion and returns an OAuth access token. In turn, the Destination service returns both the destination and the access token to the requesting application.
  • The application uses the destination properties and the access token to consume the remote API.

Logical Flow of execution:

  • Ensure BTP Cockpit access in Source (Sub-account 1) for Configuring destination, download trust certificate.
  • Ensure BTP Cockpit access in Target (Sub-account 2) for adding trust, spa instance to get Client ID & Secret.
  • Create, release, deploy a process in Target account. Fetch workflow instance api endpoint and payload from monitor tab.
  • Create an action using the below json file in Source SubAccount (which will be triggered using the above fetched payload in runtime).
  • Create destination in source sub-account same way as mentioned in earlier hyperlink.
  • Add trust configuration in Target Sub-account and add the user’s ID as user with required roles in the trust profile.
  • Set PP user from source account to the action’s Side Panel.
  • Create, release, deploy process with the created destination with above action setup in Source account.
  • Start WF instance with the above fetched payload.
  • Watch over the execution log in Source account monitor tab.

Logical flow of Setting up outbound communication channel access for the user:

  • Create Administrator account
  • Create Communication user [e.g Client ID & Secret]
  • Setup communication system using the trust certificate from Source cloud environment.
  • Specify inbound/outbound communication mode.
  • Setup communication arrangement, to what service I want access.
  • Setup Authentication- OAuth
  • Update destination with OAuth details

Steps:

Configure destination in SAP BTP Cockpit

Configured destination of type ‘OAuth2SAMLBearerAssertion'
  • Create a business project.
Create project
  • Create a process and select Run step on behalf of field as preceding approver.
Model process and set Run step on behalf of
  • Configure an action to create workflow instance. This action will be used to call a deployed project instance in another CF environment.
Action editor to create workflow instance
  • Release and deploy project with the below destination.
Deploy the process
  • You can look for principal propagation reference in the deployed model for the activity where user has been propagated to execute the activity on behalf of.
principalPropagationRef in deployed workflow model
  • Create any process in ‘Another environment’ and release, deploy it.
  • Note down the workflow definition ID from TRIGGER section in Monitor tab.
  • Trigger the process by submitting the trigger form and provide relevant inputs.
Submit the trigger form
  • The propagated user from the action’s ‘Run on behalf of’ section has successfully executed the workflow definition corresponding to a deployed process in other CF environment using the configured destination.
Propagated user executed the workflow definition for a deployed process from other CF environment

Use Case- 3: Principal Propagation from Cloud foundry environment to SAP SuccessFactors

Business user want to propagate the identity of the user mapped for Principal Propagation to an action that invokes API of SAP SuccessFactors.

Rating: 0 / 5 (0 votes)

The post Principal Propagation (Run a Step on Behalf of) in SAP Build Process Automation first appeared on ERP Q&A.

]]>
SAP Build App to Present Data from Multiple Source Systems https://www.erpqna.com/sap-build-app-to-present-data-from-multiple-source-systems/?utm_source=rss&utm_medium=rss&utm_campaign=sap-build-app-to-present-data-from-multiple-source-systems Mon, 19 Jun 2023 11:54:05 +0000 https://www.erpqna.com/?p=75539 The SAP Build portfolio combines our low code solutions which enable users of all skill levels to easily create and augment business applications. The unified low-code solution portfolio empowers users to create applications, automate tedious processes, and design engaging business sites with drag-and-drop simplicity. What is SAP Build Apps? SAP Build Apps is SAP’s low-code […]

The post SAP Build App to Present Data from Multiple Source Systems first appeared on ERP Q&A.

]]>
The SAP Build portfolio combines our low code solutions which enable users of all skill levels to easily create and augment business applications. The unified low-code solution portfolio empowers users to create applications, automate tedious processes, and design engaging business sites with drag-and-drop simplicity.

What is SAP Build Apps?

SAP Build Apps is SAP’s low-code no-code platform to create apps for the Web and native mobile use. As an evolution of SAP AppGyver, it now has multiple backend capabilities. Business users can confidently build enterprise-grade apps that work seamlessly across all operating systems – all without writing a single line of code. Professional developers will reduce coding effort in the creation of complex data models and business logic and enjoy a significant boost in productivity.

What scenario we are covering?

Best Run Bikes company has multiple systems like the SAP Gateway server, SAP SuccessFactors and other odata based backend systems to run their day-to-day business operations. The company now has requirement to consume all of this data through a simple mobile App.

We can build such Apps quickly now with low-code! Yes, you heard it right!

This simple blog post helps you get an understanding into how data from multiple sources can be fetched and presented using a simple SAP Build App on SAP Business Technology Platform (BTP). By bringing data from SAP Gateway system, SAP SuccessFactors, Odata / Rest based sources and Visual cloud functions, we can enable enterprise-wide processes, experiences, and insights all at one place using SAP Build Apps.

This blog post covers –

  • Creating Visual cloud Functions backend and consume them in a SAP Build Apps frontend.
  • Consume Data from SAP ES5 Gateway server.
  • Bring data from Odata based sources.
  • Present Data from SAP SuccessFactors.
  • Create an App that presents all this data from different sources at one place.

Below are the high-level steps involved in realizing this App.

Let’s get started to see how we can build this App in a few simple steps.

Section I: Create a Homepage(Landing Page) for the App

Let’s create a landing page for our App. The Lading Page will have the Company Name as the heading, an image of the company or a logo along with four buttons. The layout of the lading page is given below –

The App fetches Customer details from the Visual Cloud Functions backend, Business Partners details from ES5 Gateway system, Orders details from northwind odata service and Employee Details from SAP SuccessFactors.

To Create the lading page, go the Build Apps Lobby, then select Build an Application tile.

Specify a name and description to the project.

The Page by default, will have a title and a text element.

Remove the Text element and adjust the title to “Best Run Bikes all in one App”.

Add an image component into the page and specify the image source as shown below –

Add a button component.

Change the Button property to display “BR Customers”. Adjust the button’s height and width to make it look like a tile.

Similarly, add 3 more buttons and change the properties for BR Business Partners, BR Orders and BR Employees buttons.

Section II: Create Visual Cloud Functions backend and link it to customers tile on the Home Page

It’s time for us to create a visual cloud functions backend in SAP Build Apps for referencing it as a backend for customers page.

Go to the SAP Build lobby and click on the create button.

Select the option Build an Application.

From the available options, select Application Backend to start the creation of Visual cloud functions.

Specify a name and description to the project.

I have entered the project name as BestRun_VCF_Backend and a description as shown in the screenshot.

Click create button upon entering the name and description.

Click on the create new button to add a New entity.

Specify a name and description for the new entity.

Click on Add new to add a field to the Customers entity. I have added CustID of field type Text as the first filed.

Specify a title to the field and choose a field type as applicable.

Similarly add other fields to the entity. I have added CustID, CustName, CustCountry and CustAmount fields.

Save the entity created.

Similarly, based on the requirements you can add more entities.

Finally deploy the entity to be able to consume it in the Build Apps front-end.

Deployment will take some time.

Upon successful deployment, we will see the message indicating the entity is deployed.

Let’s enter sample data into our customers entity. To achieve this, click on the browse data option present in the options against the entity.

Click on the button New Record.

Enter the values for the entity.

You can see the row entered upon adding the new record.

Repeat this process to add multiple rows based on your requirements.

To use the Visual Cloud Functions backed as Data source for our customers page, go to the Data tab in SAP Build.

Both Cloud Functions and BTP destinations buttons are greyed out. To use the Visual Cloud functions backend and BTP destinations as data sources, we need to enable SAP BTP Authentication. Head to the Authentication tab to accomplish this.

After Clicking on Enable Authentication, we will see the below authentication methods.

Select SAP BTP Authentication and then click on OK button.

Go to the Data tab again to add the Integration. Click on Add Integration.

Now the buttons Cloud functions and BTP destinations are enabled as we have set up the BTP Authentication.

Click on Cloud Functions to see the BestRun_VCF_backend – Visual Cloud functions based backend that we have created.

After Clicking on the BR cloud function, we will see the Customers Entity. Click on Install Integration.

Now select the Customers entity and then click on Enable Data Entity.

The customers entity gets enabled as shown below.

Let’s add a page for Customers now. Click on Add New Page.

Specify a name to the Page and then click OK.

Adjust the page title to display BestRun Customers.

Go to the components marketplace and look for Basic list component.

Select Basic List and then click on Install.

Add the Basic list from the installed components tab into the BR Customers page. Select the basic list and then click on the Configure button to bind it to the Customers entity.

Select the Customers entity.

Do the field configuration of basic list using the fields from Customers entity.

Save the page settings.

Add a Back button below the basic list on click of which we will get navigated to the home / landing page.

Now we need to link the BR Customers button on the Home page to the BestRun Customers page.

Click on the Add Logic to Home PAGE option to add this navigation between the pages.

Add Open Page component from the Logic Canvas and link it to the BR Customers Page.

Save the page, click on the launch option to test the working of the home page to BestRun Customers Page navigation.

Section III: Configure Destination for SAP ES5 Gateway system and link it to Business Partners tile on the Home Page

Now let’s get the Business Partner data from ES5 Gateway system.

Refer to this Developer Tutorial to get an account on the SAP Gateway Demo System

To fetch business partners list from ES5 system, Create a destination for ES5 system in SAP BTP Cockpit.

Go to the data tab of SAP Build Apps, to Add Integration to this ES5 destination.

From the available options, select BTP destinations.

You will get to see the destination that was created for ES5.

Click on ES5_VR destination to see all the available Data entities in ES5. From the list of entities, select BusinessPartner Set and then click on Install Integration.

Select the BusinessPartners Set and click on Enable Data Entity.

BusinessPartner Set entity gets enabled.

Let’s add a new page to present Business Partners Data. Click on Add new Page.

Specify a name to the page and then click on OK.

Remove the text element and then adjust the title to display BR Business Partners.

Install table component from the components marketplace.

Add the table component into the Businees Partners Page.

Select the table component and then select configure button in the properties section to bind the table to the Business Partners Set.

Select Business Partner Set.

Select the columns to be displayed in the table and order them based on your requirements.

Add a Back button below the table on click of which we will get navigated to the home / landing page.

Now we need to link the BR Business Partners button on the Home page to the BestRun Business Partners page.

Click on the Add Logic to Home PAGE option to add this navigation between the pages.

Link Home page to the BestRun Business Partners page using Open Page component.

Click on the Launch tab to test the working of Business Partners Page.

Select preview your App to see the Business Partners details.

Section IV: Integrate Northwind Odata as a backend and link it to Orders tile in the Home Page

It’s now time to set the configurations for Orders Page in our App.

Go to the Data Tab.

Select Odata Integration under Build Apps classic data entities.

Add northwind odata url under Base API URL.

Verify URL.

Select Orders entity.

Click on save data resources.

Let’s add a new page to display order details in our App.

Set the title for the page as BetRun Orders.

Add a basic list into the page.

Click on configure to bind the orders entity and the basic list.

Select Orders.

Complete the necessary field Configuration.

Add a Back button below the basic list on click of which we will get navigated to the home / landing page.

Now we need to link Orders page and Home page. Click on the Add Logic to Home PAGE option to add this navigation between the pages.

Let’s preview the app by clicking on the launch tab.

Click on Open Preview Portal to display the order details.

Section V: Configure SF Destination to fetch employee details and link it to Employees tile in the Home Page

Now lets get the Employee data from SAP SuccessFacators.

To fetch Employees list from SAP SuccessFacators, create a destination for SF system in SAP BTP Cockpit.

Go to the data tab to add the integration.

Select BTP Destinations.

Select the SF Destination created.

Click on install integration.

Select PerPerson entity and click on Enable Data Entity.

PerPerson Entity gets enabled.

Let’s add a new page in our App for listing Employees.

Adjust the title to BestRun Employees.

Add a table component to the page.

Select the table and then click on configure button under the component’s properties.

Select and order the fields to be displayed in the table from PerPerson entity.

Add a Back button below the table on click of which we will get navigated to the home / landing page.

Click on the Add Logic to Home PAGE option to add the navigation between home page and Employees page.

Save the page and then click on Preview your app option under the launch tab.

Wait for the preview of the employees page.

Rating: 0 / 5 (0 votes)

The post SAP Build App to Present Data from Multiple Source Systems first appeared on ERP Q&A.

]]>
How to Avoid Accidental Data Deletion in MDF Portlets https://www.erpqna.com/how-to-avoid-accidental-data-deletion-in-mdf-portlets/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-avoid-accidental-data-deletion-in-mdf-portlets Tue, 14 Mar 2023 10:41:44 +0000 https://www.erpqna.com/?p=72836 The frequent occurrence of accidental data deletion is largely attributed to human error and can result in the loss of critical employee or system data which may cause dominoes effect across the system landscape, and other consequences. While there are remedial measures such as running audit reports and data retrieval to address such incidents, it […]

The post How to Avoid Accidental Data Deletion in MDF Portlets first appeared on ERP Q&A.

]]>
The frequent occurrence of accidental data deletion is largely attributed to human error and can result in the loss of critical employee or system data which may cause dominoes effect across the system landscape, and other consequences. While there are remedial measures such as running audit reports and data retrieval to address such incidents, it is essential to acknowledge that prevention is preferable to cure.

Therefore, organizations should take a proactive approach to prevent such incidents from occurring. Both technical and non-technical measures can be employed, but this article focuses on a technical solution that can prevent accidental data deletion

In this blog post, we’ll discuss how to remove delete option for any custom portlet to avoid accidental data deletion

Let’s delve into two scenarios under each of the options – RBP and Configuration UI – to help you find the best fit for your needs.

Role Based Permissions (RBP):

Let’s start with the RBP option. This option is perfect if you want to grant different permissions for different roles, allowing you to keep the delete option for a few roles and remove it for others. However, keep in mind that this option can be time-consuming as you’ll need to update all the concerned roles with the required permission for the concerned objects.

Scenario 1: Portlet with base object which has effective dating

Lets go through the steps to remove the “Delete” button of the portlet highlighted below

First, make sure to secure your MDF object, head to “Configure Object Definitions,” choose the required object, and update the security section’s fields as highlighted in the screenshot and save the object

Once you’ve secured the object, go to “Manager Permission Roles” to remove the delete option for the concerned role. Open the required role, click on the permission button to see permission settings, and uncheck the delete option in the selected permission category before saving the role.

You’ll no longer see the “Delete” button for the people who have that role.

In scenario 2: Portlet which has a base object with no effective dating

For the portlet which has composite association you can see “Trash” icon for each child record along with the “Delete” button at the bottom portlet as in scenario one

You’ll need to secure both the parent and child objects using “Configure Object Definitions” as in scenario 1

Following parent object has effective date as none and has composite association with child object

Child object has effective dating from parent

Update the security section of both objects as below

Once securing the object go to “Manager Permission Roles” to remove the delete option for concerned role as in scenario 1

As you can see there is no delete option for parent object as it has no effective dating ,its only available for child object. Uncheck delete option for child object and save the role

Unfortunately, the delete permission of the child object only works for the “Trash” icon and not for the “Delete” button of the portlet, as it’s one of the limitations under RBP option for objects without effective dating.

Configuration UI:

If you’re looking for an easier option, the Configuration UI option is the way to go. This option removes the delete option for all roles, saving you the time and effort of updating individual roles. Here we don’t need to perform any of the two steps which performed under RBP option

Scenario 1: Portlet with base object which has effective dating

Go to “Manage Configuration UI,” search for the UI ID created for the base object, click on edit properties and set the delete record field to “No” under control options section and save

This will remove the “Delete” button for all the roles as this change is at the UI level

In scenario 2: Portlet which has a base object with no effective dating

Go to “Manage Configuration UI” and search for Id the UI which you have created for the base object.

Click on edit properties and set the delete record field to “No” under control options section for both parent and child objects

You’ll no longer see both “Trash” icon and “Delete” button for the portlet.

In conclusion, by using one or both of these options, organizations can rest assured that their MDF portlets are safe from accidental deletions. This can help prevent data loss, reduce downtime and ensure that the applications run smoothly. It is important to assess the specific needs and requirements of the application to determine which option or combination of options will provide the best protection for the MDF portlets.

Rating: 0 / 5 (0 votes)

The post How to Avoid Accidental Data Deletion in MDF Portlets first appeared on ERP Q&A.

]]>
Learning License User Types in SAP SuccessFactors Learning https://www.erpqna.com/learning-license-user-types-in-sap-successfactors-learning/?utm_source=rss&utm_medium=rss&utm_campaign=learning-license-user-types-in-sap-successfactors-learning Mon, 13 Feb 2023 10:40:09 +0000 https://www.erpqna.com/?p=72089 SAP SuccessFactors licenses for Learning classify the users into two License user types, “Active” or “Functional”. It is important to classify the users into right type for compliance with the licenses purchased by the customer. Difference between Functional user and Active user: The Learning management system does not differentiate between an Active and Functional User. […]

The post Learning License User Types in SAP SuccessFactors Learning first appeared on ERP Q&A.

]]>
SAP SuccessFactors licenses for Learning classify the users into two License user types, “Active” or “Functional”. It is important to classify the users into right type for compliance with the licenses purchased by the customer.

Difference between Functional user and Active user:

The Learning management system does not differentiate between an Active and Functional User. The License type classification is only used for licensing and reporting reasons.

Who is an Active Learning User?

Employees with active profiles in the system that are not classified as functional are classified as ACTIVE

Who is a Functional Learning User?

Employees and non-employees whose learning history records are recorded within Learning but are not given access to the Learning management system are classified as FUNCTIONAL

Below are few examples of how customers can categorize the users under the two License types.

  • Functional User: Users who are Seasonal, Mastered in SAP HCM, Contractor, Retirees, Former employees with access
  • Active Users: Users who are Full time, Part time, Leave of Absence

A customer can categorize any user as Functional user only if they have purchased the Functional licenses.

How are the Active/Functional users measured?

The License User type is measured by SAP as below:

Active User –

Active user count includes the below criteria :

  • All the users who have ACTIVE status and are not classified as Functional user and not using Learning market place in the LMS
  • ALL users who have one learning history recorded in the Learning system for an external or internal course or have a course enrolled or launched a course on their learning plan

Functional User –

Functional user count includes the below criteria :

  • All the users who have ACTIVE status and are classified as Functional user and not using Learning market place in the LMS
  • All users who have one learning history recorded in the Learning system for an external or internal course or have a course enrolled or launched a course on their learning plan

Methods of updating the License user type

The License User type field on the User record can be updated using any of these methods:

  1. Manual update of License User Types in Learning Administration
  2. Importing License User Types in Learning Administration (Batch Import)
  3. Importing License User Types in Learning Administration (using User Connector)
  4. Updating the Succession data model with Standard element-“LearningLicenseUserType” for sending the License information from Bizx to Learning

1. Manual update of License User Types in Learning Administration

If customers have purchased SAP SuccessFactors Learning external or functional licenses and are using shopping account type or any other custom field in the system to classify the users as external, the user license types must be assigned to the External users as Functional.

Procedure to set License user type:

  • Go to Learning Administration> People> Users
  • Search for the user to find the user with the incorrect license user type and edit the record.
  • In License User Type, select the license type of the user:
    • Active
    • Functional

Search for users and their status

Search Users by Learning License User Type

2. Importing License User Types in Learning Administration (Batch Import)

To update multiple user license types in learning, you may import the user records with the license types .

Procedure:

  • In Learning Administration> System Administration >Tools> Import Data.
  • Select the Record type of User and then select Download Template to download the latest import template.
  • Add the users in the User ID column and add the correct License User Type for the users and save your changes.
  • Select Import Data to import the file updated with records
  • You may import as a background job or choose to run the job immediately or to schedule to run the job.
  • Select Finish.

Note: When adding new users, if license user type value is left blank, the system will default the type to Active.

Import User Data

Download the Import data Template for User import

Import User Data

3. Importing License User Types in Learning Administration (using User Connector)

If the license user type is not maintained in your HRIS, and you would like to update it directly in LMS, you may use the User connector to update the license user type in LMS

For updating license user type of users using User Connector, follow the below steps:

  1. Update the Connector configuration here -System administration > Configuration > System Configuration > Connectors = user.field.mapping.data. LICENSE_USER_TYPE=FUNCTIONAL
  2. Identify User records – Identify the user records to update the Correct License user type
  3. Download the User connector template here-System administration > Connectors > Download connector template> Select User connector
  4. Create the user connector input file with the users and the license type(values are FUNCTIONAL & ACTIVE) and other required fields
  5. Import the User data by placing the input fule in SFTP folder as per the Connector configuration
  6. Run the user connector
  7. Verify the status of the import and the connector results
  8. Check a user record to confirm the user license type is updated as per the file

4. Updating License User Types in SuccessFactors Learning using Employee export job (provisioning)

The Standard element “Learning License User Type” is optional in the Succession Data model by default, hence it must be added to the Succession data table and imported in Provisioning and sync the license user type data with LMS using User connector SF.

There are two options for creating the Learning License User Type in Foundation:

  • Create a custom field in Employee profile
  • Or enable the Standard element “Learning License User Type” in Succession data table.

While you could use custom fields in the SAP SuccessFactors employee profile and map it to the SAP SuccessFactors Learning license user type. However, you cannot use a custom field in SAP SuccessFactors Learning for license type.

Steps to configure:

1. In Provisioning:

Configure the Succession data model by adding the standard element named “Learning License User Type” ) in provisioning as below:

</standard-element>

<standard-element id=”LearningLicenseUserType” max-length=”255″ required=”false” matrix-filter=”false”><label>Learning License User Type</label>

When you import Learning license types, the supported values are “active” and “functional” and their variations. If you enter values other than the listed ones below, they won’t be saved.

ACTIVE, Active, and active.

FUNCTIONAL, Functional, and functional.

2. In SuccessFactors Learning:

To set license type for internal users with the data flows between Foundation (Bizx) and Learning LMS, the new connector parameters have to be set up as below :

System Configuration> Connectors

sfuser.field.mapping.data.LICENSE_USER_TYPE=ACTIVE or FUNCTIONAL (case sensitive!)

sfuser.field.transform.data.LICENSE_USER_TYPE.ACTIVE=Active, active

sfuser.field.transform.data.LICENSE_USER_TYPE.FUNCTIONAL=Functional,functional

sfuser.connector.defaultValue.LICENSE_USER_TYPE=ACTIVE

Learning Analytics for measuring the Active and Functional users

LMS Usage Metrics Report in LMS shows the number of Active /Functional users in the system along with users using Opportunity marketplace. This report can be used for audit purposes and comparing the Number of user types against the license user types purchased by the customer.

All Functional users with active profiles in the system are audited against the number of Functional licenses purchased by the customer

All Active users with active profiles in the system are audited against Full licenses purchased by the customer.

If the customer only has Full licenses, then all internal or functional users with active profiles in the system will be audited against Full licenses purchased by the customer

An Administrator with permissions for this report can run this report to see whether the number of users in the system match your license agreement. It is a good practice for a designated admin to check for compliance by running the Learning usage metrics report periodically.

If you have multiple productive instances, then the report must be run in all the instances and calculate the cumulative number to compare with the licenses purchased.

Note: The report is based on data collected each weekend and stored in LMS. It is not a real time report. Inactive or deleted users are not included in the report.

LMS Usage Metrics Report

I created this blog to present few options available for customers to stay within the license permits and to change the Learning License User Types when they exceed the licenses subscribed to with Partner’s help.

Rating: 0 / 5 (0 votes)

The post Learning License User Types in SAP SuccessFactors Learning first appeared on ERP Q&A.

]]>
Auto Generate Career Path External Code https://www.erpqna.com/auto-generate-career-path-external-code/?utm_source=rss&utm_medium=rss&utm_campaign=auto-generate-career-path-external-code Sat, 11 Feb 2023 04:58:48 +0000 https://www.erpqna.com/?p=72073 Purpose: In this blog, the user will learn how to create system-generated external code for a career path in SAP SuccessFactors Career Development Planning. Career Path: The Career Path displays information about the expected path for a position or various positions. HR managers and HR administrators can create multiple new career paths and associate them […]

The post Auto Generate Career Path External Code first appeared on ERP Q&A.

]]>
Purpose:

In this blog, the user will learn how to create system-generated external code for a career path in SAP SuccessFactors Career Development Planning.

Career Path:

The Career Path displays information about the expected path for a position or various positions.

HR managers and HR administrators can create multiple new career paths and associate them to a given role, as well as restrict employee access to the career paths displayed in the Career Worksheet based on criteria such as role, department, or division. The career paths created are instance wide.

However, many clients need system-generated external code while creating a career path as it’s confusing for the end user to enter a value in the external code field. To meet this requirement, I have found a solution which is explained below in detailed steps, so that if anyone has the same request by the client, they can also benefit from this and fulfill the client’s request.

Create Career Path Screen
Detailed Career Path Screen

Auto-Generated External Code Configuration Steps:

  • Create Sequence: Initially, we need to create a number sequence based on the client’s requirements.

Below are the steps to configure the approval workflow in SAP SuccessFactors:

Admin Center>Employee Files>Manage Data.

Manage Data Screen
Create Sequence Screen
  • Create Business Rule: Once the Sequence is created, the next step is to link this sequence to the business rule.

Below are the steps to create a business rule in SuccessFactors:

Admin Center>Company Settings>Configure Business Rules

Business Rule Screen
Business Rule
  • Assign Business Rule to Career Path Object: The final step is to assign the business rules to the Career Path object.

Below are the steps to assign a business rule to the Career Path object in SuccessFactors:

Home>Company Settings>Configure Object Definition>Select Career Path Object>Edit the object

Configure Object Definition Screen

Go to the “Initialize Rule” field and select the created business rule from the drop-down and hit the “Save” button.

Rule Mapping

Now, as we have completed all the configuration steps. Users can access the Career Path from the Home Navigation drop-down>Development>Career Path

Career Path Screen

Click on the “Create New Career Path” button to see the system-generated external code based on the above configuration.

Create New Career Path Screen

This workaround might keep the client happy since this has been a common ask to generate external code automatically.

Note: These same steps can be followed to auto-generate external code for the talent pool in Succession Planning.

Rating: 0 / 5 (0 votes)

The post Auto Generate Career Path External Code first appeared on ERP Q&A.

]]>
SuccessFactors Alert Message & Message Definitions: Enhance User Experience https://www.erpqna.com/successfactors-alert-message-message-definitions-enhance-user-experience/?utm_source=rss&utm_medium=rss&utm_campaign=successfactors-alert-message-message-definitions-enhance-user-experience Wed, 08 Feb 2023 10:31:51 +0000 https://www.erpqna.com/?p=72042 Introduction User experience has become a critical part of a successful implementation of SuccessFactors projects. One way to help customers increase the user experience is by enhancing alert messages and message definitions. These two functionalities are used to throw error messages, warning messages, or info messages during HR Transactions. Alert messages are highly used to […]

The post SuccessFactors Alert Message & Message Definitions: Enhance User Experience first appeared on ERP Q&A.

]]>
Introduction

User experience has become a critical part of a successful implementation of SuccessFactors projects. One way to help customers increase the user experience is by enhancing alert messages and message definitions. These two functionalities are used to throw error messages, warning messages, or info messages during HR Transactions. Alert messages are highly used to remind certain employees about a specific system event that may require their attention.

In this blog, I’ll provide some examples that you can use or adapt to your current configuration.

Details

Before jumping to the samples, it’s important to understand what can be used in both features to format the text.

  • Alert messages support HTML tags. HTML stands for HyperText Markup Language – it is the standard markup language for web pages. HTML elements are composed of opening tags, content, and closing tags.
  • On the other side, message definitions support BBCode (“Bulletin Board Code”). It is similar to HTML in the sense that BBCode also uses tags to format a specific text or word, but with a different convention.

Sample 1 – E-mail address in Alert Message:

E-mail addresses are defined as per the below tags:

<a href=mailto:”people@bestrun.com”>people@bestrun.com</a>

Let’s decode the above expression:

  • The <a> tag defines a hyperlink, which is used to link from one page to another. In our case, we want to open a new e-mail of our default mail client
  • Next we have the attribute href (stands for “Hypertext Reference”) – this attribute indicates the relationship between pages to search engines. In this case, we want to activate the default mail client on the computer for sending an email – so we use the “mailto” link.
  • The last part is the content that would be displayed in the alert message with the embedded link (marked in bold). For this example, I have used the e-mail itself, but you could have used any other text.
Image from Demo

Sample 2 – URL in Alert Message:

HTML links are defined as per the below tags (HTML):

<a href=”https://www.google.com/” target=”_blank”>here</a>

Let’s decode the above expression:

  • The <a> tag and href element were already clarified above
  • target=”_blank” is used to open the link in a new browser window or tab
Image from Demo

Sample 3 – Tables in Alert Message:

Tables are defined as per the below tags (HTML):

<table style=”width:100%”>
  <tr>
   <th>Document Type</th>
   <th>Renew Start Date</th>
  </tr>
  <tr>
   <td style=”text-align:center”>Permanent Resident </td>
   <td style=”text-align:center”>6 months before exp date</td>
  </tr>
  <tr>
   <td style=”text-align:center”>Conditional Permanent Resident </td>
   <td style=”text-align:center”>90 Days before exp</td>
  </tr>
 </table>

Let’s decode the above expression:

  • <table> – this tag defines the overall table
  • width is an HTML attribute that specifies the width of the element – since I have chosen 100% – it means this table will occupy all available width within my page
  • <tr> – this HTML element defines a row of cells in a table
  • <th> – this HTML element defines a cell as the header of a group of cells
  • <td> – this HTML element defines a standard data cell in a table
  • The text-align property specifies the horizontal alignment of text in an element – since I have used center – it means my content will be displayed horizontally centered in the standard cells
Image from Demo

Sample 4 – Background images in Alert Message:

A background message is defined per the below tags (HTML):

<p style=”background-image: url(‘https://www.sap.com/dam/application/imagelibrary/photos/291000/291639.jpg/_jcr_content/renditions/291639_homepage_3840_1200.jpg.adapt.1920_600.false.false.false.false.jpg/1644994056676.jpg’);”>

(…remaining content…)

</p>

Let’s decode the above expression:

  • The <p> tag defines a paragraph in a webpage and indicates a line change.
  • Next we have the tag <style> – this tag is usually used to define the style of the area or document that you’re currently working on.</p>
  • The last part is the background-image (which is a property that we can define in an HTML element) and the image URL that we would like to display in our HTML element (please be aware that this image should be placed in a public directory accessible through the Public Internet).
Image from Demo

Sample 5 – URL in Message Definition:

Now, let’s take a quick look at how the message definitions can be enhanced using BBCode.

In the below example, I have enhanced the message definition with the following:

  • set the risk level in bold and with a different color;
  • add links to external sites to share more information.

Here you can find the different codes that I used in my example:

Be aware that the country you are visiting has a [b][color=#FF9B4F]moderate[/color][/b] COVID-19 risk. Please check the local guidelines [xurl=https://google.com]here[/xurl] and regulations [xurl=https://www.google.pt]here[/xurl] or reach out to HR.

Tags:

  • [b] – this tag set the specific text in bold
  • [color] – this tag defines the colour of the text. I have used the hexadecimal colour value, but you can use also the colour name
  • [xurl] – this tag creates a hyperlink with the value defined, and it opens it in a new web browser. If you want to open the link on the same web page, you can use the BBCode tag [url].
Image from Demo

Sample 6 – Dynamic Fields in Message Definition:

Another option to increase the user experience in Message Definition is by adding dynamic fields. The dynamic fields can be defined in the Parameters section of the Message Definition creation page.

In my example, I have added the country in curly brackets (since it is my dynamic field) and I have added the parameter country in the Parameters Section.

Image from Demo

The next step is to create a business rule. Once you define the Then statement, the parameter defined in the message definition will be displayed in bold. You just need to select the field that you would like to display – in my case I am picking the name of the GO Country.

Image from Demo

Here you can find the code that I add in the message definition text:

Be aware that {country} has a [b][color=#FF9B4F]moderate[/color][/b] COVID-19 risk. Please check the local guidelines [xurl=https://google.com]here[/xurl] and regulations [xurl=https://www.google.pt]here[/xurl] or reach out to HR

Image from Demo
Rating: 0 / 5 (0 votes)

The post SuccessFactors Alert Message & Message Definitions: Enhance User Experience first appeared on ERP Q&A.

]]>
SuccessFactors 1H 2022 Release in terms of Latest Home Page https://www.erpqna.com/successfactors-1h-2022-release-in-terms-of-latest-home-page/?utm_source=rss&utm_medium=rss&utm_campaign=successfactors-1h-2022-release-in-terms-of-latest-home-page Mon, 25 Apr 2022 09:51:08 +0000 https://www.erpqna.com/?p=62379 SuccessFactors 1H 2022 Release in terms of Latest Home Page There are few notable changes in terms of Latest Home Page in SuccessFactors 1H 2022 release. In this blog we are going to discuss few of the new changes/functionalities in the latest Home Page as per 1H 2022 release. Functionality 1: Addition of new Quick […]

The post SuccessFactors 1H 2022 Release in terms of Latest Home Page first appeared on ERP Q&A.

]]>
SuccessFactors 1H 2022 Release in terms of Latest Home Page

There are few notable changes in terms of Latest Home Page in SuccessFactors 1H 2022 release. In this blog we are going to discuss few of the new changes/functionalities in the latest Home Page as per 1H 2022 release.

Functionality 1: Addition of new Quick Actions – Five new Quick actions have been included. List of new Quick Actions are below.

Sample Home Page Layout for new Quick Actions:

Functionality 2: Custom Cards Grouping – For the custom cards (Organizational Updates) all the custom cards can be grouped into sections. Different folder(s)/Section(s) can be created & under the folder/section different cards can be added. In the below sample Test Folder Group has been created & there are two cards “Card 1” & Test “Card 2” under this folder.

Configuration Screenshot for the custom folder:

Sample Output of the folder:

Functionality 3: Size of custom card – Two different sizes (Full Size & Half Size) are available for the custom cards.

Sample of Full Size & Half Size Cards.

Functionality 4: Use of Icon on custom cards – Icon can be used for the custom cards. Icon based cards are available as half sized cards only.

Sample Icon based Custom card:

Configuration step for Icon based Cards.

Functionality 5: Date Dependent Custom Cards for New Hire (ONB 1.0)– Based on New Hires start date custom card can be made available in the latest home page.

Configuration Screen:

Functionality 6: Supplemental Tasks: supplemented to do items or supplemental task are supported now in the latest home page. Also, there is a functionality which can be used to import the legacy supplemental to do items in the latest homepage.

Categories supported for Supplemental Task under Latest Home Page:

Sample Configuration for Business Approvals Category:

Home Page layout for Supplemental Task:

Functionality 7: Target Group for custom content – Permission Role & Permission Group can now be used as target group for latest home page. Until release 2H 2021 only Dynamic Group was supported. As of now below mentioned contents supports use of permission role/group.

  • Custom cards
  • Custom links available as Favourites
  • Supplemental tasks
  • Custom folders

Sample Screen for Assignment of Role/Group

Functionality 8: As per H1 2022 release it supports 16 instead of 12 visible custom cards in the Latest Home Page.

Rating: 0 / 5 (0 votes)

The post SuccessFactors 1H 2022 Release in terms of Latest Home Page first appeared on ERP Q&A.

]]>