天天看點

Smart template的控件能否當成普通控件來用

我的同僚問過我這個問題:

Smart template的控件能否當成普通控件來用

隻要弄清楚Smart control的原理,就能回答這個問題。

答案是: smart control可以像普通的控件一樣在xml view中被定義和使用,但是必須結合OData annotation,否則沒有意義。以Smart control裡的Smart field為例,詳細原理在我的部落格Currency example – how Smart field works裡介紹。

概括起來,就是:

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,沒有任何問題。

請參考這個例子(完整實作代碼在文末):

Smart template的控件能否當成普通控件來用

在XML view裡,我定義了一個Smart field,綁到Price這個property上。

Smart template的控件能否當成普通控件來用

在runtime時,它會自動被渲染成帶機關的currency field。後面那個EUR的currency field就像變戲法一樣生成了,其實就是sap:unit="CurrencyCode"這個annotation起的作用。至于架構是如何解析annotation并自動生成currency field,相關的代碼和分析都在上述提到的部落格Currency example – how Smart field works裡。

Smart template的控件能否當成普通控件來用

該Fiori應用的目錄結構:

Smart template的控件能否當成普通控件來用