錯誤

此分頁自 3.2.0 版(測試版)起全面重新設計。 在 3.1.2 版中,它只會列出編譯錯誤與重複的識別碼。

錯誤分頁會分析整個資料庫,並列出其程式碼中的錯誤與警告:欄位、觸發器、檢視的欄、列印報表、全域程式碼與「After Open」觸發器。分析由一個移植自 Ninox 分析器的分析器進行:它所回報的內容與 Ninox 的判斷一致。每一行都能直接帶您前往出問題的程式碼。

此分頁僅供管理員使用。它只顯示其圖示——一個警告三角形;滑鼠停在上面時會顯示其名稱,而紅色圓形標記會顯示目前顯示的診斷數量。

統計與篩選

「錯誤」分頁的篩選

標頭會顯示統計結果:「無錯誤」、「3 個錯誤」、「3 個錯誤,12 個警告」、「36 個警告」……

篩選按鈕會開啟顯示的診斷面板:每種診斷類型各有一個開關,分為兩組:錯誤與警告。每一行都會顯示該類型診斷在資料庫中的數量——即使該類型已被隱藏:您既能看到顯示的內容,也能看到隱藏了什麼。當有類型被隱藏時,按鈕會加以提示(「已隱藏 2 類」);全部顯示可將它們恢復。篩選設定由瀏覽器記住,並適用於所有資料庫。

回報的內容

錯誤會使程式碼無法運作:

篩選回報的內容
編譯錯誤Ninox 拒絕的程式碼:公式無法執行。
ID重複同一表格中的多個欄位共用同一個內部識別碼(例如一個輸入欄位與一個視覺元素):參照會因此變得含糊不清。
分析器錯誤Ninext 的分析器找到、而 Ninox 並未回報的錯誤。
內嵌內容錯誤原生區塊 #{ … }# 中的 JavaScript 語法錯誤。

警告標示的是能夠運作、但很可能不如您預期的程式碼:

篩選回報的內容
分析器Ninox 的警告,以及格式錯誤的 NativeJS 註解(未知的型別、找不到的表格)。
伺服器上下文在其執行位置無效的程式碼:像 alert() 或 openRecord() 這樣的介面函式,或原生區塊 #{ … }#,被放在表格觸發器(建立後、修改後)或 do as server 之中。在伺服器上,它們會被悄悄忽略。
過時的錯誤Ninox 仍在顯示、但公式本身沒有問題的錯誤(見下文)。
未解析的參照讀取一個目標表格已不存在的參照欄位(表格已刪除、外部資料庫不存在):其值為「void」,任何以點號進行的穿透都會失敗。
嵌入內容有型別的 JavaScript 區塊在所有或部分路徑上沒有傳回任何值;非同步區塊從未呼叫 callback;傳給 html() 的 HTML 不平衡(標籤從未關閉、孤立的結束標籤);CSS 的大括號不平衡,或其中有規則會被瀏覽器捨棄。
程式碼中的無用程式碼以 var 或 let 宣告、之後卻從未讀取的變數。
未使用的全域函式資料庫中沒有任何元素呼叫的全域函式。
未使用的公式沒有任何程式碼參照的公式。

未使用的函式與公式只是刪除的候選項:以動態方式組成的呼叫,或從 JavaScript 發出的呼叫,都會逃過分析;而顯示在表單或檢視中的公式,即使沒有任何程式碼讀取它,也仍然有用。刪除前請先確認。

解讀一行

「錯誤」分頁中的診斷

診斷依類別分組。每個類別的標題都帶有一個標記,顯示其數量:錯誤為紅色,警告為橘色。若有多個類別,它們會收合起來,點選標題即可展開該類別;只有一個類別時,則會直接展開顯示。

各類別以其篩選器的名稱命名,但以下幾個除外:

