nocin.eu

Homelab, Linux, JS & ABAP (~˘▾˘)~
 

[FI-TV] My Travel and Expenses for Business Traveler: Change default approver

I was working with the Fiori App My Travel and Expenses for Business Traveler and implemented a new approval workflow. Unlike in the SAP standard workflow, the first approver was not the boss of the employee. The workflow was already working fine, but when sending the travel expense from the Fiori app, it still displayed the boss as approver.

Naturally, the Fiori app does not know anything from the changes on the workflow. So I had to figure out where this approver value comes from and how I could adjust it to match the workflow logic.

I first went to the official documentation to check if there is any BAdI to change/overwrite the approver.

I also checked the note 3260453 – Enablement of Custom Logic for Key User Extensibility option in S/4HANA FIORI app MTE, but it seems like no BAdI was doing the job.

Spoiler: Actually there is a BAdI called FIN_TRV_APPROVER_NAME, but it is not listed here or anywhere else in the documentation. As many times before, incomplete SAP documentation wasted hours of my life…..

Because I could not find a BAdI, I went to the RAP service, to check where the approver is set and if it’s possible to overwrite it in someway.

When clicking the Create and send button in Fiori, a POST request to the endpoint CheckTripAmounts is fired. The response of type cds_ui_travelexpensemanage.TravelExpenseType contains the required value in field TrvlExpnApproverName.

I already knew the corresponding package for RAP-Service.

In package ODATA_TRV_MTE_UI_MANAGE I found the root view entity C_TravelExpense which contained the property TrvlExpnApproverName. Its projection I_TravelExpense was located in package VDM_TRV_MTE_UI_MANAGE. I was already afraid, that the approver is somehow read via some CDS association, but it turned out to be added as empty field and properly therefore is manually filled in some behavior implementation.

cast ( ' ' as vdm_trvlexpnapprovername )                                                                             as TrvlExpnApproverName,

The related behavior implementation was in class CL_BP_I_TRAVELEXPENSE and there I found the CheckTripAmounts method, which matched the POST request I saw in the Dev console. And here I found the following logic.

    DATA l_trvlexpnapprovername TYPE char40.
    cl_trv_business_data_s4=>get_approver( EXPORTING iv_employeenumber = api->get_header( )->get_pernr( )
                                                     io_header = api->get_header(  )
                                           IMPORTING ev_approver_name  = l_trvlexpnapprovername
                                                     et_messages       = lt_return ).

When looking in the get_approver method I found the default approver logic via OM, but also a BAdI call at the end.

    DATA lo_badi TYPE REF TO fin_trv_approver_name.
    TRY.
        GET BADI lo_badi.
        DATA(ls_general_data) = io_header->get_general_data( ).
        CALL BADI lo_badi->change_approver_name
          EXPORTING
            iv_traveller_pernr = iv_employeenumber
            is_general_data    = ls_general_data
          CHANGING
            cv_approver_name   = ev_approver_name
            cv_approver_pernr  = ev_approver_pernr.
      CATCH cx_root.
    ENDTRY.

Turned out, there is BAdI to overwrite the approver, it was just not documented…………………. all other eight BAdI’s are mentionend in the documentation.

[Fiori] Meine Formulare: Entgeltnachweise ausblenden “in Vertretung von” (onBehalf)

Möchte man Führungskräften die Möglichkeit geben, in der MyForms App die Formulare ihrer Mitarbeiter einzusehen, kann dies einfach über den HCMFAB_B_COMMON BAdI in der Methode GET_CONFIGURATION realisiert werden.

      IF iv_application_id = gc_application_id-myhrforms.
        ev_enable_onbehalf = boolc( go_employee_api->is_manager( iv_application_id = iv_application_id
                                                                 iv_pernr          = iv_employee_number ) = abap_true ).
      ENDIF.

Im Standard werden der Zeitnachweis und Entgeltnachweis angezeigt. Möchte man nun für die Führungskraft den Entgeltnachweis ausblenden, kann dies über den BAdI HCMFAB_BI_MYFORMS gemacht werden.

