S4HCKS34 Manage your production capacity effectively

In this SAP S/4HANA Cloud Knowledge Snippet – #S4HCKS – we do a deep dive into a new Fiori Application that was released with SAP S/4HANA Cloud 1808. The app in question is Manage Work Center Capacity. You can find more information about this application in the Fiori Apps Library by following this link. You can also check out the application documentation here. If you are unsure where to start to begin exploring this application your self, then Best Practices scope item 31L – Production Capacity Planning and Evaluation – is a good start.

I will let you follow the video for a detailed walkthrough of you need to do in SAP S/4HANA Cloud to be able to fully leverage this application, but before that I will just offer a few pointers, that are also discussed in the recording .


Generate capacity requirements for planned orders

This is not a must and really depends on your situation – i.e is capacity an issue and are you always juggling with the capacity of your bottleneck or key work stations. If so, then you may wish to generate capacity requirements for your planned orders already coming out of MRP, so that you have visibility over the capacity requirement of your production plan over a longer horizon, then that just provided just by the production orders (which you would have only created when needed !).

If so, then you will want to execute the scheduled MRP run, with the scheduling setting ‘2’ – Detailed scheduling. This will have the effect of reading the product’s routing and not not the in-house production lead time in the material! Because you are reading the routing, it means that you are reading the routing’s work centres.

Is your formula enabled to generate capacity requirements?

The formula you will choose in the work centre (or create yourself) is very important, in that, if you miss the setting that will generate a capacity requirement, then you will not see any capacity in the capacity monitoring application! So make sure the ‘WKCtr for rqmts’ check box is active for your selected formula!

Tailor the system to your needs

It may be that you need to create your own formulas, to calculate the capacity requirements of your work centers using a specific formula. No problem, with SAP S/4HANA Cloud you can do that! Just head over the to the Manage your solution application, look for the SSCUI’s in the context Manufacturing / Shop Floor Control / Work Center and create your own formulas.

If you enjoy this post, please consider subscribing to our youtube channel and follow the hashtag #S4HCKS on twitter.

Share and spread the love

S4HCKS33 How to control AVC characteristics printed on sales order confirmations

In this SAP S/4HANA Cloud Knowledge Snippet – #S4HCKS – we discuss the topic of printing the AVC characteristics of your configurable products.

By default, all the characteristics that are evaluated during configuration of your products will get printed on the sales order confirmation that is sent to your customers. Sometimes this undesirable, as it may be distracting and lead to questions, it could be that the information is of no added value to your customers (as it is likely that you will maintain characteristics that are there to to for example hold the results of temporary calculations) , or possibly informational values that you do not want to share with the outside world.

Whatever the reasons, there is a way in SAP S/4HANA Cloud that gives you to the tools and power to control exactly what get printed!

As an before/after example. the first screenshot shows the default output with all the valuated characteristics printed.

And the after screenshot shows you what the sales order confirmation looks like after having filtered the characteristics that we wanted to print.

The video below will show you from start to finish how you can achieve the same results in you SAP S/4HANA Cloud system.

Share and spread the love

S4HCKS32 Improving the AVC UI/UX and workflow by maintaining characteristics groups

In this SAP S/4HANA Cloud Knowledge Snippet – #S4HCKS – , we show you how you can tailor the configuration UI of AVC materials to your heart’s content by maintaining characteristics groups.

A characteristics group is a great feature that came with our 1808 release of SAP S/4HANA Cloud. Previously, all characteristics assigned to a product were displayed in one screen. Whilst this would suit a ‘power user’ that needs to have full visibility of all the product characteristics, it may not suit a person whose job is to create a sales order – real quick. With characteristics group you can group together under grips that will appear as tabs in the sale order configuration screen.

This will undoubtedly prove to be hit with many employees that just want to see the characteristics they need to configure a product, or this might be a great way to segregate characteristics that fit together ( for example you want to group together the mechanical features of your products under one tab, and the electrical features under another).

Please check the video below for a full walkthrough showing you how to create and assign groups to your configurable (AVC) materials.

