天天看点

SAP Fiori Elements Object Page页面渲染原理

I have already been working with Smart template for one month. Since now no frontend JavaScript code for application is generated but instead the template maintained centrally by SAP is used in the runtime, so it might be a little bit difficult for trouble shooting when you meet with issues, for example, the object page is blank after navigation, or some field in object page is empty, and so on.

I tried to explain my personal understanding about how object page is rendered in the runtime. For list report page, the logic is the same. Since I am not expert on smart template, so please kindly point it out if there is something wrong in this blog.

Per my understanding, I will explain the technical implementation of Smart Template as: An XML view with hierarchical XML fragments where Smart Controls works with the help of OData annotation.

Design time

Where do we start to do self-study on Smart Template?

Switch any one of application generated by Smart Template to debug mode using Ctrl+Alt+Shift+P, refresh and you can observe the following XML files are loaded. The Details.view.xml contains the overall definition of object page view.

SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理

Till now, the source code of these template files have perfectly explained why you have to define annotations such as LineItem and Identification etc. The annotations you find in the template file work as a contract between Smart Template and developers who consume them. If developers strictly follow the protocol, the whole thing orchestrates well.

Runtime

How are the above mentioned fragment, extension point and other stuff loaded in the runtime? You should already recognize several tags like with, repeat and if in XML view. How are these tags parsed in the runtime?

SAP Fiori Elements Object Page页面渲染原理

Since the details.view.xml is loaded in the runtime into memory as a DOM and parsed via depth-first search recursively, this is so called “Pre-Process” as indicated by the file name XMLPreprocessor-dbg.js itself. In this file you can find a big SWITCH CASE statement and each tag is handled in different case statement accordingly.

SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理

How to get pre-processing result

Set a breakpoint on line 187 of XMLView-dbg.js, and the XML source code is just stored in variable this._xContent.

SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理
SAP Fiori Elements Object Page页面渲染原理

继续阅读