Error Handling in RFC Server Programs

Causes

There are different causes for ABAP errors, depending on the program. Causes include:

Solution

Check the following:

  1. Check all the entries made in transaction SM59. The destination used must be entered with category T. Enter a complete path name, if possible, for the program to be started. Make sure to save the destination.
  2. Configuration on operating system level
    1. The host name specification in the destination
      1. A name is entered into ‘host name’ (radio button in Release 3.0 is selected ‘explicitely’) or a non-standard gateway is stored (in gateway options). In the latter case, the program is started by the standard gateway program of the system or by the gateway ( gwrd ) specified explicitely via ‘remote shell’.
      2. Make sure that the entered computer can be addressed by the computer of gateway process. Enter the following command on this computer:

        /etc/ping <host name> or ping <host name>

        To start a program with ‘remote shell’ on another computer, it is necessary that the user-ID of the gateway process exists on the target system and that the HOME directory of this user contains a file. rhosts in the target system. The name of the calling computer must be stored in this file. To test this, log in on the computer of the gateway process under the user-ID of this process and call the command:

        remsh <host name> <program name>

        In this case, you have to enter the same as in transaction SM59 for <host name> and <program name> .

        (If an RFC server program is called without parameters, the call RfcAccept returns an error code ( RFC_HANDLE_NULL ) in any case and the program should terminate immediately.)

      3. No entry is made in ‘host name’ (or in 3.0: Server is selected)

      In this case, the program is started from the SAP application server.

      Make sure that the program can be addressed from the SAP application server.

      Make sure that the SAP application server has the authorization for starting the program.

      To do this, log on under the user-ID of the SAP application server (generally c11adm ). Go into the ‘work’ directory of the application server ( /usr/sap/.../D.../work ), if possible, and start the RFC server program manually from there.

      (If an RFC server program is called without parameters, the call RfcAccept returns an error code ( RFC_HANDLE_NULL ) in any case and the program should terminate immediately.)

      In Release 3.0, you can also select ‘User’. In this case, the program is started by ‘Sapgui’, that is, under the user-ID and the environment of the user.

      Make sure that the program can be addressed by sapgui/saptemu .

      Make sure that sapgui has the authorization to start the program.

      To do this, call the RFC server program.

    2. Problems in the RFC server program itself

To pick up stderr output of the RFC server program, you can enter a control program instead of the actual server program into the destination which in turn starts the actual server program with the same command line and which in this case redirects the standard output of the program into a file.

RFC server program is /xxx/xxxx.

However, the C script is called (do not forget the specification of the shell in the first line):

#!/bin/csh

date >> /tmp/rfclog

/xxx/xxxx $* >>& /tmp/rfclog

echo $status >>& /tmp/rfclog

Display the log file /tmp/rfclog for further error analysis.

You can activate the trace flag in the destination (remember to save). A file dev_rfc is then written by the RFC server program in its current directory containing all data received, operations and errors that occurred.

Debugging an RFC server program

Using Registering Server Programs with the SAP Gateway, you can start your RFC server program with a C debugger, such as dbx, xdb or code view, etc.

If your RFC server program will be started by an SAP component (i.e. SAPGUI, SAP Gateway, Application Server), you can do as follows:

  1. Enter a program for your destination in SM59 which simply writes the transferred command line to a defined file:
  2. Example (C-Shell)

    #!/bin/csh

    echo $* > /tmp/rfc

  3. Call the C-debugger with your RFC server program. For example, xdb <program name>
  4. Set a breakpoint after the RfcAccept call.
  5. Start the calling ABAP program. The control program writes its command line to its output file ( /tmp/rfc in this example).
  6. Read this file and start the RFC server program loaded into the debugger immediately using the same command line.