S4HCKS31 Analytical Sales Reporting for Configurable materials made easy in S/4HANA Cloud

‘Lot size of one’ has in recent times often been used to be synonymous of  ‘individualisation’, i.e tailoring what you sell and manufacture to a specific customer requirement or taste. In such a make to order environment, it often does not make sense to create as many material or product codes as you have ‘individualisations’, or you will spend more time creating products and their associated master data rather than selling and manufacturing them.

To this end, SAP has for numerous years provided the ‘Variant Configuration’ capabilities. A highly sought after function that, with a certain learning curve, that allows you to configure a product in various configurations. A typical example is a car, that can be made in a variety of colours, 2 or 4 doors, various engines, cloth vs leather seats, etc…. The product code is the same – it can just be configured in different configurations. In S/4HANA, SAP rebuilt this function from the ground up, rebuilding the engine that is behind it and renamed it AVC – Advanced Variant Configuration. In S/4HANA on-premise both the classic (LO-VC) variant configuration and AVC are available. In S/4HANA Cloud, only AVC is available.

One quickly understands the benefits of using one material code to represent different things, but you also quickly understand that it is going to be difficult to manage your organisation if the only way to report on such products is by its product code. Since it is always the same, how do you distinguish the green square shaped one from the red round one ? Well, actually in S/4HANA – Cloud – it is very easy to do, and that is what this post aims to demonstrate.

Please check out the video below, which shows you step by step what you need to do.

I have also after the video, below indicated some of the key steps of this process.

Key Steps

For all things to hang together, you need to create a class type of technical type 399. This class does not need to be assigned to any object in S/4. This class does however need to group the characteristics that you would like to report against.

Once you have created your class of type 399, you need to generate the corresponding CDS (Core Data Service) for it.

You can then use the generated CDS on its own if you like, if you only want to report against the characteristics of your configurable materials. However it will make much more sense if you marry this data, with for example Sales data. If you do, just beware that the names of the fields that you will need to join together have different labels. I.e the field that references a given configuration is named ‘Ibase Component’ in the generated CDS and ‘Product Configuration’ in the sales related CDS’s.

You can then consume the ‘joined’ CDS in a a custom analytical query and really bring your sales data to life and analyse your product sales based on the configuration characteristics of your materials.

Share and spread the love

S4HCKS30 Custom Sales Order Item texts in Advanced Variant Configuration

Welcome to another post on Advanced Variant Configuration in SAP S/4HANA Cloud (but would work on-premise also). This particular functionality which I will show in this snippet is not new to S/4HANA, but it’s a nice feature which I think will appeal to many customers.

In this snippet, I will show you how you can :

  • Concatenate multiple characteristic values (as well as fixed characters) into another characteristic
  • Copy this concatenated text into the sales order item text of your sales orders  for configurable materials (as shown in the picture below). We are in effect replacing the ‘generic’ description of the configurable material with an configuration/order specific description

The video.

Do not forget to create a reference characteristic that references the table VCSD_UPDATE and the field ARKTX, as shown below.

Share and spread the love

S4HCKS29 Real World solutions with S/4HANA Cloud to real World problems

The stated requirement was to be able to have a KPI tile in the Fiori Launch Pad, that would show a count of the customers that had been able to reach one of two (or both) sales tiers. A sales tier being a sales volume. The numbers are not realistic, but let’s say that tier 1 would represent customers that had been able to reach a sales volume of 1000USD and tier 2 would represent customers that had been able to reach a sales volume of 2000USD. This volume had to be reached over a specific period of time, and if the customer reached one of the two tiers, over that specified period of time, he would then be eligible for a credit (or a rebate if you prefer). The higher the tier achieved, the greater the credit issued. As you can see, using standard features of S/4HANA Cloud, this was achieved quite easily.

The next requirement, was to be able to drill down to a graphical representation of these sales volumes and clearly highlight the two sales tiers (1000USD and 2000USD), so as to be able to instantaneously visualise which customer had reached these tiers. Again, as you can see below, this and much more was achieved using standard capabilities of S/4HANA Cloud. Not only were we able to build the desired graphical representation of the sales volumes and sales tiers, we also added mini charts (mini KPI’s) as well as various evaluations, so as to be able to slice and dice the information in various ways.

