REPORT SAPLGRAP.
************************************************************************
* This program seds an audio alert to a specific user's frontend
* server. The program needs a pre-registered rfc program listening on
* every pc. The rfcexec can be started from the windows automatic
* startup like this:
* rfcexec -a100.100.100.100.rfcexec -ggatewayhostname -xsapgwXX
*                  ^                        ^
*            IP of the pc        IP of the gateway host
************************************************************************

* Get the terminal, that belongs to the user
start-of-selection.
  data: user value 'IMRE'.
  DATA: OPCODE TYPE X VALUE 2.
  DATA: BEGIN OF USR_TABL OCCURS 10.
          INCLUDE STRUCTURE UINFO.
  DATA: END OF USR_TABL.

  CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE
    ID 'TAB' FIELD USR_TABL-*SYS*.

* Get the corresponding IP address
  data: arp_command(30) value '/usr/sbin/arp',
        BEGIN OF TABL OCCURS 0,
        LINE(200),
        END OF TABL,
  ip_address(100).

  read table usr_tabl with key bname = 'IMRE'.
  if sy-subrc <> 0. write: 'There is no such a user logged in'.
  exit.endif.
  arp_command+14 = usr_tabl-term.
  CALL 'SYSTEM' ID 'COMMAND' FIELD arp_command
               ID 'TAB'     FIELD TABL-*SYS*.
  read table tabl index 1.
  shift tabl right up to ')'.
  shift tabl right deleting trailing ')'.
  shift tabl left up to '('.
  shift tabl left deleting leading '('.

* Get the systems that has been registered on the gateway.
  data: begin of connected_systems occurs 10.
          include structure GWY_SYSTEm.
  data: end of connected_systems.

  call function 'GWY_READ_CONNECTED_SYSTEMS'
  exporting
   gwhost = 'optima'
   gwserv = 'sapgw00'
  tables
   CONNECTED_SYSTEMS = CONNECTED_SYSTEMS.

* Get the registrated entry for the user's ip.
  data: host_string(40).

  loop at CONNECTED_SYSTEMS.
    if CONNECTED_SYSTEMS-ADDR1 = tabl and
       CONNECTED_SYSTEMS-SYSTYPE = 'REGISTER_TP'.
       host_string = CONNECTED_SYSTEMS-tpname.
      exit.
    endif.
  endloop.
  if host_string is initial. write: 'No registered RFC server'.
  exit.endif.

* Create a new destination in RFCDES
  tables: rfcdes.

  rfcdes-rfcdest = 'ZTTTT'.
  rfcdes-rfctype = 'T'.
  rfcdes-rfcoptions = 'H=%%RFCSERVER%%,N='.
  rfcdes-rfcoptions+19 = host_string.
  rfcdes-rfcoptions+59 = ','.
  condense rfcdes-rfcoptions NO-GAPS.
  modify rfcdes.
  if sy-subrc <> 0. write: 'Unsuccessfull modification'.
  exit. endif.
  commit work.

* Call the alert with the new destination
  DATA : BEGIN OF RET OCCURS 10,
          TEXT(80),
         END OF RET .
  data: command(256) value
        'sndrec32.exe /play /close c:/winnt/ringin.wav'.
  CALL FUNCTION 'RFC_REMOTE_EXEC' DESTINATION 'ZTTTT'
                                   EXPORTING
                                     COMMAND = COMMAND
                                   TABLES
                                     PIPEDATA = RET.

* Delete the rfc destination
  clear rfcdes.
  select single * from rfcdes where rfcdest = 'ZTTTT'.
  delete rfcdes.
  if sy-subrc <> 0. write: 'Unsuccessfull delete'.
  exit. endif.
  commit work.