In der Methode GET_HIDE_REM_TIME_STATEMENT kann dies z.B. so realisiert werden.

        ev_hide_rem  = abap_false.
        ev_hide_time = abap_false.

        DATA(ownpernr) = go_employee_api->get_employeenumber_from_user( ).

        IF iv_pernr <> ownpernr.
          ev_hide_rem = abap_true.
        ENDIF.

Die Variable ev_hide_rem verhindert das Hinzufügen des Entgeltnachweises im folgenden, wie ab Zeile 25 zu sehen.

Jedoch ist nach meiner Beobachtung das noch nicht ausreichend, da in der Methode FILL_FORM_TYPES der Entgeltnachweis dann doch wieder hinzugefügt wird.

Daher habe ich den Entgeltnachweis zusätzlich noch in der Methode FILL_FORM_TYPES entfernt.

      DATA(ownpernr) = go_employee_api->get_employeenumber_from_user( ).

      IF iv_pernr <> ownpernr. " Manager dürfen nur Zeitnachweise ihrer Mitarbeiter sehen
        DELETE ct_form_types WHERE form_type <> 'SAP_INT_TIM_STM'.
        RETURN.
      ENDIF.

Die Führungskraft kann nun ausschließlich den Zeitnachweis des Mitarbeiters sehen. Er selbst kann alle Formulare wie gewohnt einsehen.

[Nextcloud] Docker update 31.0.14 to 32.0.12

Since I’ve had so many problems with Nextcloud updates in the past, I’m now sticking with the oldest LTS version for as long as possible and won’t update until it reaches its end of life. This has really improved my Nextcloud experience. The update to major version 32 went smoothly. I only had to run two commands manually afterward.

docker exec --user www-data nextcloud-app php occ db:add-missing-indices
docker exec --user www-data nextcloud-app php occ maintenance:repair --include-expensive

[Firefox] Extensions I use in 2026

About seven years ago, I wrote down the Firefox extensions I was using. I kept the list updated for a while. Looking at the list now, many of these extensions are still relevant to me today. So here’s an updated version.

[Fiori] Meine Formulare: Zeitnachweis Spalten ausblenden

In der Meine Formulare App können über den BAdI HCMFAB_B_MYFORMS ganz einfach Spalten ausgeblendet werden. Dafür eine BAdI Implementierung anlegen und die Methode FILL_FORM_SPECIFIC_FIELDS ausprogrammieren. Zum Entfernen einer Spalte muss diese einfach aus dem CHANGING Parameter ct_form_specific_fields gelöscht werden.

Dabei einfach über den FORM_TYPE auf das entsprechende Formular filtern und die gewünschte Spalte entfernen:

DELETE ct_form_specific_fields WHERE form_type = 'SAP_INT_TIM_STM' AND field_id = 'DEVIATION'.  "Abweichung entfernen

[FI-TV] Overview: Travel Management & My Travel and Expenses for Business Traveler (F6190)

Collection of useful resources, when working with the Fiori App: My Travel and Expenses for Business Traveler (F6190)

SAP Travel Management for SAP S/4HANA

SAP Help Travel Management (FI-TV)
FI-TV transactions
Reports
Tables
Good to Know: SAP Travel Management for SAP S/4HANA

Related notes:
2719018 – S4TWL – SAP Travel Management in SAP S/4HANA Suite 2022

Packet: PTRA_ADDON

My Travel and Expenses for Business Traveler (F6190)

Fiori Reference Library My Travel and Expenses for Business Traveler
SAP Help My Travel and Expenses
App Extensibility: My Travel and Expenses

Related notes:
3267811 – Default Travel Expense Start and End Date and Time settings with Travel Management S/4Hana Fiori application
3591806 – Fiori Apps Travel Management Version 3: Concurrent Employment not available → Helpful Attachment ExtensionTravelProfileVH.pdf
2164524 – Customizing of authorization object P_TRAVL for restricting creating/changing of expense reports
2633200 – Expense reports with and without mandatory travel requests
3406341 – Attachments in S4Hana Fiori apps MTE V3 and MTR V3