So far, the customer brief was met. However, thinking about the use of this data, it quickly becomes evident that the next steps to be taken on the basis of this data, is to be able to issue the due credit to the eligible customers – but how are you going to do it? From the app above, it is possible to present the data in tabular form, you could even add calculated fields in the evaluation of your KPI tile to calculate things such as the amount of the credit. You could also export the data to a spreadsheet and there also calculate the credit due. Then, you are left with the need to create the credit memo in the system. Whilst of course possible, this is fraught with risks (badly slicing the data could lead to over/under issuing credits) and of course immensely tedious – imagine someone entering a large amount of documents in the system manually (again fraught with risks). That said, thanks to S/4HANA Cloud and the power of extensibility there is a much better, faster and leaner way to do this.

What we did, was to use the ‘Custom Business Object’ in S/4HANA Cloud to define a new object – Sales Volumes tiers. The custom business object allows you to define the structure of the object that you need as well as the fields that define this object. In our case we needed fields that would pertain to customers, (customer ID, name, sales organisation…), tiers information (the volume that needed to be achieved as well as the % of the credit that would be issued). Lastly we also wanted to restrict how the volume was going to be measured. I.e was all the customer’s business going to count, or did we want to restrict by a set of materials or materials groups for example. We chose the material group. A snapshot of part of the structure of our Custom Business Object is shown below.

Once the custom business object was created, we then used some coding to realise the magic of the process, namely, to call a CDS to sum the amounts billed to the customer, and on the basis of that determine the amount of the credit to be issued to the customer (if eligible). Then we perform a second call to a whitelisted API to actually create the credit to the customer.

I will let you watch the video recording below to give you a complete view of what we did, but at a high level, in bullet point form below are the main steps/functions:

  • Creates a custom business object with the required structure and fields.
  • We added validation logic to make sure the data entered was correct, as expected and was going to play nicely with the subsequent processes
  • We added some logic, to call the CDS I_BillingDocumentItemCube so as to sum the sales volume of the considered customer.
  • One the basis of the sales volume determined, and based on the sales targets of the customer, we determine if the customer achieved the Tier 1 or Tier 2 target and if he did, we calculate the corresponding amount of the credit he earned.
  • We then make a POST call to the whitelisted API API_CREDIT_MEMO_REQUEST_SRV, to actually create the credit memo in the S/4HANA Cloud system.

Looking at these steps, you can imagine the level of automation that was achieved as well as the added value offered!

Code Snippets & how-to's

Please check out the blog from my colleague Arun here : https://blogs.sap.com/2018/06/13/mass-update-using-sap-s4hana-cloud-in-app-extensibility/ . His blog will show you what you need to do to setup the required communication arrangements. I would like to thank Arun for his wonderful blog which provided the missing pieces to mine as well as his pointers along the way.

All code provided below is provided as-is. You take full responsibility for using as it nowhere near production grade code.

Below is the code for the first action. It retrieves the sales volumes from the billing CDS and works out the credit due to the customer.



* Action Calculate for Node ID sales_volume_rebate
* Importing Parameter : association (Navigation to Parent/Child/Associated Node Instances)
* Changing Parameter  : sales_volume_rebate (Current Node Data)
* Exporting Parameter : message (Message with Severity S(uccess), W(arning), E(rror))

* -----------------------------------------------------------------------
* calculate bonus
DATA: netamount          TYPE P DECIMALS 2.
DATA: internetamount     TYPE P DECIMALS 2.
DATA: bonus1             TYPE P DECIMALS 2.
DATA: bonus2             TYPE P DECIMALS 2.

IF salesvolumestiers-releasestatus GT '2'.
        IF salesvolumestiers-isconsistent = abap_true.

"       calculate product bonus
        DATA: products  TYPE TABLE OF i_productgroup.
        DATA: product   LIKE LINE OF products.

