控制台
控制台可讓您在把一段 Ninox 程式碼放進資料庫之前先試一試:寫下它、執行它,立即看到結果。
控制台自 3.1 版起即已提供。偵錯器、「檢查」、「格式化」與 JavaScript 自動完成,則隨 3.2.0 版(測試版)推出。
控制台分頁讓您撰寫 Ninox 程式碼並立即執行,就像在直譯器中一樣,然後進行偵錯:不執行而檢查、逐步偵錯器、重播偵錯器。
此分頁僅供管理員使用。它只顯示其圖示——一個終端機視窗——位於除錯追蹤器與錯誤分頁之間;滑鼠停在上面時會顯示其名稱。它可在 Ninext 設定的「腳本管理器」區段中停用。
選擇執行上下文
程式碼會在某筆記錄的上下文中執行,就像該記錄所屬表格中的公式一樣——或者不指定任何記錄:
| 上下文 | 效果 |
|---|---|
| 無環境 | 沒有記錄:程式碼會像全域程式碼一樣求值。 |
| 即時記錄 | Ninox 中顯示在最前面的記錄。上下文會隨著您切換記錄而改變。 |
| 記錄 | 您選擇的記錄:可從 Ninox 視窗中開啟的記錄中挑選,或透過 選擇其他記錄… 開啟選擇器(表格、搜尋、記錄清單)。 |
| 公式 | 由您撰寫的公式所傳回的記錄,例如 record(Customer, 12)。每次執行時,都會重新求值該公式。 |
上下文列會顯示所選的上下文;點選其叉號即可將它重設。
撰寫程式碼
控制台的編輯器提供:
- Ninox 的語法醒目提示;
- 函式、表格、欄位與關鍵字的自動完成,可在輸入時出現,或按 Ctrl + 空白鍵叫出;
- 輸入時為錯誤(紅色波浪線)與警告(琥珀色點線)加上底線,並在邊欄顯示 ⛔ 或 ⚠ 標記;
- 醒目標示所選字詞的其他出現位置;
- 滑鼠停在編輯器上時,右上角會出現複製按鈕;
- 編輯器下方有一個控點,可調整其高度。
原生區塊中的 JavaScript 自動完成
在 #{ … }# 區塊中,控制台提供與瀏覽器主控台相同的輸入輔助,並依區塊實際接收到的內容調整:
- 可見的 Ninox 變數與參數,以其 JavaScript 形式呈現,並附上型別;
- 區域 Ninox 函式、
ui、database,以及區塊宣告為:callback或:async時的callback; - 輸入點號後,列出物件的成員——若是記錄,則為其欄位名稱;不是合法 JavaScript 識別碼的名稱,會以
['…']的形式插入; - 在標頭
#{:中列出型別;在:nid(或:rid(之後,列出表格清單。
此輔助功能只存在於控制台中。
執行

綠色的執行按鈕會執行程式碼,按 Ctrl + Enter(Mac 上為 ⌘ + Enter)也一樣。其箭頭提供三種模式:
| 模式 | 效果 |
|---|---|
| 執行 | 一次執行完程式碼,並顯示結果。 |
| 重播 | 執行程式碼一次,然後讓您向前、向後瀏覽其執行過程。 |
| 逐步執行 | 逐條指令執行程式碼,並在您決定的位置停下。 |
所選的模式會被記住;按鈕會改用該模式的名稱,快捷鍵也會啟動這個模式。選擇逐步執行或重播時,該偵錯器的工具列會立即出現在編輯器下方,其命令都已就位但處於停用狀態:在啟動之前,不會執行任何東西。成功執行後,編輯器中的程式碼會重新格式化;歷史則保留您原本所寫的文字。
解讀結果

結果會依序堆疊,最新的在最上方;控制台最多保留二十筆。每個結果都會標示其型別、上下文、日期、時間與執行時間;點選其標頭可將它摺疊,點選其叉號可將它刪除,而清除會清空整個清單。
- 簡單值會附帶複製按鈕顯示。
- 記錄會附帶一個可在 Ninox 中開啟它的按鈕,其欄位則以樹狀顯示。
- 記錄清單會以與 Ninox 檢視相同的方式顯示:條件格式、相片縮圖、色塊標記、欄寬。每個檢視一個分頁,依照 Ninox 的順序排列;您無權查看的檢視會被隱藏。當分頁無法全部容納時,… 按鈕(「更多檢視」)會列出超出顯示範圍的分頁。點選某一行即可開啟該記錄,捲動時每次載入 100 行。
- 物件與清單會以可展開的樹狀顯示;每個值都可以複製,點一下即可開啟記錄。
- 含有 JSON 的文字會原樣顯示;需要時,可用樹按鈕將其展開。
- 超過 100,000 個字元的文字會立即以截斷方式顯示,並附有顯示全部;複製則一律複製完整的文字。
求值時間較長時,會出現等待指示器。
不執行而檢查
檢查(Ctrl + Shift + Enter,Mac 上為 ⌘ + Shift + Enter)會編譯程式碼而不執行它:對資料毫無影響。它會回報 Ninox 的錯誤與警告,並套用 Ninext 特有的檢查:
- 放在
do as server之中的介面函式或原生區塊——它們在那裡不會有任何效果; - 宣告後從未讀取的變數;
- 原生區塊的 JavaScript 語法;
- 傳給
html()的 HTML 與 CSS。
結果會顯示在列中,游標則會移到第一個診斷處。當兩個型別不相符時,說明會指出是哪兩個。若程式碼有效,就會加以格式化。
格式化
格式化(Ctrl + Shift + F,Mac 上為 ⌘ + Shift + F)會把程式碼整理妥當,而不執行它:縮排、運算子前後的空格、依 Ninox 顯示方式書寫的欄位名稱。原生區塊 #{ … }# 中的 JavaScript 也會一併格式化:寫成一整行的區塊,會在其所在行的下方展開。
含有錯誤的程式碼必須先修正;若格式化可能導致部分文字遺失,它就不會執行,並會加以說明。
Ninox 的腳本編輯器中也有同樣的按鈕:滑鼠停在編輯器上時,它會出現在右上角,鍵盤快捷鍵在那裡同樣有效。
逐步偵錯器

