Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2019-04-03
Intermedio 20 minutos.
Desarrollo ABAP, Intermedio, Tutorial
Aprenda a crear ABAP Daemons e interactuar con ellos mediante mensajes PCP.
Aprenderás
Prerrequisitos
ABAP Daemon son proporcionados por ABAP Daemon Framework (ADF). Se utilizan para
gestionar eventos de forma fiable al ejecutarse en sesiones con una vida útil ilimitada. Los
programas ABAP pueden comunicarse con los demonios enviándoles mensajes mediante los
canales de mensajería ABAP y el protocolo de canal push del tipo de mensaje.
Puede familiarizarse más con ABAP Daemon Framework leyendo la documentación oficial .
Como puede ver, hay un error en la línea 1 ya que aún no se han implementado los métodos
abstractos necesarios. Haga clic en la bombilla junto al número de línea y seleccione Agregar
9 métodos no implementados para resolver esto:
Hecho
Reemplace su ON_ACCEPT método con el siguiente código. Acepta todas las solicitudes de inicio
de su propia clase y rechaza todas las solicitudes de cualquier otro programa. Esto se logra
comprobando el programa de llamada que inició el inicio.
abap
Copiar
METHOD if_abap_daemon_extension~on_accept.
TRY.
DATA lv_program_name TYPE program.
lv_program_name = cl_oo_classname_service=>get_classpool_name(
'ZCL_TUTORIAL_SIMPLE_DAEMON' ).
Hecho
Puede incluir un mensaje de PCP que contenga parámetros de inicio arbitrarios a los que se
puede acceder en el ON_START método.
configurará un temporizador para mostrar un mensaje emergente cada vez que se agote el
tiempo de espera. Se utilizará un contador para detener el temporizador después de cinco
mensajes.
Al principio, debe crear algunas variables de miembros privados para almacenar los datos
necesarios. Agregue estas líneas al PRIVATE SECTION de su clase:
ABAP
Copiar
DATA: mv_timeout TYPE i,
mo_timer TYPE REF TO if_abap_timer_manager,
mv_counter TYPE i.
En el ON_START método, ahora puede recuperar el valor de tiempo de espera de PCP e iniciar el
abap
Copiar
METHOD if_abap_daemon_extension~on_start.
TRY.
" retrieve timeout from PCP start parameters
mv_timeout = i_context->get_start_parameter( )->get_field( 'timeout' ).
Hecho
Paso 4: implementar el método ON_TIMEOUT
Mientras su Daemon ABAP se ejecuta en segundo plano, el ON_TIMEOUT método se activará
ABAP
Copiar
INTERFACES if_abap_timer_handler.
veces:
ABAP
Copiar
METHOD if_abap_timer_handler~on_timeout.
" increment the loop counter
ADD 1 TO mv_counter.
Hecho
Paso 5: implementar el método ON_MESSAGE
También puede enviar mensajes PCP a su demonio mientras se ejecuta continuamente en
segundo plano. El ON_MESSAGE método se llamará cada vez que el daemon reciba un mensaje de
PCP.
En este tutorial, enviará un texto sin formato al demonio, que luego se mostrará en un mensaje
emergente. Como ejemplo de la vida real, podría imaginarse al ABAP Daemon recibiendo datos
en vivo de un sensor y enviando una notificación bajo ciertas condiciones.
abap
Copiar
METHOD if_abap_daemon_extension~on_message.
TRY.
" get text from PCP message
DATA(lv_text) = i_message->get_text( ).
Hecho
Paso 6: Implementar el método estático START
Dado que el concepto de seguridad de ABAP Daemons se basa en la “autorización del código
fuente” (ver documentación), es decir, sólo el programa (por ejemplo, una clase) que inicia el
daemon tiene derecho a enviar mensajes al daemon o detenerlo. Por razones de simplicidad,
usamos la clase daemon para implementar las funcionalidades de inicio, parada y envío para
que el daemon acceda a ellas desde diferentes programas.
Este simple demonio ABAP se iniciará mediante un método estático. Por lo tanto, necesita
crear un nuevo método START en su clase demonio con dos parámetros de importación:
Para hacerlo, pegue el siguiente código en la PUBLIC SECTION definición de la clase:
ABAP
Copiar
CLASS-METHODS start
IMPORTING
iv_daemon_name TYPE string
iv_timeout TYPE i
RAISING
cx_abap_daemon_error
cx_ac_message_type_pcp_error.
Cree una instancia del ABAP Daemon usando ABAP Daemon Manager. Su método
estático CL_ABAP_DAEMON_CLIENT_MANAGER=>START requiere el nombre y la prioridad del demonio
como parámetros. Además, puede pasar los parámetros de inicio como un mensaje de PCP.
ABAP
Copiar
METHOD start.
" set ABAP Daemon start parameters
DATA(lo_pcp) = cl_ac_message_type_pcp=>create( ).
lo_pcp->set_field( i_name = 'timeout' i_value = CONV #( iv_timeout ) ).
" start the daemon application using the ABAP Daemon Manager
cl_abap_daemon_client_manager=>start(
i_class_name = 'ZCL_TUTORIAL_SIMPLE_DAEMON'
i_name = CONV #( iv_daemon_name )
i_priority = cl_abap_daemon_client_manager=>co_session_priority_low
i_parameter = lo_pcp ).
ENDMETHOD.
Hecho
Paso 7: Implementar el método estático
Implemente un método estático SEND que se utilizará para enviar texto al demonio y, por lo
tanto, activar su ON_MESSAGE método. El método necesitará los siguientes parámetros de
importación:
ABAP
Copiar
CLASS-METHODS send
IMPORTING
iv_daemon_name TYPE string
iv_text TYPE string
RAISING
cx_abap_daemon_error
cx_ac_message_type_pcp_error.
Para enviar mensajes de PCP a su daemon, primero debe recuperar una lista de todas las
instancias de ABAP Daemon de su clase en ejecución ZCL_TUTORIAL_SIMPLE_DAEMON . Luego,
puede comparar el nombre de cada instancia IV_DAEMON_NAME y enviar el mensaje del PCP en
consecuencia.
ABAP
Copiar
METHOD send.
" retrieve the list of ABAP Daemon instances
DATA(lt_ad_info) = cl_abap_daemon_client_manager=>get_daemon_info( i_class_name =
'ZCL_TUTORIAL_SIMPLE_DAEMON').
" create PCP message with text
DATA(lo_pcp) = cl_ac_message_type_pcp=>create( ).
lo_pcp->set_text( iv_text ).
abap
Copiar
zcl_tutorial_simple_daemon=>start( iv_daemon_name = 'simple_daemon' iv_timeout = 10000 ).
Hecho
Paso 9: enviar mensajes al demonio ABAP
Además del tiempo de espera, puede activar un mensaje emergente manualmente llamando
al SEND método estático. Cree otro programa ABAP Z_TUTORIAL_SIMPLE_DAEMON_SEND con el
siguiente contenido:
abap
Copiar
DATA(lv_text) = `This is a simple ABAP Daemon message sent via PCP.`.
zcl_tutorial_simple_daemon=>send( iv_daemon_name = 'simple_daemon' iv_text = lv_text ).
Siéntase libre de cambiar el texto del mensaje en la línea 1. Después de activar y ejecutar el
programa, debería ver un mensaje emergente similar a este:
Hecho
Paso 10: Detenga el demonio ABAP
Puede supervisar todos los Daemons ABAP en ejecución mediante transacciones SMDAEMON en
SAPGUI. Allí puede ver su estado, verificar si hay errores y también reiniciarlos y terminarlos.
Alternativamente, también puede crear un STOP método estático . Por lo tanto, agregue esto a
la PUBLIC SECTION definición de su clase:
ABAP
Copiar
CLASS-METHODS stop
IMPORTING
iv_daemon_name TYPE string
RAISING
cx_abap_daemon_error.
ABAP
Copiar
METHOD stop.
" retrieve the list of ABAP Daemon instances
DATA(lt_ad_info) = cl_abap_daemon_client_manager=>get_daemon_info( i_class_name =
'ZCL_TUTORIAL_SIMPLE_DAEMON').
ENDLOOP.
ENDMETHOD.
ABAP
Copiar
zcl_tutorial_simple_daemon=>stop( iv_daemon_name = 'simple_daemon' ).
Para obtener más información sobre ABAP Daemons, consulte la documentación de ABAP
Daemons .
Hecho
ABAP
Copiar
zcl_tutorial_simple_daemon=>start( iv_daemon_name =
'does_the_daemon_start_up_if_you_use_this_as_your_daemon_name' iv_timeout = -10000 ).