[SAP] IDOC-Verarbeitung

Transaktionen

BD87 (Statusmonitor für ALE-Nachrichten)

  • „IDocs im Eingang“ selektieren -> Button „Verarbeiten“

WE02 / WE05 (IDoc-Listen)

  • Selektion der IDocs
  • IDoc im ALV doppelklicken
  • Datensätz aufklappen
  • Doppelklick auf A4-Seiten-Icon vor dem Segment
  • Menü -> Datensatz -> Anzeigen -> Ändern
  • Einträge Ändern
  • Button „Speichern“ (Blaue Diskette)

WE07 (IDoc Statistik)
WE11 (Löschen von IDocs)
WE19 (IDoc-Testwerkzeug (Simulation, Test und Verbuchung))

  • Erzeugt eine Kopie eines existierenden IDocs -> ggf. Gefahr von Doppelbuchungen im System

WE20 (Partnervereinbarungen)
WE21 (Portbeschreibung)
WLF_IDOC (IDoc Verarbeitung)

Tabellen

EDIDC (Kontrollsatz (IDoc))
EDIDS (Statussatz (IDoc))
EDID4 (IDoc-Datensätze ab 4.0)
EDISDEF (IDoc Entwicklung : IDoc Segmentdefinitionen)
EDSAPPL (EDI: IDoc-Segment Anwendungsstruktur)
EDIMSGT (Kurzbeschreibung der SAP Nachrichtentypen)
EDIPORT (Sammeltabelle für alle Porttypen zur IDoc-Verarbeitung)

Links

[SAP] ABAP CDS Views und Verwendung von Annotations

Pakete

SABAPDEMOS (Demonstrationen der ABAP-Dokumentation (nicht produktiv))

  • Core Data Services

SDUT (DD: Analyse-Reparatur Utilities)

Transaktionen

SDDLAR (CDS Analyse- und Reparaturwerkzeuge)

  • Anzeigen und Reparieren von DDL-Strukturen

SACM (Access Control Management)
SE63 (Übersetzungseditor)

  • Übersetzung der Endusertexte (Annotations) zum View

Fiori Apps

Query Browser (Query Browser)
View Browser (View Browser)

Reports

DEMO_CDS_* (Demo-Reports für Arbeit mit CDS-Views)

Klassen

CL_DD_DDL_ANNOTATION_SERVICE (Metadaten-API für Annotationen)
CL_DD_DDL_ANALYZE (DDL Source Analyse)

Tabellen

DDLDEPENDENCY (DD: Objekte in einer Ddl-Source)

  • OBJECTNAME für CDS entities (STOB) in Spalte OBJECTTYPE
  • OBJECTNAME für generierte DB Views (VIEW) in Spalte OBJECTTYPE

ABDOC_CDS_ANNOS (Bedeutung der SAP-Annotationen in ABAP-CDS)
CDSVIEWANNOPOS (CDS View Header Annotations)
CDS_FIELD_ANNOTATION (Field level Annotation of a CDS view)
DDDDLSRCT (DDL Source Texts)

Views

RSODPABAPCDSVIEW (Mapping DDIC ABAP Object Name to CDS Object Name)

Coding

* Liefert alle Annotationen (Entität, Element, Parameter )
cl_dd_ddl_annotation_service=>get_annos( EXPORTING
                                           entityname    = 'DEMO_CDS_MDE'
                                         IMPORTING
                                           element_annos = DATA(it_element_annos) ).

cl_demo_output=>display( it_element_annos ).

* Liefert den Wert der “@EndUserText.label”-Entitätannotation
DATA(lv_label) = cl_dd_ddl_annotation_service=>get_label_4_element( entityname  = 'DEMO_CDS_VIEW_ANNOTATIONS'
                                                                    elementname = 'SOME_FIELD'
                                                                    language    = 'D' ).

WRITE: / lv_label.

Links

[SAP] Adobe Forms Administration

Transaktionen

SFP (Form Builder)
SM59 (RFC Destinations (Display/Edit))

  1. HTTP-Verbindungen zu ext. Server
  2. Doppelklick auf ADS
  3. Button „Verbindungstest“

