SAP MDG · REPLICATION OUTBOUND
How do I implement a GTS validation and update outbound proxy in ABAP using the generated request structure and technical fault handling?
Use a small ABAP report to normalize customer input, perform a simple validation, fill `zmt_partner_transfer_gts_req`, call `zco_si_partner_transfer_gts_in`, and convert `cx_ai_system_fault` into a readable message.
Use a small ABAP report to normalize customer input, perform a simple validation, fill `zmt_partner_transfer_gts_req`, call `zco_si_partner_transfer_gts_in`, and convert `cx_ai_system_fault` into a readable message.
Use a report as a test harness: copy the customer input into local variables, uppercase name and address values, perform a basic validation check, build the nested GTS request structure, and call the generated proxy. The example pattern also shows how to handle `cx_ai_system_fault` and return a readable message.
Process flow
- Copy the incoming partner and customer values into local variables.
- Normalize company name, customer name, street, street supplement, and city to uppercase.
- Run a basic validation check before the update step.
- Populate the nested `zmt_partner_transfer_gts_req` request structure field by field.
- Set the technical control flags for the outbound update.
- Instantiate `zco_si_partner_transfer_gts_in` and call `si_partner_transfer_gts_inboun`.
- Catch `cx_ai_system_fault` and convert the technical text into a readable message.
- Output the validation result and final proxy status message.
Referenced tables
| Object | Purpose |
|---|---|
zmdg_os_return | Validation result structure used to return a simple status and message. |
zmt_partner_transfer_gts_req | Generated outbound GTS request structure. |
zmt_partner_transfer_gts_res | Generated outbound GTS response structure. |
ILLUSTRATIVE ABAP SAMPLE
Source ABAP example
Exact relevant implementation excerpt from the knowledge document.
1"==============================================================================
2" Generic ABAP Example for GTS Validation and Update
3" Purpose:
4" - Show the end-to-end flow for validating customer data for GTS
5" - Build the outbound GTS request structure from customer and address data
6" - Call the generated proxy and handle technical exceptions
7" - Keep the code generic so it can be used as a pattern for similar proxy calls
8" Flow:
9" - Normalize input values
10" - Fill a request structure with nested partner data
11" - Optionally validate the business data before the update
12" - Create and call the proxy
13" - Catch system faults and convert them into a readable message
14"==============================================================================
15
16REPORT zsam_validate_update_gts_generic.
17
18PARAMETERS:
19 p_reqid TYPE char3,
20 p_soldto TYPE kunnr,
21 p_partner TYPE kunnr,
22 p_bukrs TYPE bukrs,
23 p_name1 TYPE name1_gp,
24 p_name2 TYPE name2_gp,
25 p_stras TYPE stras_gp,
26 p_stras2 TYPE stras_gp,
27 p_city TYPE ort01_gp,
28 p_state TYPE regio,
29 p_country TYPE land1,
30 p_postal TYPE pstlz,
31 p_taxid TYPE stcd1,
32 p_fax TYPE telfx,
33 p_tel1 TYPE telf1,
34 p_tel2 TYPE telf2,
35 p_guest TYPE char1 DEFAULT space.
36
37DATA:
38 ls_validate_return TYPE zmdg_os_return,
39 ls_gts_request TYPE zmt_partner_transfer_gts_req,
40 ls_gts_response TYPE zmt_partner_transfer_gts_res,
41 lo_proxy TYPE REF TO zco_si_partner_transfer_gts_in,
42 lv_message TYPE string,
43 lv_partner TYPE kunnr,
44 lv_company_name TYPE name1_gp,
45 lv_customer_name TYPE name2_gp,
46 lv_street TYPE stras_gp,
47 lv_street2 TYPE stras_gp,
48 lv_city TYPE ort01_gp.
49
50START-OF-SELECTION.
51
52 " Keep a local working copy of the user input.
53 lv_partner = p_partner.
54 lv_company_name = p_name1.
55 lv_customer_name = p_name2.
56 lv_street = p_stras.
57 lv_street2 = p_stras2.
58 lv_city = p_city.
59
60 " Normalize the strings so the receiver gets stable values.
61 TRANSLATE lv_company_name TO UPPER CASE.
62 TRANSLATE lv_customer_name TO UPPER CASE.
63 TRANSLATE lv_street TO UPPER CASE.
64 TRANSLATE lv_street2 TO UPPER CASE.
65 TRANSLATE lv_city TO UPPER CASE.
66
67 " Validate the business data before the update step.
68 " In a real implementation this is where country, name, and address checks would run.
69 IF lv_company_name IS INITIAL AND lv_customer_name IS INITIAL.
70 ls_validate_return-type = 'E'.
71 ls_validate_return-message = 'Customer name is missing'.
72 ELSE.
73 ls_validate_return-type = 'S'.
74 ls_validate_return-message = 'Validation passed'.
75 ENDIF.
76
77 " Build the GTS payload using a nested request structure.
78 " The mapping below mirrors the live utility pattern, but stays generic and readable.
79 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_key-partner_id = lv_partner.
80 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_key-partner_typ = '02'.
81 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_key-org_logsystem = sy-sysid.
82
83 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_head-extern_no = lv_partner.
84 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_head-partn_cat = '2'.
85 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_head-partnerrole = 'SLLCPC'.
86
87 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-central-partnerexternal = lv_partner.
88 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-central-searchterm1 = lv_company_name(10).
89
90 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-central_org-name1 = lv_company_name.
91 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-central_org-name2 = lv_customer_name.
92 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-central_org-name4 = lv_street2.
93
94 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-standardaddress = abap_true.
95 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-city = lv_city.
96 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-postal_code = p_postal.
97 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-street = lv_street.
98 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-str_suppl1 = lv_street2.
99 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-country = p_country.
100 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-region = p_state.
101 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_address-langu = 'EN'.
102
103 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-name1 = lv_company_name.
104 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-name2 = lv_customer_name.
105 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-name4 = lv_street2.
106 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-city = lv_city.
107 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-langu = 'EN'.
108 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-postl_cod1 = p_postal.
109 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-street = lv_street.
110 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-country = p_country.
111 ls_gts_request-mt_partner_transfer_gts_req-partner_inbound_gts-partner-partner_ad1vl-region = p_state.
112
113 " Set the technical flags that control wheThe remaining configuration, implementation details, and testing guidance continue from this answer more…
Related questions and keywords
Alternative questions
- How do I build and call the GTS outbound proxy from customer data?
- How do I validate customer data before sending it to GTS?
- How do I handle technical exceptions in a GTS proxy call?
Possible questions
- What is the ABAP pattern for validating and updating GTS data?
- Which proxy class and request structure are used for GTS outbound processing?
- How do I map partner, address, and control flags into the GTS request?
- How do I catch and display GTS system faults in ABAP?
- What is the recommended test-harness report for GTS proxy execution?