Tuesday, August 27, 2013

ABAP to JSON / SAP Internal Table to JSON

ABAP TO JSON Parser:
There is a standard class : CL_TREX_JSON_SERIALIZER available to convert Internal table to JSON format.
Usage:
DATA lr_json TYPE REF TO cl_trex_json_serializer.


  
CREATE OBJECT lr_json
    
EXPORTING
      
data lt_accounts.

  lr_json
->serialize( ).

  
DATA lv_jsonstr TYPE string.


  lv_jsonstr 
lr_json->get_data( ).



The standard class as is might not be give you an acceptable JSON format, make the following enhancements to fix this:
  1. Using Enhancement Framework, add a new Method “ZRECURSE” copying “RECURSE”
 DATA:
    l_type  
TYPE c ,
    l_comps 
TYPE i ,
    l_lines 
TYPE i ,
    l_index 
TYPE i ,
    l_value 
TYPE string .
  
FIELD-SYMBOLS:
     
TYPE ANY TABLE ,
     
TYPE any .

  
DESCRIBE FIELD data TYPE l_type COMPONENTS l_comps .

  
IF l_type cl_abap_typedescr=>typekind_table .
*   itab -> array
    
APPEND '[' TO me->fragments .
    
ASSIGN data TO  .
    l_lines 
lines ) .
    
LOOP AT  ASSIGNING  .
      
ADD TO l_index .
      zrecurse
 ) .
      
IF l_index < l_lines .
        
APPEND c_comma TO me->fragments .
      
ENDIF .
    
ENDLOOP .
    
APPEND ']' TO fragments .
  
ELSE .
    
IF l_comps IS INITIAL .
*     field -> scalar
*     todo: format
      l_value 
data .
      
REPLACE ALL OCCURRENCES OF '\' IN l_value WITH '\\' .
      
"REPLACE ALL OCCURRENCES OF '''' IN l_value WITH '\''' .
      
REPLACE ALL OCCURRENCES OF '"' IN l_value WITH '\"' .
      
"REPLACE ALL OCCURRENCES OF '&' IN l_value WITH '\&' .
      
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN l_value WITH '\r\n' .
      
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN l_value WITH '\n' .
      
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN l_value WITH '\t' .
      
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>backspace IN l_value WITH '\b' .
      
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN l_value WITH '\f' .
      
CONCATENATE '"' l_value '"' INTO l_value .
      
APPEND l_value TO me->fragments .
    
ELSE .
*     structure -> object
      
DATA l_typedescr TYPE REF TO cl_abap_structdescr .
      
FIELD-SYMBOLS  TYPE abap_compdescr .

      
APPEND '{' TO me->fragments .
      l_typedescr ?= cl_abap_typedescr
=>describe_by_datadata ) .
      
LOOP AT l_typedescr->components ASSIGNING  .
        l_index 
sy-tabix .
        
CONCATENATE '"' -name '"'  c_colon INTO l_value .
        
TRANSLATE l_value TO LOWER CASE .
        
APPEND l_value TO me->fragments .
        
ASSIGN COMPONENT -name OF STRUCTURE data TO  .
        zrecurse
 ) .
        
IF l_index < l_comps .
          
APPEND c_comma TO me->fragments .
        
ENDIF .
      
ENDLOOP .
      
APPEND '}' TO me->fragments .
    
ENDIF .
  
ENDIF .
  1. Create a new method “ZSERIALIZE”  copying method “SERIALIZE” and put the below code
METHOD zserialize .
  
FIELD-SYMBOLS  TYPE data .

  
ASSIGN me->data_ref->TO  .
  zrecurse
 ) .
ENDMETHOD.
  1. Now change the usage to the new method “zserialize” instead of “serialize” as shown below
  DATA lr_json TYPE REF TO cl_trex_json_serializer.


  
CREATE OBJECT lr_json
    
EXPORTING
      
data lt_accounts.

  lr_json
->zserialize( ).

  
DATA lv_jsonstr TYPE string.


  lv_jsonstr 
lr_json->get_data( ).

Wednesday, August 7, 2013

SAP NETWEAVER GATEWAY PLUGIN

How to add SAP Server connection in Eclipse

Goto Window->Preferences->SAP Netweaver Gateway->Connections and click on Add

If you want to explore Services on the Gateway system, do the below
Windows->Show View->Service Catalog

The button "Manage Connections"  will only work if atleast one Connection is maintained as above.