SAP UI5 异步加载 metadata 的代码实现
2023-09-14 09:03:55 时间
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:
取得异步加载flag:
准备创建model:
new 语句会导致Metadata的加载:
成功取回后,trigger application注册的event handler:
application的处理代码在此处执行:
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
相关文章
- 4. SAP UI5 XML 视图(View)初探
- SAP UI5 初学者教程之十三 - 如何添加自定义 CSS 类试读版
- SAP UI5应用里使用jQuery.ajax异步读取xml文档并显示在SAP UI5应用界面上
- SAP WebIDE里的JavaScript代码检查code check
- SAP CRM WebClient UI注释引起的错误消息:Uncaught SyntaxError - unexpected end of input
- SAP ABAP, Fiori, Android和Hybris里的异步操作
- 命令行里对SAP Spartacus执行命令ng test core
- SAP Spartacus全局配置里和路由Route相关的配置
- SAP CRM呼叫中心异步搜索功能的实现
- SAP One Order redesign写操作的详细设计
- SAP CRM one order Appointment table
- SAP S/4HANA product search generated SQL statement的生产原理介绍
- SAP Fiori OData取数据的同步模式和异步模式比较
- 从丁哥那里学到的两个 SAP UI5 技能