Creating ADSO from ABAP can be easily achieved by cl_rso_adso_api=>create

DATA(ls_flags) = VALUE cl_rso_adso_api=>tn_s_adsoflags( direct_update = abap_true  ).

TRY.
          cl_rso_adso_api=>create(
            EXPORTING
              i_adsonm                      = "Name of the ADSO
              i_infoarea                    = "Infoarea name
              i_s_adsoflags                 = ls_flags
              i_t_object                    = "Table with all fields
              i_t_dimension                 = "Dimension
              i_t_key                       = "String table with key
          IMPORTING
            e_t_msg                       =  DATA(lt_msg)
          ).

        CATCH cx_rs_all_msg INTO DATA(lr_msg).

          cl_demo_output=>display(
            EXPORTING
              data = lr_msg->get_longtext( )
              name = 'Error'  ).
      ENDTRY.

Full usage examples can be found here