FQDN ermitteln

mit folgendem Snippet ist es möglich den FQDN eines SAP-Systems zur Laufzeit zu ermitteln. Diese Information ist für diejenigen wichtig, die BSPs o.ä. dynamisch rufen wollen. Sollte das SAP nicht mit FQDN parametrisiert sein, wird statt dessen die IP-Adresse verwendet.

Am Ende steht in der Variablen GV_URL entweder FQDN + PORT oder IP + PORT.

TYPES: BEGIN OF kernel_version,
       key    TYPE c LENGTH 21,
       data   TYPE c LENGTH 69,
     END OF   kernel_version.
*– global object declaration
DATA:
  gr_client         TYPE REF TO if_http_client,
  gt_html           TYPE w3htmltab,
  gv_url            TYPE string,
  gt_server         TYPE STANDARD TABLE OF msxxlist,
  gs_server         TYPE msxxlist,
  gv_hostname       TYPE string,
  gv_portnumber     TYPE string,
  gv_val            TYPE slic_sysid,
  gt_kernel_version TYPE STANDARD TABLE OF kernel_version,
  gw_kernel_version TYPE kernel_version.

INITIALIZATION.
*— get all servers
  CALL FUNCTION ‘TH_SERVER_LIST’
   TABLES
     list                 = gt_server
   EXCEPTIONS
     no_server_list       = 1
     OTHERS               = 2
            .
  LOOP AT gt_server[] INTO gs_server.
*    — read http data —————
    CALL FUNCTION ‘TH_GET_VIRT_HOST_DATA’
      DESTINATION gs_server-name
      EXPORTING
        protocol       = 1
      IMPORTING
        hostname       = gv_hostname
        port           = gv_portnumber
      EXCEPTIONS
        not_found      = 1
        internal_error = 2
        OTHERS         = 3.
    CASE sy-subrc.
      WHEN 0.
*          — read SYSID ————-
        CALL FUNCTION ‘SLIC_GET_SYSTEM_ID’
          IMPORTING
            systemid = gv_val.
*          — read all core data —–
        CALL ‘SAPCORE’ ID ‘ID’ FIELD ‘VERSION’
                       ID ‘TABLE’ FIELD gt_kernel_version[].
*          — read ip-address ——–
        READ TABLE gt_kernel_version[] INTO gw_kernel_version
              WITH KEY key = ‘IP address’.
        IF gv_hostname CS ‘.’.
*          — hostname is FQDN ——-
          gv_url = gv_hostname.
          CONCATENATE ‘http://’ gv_url ‘:’ gv_portnumber INTO gv_url.
        ELSE.
*          — hostname is not FQDN —
          gv_url = gw_kernel_version-data.
          CONCATENATE ‘http://’ gv_url ‘:’ gv_portnumber INTO gv_url.
        ENDIF.
      WHEN 1.
*        raise NOT_AUTHORIZED.
      WHEN 2.
*        RAISE no_valid_date.
      WHEN 3.
      WHEN 4.
    ENDCASE.       ” sy-subrc
  ENDLOOP.         ” AT gt_server[]

Enno Wulff