错误
自 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 不会报告任何问题,因为该字段只是从架构中被移除了:这是残留在视图列配置中的引用。
修复方法:
- 点击面包屑导航末尾以粗体显示的公式(“表 › 视图 › … › 公式”)。
- Ninext 会依次打开该视图、列编辑器,再打开其公式编辑器。
- 先在公式编辑器中点击 OK,再在列编辑器中点击 OK。
保存后,Ninox 会刷新视图配置,并移除对不存在字段的引用。该错误随即从 Ninext 中消失。
