個人同事問過我這個問題:git
只要弄清楚Smart control的原理,就能回答這個問題。github
答案是: smart control能夠像普通的控件同樣在xml view中被定義和使用,可是必須結合OData annotation,不然沒有意義。以Smart control裏的Smart field爲例,詳細原理在個人博客Currency example – how Smart field works裏介紹。web
歸納起來,就是:app
1. Smart field自己也是一個控件,更準確的說是一個沒有UI輸出的控件,只是一個殼。在UI render的時候,smart field會演變成input field,仍是drop down list,仍是date picker,仍是F4 help,這些都須要有一個角色來告訴smart field,這個角色就是Odata annotation。Metadata裏定義的annotation會決定smart field最後的輸出方式。框架
2. Smart control能夠脫離Smart template框架單獨使用。也就是說您能夠建立一個很簡單的xml view,而後在這個view裏像使用普通控件那樣使用smart control,沒有任何問題。webapp
請參考這個例子(完整實現代碼在文末):spa
在XML view裏,我定義了一個Smart field,綁到Price這個property上。xml
在runtime時,它會自動被渲染成帶單位的currency field。後面那個EUR的currency field就像變戲法同樣生成了,其實就是sap:unit="CurrencyCode"這個annotation起的做用。至於框架是如何解析annotation並自動生成currency field,相關的代碼和分析都在上述提到的博客Currency example – how Smart field works裏。blog
該Fiori應用的目錄結構:rem