*       get product list from sub node Products
        DATA(bonusproducts) = association->to_materialgroups( ).

        "           get net amount for product
        LOOP AT bonusproducts INTO DATA(bonusproduct).
            SELECT    *
                FROM  i_productgroup
                INTO  @product
                WHERE i_productgroup~materialgroup = @bonusproduct-materialgroups-materialgroupid.

                            FROM I_BillingDocumentItemCube( p_exchangeratetype = 'M', p_displaycurrency = 'USD' )
                            FIELDS SUM( SlsVolumeNetAmtInDspCrcy )
                            WHERE   creationdate BETWEEN @salesvolumestiers-validfrom AND @salesvolumestiers-validto
                                AND SalesOrganization = @salesvolumestiers-salesorg
                                AND soldtoparty = @salesvolumestiers-soldtoparty
                                AND materialgroup = @bonusproduct-materialgroups-materialgroupid
                            INTO @internetamount.

        netamount = internetamount + netamount.


        salesvolumestiers-volumeachieved_v = netamount.
        salesvolumestiers-volumeachieved_c = 'USD'.

        if netamount LT salesvolumestiers-targetrevenue1_v.
            salesvolumestiers-calculatedbonus_v = 0.
        elseif netamount GT salesvolumestiers-targetrevenue2_v.
            salesvolumestiers-calculatedbonus_v = ( ( netamount / 100 ) * ( salesvolumestiers-bonusrate2 ) ).
            salesvolumestiers-calculatedbonus_c = 'USD'.
            salesvolumestiers-calculatedbonus_v = ( ( netamount / 100 ) * ( salesvolumestiers-bonusrate1 ) ).
            salesvolumestiers-calculatedbonus_c = 'USD'.

        salesvolumestiers-releasestatus = 4.


message = VALUE #(
  severity = co_severity-success
  text     = 'Action CalculateCustomerCredit executed'

Then the next piece of code is that which is used create the credit memo per se. Again you will want (have to!) add your own error handling code and execution logic.

* Action CreateCreditMemo for Node ID SALESVOLUMESTIERS
* Importing Parameter : association (Navigation to Parent/Child/Associated Node Instances)
*                       write (API for creating and updating Custom Business Object Node Instances)
* Changing Parameter  : SALESVOLUMESTIERS (Current Node Data)
* Exporting Parameter : message (Message with Severity S(uccess), W(arning), E(rror))

CHECK cl_ble_http_client=>is_service_available(
    communication_scenario = 'YY1_INT_HTTP'
    outbound_service       = 'YY1_INT_HTTP_REST'
) = abap_true.

