zl程序教程

您现在的位置是:首页 >  其他

当前栏目

SAP UI5 异步加载 metadata 的代码实现

SAP异步代码 实现 加载 UI5 metadata
2023-09-14 09:02:42 时间

Created by Jerry Wang, last modified on Sep 14, 2015

  • sMockdataBaseUrl
  • oMockServer
  • oConfig
  • loadMetadataAsync
  • useBatch
  • mockedDataSource
  • serviceUrl
  • sap.ushell
  • sap-language
  • bUseV2Model
  • v2
  • attachMetadataLoaded

遍历application配置的所有service:

clipboard1

取得异步加载flag:

clipboard2

准备创建model:

clipboard3

new 语句会导致Metadata的加载:

clipboard4

成功取回后,trigger application注册的event handler:

clipboard5

clipboard6

application的处理代码在此处执行:

clipboard7


2022-8-18 更新

在这里插入图片描述
从源代码实现能看出,SAP UI5 元数据只支持 xml 格式的返回:

METHOD /iwcor/if_ds_svc_proc~get_supported_formats.
    DATA:
      ls_format TYPE /iwcor/if_ds_svc_proc=>format_s,
      lv_service_version type string.

    lv_service_version = me->/iwcor/if_ds_svc~get_version( ).
    CASE lv_service_version.

      WHEN /iwcor/if_ds_edm=>gc_data_service_version_20.

        CASE iv_processor_type.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_entity_set.
            " atom
            add_content_type atom atom appl_atom_xml_feed.
            add_content_type atom atom appl_atom_xml.
            " json
            add_content_type json json appl_json.
            add_content_type json json appl_json_odata_verbose.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_entity OR
               /iwcor/if_ds_svc_proc~gc_proc_type_func_import_ent.
            " atom
            add_content_type atom atom appl_atom_xml_entry.
            add_content_type atom atom appl_atom_xml.
            " json
            add_content_type json json appl_json.
            add_content_type json json appl_json_odata_verbose.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_service.
            " atom
            add_content_type atom atom appl_atomsvc_xml.
            " json
            add_content_type json json appl_json.
            add_content_type json json appl_json_odata_verbose.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_metadata.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_func_import OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_cprop OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_sprop OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_links OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_link.
            " xml
            add_content_type xml xml appl_xml.
            " json
            add_content_type json json appl_json.
            add_content_type json json appl_json_odata_verbose.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_entity_media OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_vprop OR
               /iwcor/if_ds_svc_proc~gc_proc_type_func_import_value.
            " all content types are supported by default
            CLEAR et_format.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_batch.
            ls_format-abap_format  = 'batch'. "#EC NOTEXT
            ls_format-format       = 'batch'. "#EC NOTEXT
            ls_format-content_type = /iwcor/if_rest_media_type=>gc_multipart_mixed.
            APPEND ls_format TO et_format.
        ENDCASE.


      WHEN /iwcor/if_ds_edm=>gc_data_service_version_30.
*       Within OData 3.0 specification there is a paradigm change.
*       The name of the format json was changed to verbosejson. Therefore we have
*       the following format transitions:
*        V2          V3(format)     V3 ('format_abap' used within the Library)
*       json  =>  verbosejson   =>  json
*

        CASE iv_processor_type.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_entity_set.
            " atom
            add_content_type atom atom appl_atom_xml_feed.
            add_content_type atom atom appl_atom_xml.
            " json
            add_content_type json verbosejson appl_json_odata_verbose.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_entity OR
               /iwcor/if_ds_svc_proc~gc_proc_type_func_import_ent.
            " atom
            add_content_type atom atom appl_atom_xml_entry.
            add_content_type atom atom appl_atom_xml.
            " json
            add_content_type json verbosejson appl_json_odata_verbose.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_service.
            " atom
            add_content_type atom atom appl_atomsvc_xml.
            " json
            add_content_type json verbosejson appl_json_odata_verbose.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_metadata.
            " xml
            add_content_type xml xml appl_xml.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_func_import OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_cprop OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_sprop OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_links OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_link.
            " xml
            add_content_type xml xml appl_xml.
            " json
            add_content_type json verbosejson appl_json_odata_verbose.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_entity_media OR
               /iwcor/if_ds_svc_proc~gc_proc_type_entity_vprop OR
               /iwcor/if_ds_svc_proc~gc_proc_type_func_import_value.
            " all content types are supported by default
            CLEAR et_format.
          WHEN /iwcor/if_ds_svc_proc~gc_proc_type_batch.
            ls_format-abap_format  = 'batch'. "#EC NOTEXT
            ls_format-format       = 'batch'. "#EC NOTEXT
            ls_format-content_type = /iwcor/if_rest_media_type=>gc_multipart_mixed.
            APPEND ls_format TO et_format.
        ENDCASE.

      WHEN OTHERS.
        ASSERT 1 = 2.
    ENDCASE.

  ENDMETHOD.                    "/iwcor/if_ds_svc_proc~get_supported_formats