nocin.eu

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

[HR] Infotype – add PBO or PAI logic

There are many ways to add custom logic when processing an Infotype. Here are just a few:

SMOD
PBAS0001
PBAS0002

ZXPADU01 – when an infotype is called
ZXPADU02 – when an action is performed on an infotype

https://regotz.jimdofree.com/abap/dynpro/infotypen-pai-pbo/

BAdI’s

  • HRPAD00INFTY (method IN_UPDATE) is called by the old infotype framework (PA30, SAP50UPR)
  • HRPAD00INFTYDB (method UPDATE_DB) is called in the decoupled infotype framework

BAdI: HRPAD00INFTY – Verbucher / Infotyp-Pflege

This image has an empty alt attribute; its file name is image-1.png
This image has an empty alt attribute; its file name is image-2.png
Interface: IF_EX_HRPAD00INFTY

BAdI: HRPAD00INFTYDB – HR: Stammdaten, Infotype DB Update Logik

“The BAdI is called, after the decoupled infotype framework writes the infotype data to the database. This is done during method FLUSH.”
Note: The Infotypes 2000-2999 are not decoupled yet! More here and here.

IF_EX_HRPAD00INFTYBL
IF_EX_HRPAD00INFTYDB

Megarac SP Gui / IPMI

In meinem NAS nutze ich seit vielen Jahren als Motherboard ein ASRock C2550D4I mit einer recht stromsparsamen on-Board CPU und einer BMC/IPMI Schnittstelle, welche Fernwartung über einen separaten LAN Port möglich macht.

BMC = Baseboard Management Controllers
IPMI = Intelligence Platform Management Interface

Bei einem BMC Update hat sich leider die WebGui verabschiedet und ich musste mir die Sache auf der Konsole anschauen. Dafür habe ich IPMITOOL installiert und verwendet. Dabei stellte sich heraus, dass lediglich die Netzwerkeinstellungen verloren gegangen sind.

Hier einige hilfreiche Befehle im Umgang mit dem IPMITOOL, welche mir geholfen haben. Über diesen Weg lässt sich ebenfalls das Passwort des Admin Users zurücksetzen.

# install 
sudo apt install ipmitool

# display sensor & network settings
sudo ipmitool sensor
sudo ipmitool lan print 1

#set network settings
sudo ipmitool lan set 1 ipsrc static
sudo ipmitool lan set 1 ipaddr 192.168.178.3
sudo ipmitool lan set 1 defgw ipaddr 192.168.178.1


# Reset password
# https://support.oneidentity.com/de-de/kb/261220/reset-the-bmc-ipmi-password
sudo ipmitool user list 1
ID  Name	     Callin  Link Auth	IPMI Msg   Channel Priv Limit
1                    false   false      true       ADMINISTRATOR
2   admin            true    true       true       ADMINISTRATOR
3                    true    false      false      NO ACCESS
4                    true    false      false      NO ACCESS
5                    true    false      false      NO ACCESS
6                    true    false      false      NO ACCESS
7                    true    false      false      NO ACCESS
8                    true    false      false      NO ACCESS
9                    true    false      false      NO ACCESS
10                   true    false      false      NO ACCESS
sudo ipmitool user set password 2
Password for user 2: 
Password for user 2: 
Set User Password command successful (user 2)


# IPMI reseten
# https://www.thomas-krenn.com/de/wiki/IPMI_BMC_reset_bei_IPMI_Problemen
sudo ipmitool mc reset cold
# or remote with
ipmitool -I lanplus -H ip_address -U admin -a bmc reset cold

# Wenn das nicht hilft, ggf. hier schauen:
# https://portal.nutanix.com/page/documents/kbs/details?targetId=kA00e000000CrKRCA0

[HR] Abrechnungsergebnisse lesen

Reports:

RPCALCD0 – Abrechnungsprogramm Deutschland (Name des HR-Formulars lässt sich über T-Code HRFORMS ermitteln)
RPCLSTRD – Anzeige des Clusters RD (Abrechnungsergebnisse Deutschland), Tcode: PC_PAYRESULT
H99_DISPLAY_PAYRESULT – Anzeigen von Abrechnungsergebnissen

Abrechnungsergebnistabelle:

Eine sehr schöne Übersicht über die Tabellen: https://l3consulting.de/die-tabellen-im-abrechnungscluster-des-sap-hcm-verstehen/
Die Tabelle RT enthält die Ergebnislohnarten der ausgewählten Abrechnungsperiode. (RT_ = komprimierte Darstellung)