DATA(lo_client) = cl_ble_http_client=>create(
    communication_scenario = 'YY1_INT_HTTP'
    outbound_service       = 'YY1_INT_HTTP_REST'

* we get the csrf token to be able to make the POST call later
DATA(request) = cl_ble_http_request=>create( ).
DATA lv_s2 TYPE string VALUE '/API_CREDIT_MEMO_REQUEST_SRV/A_CreditMemoRequest?%24top=1&%24format=json'.
request->set_header_parameter( exporting name = 'X-CSRF-TOKEN' value = 'FETCH' ).
request->set_method( 'GET' )->set_resource_extension( lv_s2 ).
    DATA(response) = lo_client->send( request ).
    DATA(lv_csrf) = response->get_header_parameter( 'x-csrf-token' ).
    CATCH cx_ble_http_exception INTO DATA(l5).

* We build the payload that will be submitted in the POST call
* We will also convert the calculated bonus to a string so that the call plays nicely
DATA: lv_payload TYPE string,
    calcbonus TYPE string,
    lv_pl41 TYPE string value '{"d" : { "PurchaseOrderByCustomer": "CREDIT-2018- ',
    lv_pl42 TYPE string value '","SoldToParty": "',
    lv_pl43 TYPE string value '","SalesOrganization":"',
    lv_pl44 TYPE string value '","CreditMemoRequestType":"CR","OrganizationDivision":"00","DistributionChannel":"10",',
    lv_pl45 TYPE string value '"to_Item": [ { "Material": "CREDIT","RequestedQuantity": "1","to_PricingElement": [ {',
    lv_pl46 TYPE string value '"ConditionType":"PPR0","ConditionRateValue": "',
    lv_pl47 TYPE string value '","ConditionCurrency":"',
    lv_pl48 TYPE string value '"} ] } ] } }'.

* We retrieve the calculated bonus from the custom business object
 calcbonus = salesvolumestiers-calculatedbonus_v.
* We get rid of the trailing space that is added to the calculated bonus
 CONDENSE calcbonus.

* we concatenate the various fields that will make up the payload
CONCATENATE lv_pl41 salesvolumestiers-soldtoparty lv_pl42 salesvolumestiers-soldtoparty lv_pl43
            salesvolumestiers-salesorg lv_pl44 lv_pl45 lv_pl46
            calcbonus lv_pl47
            salesvolumestiers-calculatedbonus_c lv_pl48  INTO lv_payload.

* we make the POST call to the credit memo request API
DATA(request1) = cl_ble_http_request=>create( ).
DATA lv_s1 TYPE string VALUE '/API_CREDIT_MEMO_REQUEST_SRV/A_CreditMemoRequest'.
request1->set_header_parameter( exporting name = 'x-csrf-token' value = lv_csrf ).
request1->set_content_type( 'application/json' ).
request1->set_method( 'POST' )->set_resource_extension( lv_s1 ).
request1->set_body( lv_payload ).

    DATA(response1) = lo_client->send( request1 ).
    CATCH cx_ble_http_exception INTO DATA(lx1).

* We also want to be able to update the custom business object with the created credit memo number
* So we will use regular expressions to find the content of the  tag in the response
DATA result TYPE match_result_tab.
DATA line LIKE LINE OF result.
DATA sub TYPE submatch_result.
DATA output TYPE string.
DATA lx60 TYPE string.
output = response1->get_body( ).

FIND ALL OCCURRENCES OF REGEX '((?:[^<]|<?!d:CreditMemoRequest>)*)' IN output IGNORING CASE RESULTS result.
LOOP AT result INTO line.
   LOOP AT line-submatches INTO sub.
     lx60 = output+sub-offset(sub-length).

* We update the custom business object field Credit Memo with the credit memo number just created
 salesvolumestiers-creditmemo = lx60.

message = VALUE #(
  severity = co_severity-success
  text     = 'Credit Memo Created:'
 && lx60

Share on Social Media

S4HCKS28 How to setup sales pricing with Advanced Variant Configuration in SAP S/4HANA Cloud

In this post we look at how you can setup Sales Pricing for configurable materials in SAP S/4HANA Cloud, using the new Advanced Variant Configuration (AVC).

S4HCKS27 How to handle varied multi-level approval processes and leverage a Business Rules like Framework

Some organisations have somewhat straight forward approval rules in place. By that I mean that there is a well defined structure where for example based on amount ranges and cost assignment types, one or more approvers will need to be determined to approve a spend. The approval process can span across several levels and the only variable that determines how many levels of approvals will be required are usually determined by the amount to be approved.

Then there are some organisations, where the approval  process is much more complex. For example a first level could be determined based on the account assignment, the second level could be based on the material type (service vs stock material), the amount of the spend, etc… you get the point, there are many more variables in play, that make the process more complex as more business rules need to be catered for….and the last thing that you want is for those rules to exist in your code! It is OK for the logic to embedded in code, but the rules (i.e whether John or Jane should approve) should be maintained by your business users. When the rules change or when employee leaves the organisation, such changes to your approval rules should be the responsibility of the business users to maintain.

Thankfully in SAP S/4HANA Cloud, especially since 1805 with the introduction of new functionality that allows you to keep track of approval levels in your custom logic, things just got a whole lot simpler!

In this simple example shown in the video, we will create a 2 item purchase requisition. As we are also performing the approval process at the item level, we will fire off 2 work items – one for each purchase requisition item. In this example, we are wanting to route the approval to a person that is neither the person responsible for the cost object, nor the manager of the person that created the requisition. We will therefor use the workflow approval Badi to define the logic to determine the approver(s). However as I said previously, we do not want to code in the logic the person that will receive the workflow approval request. No – we want to leverage a Business Rules like structure to hold this information.

To do so, we have created a custom business object – an approval table, as shown below.

The table that we added is simple in structure. For it we track the approval level, the cost object (the cost centre) and the approver of this combination. For the sake of simplicity, we will use the same table for the 2 approval levels that we have, but you can imagine, that you would have a different table for each approval level (if the structure was different of course).

From a coding point of view, there are two key elements in our logic.

The first one is retrieving the cost centre that was indicated as the cost assignment of the requisition items. To retrieve this information we directly call an API –> i_purreqnacctassgmt_api01. The code used here is:


SELECT SINGLE costcenter FROM i_purreqnacctassgmt_api01 INTO @data(lv_purchasereqcostcenter)
WHERE purchaserequisition = @purchasingdocument AND
purchaserequisitionitem = @purchasingdocumentitem.

Then the next piece of code is that which we use to retrieve the user that will become the approver. As I said, we do not want this in the code – so we need to go and fetch that information from our custom business object. The code used here is:

SELECT single approvinguser FROM yy1_approvalstable INTO @ls_badi_approver
WHERE CostObject = @lv_purchasereqcostcenter AND
ApprovingLvl = 1.

Essentially we are retrieving the business user ID of theApprover , for which the cost centre and approval level match where we are in the purchase requisition approval process.

Update 19 July 2018

By request, I am also adding the full custom logic code which I used to illustrate this determination.


      ls_badi_approver     TYPE if_mmpur_workflow_agents_v2=>bd_mmpur_s_badi_approver,
      lt_badi_approver     TYPE if_mmpur_workflow_agents_v2=>bd_mmpur_t_badi_approver,
      ls_previous_approver TYPE if_mmpur_workflow_agents_v2=>bd_mmpur_s_previous_approver,
      ls_new_approver      TYPE if_mmpur_workflow_agents_v2=>bd_mmpur_s_badi_approver.

    SELECT SINGLE costcenter FROM i_purreqnacctassgmt_api01 INTO @data(lv_purchasereqcostcenter)
    WHERE purchaserequisition = @purchasingdocument AND
          purchaserequisitionitem = @purchasingdocumentitem.

    SELECT single approvinguser FROM yy1_approvalstable INTO @ls_badi_approver
    WHERE   CostObject = @lv_purchasereqcostcenter AND
            ApprovingLvl = 1.

    APPEND  ls_badi_approver TO lt_badi_approver.
    ls_badi_approver-approvallevel = 1.

        SELECT single approvinguser FROM yy1_approvalstable INTO @ls_badi_approver
    WHERE   CostObject = @lv_purchasereqcostcenter AND
            ApprovingLvl = 2.

    APPEND  ls_badi_approver TO lt_badi_approver.
    ls_badi_approver-approvallevel = 2.

**  remove the previous approvers from the list of BAdI approvers
    LOOP AT previousapproverlist INTO ls_previous_approver.
      READ TABLE lt_badi_approver INTO ls_badi_approver
                              WITH KEY businessuser = ls_previous_approver-businessuser.
      CHECK sy-subrc = 0.
      DELETE lt_badi_approver WHERE approvallevel = ls_badi_approver-approvallevel.
**  determine the next approval level and appropriate approvers
    READ TABLE lt_badi_approver INTO ls_badi_approver INDEX 1.
    LOOP AT lt_badi_approver INTO ls_new_approver
                WHERE approvallevel = ls_badi_approver-approvallevel.
      APPEND ls_new_approver-businessuser TO approverlist.

If you want to replicate my custom business object, here is its structure.

Lastly, I am also adding the ‘After modification’ logic that I used in my custom business object. This logic is used to increment the ID number of the custom object entries as well as retrieve the name of the user id entered (useful to confirm that the entered code is a valid one).

* After Modify Determination for Node ID APPROVALSTABLE
* Importing Parameter : association (Navigation to Parent/Child/Associated Node Instances)
*                       write (API for creating and updating Custom Business Object Node Instances)
* Changing Parameter  : APPROVALSTABLE (Current Node Data)

* set ID
IF approvalstable-entryid IS INITIAL.
   SELECT MAX( entryid ) FROM yy1_approvalstable INTO @DATA(current_max_id).
   approvalstable-entryid = current_max_id + 1.

IF approvalstable-approvinguser IS NOT INITIAL.
   approvalstable-approvername = cl_abap_context_info=>get_user_formatted_name( approvalstable-approvinguser ).

If you enjoy this post, please consider subscribing to our youtube channel and follow the hashtag #S4HCKS on twitter.

Version used in recording 

S4HCKS26 Extend S/4HANA Cloud with a native iOS SAPFiori app with the iOS SDK

In this SAP S/4HANA Cloud Knowledge Snippet (S4HCKS), we will be exploring how easily you can extend your SAP S/4HANA Cloud system by building a native iOS app for your users. You might ask the question why? After all my S/4HANA Cloud system is consumed via a web browser so why would I want to build an app for that? I take your point, but:

  • Not all apps can be consumed on a phone size screen (either the app is not available or the user experience would be terrible)
  • With a native app, the GUI elements reside in the app on the phone (if you are in an area where mobile charges are steep, this is important)
  • With a native app, you can have offline capabilities which is mighty helpful when there is no cellular coverage
  • You might want to create a mashup app that interacts with your S/4HANA cloud system as well as other external systems (without needing for the user to log on to multiple apps)
  • Maybe you have a predominantly nomadic workforce and it makes sense to build a native app that integrates with other functions on your device (camera, phone, GPS, etc…)
  • ….and many more.

So in this snippet, we will use a custom business object as the starting point, expose the data from this custom object as an Odata service, consume it as a service that is registered as a destination on the SAP Cloud Platform – and all that on an native iOS app built with the SAP iOS SDK. Why? Because I want to demystify the preconceived idea that this is too complex and in fact show how easy it is to do all this with the tools that SAP provides. I am by no stretch of the imagination a developer, so if I can do it, then so can you. Furthermore, all the tools used in this snippet are free, so there really is no excuse to not give it a go! You just need an Apple Mac!

There are certain things that are not covered in this movie, such as creating a communication arrangement in S/4Cloud, or what you need to do on the SAP Cloud platform, where to download the iOS SDK, etc…. There are plenty of blogs, videos and tutorials out there to help you for that. I have however listed a few choice ones below that I found very helpful during my explorations.

Lastly, I would like to point out that I was damn impressed with how much the development team was able to pack in this SDK! As you will see in the video, after having indicated just the web service that I want to consume, the app that is built out of the iOS SDK is just so complete! Sure you cannot put that in the hands of your users, but the amount of functionality that is delivered in this app, without needing for me to type a single line of code is just mind blowing. It sets the stage for you to be able to, with minimal changes, to build an awesome app to your users.

If you enjoy this post, please consider subscribing to our youtube channel and follow the hashtag #S4HCKS on twitter.

Version used in recording 

S4HCKS25 How to upload an employee photo in SAP S/4HANA Cloud

In this knowledge snippet we look at something that should be toward the bottom of your project list of priorities – uploading employee photos in your SAP S/4HANA Cloud system. The employee photo can be found in the enterprise search results as well as in the employee overview page.

If you are using your S/4HANA Cloud system in concert with SAP Success Factors Employee Central integration and thus leveraging the out of the box integration capabilities that exist between these two solutions, then you do not need to worry about this. If your employees have maintained their photos in Success Factors, they will automatically be replicated in your S/4HANA Cloud system.

So this snippet, really only applies, if you are trying to connect a third party HR system to your S/4HANA Cloud system or just wanting to upload employee pictures in S/4HANA Cloud (please note that not everyone likes to have their much shot available, so you should first seek your employees’ consents before proceeding with uploading their picture !)

Example Code Snippet

In the video, when I test the integration, there is a code snippet that use and which I have added below. Amend the content to reflect the data in your own system.


If you enjoy this post, please consider subscribing to our youtube channel and follow the hashtag #S4HCKS on twitter.

Version used in recording