SAP小技巧 使用bgRFC优化TRFC,QRFC

 

*&---------------------------------------------------------------------*
*& Report ZTS_QRFC_CALL
*&---------------------------------------------------------------------*
*&SBGRFCCONF           bgRFC 配置
*SBGRFCMON            bgRFC 监控器
*&---------------------------------------------------------------------*
REPORT zts_bgrfc_call.
PARAMETERS: p_sec   TYPE i DEFAULT 10,
            rfcdest LIKE rfcdes-rfcdest DEFAULT 'NONE',
            p_uname TYPE bgrfc_dest_name_inbound DEFAULT 'ZTS_BGRFC_IN', "执行前,必须要先注册
            p_qname TYPE qrfc_queue_name DEFAULT 'MY_QUEUE'.
PARAMETERS: p_tin  RADIOBUTTON GROUP ra1,
            p_tout RADIOBUTTON GROUP ra1,
            p_qin  RADIOBUTTON GROUP ra1,
            p_qout RADIOBUTTON GROUP ra1.

INITIALIZATION.
  %_p_sec_%_app_%-text = '等待时间(秒)'.
  %_rfcdest_%_app_%-text = '远程调用目标'.
  %_p_uname_%_app_%-text  = '目标名称'.
  %_p_qname_%_app_%-text  = '队列名称'.
  %_p_tin_%_app_%-text  = 'TRFC入站'.
  %_p_tout_%_app_%-text  = 'TRFC出站'.
  %_p_qin_%_app_%-text  = 'QRFC入站'.
  %_p_qout_%_app_%-text  = 'QRFC出站'.


START-OF-SELECTION.
  CASE 'X'.
    WHEN p_tin."通过trfc inbound方式调用bgRFC
      PERFORM frm_bgrfc_tin.
    WHEN p_tout."通过trfc outbound方式调用bgRFC
      PERFORM frm_bgrfc_tout.
    WHEN p_qin. "通过qRFC inbound 方式调用bgRFC
      PERFORM frm_bgrfc_qin.
    WHEN p_qout. "通过qRFC outbound 方式调用bgRFC
      PERFORM frm_bgrfc_qout. "
  ENDCASE.
*&---------------------------------------------------------------------*

FORM frm_bgrfc_tin .
  DATA lo_destination TYPE REF TO if_bgrfc_destination_inbound.
  DATA lo_trfc_unit TYPE REF TO if_trfc_unit_inbound.
  DATA lc_bgrfc_dest_name TYPE bgrfc_dest_name_inbound .

  lc_bgrfc_dest_name = p_uname.
  DATA myref TYPE REF TO cx_bgrfc_invalid_destination .
  DATA err_text TYPE string.
  DATA result TYPE i.
  TRY.
      lo_destination = cl_bgrfc_destination_inbound=>create( lc_bgrfc_dest_name ).
    CATCH cx_bgrfc_invalid_destination INTO myref.
      err_text = myref->get_text( ).
      MESSAGE s001(00) WITH err_text.
      EXIT.
  ENDTRY.
  lo_trfc_unit = lo_destination->create_trfc_unit( ).
*  lo_trfc_unit->disable_commit_checks( ).

  CALL FUNCTION 'Z_BC_TEST_BGRFC' IN BACKGROUND UNIT lo_trfc_unit
    EXPORTING
      iv_wait = p_sec.

  CALL FUNCTION 'START_OF_BACKGROUNDTASK'
    EXPORTING
      startdate = sy-datum
      starttime = sy-uzeit
    EXCEPTIONS
      OTHERS    = 1.
  IF sy-subrc = 1.
    EXIT.
  ENDIF.
  COMMIT WORK.  "提交才会写入队列

ENDFORM.
FORM frm_bgrfc_tout .
  DATA lo_destination TYPE REF TO if_bgrfc_destination_outbound.
  DATA lo_trfc_unit TYPE REF TO if_trfc_unit_outbound.
  DATA lc_bgrfc_dest_name TYPE bgrfc_dest_name_outbound .

  lc_bgrfc_dest_name = p_uname.
  lo_destination = cl_bgrfc_destination_outbound=>create( lc_bgrfc_dest_name ).
  lo_trfc_unit = lo_destination->create_trfc_unit( ).