SICF (Pflege des HTTP-Service-Baums)

  1. Hierarchietyp SERVICE
  2. Button „Ausführen“
  3. default_host/sap/bc/fp und default_host/sap/bc/fpads

Reports

FP_CHECK_DESTINATION_SERVICE (Testprogramm, ob der Destination-Service für Templates funktioniert)

  1. This report checks the configuration of the destination service and the ICF service sap/bc/fp

FP_CHECK_HTTP_DATA_TRANSFER (Test Program for HTTP Communication)

  1. This report checks the configuration of the destination service and the ICF service sap/bc/fpads
  2. You only need this service, if AS ABAP and AS Java (with ADS) are installed in different systems

FP_TEST_00 (Form Processing – Zentrales Testprogramm)
FP_TEST_01 (Form Processing – Zentrales Testprogramm mit Archivierung)
FP_PDF_TEST_00 (Versionsinformation (nur zur Analyse))
FP_PDF_TEST_01 (PDF Erzeugung)

Links

[Raspberry Pi] ZigBee: zigbee2mqtt einrichten, mosquitto broker installieren

zigbee2mqtt installieren

USB-Gerät an Raspberry anstecken und danach den Bezeichner ((z.B.: /dev/ttyUSB0) für die weitere Einrichtung ermitteln

ls -l /dev/serial/by-id/

Systemupdate durchführen

sudo apt-get update && sudo apt-get upgrade

NodeJS installieren

sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs git make g++ gcc

Yarn installieren

curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get install yarn -y

zigbee2mqtt von git clonen und Verzeichnisberechtigungen für User „pi“ setzen

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt

zigbee2mqtt Konfiguration editieren

nano /opt/zigbee2mqtt/data/configuration.yaml

Konfiguration für lokale Ausführung des mqtt-Servers (mosquitto) und zigbee2mqtt (Frontend läuft auf localhost, port 8080 ohne Username und Passwort) – Einrückungen beachten!

homeassistant: false
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://localhost
serial:
  port: /dev/ttyUSB0
advanced:
  network_key: GENERATE
  ikea_ota_use_test_url: true
  legacy_api: false
  log_level: debug
  homeassistant_legacy_entity_attributes: false
  legacy_availability_payload: false
frontend:
  port: 8080
device_options:
  legacy: false

Installation von zigbee2mqtt starten

cd /opt/zigbee2mqtt
npm ci

zigbee2mqtt als Service einrichten

sudo nano /etc/systemd/system/zigbee2mqtt.service

Dateiinhalt der Datei zigbee2mqtt.service

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
# Or use StandardOutput=null if you don't want Zigbee2MQTT messages filling syslog, for more options see systemd.exec(5)
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

Autostart einrichten

sudo systemctl enable zigbee2mqtt.service

reboot durchführen

reboot

Sytemdienst adminstrieren

# zigbee2mqtt starten
sudo systemctl start zigbee2mqtt

# zigbee2mqtt stoppen
sudo systemctl stop zigbee2mqtt

# zigbee2mqtt neu starten
sudo systemctl restart zigbee2mqtt

# Log anschauen
sudo journalctl -f -u zigbee2mqtt

# Manuell starten
# Achtung: wenn zigbee2mqtt schon als Dienst eingerichtet ist und läuft führt das manuelle Ausführen zu einem Fehler
# Error: Error while opening serialport 'Error: Error Resource temporarily unavailable Cannot lock port'
cd /opt/zigbee2mqtt
npm start

mosquitto broker einrichten

mosquitto installieren

sudo apt update && sudo apt upgrade
sudo apt install -y mosquitto mosquitto-clients

mosquitto service einrichten

sudo systemctl enable mosquitto.service

broker testen, Versionsnummer ausgeben

mosquitto -v

mosquitto Konfiguration einrichten

sudo nano /etc/mosquitto/mosquitto.conf

Inhalt der Konfigurationsdatei mosquitto.conf (Reihenfolge beachten!)

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /run/mosquitto/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

listener 1883
allow_anonymous true

zigbee2mqtt Frontend starten

mosquitto Konfiguration einrichten

http://localhost:8080/

neue Zigbee-Geräte anlernen

  • Button „Anlernen aktivieren (alle)“

Links

[ABAP] Leistungstammsatz anlegen

DATA: lv_service  TYPE bapisrv_asmd.
DATA: lv_servicex TYPE bapisrv_asmdx.
DATA: it_bapiret2 TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.

lv_service-service           = '1234567890'. " Leistungsnummer
lv_service-matl_group        = '10000000'.   " Warengruppe
lv_service-base_uom          = 'ST'.         " Basismengeneinheit
lv_service-serv_cat          = 'SERV'.       " Leistungstyp
lv_service-val_class         = '1000'.       " Bewertungsklasse
lv_service-master_langu      = sy-langu.     " Sprache
lv_service-master_langu_iso  = cl_i18n_languages=>sap1_to_sap2( im_lang_sap1 = lv_service-master_langu ).

lv_servicex-service          = lv_service-service.
lv_servicex-matl_group       = abap_true.
lv_servicex-base_uom         = abap_true.
lv_servicex-serv_cat         = abap_true.
lv_servicex-val_class        = abap_true.
lv_servicex-master_langu     = abap_true.
lv_servicex-master_langu_iso = abap_true.

DATA it_shorttext TYPE STANDARD TABLE OF bapisrv_asmdt WITH DEFAULT KEY.

it_shorttext = VALUE #( ( language     = lv_service-master_langu
                          language_iso = lv_service-master_langu_iso
                          short_text   = 'Kurztext'
                          change_id    = 'I' ) ).