Funktionsbausteine:

HR_GET_PAYROLL_RESULTS – Lesen von Abrechnungsergebnissen für Monats- und Jahresreports
PYXX_READ_PAYROLL_RESULT – Generischer Import von Abrechnungsergebnissen
HRCM_PAYROLL_RESULTS_GET – Abrechnungsdaten einer Person ermitteln

Hinweise zu Bausteinen: https://blog.hr-manager.de/2011/09/abap-abrechnungsergebnisse-lesen-per.html

Logische Datenbank:

Eine weitere Möglichkeit ist die Nutzung der logischen Datenbank PNP. Die Verwendung logischer Datenbanken ist jedoch obsolet (zumindest in anderen Modulen) und sollten daher eigentlich nicht mehr verwendet werden.

*&---------------------------------------------------------------------*
*& Report  ZGETPAYROLL
*& Eigenschaften: Selektionsbildvariante 900, HR-Reportklasse PY_DEF.
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZGETPAYROLL.

TABLES: PERNR, PYORGSCREEN, PYTIMESCREEN.

INFOTYPES: 0002.

NODES: PAYROLL TYPE PAYDE_RESULT.

DATA: WA_RT TYPE PC207.

START-OF-SELECTION.

GET PERNR.

RP_PROVIDE_FROM_LAST P0002 SPACE PN-BEGDA PN-ENDDA.

WRITE:/ PERNR-PERNR, P0002-VORNA, P0002-NACHN.

GET PAYROLL.

  LOOP AT PAYROLL-INTER-RT INTO WA_RT.
    WRITE:/ WA_RT-LGART, WA_RT-BETRG.
  ENDLOOP.

END-OF-SELECTION.

Oder in Kombination mit einem Fuba:

*&---------------------------------------------------------------------*
*& Report  ZGETPAYROLL
*& Eigenschaften: HR-Reportklasse __M00001.
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZGETPAYROLL.

TABLES: pernr.               "Necessary for get pernr

INFOTYPES: 0001,             "Organisatorische Zuord
           0002,             "Daten zur Person
           0006,             "Anschrift
           0057.             "Mitgliedschaften

DATA: l_payroll_result TYPE payat_result OCCURS 0 WITH HEADER LINE.


START-OF-SELECTION.

GET pernr.

rp_provide_from_last p0001 '' pn-begda pn-endda.

CALL FUNCTION 'HR_GET_PAYROLL_RESULTS'
    EXPORTING
      pernr                         = pernr-pernr
      permo                         = pn-permo
      pabrj                         = pn-pabrj
      pabrp                         = pn-pabrp
      actual                        = space         "X actual, ' ' retro-differences
      waers                         = 'EUR'
    TABLES
      result_tab                    = l_payroll_result
    EXCEPTIONS
      no_results                    = 0
      wrong_structure_of_result_tab = 2
      OTHERS                        = 4.
  IF sy-subrc NE 0.
    RETURN. "nächste Pernr
  ENDIF.

[ABAP] Download internal table as TXT or CSV

" ty_output and tt_output are just dummy types

DATA: l_output_line    TYPE ty_output,
      l_output_lines   TYPE tt_output,  
      l_csv_output     TYPE truxs_t_text_data,
      l_txt_output     TYPE TABLE OF string,

PARAMETERS: p_alv   RADIOBUTTON GROUP rb1 DEFAULT 'X' USER-COMMAND radio,
            p_csv   RADIOBUTTON GROUP rb1,
            p_flcsv TYPE rlgrap-filename DEFAULT 'c:\temp\file.csv',
            p_txt   RADIOBUTTON GROUP rb1,
            p_fltxt TYPE rlgrap-filename DEFAULT 'c:\temp\file.txt'.

" fill table l_output_lines with your data you want to export as txt or csv

  IF p_csv = abap_true.

    CALL FUNCTION 'SAP_CONVERT_TO_CSV_FORMAT'
      TABLES
        i_tab_sap_data       = l_output_lines
      CHANGING
        i_tab_converted_data = l_csv_output.

    TRY.
        cl_gui_frontend_services=>gui_download( EXPORTING filename = CONV #( p_flcsv )
                                                          filetype = 'ASC'
                                                CHANGING  data_tab = l_csv_output ).  
      CATCH cx_root INTO DATA(e_text).
        MESSAGE e_text->get_text( ) TYPE 'I'.
    ENDTRY.


  ELSEIF p_txt = abap_true.

    LOOP AT l_output_lines INTO l_output_line.
      CALL FUNCTION 'SO_STRUCT_TO_CHAR'
        EXPORTING
          ip_struct = l_output_line
        IMPORTING
          ep_string = l_string.
      APPEND l_string TO l_txt_output.
    ENDLOOP.

    TRY.
        cl_gui_frontend_services=>gui_download( EXPORTING filename = CONV #( p_fltxt )
                                                          filetype = 'ASC'
                                                CHANGING  data_tab = l_txt_output ). 
      CATCH cx_root INTO e_text.
        MESSAGE e_text->get_text( ) TYPE 'I'.
    ENDTRY.

  ENDIF.

