sapbuddy-dsh 0.0.5 → 0.0.7

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 (58) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +34 -122
  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/sap-tools/adtManager.d.ts +11 -1
  9. package/dist/sap-tools/adtManager.js +176 -9
  10. package/dist/sap-tools/connections-store.js +4 -1
  11. package/dist/sap-tools/execution.js +1 -1
  12. package/dist/sap-tools/tools/activationResult.d.ts +4 -2
  13. package/dist/sap-tools/tools/activationResult.js +33 -4
  14. package/dist/sap-tools/tools/writeTools.js +11 -9
  15. package/dist/tools.js +5 -3
  16. package/package.json +5 -5
  17. package/skills/abap-code-review/SKILL.md +75 -75
  18. package/skills/abap-code-review/assets/report-template.html +142 -142
  19. package/skills/abap-code-review/references/checklist.md +114 -114
  20. package/skills/abap-explain/SKILL.md +126 -126
  21. package/skills/abap-templates/SKILL.md +764 -764
  22. package/skills/abap-wiki/SKILL.md +104 -104
  23. package/skills/clean-abap/SKILL.md +91 -91
  24. package/skills/clean-abap/references/CleanABAP_zh.md +4309 -4309
  25. package/skills/dev-write/SKILL.md +137 -137
  26. package/skills/sap-abap-skills/README.md +205 -205
  27. package/skills/sap-abap-skills/SKILL.md +498 -498
  28. package/skills/sap-abap-skills/references/abap-dictionary.md +211 -211
  29. package/skills/sap-abap-skills/references/abap-sql.md +588 -588
  30. package/skills/sap-abap-skills/references/amdp.md +279 -279
  31. package/skills/sap-abap-skills/references/authorization.md +149 -149
  32. package/skills/sap-abap-skills/references/bits-bytes.md +92 -92
  33. package/skills/sap-abap-skills/references/builtin-functions.md +373 -373
  34. package/skills/sap-abap-skills/references/cds-views.md +412 -412
  35. package/skills/sap-abap-skills/references/cloud-development.md +299 -299
  36. package/skills/sap-abap-skills/references/constructor-expressions.md +458 -458
  37. package/skills/sap-abap-skills/references/date-time.md +415 -415
  38. package/skills/sap-abap-skills/references/design-patterns.md +292 -292
  39. package/skills/sap-abap-skills/references/dynamic-programming.md +426 -426
  40. package/skills/sap-abap-skills/references/exceptions.md +432 -432
  41. package/skills/sap-abap-skills/references/generative-ai.md +180 -180
  42. package/skills/sap-abap-skills/references/internal-tables.md +578 -578
  43. package/skills/sap-abap-skills/references/numeric-operations.md +219 -219
  44. package/skills/sap-abap-skills/references/object-orientation.md +518 -518
  45. package/skills/sap-abap-skills/references/performance.md +428 -428
  46. package/skills/sap-abap-skills/references/program-flow.md +302 -302
  47. package/skills/sap-abap-skills/references/rap-eml.md +549 -549
  48. package/skills/sap-abap-skills/references/released-classes.md +308 -308
  49. package/skills/sap-abap-skills/references/sap-luw.md +203 -203
  50. package/skills/sap-abap-skills/references/skill-reference-guide.md +98 -98
  51. package/skills/sap-abap-skills/references/sql-hierarchies.md +180 -180
  52. package/skills/sap-abap-skills/references/string-processing.md +488 -488
  53. package/skills/sap-abap-skills/references/table-grouping.md +150 -150
  54. package/skills/sap-abap-skills/references/tool-guide.md +285 -285
  55. package/skills/sap-abap-skills/references/unit-testing.md +512 -512
  56. package/skills/sap-abap-skills/references/where-conditions.md +223 -223
  57. package/skills/sap-abap-skills/references/xml-json.md +315 -315
  58. 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