DATA(it_longtext) = VALUE srv_sm_text_tty( ( language     = sy-langu
                                             language_iso = cl_i18n_languages=>sap1_to_sap2( im_lang_sap1 = sy-langu )
                                             format       = '/'
                                             line         = 'Langtext'
                                             change_id    = 'I' ) ).

CALL FUNCTION 'BAPI_SERVICE_CREATE'
  EXPORTING
    im_service_data     = lv_service
    im_service_datax    = lv_servicex
    testrun             = ''
  TABLES
    return              = it_bapiret2
    service_description = it_shorttext
    service_long_texts  = it_longtext.

TRY.
    IF lines( it_bapiret2 ) > 0.
      IF it_bapiret2[ 1 ]-type CA 'EAX'.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
      ENDIF.
    ENDIF.
  CATCH cx_sy_itab_line_not_found.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDTRY.

cl_demo_output=>write_data( lv_service ).
cl_demo_output=>write_data( lv_servicex ).
cl_demo_output=>write_data( it_shorttext ).
cl_demo_output=>write_data( it_longtext ).
cl_demo_output=>write_data( it_bapiret2 ).

* HTML-Code vom Demo-Output holen
DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Leistungsstammsatz'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
WRITE: space.

[ABAP] Leistungstammsatz lesen

PARAMETERS: p_srv_nr TYPE asmd-asnum. "bapisrvpar-service.

START-OF-SELECTION.
  DATA: lv_service_info TYPE bapisrv.
  DATA: it_servicetextlines TYPE STANDARD TABLE OF bapisrvtxt WITH DEFAULT KEY.
  DATA: it_bapiret2 TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.

  CALL FUNCTION 'BAPI_SERVICE_GET_DETAIL'
    EXPORTING
      servicenumber      = p_srv_nr
    IMPORTING
      servicegeneraldata = lv_service_info
    TABLES
      servicetextlines   = it_servicetextlines
      return             = it_bapiret2.

  cl_demo_output=>write_data( p_srv_nr ).
  cl_demo_output=>write_data( lv_service_info ).
  cl_demo_output=>write_data( it_servicetextlines ).
  cl_demo_output=>write_data( it_bapiret2 ).

* HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING
                                title        = 'Leistungsstammsatz'
                                html_string  = lv_html
                                container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.