檢視欄位事件

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