中斷點
- 在左側邊欄或行號上點一下,即可設定中斷點(紅色圓點);再點一下即可移除。
- 按右鍵或 Alt + 點擊,會開啟中斷點條件面板:只有在您的條件為真時,執行才會在此停下,例如
i > 10。同一個面板也可以停用中斷點而不刪除它(灰色圓環),之後再將它重新啟用。條件中斷點以琥珀色圓點表示。 - 條件在求值時不會存取資料庫,只能使用簡單的函式(
count、length、text、upper、lower、contains…)。若某個條件無法求值,為安全起見,執行會停下。 - 只要設定了任何啟用中的中斷點,執行也會在該處停下,接著以逐步執行的方式繼續。
命令
工作階段啟動時,會暫停在第一條指令上。
| 命令 | 效果 |
|---|---|
| 下一步 | 執行目前的指令,並在下一條指令之前停下。 |
| 子步驟 | 逐個子運算式前進,並顯示所得的值。在函式呼叫或架構中的公式欄位上,會進入其程式碼。 |
| 跳出 | 執行完目前的函式,並返回呼叫方。 |
| 繼續 | 一路執行到下一個中斷點,或直到結束。 |
| 停止 | 放棄執行。 |
工具列較窄時,命令只會顯示其圖示;滑鼠停在上面時會顯示其名稱。工具列上的資訊按鈕(ⓘ)會展開偵錯器的使用說明,而執行結束後出現的叉號則會關閉其面板。
當執行進入某個函式或公式時,其程式碼會在一個堆疊框架中開啟,並像在 Ninox 中一樣從右側滑入。您可以在其中設定中斷點:它們依函式名稱分類,適用於該函式的所有呼叫以及之後的執行,並會在重新載入頁面時消失。架構中公式的框架會標有公式字樣。框架左緣的控點可調整它覆蓋下方框架的比例。一個 #{ … }# 區塊只算一步。
變數
每一步中,此步驟已知的變數面板都會顯示每個變數的值與型別;值可以展開、複製,點一下即可開啟記錄。存在但超出作用範圍的變數會以灰色顯示。
須知
每次暫停時,執行確實會被擱置,而資料庫在此期間仍持續運作:其他使用者、API、觸發器。即使您停止執行,已執行的部分仍會生效。暫停超過十分鐘,執行就會結束。
重播偵錯器
程式碼會真正地執行,只執行一次,一氣呵成。之後您可以使用逐步執行的命令——下一步、子步驟、跳出、繼續——外加第一步與上一步,向前、向後瀏覽其執行過程。步驟清單會列出每一步所得的值;點選某一步即可直接前往。重播以大步計算:每條已執行的指令一步,每次循環一步,並顯示循環變數的值。縮排的子步驟帶有其所屬大步的編號(3.1、3.2……),並另外計數(「另有 6 個子步驟」);跳出也會從子步驟回到承載它的大步。堆疊框架與變數面板都與逐步執行時相同。非常適合在不重新執行程式碼的情況下,了解究竟發生了什麼事。
限制:
- 記錄會以其目前的狀態顯示,而非執行當下的狀態;
- 條件中斷點的條件不會重新求值:重播一律會在該處停下;
- 超過 10,000 個步驟時,記錄會被截斷。
兩種偵錯器都會拒絕含有錯誤的程式碼,並像檢查一樣將錯誤標示出來。
從 Ninox 編輯器進行偵錯
滑鼠停在 Ninox 的腳本編輯器上時,右上角會出現在主控台中偵錯按鈕。它會開啟控制台並把您的程式碼帶過去,但不執行,同時以目前的記錄作為上下文:若該表格沒有作用中的記錄,就會開啟記錄選擇器並定位到該表格。在全域程式碼中,上下文為無環境,而且只會帶走游標所在的函式。
帶過去的程式碼,會取代控制台中原有的程式碼及其中斷點。
歷史,以及隨時跟著您的工作
- 歷史按鈕會列出最近的 50 條指令;在編輯器中,可用 Alt + ↑ 與 Alt + ↓ 逐一瀏覽。點一下即可重新載入程式碼及其上下文,取代目前的程式碼及其中斷點。
- 滑鼠停在歷史中的某一行上時,會出現垃圾桶圖示,可用來刪除該行。
- 從歷史中取回的程式碼會以 Ninox 目前的語言重建:例如在德文中,「Id」會變成「Nr」。因此,切換語言後叫回的程式碼仍然能夠編譯。
- 啟動時,控制台會找回您上次的程式碼、其上下文、結果與中斷點——在共用的電腦上,每個人各自保有自己的內容。
- 對管理員而言,歷史與上次的程式碼也會跨電腦同步,即使清除瀏覽器資料也不會消失。
注意
此歷史以明文儲存在外掛的設定中,而資料庫的所有使用者都會載入這些設定。請勿在其中留下密碼或存取金鑰。
