
cl_amc_channel_manager=>get_consumer_session_id( ).
cl_amc_channel_manager=>create_message_consumer(
i_application_id = 'ZTEST'
i_channel_id = '/prot'
i_channel_extension_id = CONV #( id )
)->start_message_delivery( i_receiver = mo_current ).
DATA(amc_producer) = CAST if_amc_message_producer_text(
cl_amc_channel_manager=>create_message_producer(
i_application_id = 'ZTEST'
i_channel_id = '/prot'
i_channel_extension_id = CONV #( id ) ) ).
amc_producer->send( i_message = 'This is an important message!' ).
REPORT zzenno184.
PARAMETERS batch TYPE c LENGTH 1 NO-DISPLAY.
PARAMETERS id TYPE numc10 DEFAULT sy-uzeit.
CLASS amc DEFINITION.
PUBLIC SECTION.
INTERFACES if_amc_message_receiver_text.
CLASS-METHODS listen IMPORTING id TYPE numc10.
CLASS-METHODS create_listener_job IMPORTING id TYPE numc10.
DATA end TYPE boolean_flg.
PRIVATE SECTION.
DATA mv_log_handle TYPE balloghndl.
DATA mv_end TYPE boolean_flg.
ENDCLASS.
CLASS amc IMPLEMENTATION.
METHOD if_amc_message_receiver_text~receive.
DATA ls_msg TYPE bal_s_msg.
MESSAGE i_message TYPE 'S'.
IF mv_log_handle IS INITIAL.
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = VALUE bal_s_log( extnumber = id object = 'BCT1' )
IMPORTING
e_log_handle = mv_log_handle
EXCEPTIONS
OTHERS = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
IF i_message = 'end'.
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_save_all = ' '
i_t_log_handle = VALUE bal_t_logh( ( mv_log_handle ) )
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE |error SAVE_LOG { sy-subrc }| TYPE 'S'.
ENDIF.
mv_end = abap_true.
RETURN.
ENDIF.
ls_msg-msgno = '000'.
ls_msg-msgid = 'OO'.
ls_msg-msgty = 'I'.
ls_msg-msgv1 = i_message.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = mv_log_handle
i_s_msg = ls_msg
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc > 0.
MESSAGE |error MSG_ADD { sy-subrc }| TYPE 'S'.
ENDIF.
ENDMETHOD.
METHOD create_listener_job.
DATA jobcount TYPE tbtcjob-jobcount.
DATA ret TYPE i.
DATA jobname TYPE tbtcjob-jobname.
DATA job_was_released TYPE btch0000-char1.
jobname = |PARAPROT_ID_{ id }|.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = jobname
IMPORTING
jobcount = jobcount
CHANGING
ret = ret
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc <> 0 OR ret <> 0.
WRITE: / 'JOB_OPEN failed', sy-subrc.
RETURN.
ENDIF.
SUBMIT zzenno184
WITH id = id
WITH batch = abap_true
VIA JOB jobname NUMBER jobcount
AND RETURN.
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = jobcount
jobname = jobname
strtimmed = 'X'
IMPORTING
job_was_released = job_was_released
CHANGING
ret = ret
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
IF sy-subrc <> 0.
WRITE: / 'JOB_CLOSE failed', sy-subrc.
RETURN.
ENDIF.
"let the job some time to start...
WAIT UP TO 1 SECONDS.
ENDMETHOD.
METHOD listen.
DATA(lo_amc) = NEW amc( ).
TRY.
"Create listener Channel
cl_amc_channel_manager=>get_consumer_session_id( ).
cl_amc_channel_manager=>create_message_consumer(
i_application_id = 'ZTEST'
i_channel_id = '/prot'
i_channel_extension_id = CONV #( id )
)->start_message_delivery( i_receiver = lo_amc ).
CATCH cx_amc_error INTO DATA(text_exc).
MESSAGE text_exc TYPE 'S'.
ENDTRY.
"Wait for messages
WAIT FOR MESSAGING CHANNELS
UNTIL lo_amc->mv_end = abap_true
UP TO 10 SECONDS.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CASE batch.
WHEN space.
"Create the listener job
amc=>create_listener_job( id ).
TRY.
"Prepare sending AMC messages
DATA(amc_producer) = CAST if_amc_message_producer_text(
cl_amc_channel_manager=>create_message_producer(
i_application_id = 'ZTEST'
i_channel_id = '/prot'
i_channel_extension_id = CONV #( id ) ) ).
amc_producer->send( i_message = 'This is an important message!' ).
amc_producer->send( i_message = 'Oh no!! I have to roll back...' ).
ROLLBACK WORK.
amc_producer->send( i_message = 'Rollback done.' ).
amc_producer->send( i_message = 'this is the end, don''t you know it?' ).
amc_producer->send( i_message = 'end' ).
CATCH cx_amc_error INTO DATA(text_exc).
cl_demo_output=>display( text_exc->get_text( ) ).
ENDTRY.
"Call created protocol
SUBMIT sbal_display WITH balobj = 'BCT1' WITH balext = id AND RETURN .
WHEN 'X'.
"Start the listener
amc=>listen( id ).
ENDCASE.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |