ABAP - Ejecutar script Unix desde ABAP

 
Vista:

Ejecutar script Unix desde ABAP

Publicado por sergi (2 intervenciones) el 04/09/2002 11:45:10
Necesito ejecutar un script de UNIX desde un programa ABAP.
El script me permitirá pasar un fichero desde el servidor de aplicación al servidor de presentación.

Cómo pueod hacerlo.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Ejecutar script Unix desde ABAP

Publicado por Alejandro (226 intervenciones) el 11/04/2023 18:09:39
Para ejecutar un script de Unix desde un programa ABAP, puedes utilizar la función de sistema 'SXPG_CALL_SYSTEM' que te permitirá ejecutar comandos de sistema externos.

Para hacerlo, sigue los siguientes pasos:

1. Define una variable de tipo 'XSTRING' que contendrá el contenido del script de Unix. Puedes cargar el contenido del script en esta variable utilizando la función 'SCMS_STRING_TO_XSTRING'.

2. Define una variable de tipo 'STRING' que contendrá el nombre del script de Unix.

3. Llama a la función 'SXPG_CALL_SYSTEM' con los siguientes parámetros:

3.1 'COMMANDNAME': aquí debes especificar el comando que deseas ejecutar en Unix, en este caso sería el nombre del script.
3.2 'EXECUTING_USER': aquí debes especificar el usuario que ejecutará el script en Unix.
3.3 'ADDITIONAL_PARAMETERS': aquí puedes agregar cualquier otro parámetro que necesites para el script.
3.4 'TABLES': aquí puedes especificar cualquier tabla que necesites para el script.
3.5 'STD_OUTPUT': aquí puedes especificar la salida estándar que generará el script en Unix.
3.6 'STD_ERROR': aquí puedes especificar la salida de error que generará el script en Unix.

Te dejo un ejemplo de cómo podría ser el código ABAP para ejecutar un script de Unix:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
DATA: lv_script_name TYPE string,
      lx_script_content TYPE xstring,
      lt_parameters     TYPE STANDARD TABLE OF sxsparam.
 
lv_script_name = '/usr/local/scripts/my_script.sh'.
 
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING
    text   = `#!/bin/bash
              echo "Hello World!" > /tmp/hello.txt`
  IMPORTING
    buffer = lx_script_content.
 
lt_parameters = VALUE #( ( `P1=/tmp/hello.txt` ) ).
 
CALL FUNCTION 'SXPG_CALL_SYSTEM'
  EXPORTING
    commandname        = lv_script_name
    exec_mode          = 'A'
    executing_user     = 'my_unix_user'
  TABLES
    parameters         = lt_parameters
    exec_protocol      = DATA(lt_exec_protocol)
    shell_in           = lx_script_content
  EXCEPTIONS
    no_permission      = 1
    command_not_found  = 2
    parameters_too_long = 3
    security_risk      = 4
    wrong_check_call   = 5
    program_start_error = 6
    program_termination_error = 7
    x_error            = 8
    parameter_expected = 9
    too_many_parameters = 10
    illegal_command    = 11
    wrong_asynchronous_input = 12
    cant_enq_tbtco      = 13
    jobcount_generation_error = 14
    OTHERS             = 15.
 
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Este ejemplo asume que el script de Unix se llama 'my_script.sh' y que se encuentra en la ruta '/usr/local/scripts/'. Además, el script simplemente imprime "Hello World!" en un archivo llamado '/tmp/hello.txt'. También se pasa un parámetro adicional al script ('P1=/tmp/hello.txt') que indica el archivo de salida.

Espero que esto te ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar