控制台

控制台可讓您在把一段 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」。因此,切換語言後叫回的程式碼仍然能夠編譯。
  • 啟動時,控制台會找回您上次的程式碼、其上下文、結果與中斷點——在共用的電腦上,每個人各自保有自己的內容。
  • 對管理員而言,歷史與上次的程式碼也會跨電腦同步,即使清除瀏覽器資料也不會消失。

注意

此歷史以明文儲存在外掛的設定中,而資料庫的所有使用者都會載入這些設定。請勿在其中留下密碼或存取金鑰。