Packet: PAOC_TRV_S4

Workflow

Workflow Scenarios in Travel Management (FI-TV)
Approving a Trip
Standard WF for Approving Trips: WS20000040
Travel Management Workflow FAQ, Common Issues, Known Issues

Related notes:
2576990 – Workflow: Status of a trip after reject or send back for correction → Explanation, why the default workflows are a bit “uncomplete”

[YouTube] VacuumTube

I’ve been using my Proxmox HTPC for six years now. All this time, I’ve been watching YouTube via YouTube Leanback in a full-screen Firefox Browser window. This is most of the time working fine, but from time to time you have to change the user-agent if something stops working or the video quality is poor for some reason.

And while I was once again searching for a new user-agent which improves the YouTube Leanback experience, I randomly stumbled on VacuumTube. This was something I always wanted/needed for my HTPC! Using Firefox was working fine, and I could also use all Firefox Extensions that exists for YouTube. But it also has drawbacks, like keyboard shortcuts were not working well (depending on the user-agent used) or, as mentioned already, the video quality is sometimes limited. Therefore, I gave VacuumTube a try and must say, since then it is working perfectly! With version v1.4.0 it even got SponsorBlock integrated! Right now, there is really no feature missing for me.

What I recently found is, that you can save videos to your Watch later playlist without starting to play the actual video. Simply long press the enter key on your keyboard and select “Save to Watch later” on the menu that appears. At least in Firefox, none of the user agents I tested were able to do that. Really cool!

Another handy feature is that you can turn the subtitles on and off using the ‘C’ key.

[Hardware] Firmware Update on my Samsung CHG90 (2017) Monitor

A few years ago, I bought a used Samsung CHG90 (LC49HG90DMUXEN) monitor on eBay. After I got the device, I learned that this model series had a hardware issue (see here or here). Fortunately, the problems only occurred every few weeks. Since some people on Reddit wrote that a firmware update had improved the situation, even though it was a hardware issue, I tried updating the firmware as well. There is a generic update guide from Samsung, but it is not detailed enough to actually do the update…

The required firmware update can be found on the Samsung website under support > user manuals and guide and by searching with the model code: LC49HG90DMUXEN

https://www.samsung.com/de/support/user-manuals-and-guide

Although the latest firmware version is from September 2020, I was able to perform an update because my monitor was still running version 1017.2. The hardest part was figuring out how to find the software updater in the monitor menu, but after a quick search in the documentation, I found the right section. The trick was to open the menu and hold down the arrow key for 5 seconds.

https://downloadcenter.samsung.com/content/UM/202103/20210305193233676/BN46-00699A-Eng.pdf

The update took only a few seconds and completed successfully. Let’s see if this improves anything…

[Android] Android Auto Launcher: Missing Apps

Recently I bought a new car and the previous owner replaced the standard board computer with a tablet running Android Auto. On my phone, I use the popular VLC player to listen to music and AntennaPod for podcasts. To my surprise, both apps did not appear in the Android Auto Launcher after I connected my phone. After a quick search on Perplexity, I found out that the most likely reason is that the apps weren’t installed via the Google Play Store. That made sense in my case, since both apps were installed via the F-Droid store.

It seems you can’t make just any app of your smartphone available for Android Auto, but at least apps that are generally supported by Android Auto can be made visible via the developer settings of Android Auto. To do this, open the Android Auto settings on your smartphone by searching for Android Auto in your phone’s settings. Scroll all the way down to the Information section.

Tap Version ten times and confirm “Allow development settings”. After that, you can find the developer options in the three-dot menu on the top right.

Here search for unknown sources (“Unbekannte Quellen” in german) and tick the checkbox.

After that, additional apps suddenly appeared in the Android Auto Launcher settings that I could add, including VLC Player and AntennaPod.