*  lo_trfc_unit->disable_commit_checks( ).

  CALL FUNCTION 'Z_BC_TEST_BGRFC' IN BACKGROUND UNIT lo_trfc_unit
    EXPORTING
      iv_wait = p_sec.

  CALL FUNCTION 'START_OF_BACKGROUNDTASK'
    EXPORTING
      startdate = sy-datum
      starttime = sy-uzeit
    EXCEPTIONS
      OTHERS    = 1.
  IF sy-subrc = 1.
    EXIT.
  ENDIF.
  COMMIT WORK.  "提交才会写入队列

ENDFORM.
FORM frm_bgrfc_qin .
  DATA lo_destination TYPE REF TO if_bgrfc_destination_inbound.
  DATA lo_qinrfc_unit TYPE REF TO if_qrfc_unit_inbound.
  DATA lc_bgrfc_dest_name TYPE bgrfc_dest_name_inbound .

  lc_bgrfc_dest_name = p_uname.
  lo_destination = cl_bgrfc_destination_inbound=>create( lc_bgrfc_dest_name ).
  lo_qinrfc_unit = lo_destination->create_qrfc_unit( ).
*TRY.
  CALL METHOD lo_qinrfc_unit->add_queue_name_inbound
    EXPORTING
      queue_name = p_qname
*     ignore_duplicates = ABAP_FALSE
    .
* CATCH cx_bgrfc_invalid_unit .
* CATCH cx_qrfc_duplicate_queue_name .
* CATCH cx_qrfc_invalid_queue_name .
*ENDTRY.

*  lo_trfc_unit->disable_commit_checks( ).
  TRY.
      CALL METHOD lo_qinrfc_unit->add_queue_name_inbound
        EXPORTING
          queue_name = p_qname.
    CATCH cx_bgrfc_invalid_unit .
    CATCH cx_qrfc_duplicate_queue_name .
    CATCH cx_qrfc_invalid_queue_name .
  ENDTRY.

  CALL FUNCTION 'Z_BC_TEST_BGRFC' IN BACKGROUND UNIT lo_qinrfc_unit
    EXPORTING
      iv_wait = p_sec.

  CALL FUNCTION 'START_OF_BACKGROUNDTASK'
    EXPORTING
      startdate = sy-datum
      starttime = sy-uzeit
    EXCEPTIONS
      OTHERS    = 1.
  IF sy-subrc = 1.
    EXIT.
  ENDIF.
  COMMIT WORK.  "提交才会写入队列

ENDFORM.
FORM frm_bgrfc_qout .
  DATA lo_destination TYPE REF TO if_bgrfc_destination_outbound.
  DATA lo_qoutrfc_unit TYPE REF TO if_qrfc_unit_outbound.
  DATA lc_bgrfc_dest_name TYPE bgrfc_dest_name_outbound .

  lc_bgrfc_dest_name = p_uname.
  lo_destination = cl_bgrfc_destination_outbound=>create( lc_bgrfc_dest_name ).
  lo_qoutrfc_unit = lo_destination->create_qrfc_unit( ).
*  lo_trfc_unit->disable_commit_checks( ).

  CALL FUNCTION 'Z_BC_TEST_BGRFC' IN BACKGROUND UNIT lo_qoutrfc_unit
    EXPORTING
      iv_wait = p_sec.

  CALL FUNCTION 'START_OF_BACKGROUNDTASK'
    EXPORTING
      startdate = sy-datum
      starttime = sy-uzeit
    EXCEPTIONS
      OTHERS    = 1.
  IF sy-subrc = 1.
    EXIT.
  ENDIF.
  COMMIT WORK.  "提交才会写入队列

ENDFORM.

 

posted @ 2021-04-22 18:29  追寻者2019  阅读(397)  评论(0编辑  收藏  举报