Skip to Content

备注:此篇blog主要沿用了Jerry的分析,谢谢。我再稍加一些基础的解析和自己的理解,以后随着对SAPUI5的不断理解,会继续修改和补充这篇blog.

准备工作:

1. debug的状态。

2.明确 loadMetadataAsync:true, 的意思是异步loadMetadata.

Image.png

3. 设置cache为以下模式,以保证每次的数据提取都是来自service.

Image.gif

一:核心点揭示。

My account最核心之处其实就是自己 define一个 metadata readycallBack

  1. Metadata设置成异步load时,metadata ready之后会自动call我们的callback,在callback里执行load Master list的动作。
  2. 如果metadata回来够快,Util里直接call callback
  3. 如果metadata没有ready,会触发attch 的function。

Image.png

二:根据结果来分析load的过程。

结果:metadata被框架load 成功。

Image.gif


分步:

1.

Render the SAPUI5 component with the given name and URL, if the child aggregation is already set and no properties have changed, the component is not recreated.

这个时候child aggregation is null, so createUi5Component.  Component是操作的第一步。

Image.gif

2.

通过setAggregation生产object, 通过createContent,生产一个instance,然后再通过 setComponentConfiguration, 去取Configuration。 因为调取metadata的servicelist是存放在Configuration文件里的。

Image.gif


Image.gif


Image.gif


3.

初始化OdataModel。

Image.gif


4.根据set application configuration 取到configuration里面的serviceList。


Image.gif

Image.gif

此时对比一下,取到的值与本地configuration文件里面的一致。

5.

Constructor for a new ODataModel,在这个过程中会去trigger matadata load.

Image.gif



6. 在异步的情况下会走attachMetadataLoaded。

Image.gif


7.

执行attach event, eventId = metadataLoaded.

Image.gif


Image.gif


Image.gif


fireevent: Fires the given event and notifies all listeners. Listeners must not change the content of the event.

然后再相继fire loaded event 和 metaloaded event.

Image.gif

Image.gif

8.

查看是否已经得到了metadata.

Image.gif


9.

attachmetadataloaded 执行完后,会自动触发callback function,。


Image.gif

Image.gif

jQuery 框架promise执行完。

Image.gif


10. 会再次执行call method, 此时就会进入到if的第一个语句,因为getServiceMetadata 已经ok,然后再支持callback 去取得service scheme version 等数据.

Image.gif


Image.gif


Image.gif


Image.gif



Image.gif


遗留问题:没有注意到master list的调取是怎么实现的。

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply