檢視欄位事件

image.png

Ninext 為 Ninox 的檢視加入了事件:點選檢視欄位中的某一行(onclick),以及在表格檢視中選取一筆記錄(onselected)。在您的公式中,這些函式必須完全照這樣以小寫書寫。

這些事件可在 Ninext 設定的「介面增強」區段中停用:檢視事件 (onClick, onSelect)(預設為啟用)。

點選檢視欄位中的某一行:onclick

傳給 onclick 的 JSON 屬性速覽

屬性說明範例/用法
previousID點選之前在檢視中被選取之記錄的 ID;若當時沒有選取任何記錄,則為空。「A1」
targetID被點選之記錄的 ID。「A3」
targetLineNum使用者所點選的列號(從零開始)。3
targetColumnNum檢視中被點選的欄號(從零開始)。4
targetColumnValue被點選儲存格中顯示的文字值。「Lisa」
targetColumnCaption來自欄位設定的欄標題(取自 "caption" 或 "field.caption")。「First Name」

一般流程

  1. 在檢視欄位的公式中定義 onclick 函式
    onclick 函式必須寫在檢視欄位的公式裡。它會收到一個物件(名為 "event"),內含上述各項屬性。在這個函式中,this 代表帶有該檢視欄位的記錄,而不是被點選的那一行:被點選的那一行要透過 event.targetID 取得。
  2. 執行自訂程式碼
    當使用者點選或觸碰檢視中的某個儲存格時,Ninext 的掛鉤會執行 onclick 函式。這段腳本接著就可以,例如:
    • 更新某筆記錄的屬性(例如切換一個布林欄位)。
    • 把被點選記錄的 ID 存進指定的欄位。
    • 依被點選的欄觸發條件式動作。
  3. 回傳檢視的內容
    在函式的最後,公式必須回傳檢視的內容(例如 "select Customer")。這會告訴 Ninox 腳本執行後要顯示哪些記錄。

實作範例

完整範例

Ninox
function onclick(event : any) do
    'ID of selected customer' := event.targetID;
    var selCustomer := first(select Customer where Id = event.targetID);
    debug("onclick");
    if event.targetColumnCaption like "checked" then
        selCustomer.(Checked := not Checked);
        true
    else
        if event.targetColumnNum = 0 then
            true
        else
            false
        end
    end
end;
select Customer

說明:

  • 這個函式一開始先把被點選記錄的 ID 存進「ID of selected customer」欄位。
  • 接著從「Customer」表格中取出對應的記錄。
  • 如果被點選儲存格的欄標題含有「checked」,就切換該筆記錄的「Checked」欄位,並回傳 true 表示這次點選已被處理。
  • 否則,函式會依被點選的欄號是否為 0 回傳 true 或 false。
  • 最後,公式回傳「select Customer」,在腳本執行後顯示檢視的內容。

最簡範例

Ninox
function onclick(event : any) do
     'ID of selected customer' := event.targetID;
     debug("Clicked on Customer " + event.targetID);
     "No specific action is performed here.";
     false
 end;

select Customer

說明:

  • 這段腳本只是把被點選記錄的 ID 存起來,並記下一則除錯訊息。
  • 回傳 false 表示對於未特別處理的動作,讓預設行為照常進行。
  • 一如往例,公式以「select Customer」作結,以顯示檢視的內容。

務必記住的重點

  • 要寫在檢視欄位的公式裡:
    onclick 函式必須直接定義在檢視欄位的公式中,而不是寫在觸發器或應用程式的其他地方。
  • 回傳檢視的內容:
    與其他期待布林值的函式不同,公式的最後一行必須回傳檢視的內容(例如「select Customer」)。
  • onclick 的回傳值:
    true 表示這次點選已被處理:Ninox 不會開啟被點選的記錄。false 或沒有回傳值,則讓 Ninox 照常運作並開啟該記錄。點選分組列不會呼叫 onclick。
  • 單獨求值的函式:
    Ninext 只會從公式中取出 onclick 函式,然後單獨對它求值。因此,它看不到公式中其他地方宣告的變數或其他函式:請在 onclick 內部宣告它所需要的一切。
  • 善用事件參數:
    利用「event」物件所提供的資訊(previousID、targetID、targetLineNum、targetColumnNum、targetColumnValue、targetColumnCaption),依點選的情境調整您的動作。
  • 在不同裝置上測試:
    請確認函式在桌機與觸控裝置上都能正確運作,因為這個掛鉤同時處理「click」與「touchend」事件。

在表格檢視中選取一筆記錄:onselected

每當在表格檢視(表格的記錄清單)中選取某一行時,Ninext 都會呼叫 onselected() 函式。請在表格讀取權限的公式(「Readable if」)中宣告它,不帶參數。在這個函式中,this 代表被選取的記錄。它的回傳值不會被使用,Ninox 會照常開啟該記錄。

Ninox
function onselected() do
    debug("customer->onselect : " + this)
end;
true

此處,在 Ninext 面板開啟的情況下,每次選取都會在除錯追蹤器中寫入一行,概述所選的記錄。

公式仍保有其原本的作用:Ninox 會以它的最後一個值來決定誰可以讀取該表格。因此,請以您平常的讀取條件作為公式的結尾;如本例中的 true,對於開放給所有人的表格,不會改變其讀取權限。與 onclick 一樣,這個函式會被單獨從公式中取出。