get_json_schema_v2

in src/zgoog_i_demo_struct_output_imp.prog.abap [0:0]


  METHOD get_json_schema_v2.

    DATA(lo_metadata_provider) = /iwbep/cl_mgw_med_provider=>get_med_provider_wo_cache( ).

    TRY.
        DATA(lo_model) = lo_metadata_provider->get_model(
           EXPORTING
             iv_technical_name           = CONV #( iv_v2_model )
             iv_version                  = 0001
             ).

        DATA(lo_entity) = lo_model->get_entity_type( CONV #( iv_v2_entity ) ).

        DATA(lt_properties) = lo_entity->get_properties( ).

        DATA: lt_properties_comp TYPE abap_component_tab.

        DATA(ls_schema_object) = VALUE t_schema_object( type = 'OBJECT' ).

        LOOP AT lt_properties REFERENCE INTO DATA(ls_properties).

          DATA(lo_property_inner_field) =
            cl_abap_structdescr=>get(
              VALUE #(
                ( name = 'TYPE' type = cl_abap_elemdescr=>get_string( ) ) ) ).

          APPEND VALUE #( name = ls_properties->name
                          type = lo_property_inner_field )
                          TO lt_properties_comp.
        ENDLOOP.

        DATA(lo_properties_struc) = cl_abap_structdescr=>get( lt_properties_comp ).
        CREATE DATA ls_schema_object-properties TYPE HANDLE lo_properties_struc.
        ASSIGN ls_schema_object-properties->* TO FIELD-SYMBOL(<ls_properties>).

        LOOP AT lt_properties REFERENCE INTO DATA(ls_properties_upd).
          DATA(lv_index) = sy-tabix.

          ASSIGN COMPONENT lv_index OF STRUCTURE <ls_properties> TO FIELD-SYMBOL(<ls_comp_outer>).
          ASSIGN COMPONENT 1 OF STRUCTURE <ls_comp_outer> TO FIELD-SYMBOL(<lv_comp_inner>).

          DATA(lv_edm_type) = ls_properties_upd->property->/iwbep/if_mgw_odata_re_prop~get_core_type( ).

          <lv_comp_inner> = edm_to_swagger( CONV #( lv_edm_type+4 ) ).
        ENDLOOP.

        rv_schema = /ui2/cl_json=>serialize(
                          data = ls_schema_object
                          ts_as_iso8601 = abap_true
                          compress      = abap_true
                          pretty_name   = /ui2/cl_json=>pretty_mode-low_case ).

      CATCH /iwbep/cx_mgw_med_exception INTO DATA(lo_mgw_ex).
        MESSAGE lo_mgw_ex->get_text( ) TYPE 'I'.
        RETURN.
    ENDTRY.