Die folgenden einfachen Beispiele sollen die Verwendung des neuen API verdeutlichen:
Dieses Beispiel erzeugt eine bgRFC-Unit Typ t, welche zwei Funktionsbaustein-Aufrufe enthält und per Outbound-Scheduler an ein entferntes System geschickt wird.
DATA: my_destination TYPE REF TO
if_bgrfc_destination_outbound,
my_unit TYPE REF
TO if_trfc_unit_outbound,
dest_name
TYPE bgrfc_dest_name_outbound.
dest_name = 'MY_DEST'.
my_destination = cl_bgrfc_destination_outbound=>create( dest_name ).
my_unit = my_destination->create_trfc_unit( ).
CALL FUNCTION ’rfc_function_1’ IN BACKGROUND UNIT my_unit.
CALL FUNCTION ’rfc_function_2’ IN BACKGROUND UNIT my_unit.
COMMIT WORK.
Dieses Beispiel erzeugt eine bgRFC-Unit Typ q, welche zwei Funktionsbaustein-Aufrufe enthält und per Outbound-Scheduler in ein entferntes System geschickt wird. Dabei werden Queue-Namen für die Serialisierung von Units verwendet. Gleichzeitig wird gezeigt, wie Ausnahmen abgefangen werden können, um auf Fehlersituationen zu reagieren. In diesem Beispiel werden die Queue-Namen nachträglich bekannt gegeben. Technisch ist dies korrekt, aber die Wartbarkeit der Programme kann leiden.
DATA: my_destination TYPE REF TO
if_bgrfc_destination_outbound,
my_unit TYPE REF
TO if_qrfc_unit_outbound,
dest_name
TYPE bgrfc_dest_name_outbound,
queue_name
TYPE qrfc_queue_name,
queue_names
TYPE qrfc_queue_name_tab.
TRY.
dest_name =
'MY_DEST'.
my_destination =
cl_bgrfc_destination_outbound=>create( dest_name ).
CATCH cx_bgrfc_invalid_destination.
MESSAGE e102(bc).
ENDTRY.
my_unit = my_destination->create_qrfc_unit( ).
TRY.
CALL FUNCTION
’rfc_function_1’ IN BACKGROUND UNIT my_unit.
my_unit->add_queue_name_outbound( 'DEBITOR-1234' ).
CALL FUNCTION
’rfc_function_2’ IN BACKGROUND UNIT my_unit.
queue_name =
'PRODUCT-4711'.
INSERT queue_name
INTO TABLE queue_names.
queue_name =
'PRODUCT-5432'.
INSERT queue_name
INTO TABLE queue_names.
my_unit->add_queue_names_outbound( queue_names ).
CATCH
cx_qrfc_duplicate_queue_name.
MESSAGE e101(bc).
ENDTRY.
COMMIT WORK.
Das nächste Beispiel erzeugt eine bgRFC-Unit Typ q, welche zwei Funktionsbaustein-Aufrufe enthält und per Outbound-Scheduler an ein entferntes System geschickt wird. Dort soll es in die Inbound-Queue gestellt werden. Dabei werden Queue-Namen für die Serialisierung von Units verwendet. Gleichzeitig wird gezeigt, wie die Ausnahme, die bei doppelten Queue-Namen ausgelöst wird, über den Parameter IGNORE_DUPLICATES unterdrückt werden kann.
DATA: my_destination TYPE REF TO
if_bgrfc_destination_outbound,
my_unit TYPE REF
TO if_qrfc_unit_outinbound,
dest_name
TYPE bgrfc_dest_name_outbound,
queue_name
TYPE qrfc_queue_name,
queue_names
TYPE qrfc_queue_name_tab.
TRY.
dest_name =
'MY_DEST'.
my_destination =
cl_bgrfc_destination_outbound=>create( dest_name ).
CATCH
cx_bgrfc_invalid_destination.
MESSAGE e102(bc).
ENDTRY.
my_unit = my_destination->create_qrfc_unit_outinbound( ).
CALL FUNCTION ’rfc_function_1’ IN BACKGROUND UNIT my_unit.
CALL FUNCTION ’rfc_function_2’ IN BACKGROUND UNIT my_unit.
queue_name = 'DEBITOR-1234'.
INSERT queue_name INTO TABLE queue_names.
queue_name =
'PRODUCT-4711'.
INSERT queue_name INTO TABLE queue_names.
queue_name =
'PRODUCT-5432'.
INSERT queue_name INTO TABLE queue_names.
my_unit->add_queue_names_outbound( queue_names = queue_names
ignore_duplicates = abap_true ).
my_unit->add_queue_names_inbound( queue_names = queue_names
ignore_duplicates = abap_true ).
COMMIT WORK.
Dieses Beispiel erzeugt eine bgRFC-Unit Typ t, welche zwei Funktionsbaustein-Aufrufe enthält und per Inbound-Scheduler im selben System verarbeitet werden soll.
DATA: my_destination TYPE REF TO
if_bgrfc_destination_inbound,
my_unit TYPE REF
TO if_trfc_unit_inbound,
dest_name
TYPE bgrfc_dest_name_inbound.
dest_name = 'MY_DEST'.
my_destination = cl_bgrfc_destination_inbound=>create( dest_name ).
my_unit = my_destination->create_trfc_unit( ).
CALL FUNCTION ’rfc_function_1’ IN BACKGROUND UNIT my_unit.
CALL FUNCTION ’rfc_function_2’ IN BACKGROUND UNIT my_unit.
COMMIT WORK.
Nun noch ein Beispiel für den bgRFC Typ q Inbound-Fall. Gegenüber dem bgRFC Typ t-Beispiel kommt die Verwendung von Queue-Namen hinzu und damit auch die Verwendung der Methode create_qrfc_unit anstatt create_trfc_unit.
DATA: my_destination TYPE REF TO
if_bgrfc_destination_inbound,
my_unit TYPE REF
TO if_qrfc_unit_inbound,
queue_name
TYPE qrfc_queue_name,
queue_names
TYPE qrfc_queue_name_tab,
dest_name TYPE
bgrfc_dest_name_inbound.
dest_name = 'MY_DEST'.
my_destination = cl_bgrfc_destination_inbound=>create(
dest_name ).
my_unit = my_destination->create_qrfc_unit( ).
TRY.
CALL FUNCTION
’rfc_function_1’ IN BACKGROUND UNIT my_unit.
my_unit->add_queue_name_inbound( 'DEBITOR-1234' ).
CALL FUNCTION
’rfc_function_2’ IN BACKGROUND UNIT my_unit.
queue_name =
'PRODUCT-4711'.
INSERT queue_name
INTO TABLE queue_names.
queue_name =
'PRODUCT-5432'.
INSERT queue_name
INTO TABLE queue_names.
my_unit->add_queue_names_inbound( queue_names ).
CATCH
cx_qrfc_duplicate_queue_name.
MESSAGE e101(bc).
ENDTRY.
COMMIT WORK.
DATA