[SAP] Install SAP Gui for Java 7.50 on Linux Mint 20

Download

First have a look at the Requirements and FAQ.
Find the download link in the SAP Support Portal here. You will need a valid S-User and download permissions.

If you are not able to download the installer via Support Portal, there is a little workaround. Both, the installer for SAP Gui for Windows and SAP Gui for Java are also delivered with the AS ABAP 752 SP04, developer edition:

“The actual download (in the form of several .rar files), along with more information is available from the SAP Community Trials and Downloads page. Search for “7.52 SP04″ for convenience.”

You will have to download all 11 .rar files (about 14,6GB). When unziping, you’ll find a folder called client (about 1,2GB) containing both installers.

Installation

Since SAP Gui 7.50 Rev 5, Oracles JDKs is not necessary to run SAP Gui for Java, instead you are able to use OpenJDK. Read more about it here. And since version 7.50 Rev 8 the installer includes SapMachine and OpenJFX. Read more about it here. In this case, you don’t even have to install OpenJKD and OpenJFX by yourself and don’t have specify the module path, because it comes containerized within the SAP Gui.
So better first check the version of your downloaded gui. I’ve got SAP Gui 750 rev 5 within the AS ABAP 752 SP04. So let’s install openJDK & openJFX.

sudo apt-get install openjdk-11-jre openjfx
java --version

Finally lets install the SAP Gui:

cd JavaGUI/
java -jar PlatinGUI750_5-80002496.JAR install

The important step during the installation of SAP Gui for Java Rev 5 is to define the option for the module path. The module path hast to point to the OpenJFX lib-path:

/usr/share/openjfx/lib

Now you should be able to run the SAP Gui on Linux Mint 20

Eclipse ADT

When using Eclipse with ADT in combination with SAP Gui for Java and receiving the following error:

"The system reqirements are not met.Could not find: javafx.propertiesin: /usr/lib/jvm/java-11-openjdk-amd64/libYour Java Virtual Machine seems not to support JavaFX, required to run the SAPGUI for Java 7.50 rev 5.Please make sure you provide a valid path to the Java FX modules during guiinstallation."

You also have to add the OpenJFX path to the eclipse.ini file. Read more about it here.

--module-path=/usr/share/openjfx/lib
--add-modules=ALL-MODULE-PATH

[Software] Save battery power on laptops

With TLP I was able to extend the battery life of my ThinkPad E595 significantly.

“TLP is a feature-rich command line utility for Linux, saving laptop battery power without the need to delve deeper into technical details.”
https://linrunner.de/tlp/

If you prefer tools with UI, check TLPUI: https://github.com/d4nj1/TLPUI
There is also a repository for it:

sudo add-apt-repository ppa:linuxuprising/apps
sudo apt update
sudo apt install tlpui

When using a ThinkPad, there are specific kernel modules that can be installed.
https://linrunner.de/tlp/installation/ubuntu.html#thinkpads-only

Check with tlp-stat -b

Install with:

sudo apt install acpi-call-dkms tp-smapi-dkms

Another tool to monitor your power usage is PowerTOP:

“PowerTOP is a Linux tool to diagnose issues with power consumption and power management.”
https://01.org/powertop/

[Proxmox] Installing Cockpit with ZFS Manager extension

The Cockpit ZFS Manager requires Cockpit version 201 or above. In the Debian Buster repository there’s only cockpit version 188, so you have to use the buster backports repository, which contains cockpit version 223.

# install cockpit
echo "deb http://deb.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/buster-backport.list
apt update
apt-get -t buster-backports install cockpit
# add ZFS manager
git clone https://github.com/optimans/cockpit-zfs-manager.git
cp -r cockpit-zfs-manager/zfs /usr/share/cockpit
# start cockpit
systemctl start cockpit.service
systemctl enable cockpit.service
systemctl status cockpit.service

Now browse to https://ip-address-of-machine:9090 and login.