sapbuddy-dsh 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +25 -4
  3. package/defaults/AGENTS.md +114 -114
  4. package/defaults/connections.example.json +21 -21
  5. package/defaults/prompts/Memory.md +21 -21
  6. package/defaults/prompts/SYSTEM.md +110 -110
  7. package/defaults/settings.example.json +3 -3
  8. package/dist/client.js +20 -5
  9. package/dist/index.js +85 -11
  10. package/dist/sap-tools/adtManager.d.ts +11 -1
  11. package/dist/sap-tools/adtManager.js +176 -9
  12. package/dist/sap-tools/connections-store.js +16 -3
  13. package/dist/sap-tools/execution.js +1 -1
  14. package/dist/tools.js +5 -3
  15. package/package.json +8 -3
  16. package/skills/abap-code-review/SKILL.md +75 -75
  17. package/skills/abap-code-review/assets/report-template.html +142 -142
  18. package/skills/abap-code-review/references/checklist.md +114 -114
  19. package/skills/abap-explain/SKILL.md +126 -126
  20. package/skills/abap-templates/SKILL.md +764 -764
  21. package/skills/abap-wiki/SKILL.md +104 -104
  22. package/skills/clean-abap/SKILL.md +91 -91
  23. package/skills/clean-abap/references/CleanABAP_zh.md +4309 -4309
  24. package/skills/dev-write/SKILL.md +137 -137
  25. package/skills/sap-abap-skills/README.md +205 -205
  26. package/skills/sap-abap-skills/SKILL.md +498 -498
  27. package/skills/sap-abap-skills/references/abap-dictionary.md +211 -211
  28. package/skills/sap-abap-skills/references/abap-sql.md +588 -588
  29. package/skills/sap-abap-skills/references/amdp.md +279 -279
  30. package/skills/sap-abap-skills/references/authorization.md +149 -149
  31. package/skills/sap-abap-skills/references/bits-bytes.md +92 -92
  32. package/skills/sap-abap-skills/references/builtin-functions.md +373 -373
  33. package/skills/sap-abap-skills/references/cds-views.md +412 -412
  34. package/skills/sap-abap-skills/references/cloud-development.md +299 -299
  35. package/skills/sap-abap-skills/references/constructor-expressions.md +458 -458
  36. package/skills/sap-abap-skills/references/date-time.md +415 -415
  37. package/skills/sap-abap-skills/references/design-patterns.md +292 -292
  38. package/skills/sap-abap-skills/references/dynamic-programming.md +426 -426
  39. package/skills/sap-abap-skills/references/exceptions.md +432 -432
  40. package/skills/sap-abap-skills/references/generative-ai.md +180 -180
  41. package/skills/sap-abap-skills/references/internal-tables.md +578 -578
  42. package/skills/sap-abap-skills/references/numeric-operations.md +219 -219
  43. package/skills/sap-abap-skills/references/object-orientation.md +518 -518
  44. package/skills/sap-abap-skills/references/performance.md +428 -428
  45. package/skills/sap-abap-skills/references/program-flow.md +302 -302
  46. package/skills/sap-abap-skills/references/rap-eml.md +549 -549
  47. package/skills/sap-abap-skills/references/released-classes.md +308 -308
  48. package/skills/sap-abap-skills/references/sap-luw.md +203 -203
  49. package/skills/sap-abap-skills/references/skill-reference-guide.md +98 -98
  50. package/skills/sap-abap-skills/references/sql-hierarchies.md +180 -180
  51. package/skills/sap-abap-skills/references/string-processing.md +488 -488
  52. package/skills/sap-abap-skills/references/table-grouping.md +150 -150
  53. package/skills/sap-abap-skills/references/tool-guide.md +285 -285
  54. package/skills/sap-abap-skills/references/unit-testing.md +512 -512
  55. package/skills/sap-abap-skills/references/where-conditions.md +223 -223
  56. package/skills/sap-abap-skills/references/xml-json.md +315 -315
  57. package/skills/translate-workflow/SKILL.md +69 -69