篩選器清單中的類別
分析器錯誤Ninext 分析器發現的額外錯誤
分析器分析器警告
伺服器上下文脫離執行上下文的程式碼
過時的錯誤過時的錯誤(公式沒有問題)
內嵌內容錯誤與嵌入內容單一類別內嵌的 JS / HTML / CSS,最多帶有兩個標記:一個代表其錯誤,一個代表其警告。

每一行會顯示:

  • 以斜體顯示的訊息——錯誤為灰色,警告為琥珀色——後接出問題的程式碼片段;當兩個型別不相符時,會有一句話指出是哪兩個;
  • 相關的元素,其呈現方式與欄位與公式中相同:型別圖示、依賴項標記、「Fx」、導覽路徑。

將滑鼠停在導覽路徑中的粗體部分(公式、觸發器或全域函式)上,會顯示程式碼,並在錯誤處加上底線。

前往程式碼

點選導覽路徑中的粗體部分:Ninext 會在正確的位置開啟編輯器。對全域程式碼而言,診斷會附屬於包含它的函式——「Global functions › 函式名稱」——而全域程式碼編輯器會開啟並定位到該函式。「After Open」觸發器也以相同的方式開啟。

在編輯模式(「Edit mode」)下,滑鼠停在某一行上時,其右側會出現一個紅色按鈕:若該行與欄位有關,它會在表單上選取該欄位;若是其他行,則會開啟程式碼編輯器。

下圖是在示範資料庫中,點選某行(與某欄位的公式有關)的粗體部分:Ninext 會開啟該表格的一筆記錄、該欄位的視窗,然後是大型公式編輯器,出問題的段落會加上底線;滑鼠停在上面即可看到訊息。導覽路徑的其他元素則會開啟各自的層級:點選欄位名稱會開啟記錄與欄位視窗,但不會開啟編輯器。

從錯誤分頁點選粗體部分,會開啟出問題公式的編輯器,錯誤段落加上底線

在背景進行的分析

分析以小批次進行,並隨時把控制權交還給瀏覽器:即使是大型資料庫,也不會有任何凍結。每次修改架構後,分析都會自動重新執行。沒有進度指示器:先前的清單會一直顯示,直到被新的清單取代。

過時的錯誤

Ninox 有時會在架構重新載入期間、架構尚未完整時編譯公式欄位,之後便不再重新編譯:該欄位會在整個工作階段中顯示錯誤,儘管其公式是正確的。Ninext 會自行重新編譯該公式;若錯誤並未出現,就會將其歸入過時的錯誤。

解決辦法:重新載入資料庫,或儲存對架構的任意修改。

在 Ninox 編輯器中輸入時

在 Ninox 的腳本編輯器(大型公式編輯器、欄位或表格的面板)中輸入時,錯誤與警告同樣會加上底線:

  • 錯誤以紅色波浪線標示,警告以琥珀色點線標示;
  • 滑鼠停在加底線的段落上時,會出現提示泡泡說明原因,並指出哪些型別不相符;
  • 只有在 Ninext 能確定程式碼在哪個表格中執行時,才會加上底線;
  • 自動完成清單優先:只要清單還在顯示,就不會開啟任何提示泡泡。

選取一個字詞時,它的其他出現位置都會醒目標示——在 Ninox 的編輯器、控制台,以及 Ninext 的程式碼區塊中皆然。滑鼠停在編輯器上時,右上角會出現兩個按鈕:格式化與在主控台中偵錯(參見控制台)。

表格檢視中殘留的欄

編譯錯誤可能來自仍在使用已刪除欄位的表格檢視欄。Ninox 不會回報任何問題,因為該欄位只是從架構中被移除了:這是殘留在檢視欄設定中的參照。

修正方法:

  1. 點選導覽路徑末端以粗體顯示的公式(「表格 › 檢視 › … › 公式」)。
  2. Ninext 會依序開啟該檢視、欄編輯器,然後是其公式編輯器。
  3. 先在公式編輯器中點選 OK,再於欄編輯器中點選一次。

儲存之後,Ninox 會重新整理檢視的設定,並移除指向不存在欄位的參照。該錯誤便會從 Ninext 中消失。