定址

使用者介面工具箱中的所有視圖都支援定址,包括在使用者介面頁面中定義的其他視圖內形成巢狀的視圖。

定址方法是階層式樹狀結構,其根定義為顯示頁面中最上層位置的 / 。 定址方法的結構類似於用於目錄的結構。 載入頁面時,會新增樹狀結構中的後續節點。

可用的節點有兩種基本類型:「儲存器」和「元素」。 儲存器節點包括其他節點,例如元素、視圖及其他儲存器節點。
限制: 已淘汰的 Coach 工具箱中的視圖無法使用所述的定址方法來定址。

一般而言,當某些視圖中使用視圖事件或公式所呼叫的函數時,您會在使用者介面視圖中使用定址。 函數可以行內指定,例如在頁面上自訂 HTML 的 JavaScript Script 區塊中,或在視圖的 行為 內容中的「行內 JavaScript 」區段中。

定址樣式

支援相對和絕對定址樣式。 使用 / 啟動參照意味著絕對參照,例如,從視圖樹狀結構的根層次開始。 在路徑開頭省略 / 表示 "from where I am"。 在參照中使用 .. 會導致參照回復層次,因為檔案目錄樹狀結構會行為。

在公式中,參照是從您設定其公式之欄位的參照點計算而來:
  • 與現行欄位位於相同層次的欄位會使用欄位名稱來參照 (而不是在參照開頭使用 / )。
  • 上方一個層次的欄位可以參照為 ../FieldOneLevelAboveMe
  • 上方兩個層次的欄位會參照為 ../../FieldOneLevelAboveMe,依此類推。
  • 在某些情況下,使用 ../ 的相對定址可能很方便。

用來存取視圖的 JavaScript 方法

從自訂 HTML
若要在 JavaScript 區塊中存取視圖,請使用頁面廣域視圖及其 page.ui.get(ControlId path) 方法。 例如,假設您有一個名為 Text1 的「文字」視圖,且基於驗證目的,您想要在從按鈕的 On click 事件呼叫的函數中存取它。 如果要這麼做,請使用類似下列範例的程式碼:
var myTextField = page.ui.get("/Text1");
myTextField.getValue() // returns the value in the text field
myTextField.focus() // would set the focus to the text field.
從視圖的行內 JavaScript
若要從儲存器視圖中包含的功能存取視圖,請使用下列其中一個選項:
bpmEventHelper.ui.getView(ControlId [, thisview])
thisview.ui.get(ControlId)
其中 thisview 定義在儲存器視圖中。
例如,假設您已定義儲存器視圖,其中包含兩個名為 Text1Select1 的視圖,且基於驗證目的,您想要從 validateControls 函數 (從母項視圖中按鈕的 On click 事件呼叫) 存取兩個巢狀視圖。 若要存取視圖,請在儲存器視圖 行為 內容上的行內 JavaScript 區段中放置類似於下列範例的程式碼:
var thisview = this; // required

this.validateControls = function(button)
{
    var textControl = bpmEventHelper.ui.getView("Text1", thisview);
    var selectControl =  thisview.ui.get("Select1");
    textControl.getValue(); // returns the value of the SPARK control in 
    this coach view with the ControlId "Text1"
    selectControl.getSelectedItem(); // returns the selected value in the 
    SPARK control in this coach view with the ControlId "Select1"
}
		
一般而言,如果要存取 Address 視圖內的 FirstName 文字視圖,請使用絕對位址來處理它,如下所示:
"/Address/FirstName" or "${Address}.ui.get('FirstName')"
在公式中
可以使用下列語法在公式中參照視圖:
  • ${FieldName} 是指其 control id = FieldName的視圖。
  • @{FieldName} 是指其 control id = FieldName的視圖值。
  • ${FieldName).getValue()@{FieldName} 是相等的。

不可定址的佈置視圖

必須從位址中省略純粹用於佈置目的的視圖。 例如,您可以使用 /FirstName 位址 (而非 /VerticalLayout/FirstName) 來處理 VerticalLayout 視圖中巢狀的 FirstName 視圖。
提示: 若要從位址中排除不可定址的自訂儲存器視圖,請在自訂視圖的 load 函數中,於行內 JavaScript 區段的 行為下,將下列內容設為 true :
this.constructor.prototype.IS_ADDRESS_INVISIBLE = true;

可定址自訂視圖

當您建立可定址的自訂視圖時,請在 load 方法中呼叫下列函數:
bpmEventHelper.ui.loadView(this)
如果您的自訂視圖具有內容框,請改為呼叫下列函數:
bpmEventHelper.ui.loadContainer(this)
在視圖的 unload 函數中,呼叫適當的函數:
bpmEventHelper.ui.unloadView(this)
bpmEventHelper.ui.unloadContainer(this)

表格中對等節點欄位的參照

在表格中使用公式時,您可以使用在欄位名稱後面具有 = 的語法來存取 my 列中的欄位。 例如,假設您已在表格中定義 Quantity (Integer)、 Cost (Decimal) 及 Total (Decimal) 視圖。 您可以使用下列公式來指定 Total 視圖的值:
@{Quantity=} * @{Cost=}
請注意, Total 視圖不需要任何資料連結,這表示表格中不需要任何總計資料欄位。

helper 函數

例如,您可以在 bpmext.ui.View 名稱空間內使用 helper 函數 getParentgetSibling 。 在範例中,很容易在不知道整個階層的情況下取得容器視圖或對等節點視圖。

例如,假設您有一個名為 CV的儲存器視圖,其中包括兩個名為 Button1Button2的視圖。 假設 btn1ViewButton1bpmext.ui.View 物件,您可以使用 btn1View.ui.get(“CV”)btn1View.ui.getParent();來取得 CV 。 您可以使用 bt1View.ui.getSibling(“Button2”)來取得 Button2