@@ -1,315 +1,315 @@
1
- # XML and JSON Processing - Complete Reference
2
-
3
- **Source**: [https://github.com/SAP-samples/abap-cheat-sheets/blob/main/21_XML_JSON.md](https://github.com/SAP-samples/abap-cheat-sheets/blob/main/21_XML_JSON.md)
4
-
5
- ---
6
-
7
- ## XML Processing Libraries
8
-
9
- ### iXML (DOM-Based)
10
-
11
- Higher memory, full DOM tree in memory.
12
-
13
- **Creating XML:**
14
-
15
- ```abap
16
- DATA(ixml) = cl_ixml_core=>create( ).
17
- DATA(document) = ixml->create_document( ).
18
-
19
- " Create root element
20
- DATA(root) = document->create_element_ns( name = 'root' prefix = 'ns' ).
21
- document->append_child( root ).
22
-
23
- " Create child elements
24
- DATA(child) = document->create_element( 'item' ).
25
- child->set_value( 'value' ).
26
- root->append_child( child ).
27
-
28
- " Render to xstring
29
- DATA xml TYPE xstring.
30
- ixml->create_renderer(
31
- document = document
32
- ostream = ixml->create_stream_factory( )->create_ostream_xstring( string = xml )
33
- )->render( ).
34
- ```
35
-
36
- **Parsing XML:**
37
-
38
- ```abap
39
- DATA(ixml) = cl_ixml_core=>create( ).
40
- DATA(document) = ixml->create_document( ).
41
- DATA(parser) = ixml->create_parser(
42
- istream = ixml->create_stream_factory( )->create_istream_xstring( string = xml )
43
- document = document
44
- stream_factory = ixml->create_stream_factory( ) ).
45
-
46
- IF parser->parse( ) = 0.
47
- DATA(root) = document->get_root_element( ).
48
- DATA(child) = root->get_first_child( ).
49
- ENDIF.
50
- ```
51
-
52
- ### sXML (Token-Based)
53
-
54
- More memory-efficient, sequential processing.
55
-
56
- **Creating XML:**
57
-
58
- ```abap
59
- DATA(writer) = CAST if_sxml_writer(
60
- cl_sxml_string_writer=>create( type = if_sxml=>co_xt_xml10 ) ).
61
-
62
- TRY.
63
- writer->open_element( name = 'root' ).
64
- writer->open_element( name = 'item' ).
65
- writer->write_value( 'value' ).
66
- writer->close_element( ).
67
- writer->close_element( ).
68
- CATCH cx_sxml_state_error.
69
- ENDTRY.
70
-
71
- DATA(xml) = CAST cl_sxml_string_writer( writer )->get_output( ).
72
- ```
73
-
74
- **Parsing XML:**
75
-
76
- ```abap
77
- DATA(reader) = cl_sxml_string_reader=>create( xml ).
78
-
79
- TRY.
80
- DO.
81
- reader->next_node( ).
82
- IF reader->node_type = if_sxml_node=>co_nt_final.
83
- EXIT.
84
- ENDIF.
85
-
86
- CASE reader->node_type.
87
- WHEN if_sxml_node=>co_nt_element_open.
88
- DATA(name) = reader->name.
89
- WHEN if_sxml_node=>co_nt_value.
90
- DATA(value) = reader->value.
91
- ENDCASE.
92
- ENDDO.
93
- CATCH cx_sxml_state_error.
94
- ENDTRY.
95
- ```
96
-
97
- ---
98
-
99
- ## CALL TRANSFORMATION
100
-
101
- ### ABAP to XML
102
-
103
- ```abap
104
- " Single data object
105
- CALL TRANSFORMATION id
106
- SOURCE data = my_data
107
- RESULT XML DATA(xml).
108
-
109
- " Multiple sources
110
- CALL TRANSFORMATION id
111
- SOURCE obj1 = data1 obj2 = data2
112
- RESULT XML xml.
113
-
114
- " Dynamic specification
115
- DATA(srctab) = VALUE abap_trans_srcbind_tab(
116
- ( name = 'DATA' value = REF #( my_data ) ) ).
117
- CALL TRANSFORMATION id
118
- SOURCE (srctab)
119
- RESULT XML xml.
120
- ```
121
-
122
- ### XML to ABAP
123
-
124
- ```abap
125
- " Single target
126
- CALL TRANSFORMATION id
127
- SOURCE XML xml
128
- RESULT data = my_data.
129
-
130
- " Dynamic specification
131
- DATA(restab) = VALUE abap_trans_resbind_tab(
132
- ( name = 'DATA' value = REF #( my_data ) ) ).
133
- CALL TRANSFORMATION id
134
- SOURCE XML xml
135
- RESULT (restab).
136
- ```
137
-
138
- ---
139
-
140
- ## JSON Processing
141
-
142
- ### Creating JSON with sXML
143
-
144
- ```abap
145
- DATA(writer) = CAST if_sxml_writer(
146
- cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ).
147
-
148
- TRY.
149
- writer->open_element( name = 'object' ).
150
- writer->open_element( name = 'str' ).
151
- writer->write_attribute( name = 'name' value = 'key' ).
152
- writer->write_value( 'value' ).
153
- writer->close_element( ).
154
- writer->close_element( ).
155
- CATCH cx_sxml_state_error.
156
- ENDTRY.
157
-
158
- DATA(json) = cl_abap_conv_codepage=>create_in( )->convert(
159
- CAST cl_sxml_string_writer( writer )->get_output( ) ).
160
- ```
161
-
162
- ### CALL TRANSFORMATION for JSON
163
-
164
- ```abap
165
- " ABAP to JSON
166
- DATA(json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
167
- CALL TRANSFORMATION id
168
- SOURCE data = my_data
169
- RESULT XML json_writer.
170
- DATA(json) = json_writer->get_output( ).
171
-
172
- " Using SOURCE/RESULT JSON
173
- CALL TRANSFORMATION id
174
- SOURCE data = my_data
175
- RESULT JSON DATA(json_xstr).
176
-
177
- " JSON to ABAP
178
- CALL TRANSFORMATION id
179
- SOURCE JSON json_xstr
180
- RESULT data = my_data.
181
- ```
182
-
183
- ### Formatted JSON Output
184
-
185
- ```abap
186
- DATA(writer) = CAST if_sxml_writer(
187
- cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ).
188
- writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ).
189
- writer->set_option( option = if_sxml_writer=>co_opt_indent ).
190
-
191
- CALL TRANSFORMATION id
192
- SOURCE data = my_data
193
- RESULT XML writer.
194
- ```
195
-
196
- ---
197
-
198
- ## XCO Library for JSON
199
-
200
- ```abap
201
- " ABAP to JSON
202
- DATA(json) = xco_cp_json=>data->from_abap( my_data )->to_string( ).
203
-
204
- " JSON to ABAP
205
- xco_cp_json=>data->from_string( json )->write_to( REF #( my_data ) ).
206
-
207
- " Build JSON manually
208
- DATA(builder) = xco_cp_json=>data->builder( ).
209
- builder->begin_object( )
210
- ->add_member( 'key' )->add_string( 'value' )
211
- ->add_member( 'number' )->add_number( 123 )
212
- ->end_object( ).
213
- DATA(json_built) = builder->get_data( )->to_string( ).
214
-
215
- " Name transformation
216
- xco_cp_json=>data->from_string( json )->apply( VALUE #(
217
- ( xco_cp_json=>transformation->pascal_case_to_underscore )
218
- ) )->write_to( REF #( my_data ) ).
219
- ```
220
-
221
- ---
222
-
223
- ## /ui2/cl_json Class
224
-
225
- ```abap
226
- " Serialize (ABAP to JSON)
227
- DATA(json) = /ui2/cl_json=>serialize( data = my_data ).
228
-
229
- " With formatting
230
- DATA(json_pretty) = /ui2/cl_json=>serialize(
231
- data = my_data
232
- format_output = abap_true
233
- pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
234
-
235
- " Deserialize (JSON to ABAP)
236
- /ui2/cl_json=>deserialize(
237
- EXPORTING json = json
238
- CHANGING data = my_data ).
239
-
240
- " With name mapping
241
- /ui2/cl_json=>deserialize(
242
- EXPORTING json = json
243
- name_mappings = VALUE #(
244
- ( abap = 'FIELD1' json = 'field_one' )
245
- ( abap = 'FIELD2' json = 'fieldTwo' ) )
246
- CHANGING data = my_data ).
247
-
248
- " Generate ABAP type from JSON
249
- DATA(dref) = /ui2/cl_json=>generate( json = json ).
250
- ```
251
-
252
- ---
253
-
254
- ## String/XString Conversion
255
-
256
- ```abap
257
- " String to xstring
258
- DATA(xstr) = cl_abap_conv_codepage=>create_out( codepage = 'UTF-8' )->convert( str ).
259
-
260
- " XString to string
261
- DATA(str) = cl_abap_conv_codepage=>create_in( )->convert( xstr ).
262
-
263
- " Using XCO
264
- DATA(xstr_xco) = xco_cp=>string( str )->as_xstring( xco_cp_character=>code_page->utf_8 )->value.
265
- DATA(str_xco) = xco_cp=>xstring( xstr )->as_string( xco_cp_character=>code_page->utf_8 )->value.
266
- ```
267
-
268
- ---
269
-
270
- ## Compression
271
-
272
- ```abap
273
- " Compress
274
- cl_abap_gzip=>compress_binary(
275
- EXPORTING raw_in = xstr
276
- IMPORTING gzip_out = compressed ).
277
-
278
- " Decompress
279
- cl_abap_gzip=>decompress_binary(
280
- EXPORTING gzip_in = compressed
281
- IMPORTING raw_out = decompressed ).
282
- ```
283
-
284
- ---
285
-
286
- ## Object Serialization
287
-
288
- Class must implement `IF_SERIALIZABLE_OBJECT`:
289
-
290
- ```abap
291
- CLASS zcl_demo DEFINITION.
292
- PUBLIC SECTION.
293
- INTERFACES if_serializable_object.
294
- DATA value TYPE string.
295
- ENDCLASS.
296
-
297
- " Serialize
298
- DATA(obj) = NEW zcl_demo( ).
299
- obj->value = 'test'.
300
- CALL TRANSFORMATION id SOURCE obj = obj RESULT XML DATA(xml).
301
-
302
- " Deserialize
303
- DATA obj2 TYPE REF TO zcl_demo.
304
- CALL TRANSFORMATION id SOURCE XML xml RESULT obj = obj2.
305
- ```
306
-
307
- ---
308
-
309
- ## Best Practices
310
-
311
- 1. **Use sXML** for memory efficiency with large documents
312
- 2. **Use XCO/ui2/cl_json** for simple JSON operations
313
- 3. **Use CALL TRANSFORMATION** for complex conversions
314
- 4. **Handle encoding** explicitly (UTF-8 recommended)
315
- 5. **Implement IF_SERIALIZABLE_OBJECT** for object serialization
1
+ # XML and JSON Processing - Complete Reference
2
+
3
+ **Source**: [https://github.com/SAP-samples/abap-cheat-sheets/blob/main/21_XML_JSON.md](https://github.com/SAP-samples/abap-cheat-sheets/blob/main/21_XML_JSON.md)
4
+
5
+ ---
6
+
7
+ ## XML Processing Libraries
8
+
9
+ ### iXML (DOM-Based)
10
+
11
+ Higher memory, full DOM tree in memory.
12
+
13
+ **Creating XML:**
14
+
15
+ ```abap
16
+ DATA(ixml) = cl_ixml_core=>create( ).
17
+ DATA(document) = ixml->create_document( ).
18
+
19
+ " Create root element
20
+ DATA(root) = document->create_element_ns( name = 'root' prefix = 'ns' ).
21
+ document->append_child( root ).
22
+
23
+ " Create child elements
24
+ DATA(child) = document->create_element( 'item' ).
25
+ child->set_value( 'value' ).
26
+ root->append_child( child ).
27
+
28
+ " Render to xstring
29
+ DATA xml TYPE xstring.
30
+ ixml->create_renderer(
31
+ document = document
32
+ ostream = ixml->create_stream_factory( )->create_ostream_xstring( string = xml )
33
+ )->render( ).
34
+ ```
35
+
36
+ **Parsing XML:**
37
+
38
+ ```abap
39
+ DATA(ixml) = cl_ixml_core=>create( ).
40
+ DATA(document) = ixml->create_document( ).
41
+ DATA(parser) = ixml->create_parser(
42
+ istream = ixml->create_stream_factory( )->create_istream_xstring( string = xml )
43
+ document = document
44
+ stream_factory = ixml->create_stream_factory( ) ).
45
+
46
+ IF parser->parse( ) = 0.
47
+ DATA(root) = document->get_root_element( ).
48
+ DATA(child) = root->get_first_child( ).
49
+ ENDIF.
50
+ ```
51
+
52
+ ### sXML (Token-Based)
53
+
54
+ More memory-efficient, sequential processing.
55
+
56
+ **Creating XML:**
57
+
58
+ ```abap
59
+ DATA(writer) = CAST if_sxml_writer(
60
+ cl_sxml_string_writer=>create( type = if_sxml=>co_xt_xml10 ) ).
61
+
62
+ TRY.
63
+ writer->open_element( name = 'root' ).
64
+ writer->open_element( name = 'item' ).
65
+ writer->write_value( 'value' ).
66
+ writer->close_element( ).
67
+ writer->close_element( ).
68
+ CATCH cx_sxml_state_error.
69
+ ENDTRY.
70
+
71
+ DATA(xml) = CAST cl_sxml_string_writer( writer )->get_output( ).
72
+ ```
73
+
74
+ **Parsing XML:**
75
+
76
+ ```abap
77
+ DATA(reader) = cl_sxml_string_reader=>create( xml ).
78
+
79
+ TRY.
80
+ DO.
81
+ reader->next_node( ).
82
+ IF reader->node_type = if_sxml_node=>co_nt_final.
83
+ EXIT.
84
+ ENDIF.
85
+
86
+ CASE reader->node_type.
87
+ WHEN if_sxml_node=>co_nt_element_open.
88
+ DATA(name) = reader->name.
89
+ WHEN if_sxml_node=>co_nt_value.
90
+ DATA(value) = reader->value.
91
+ ENDCASE.
92
+ ENDDO.
93
+ CATCH cx_sxml_state_error.
94
+ ENDTRY.
95
+ ```
96
+
97
+ ---
98
+
99
+ ## CALL TRANSFORMATION
100
+
101
+ ### ABAP to XML
102
+
103
+ ```abap
104
+ " Single data object
105
+ CALL TRANSFORMATION id
106
+ SOURCE data = my_data
107
+ RESULT XML DATA(xml).
108
+
109
+ " Multiple sources
110
+ CALL TRANSFORMATION id
111
+ SOURCE obj1 = data1 obj2 = data2
112
+ RESULT XML xml.
113
+
114
+ " Dynamic specification
115
+ DATA(srctab) = VALUE abap_trans_srcbind_tab(
116
+ ( name = 'DATA' value = REF #( my_data ) ) ).
117
+ CALL TRANSFORMATION id
118
+ SOURCE (srctab)
119
+ RESULT XML xml.
120
+ ```
121
+
122
+ ### XML to ABAP
123
+
124
+ ```abap
125
+ " Single target
126
+ CALL TRANSFORMATION id
127
+ SOURCE XML xml
128
+ RESULT data = my_data.
129
+
130
+ " Dynamic specification
131
+ DATA(restab) = VALUE abap_trans_resbind_tab(
132
+ ( name = 'DATA' value = REF #( my_data ) ) ).
133
+ CALL TRANSFORMATION id
134
+ SOURCE XML xml
135
+ RESULT (restab).
136
+ ```
137
+
138
+ ---
139
+
140
+ ## JSON Processing
141
+
142
+ ### Creating JSON with sXML
143
+
144
+ ```abap
145
+ DATA(writer) = CAST if_sxml_writer(
146
+ cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ).
147
+
148
+ TRY.
149
+ writer->open_element( name = 'object' ).
150
+ writer->open_element( name = 'str' ).
151
+ writer->write_attribute( name = 'name' value = 'key' ).
152
+ writer->write_value( 'value' ).
153
+ writer->close_element( ).
154
+ writer->close_element( ).
155
+ CATCH cx_sxml_state_error.
156
+ ENDTRY.
157
+
158
+ DATA(json) = cl_abap_conv_codepage=>create_in( )->convert(
159
+ CAST cl_sxml_string_writer( writer )->get_output( ) ).
160
+ ```
161
+
162
+ ### CALL TRANSFORMATION for JSON
163
+
164
+ ```abap
165
+ " ABAP to JSON
166
+ DATA(json_writer) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
167
+ CALL TRANSFORMATION id
168
+ SOURCE data = my_data
169
+ RESULT XML json_writer.
170
+ DATA(json) = json_writer->get_output( ).
171
+
172
+ " Using SOURCE/RESULT JSON
173
+ CALL TRANSFORMATION id
174
+ SOURCE data = my_data
175
+ RESULT JSON DATA(json_xstr).
176
+
177
+ " JSON to ABAP
178
+ CALL TRANSFORMATION id
179
+ SOURCE JSON json_xstr
180
+ RESULT data = my_data.
181
+ ```
182
+
183
+ ### Formatted JSON Output
184
+
185
+ ```abap
186
+ DATA(writer) = CAST if_sxml_writer(
187
+ cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ).
188
+ writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ).
189
+ writer->set_option( option = if_sxml_writer=>co_opt_indent ).
190
+
191
+ CALL TRANSFORMATION id
192
+ SOURCE data = my_data
193
+ RESULT XML writer.
194
+ ```
195
+
196
+ ---
197
+
198
+ ## XCO Library for JSON
199
+
200
+ ```abap
201
+ " ABAP to JSON
202
+ DATA(json) = xco_cp_json=>data->from_abap( my_data )->to_string( ).
203
+
204
+ " JSON to ABAP
205
+ xco_cp_json=>data->from_string( json )->write_to( REF #( my_data ) ).
206
+
207
+ " Build JSON manually
208
+ DATA(builder) = xco_cp_json=>data->builder( ).
209
+ builder->begin_object( )
210
+ ->add_member( 'key' )->add_string( 'value' )
211
+ ->add_member( 'number' )->add_number( 123 )
212
+ ->end_object( ).
213
+ DATA(json_built) = builder->get_data( )->to_string( ).
214
+
215
+ " Name transformation
216
+ xco_cp_json=>data->from_string( json )->apply( VALUE #(
217
+ ( xco_cp_json=>transformation->pascal_case_to_underscore )
218
+ ) )->write_to( REF #( my_data ) ).
219
+ ```
220
+
221
+ ---
222
+
223
+ ## /ui2/cl_json Class
224
+
225
+ ```abap
226
+ " Serialize (ABAP to JSON)
227
+ DATA(json) = /ui2/cl_json=>serialize( data = my_data ).
228
+
229
+ " With formatting
230
+ DATA(json_pretty) = /ui2/cl_json=>serialize(
231
+ data = my_data
232
+ format_output = abap_true
233
+ pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
234
+
235
+ " Deserialize (JSON to ABAP)
236
+ /ui2/cl_json=>deserialize(
237
+ EXPORTING json = json
238
+ CHANGING data = my_data ).
239
+
240
+ " With name mapping
241
+ /ui2/cl_json=>deserialize(
242
+ EXPORTING json = json
243
+ name_mappings = VALUE #(
244
+ ( abap = 'FIELD1' json = 'field_one' )
245
+ ( abap = 'FIELD2' json = 'fieldTwo' ) )
246
+ CHANGING data = my_data ).
247
+
248
+ " Generate ABAP type from JSON
249
+ DATA(dref) = /ui2/cl_json=>generate( json = json ).
250
+ ```
251
+
252
+ ---
253
+
254
+ ## String/XString Conversion
255
+
256
+ ```abap
257
+ " String to xstring
258
+ DATA(xstr) = cl_abap_conv_codepage=>create_out( codepage = 'UTF-8' )->convert( str ).
259
+
260
+ " XString to string
261
+ DATA(str) = cl_abap_conv_codepage=>create_in( )->convert( xstr ).
262
+
263
+ " Using XCO
264
+ DATA(xstr_xco) = xco_cp=>string( str )->as_xstring( xco_cp_character=>code_page->utf_8 )->value.
265
+ DATA(str_xco) = xco_cp=>xstring( xstr )->as_string( xco_cp_character=>code_page->utf_8 )->value.
266
+ ```
267
+
268
+ ---
269
+
270
+ ## Compression
271
+
272
+ ```abap
273
+ " Compress
274
+ cl_abap_gzip=>compress_binary(
275
+ EXPORTING raw_in = xstr
276
+ IMPORTING gzip_out = compressed ).
277
+
278
+ " Decompress
279
+ cl_abap_gzip=>decompress_binary(
280
+ EXPORTING gzip_in = compressed
281
+ IMPORTING raw_out = decompressed ).
282
+ ```
283
+
284
+ ---
285
+
286
+ ## Object Serialization
287
+
288
+ Class must implement `IF_SERIALIZABLE_OBJECT`:
289
+
290
+ ```abap
291
+ CLASS zcl_demo DEFINITION.
292
+ PUBLIC SECTION.
293
+ INTERFACES if_serializable_object.
294
+ DATA value TYPE string.
295
+ ENDCLASS.
296
+
297
+ " Serialize
298
+ DATA(obj) = NEW zcl_demo( ).
299
+ obj->value = 'test'.
300
+ CALL TRANSFORMATION id SOURCE obj = obj RESULT XML DATA(xml).
301
+
302
+ " Deserialize
303
+ DATA obj2 TYPE REF TO zcl_demo.
304
+ CALL TRANSFORMATION id SOURCE XML xml RESULT obj = obj2.
305
+ ```
306
+
307
+ ---
308
+
309
+ ## Best Practices
310
+
311
+ 1. **Use sXML** for memory efficiency with large documents
312
+ 2. **Use XCO/ui2/cl_json** for simple JSON operations
313
+ 3. **Use CALL TRANSFORMATION** for complex conversions
314
+ 4. **Handle encoding** explicitly (UTF-8 recommended)
315
+ 5. **Implement IF_SERIALIZABLE_OBJECT** for object serialization