控制台
控制台用于在把一段 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)也一样。其下拉箭头提供三种模式:
| 模式 | 效果 |
|---|---|
| 运行 | 一次性运行代码并显示结果。 |
| 回放 | 运行代码一次,然后让您前后浏览其执行过程。 |
| 逐步执行 | 逐条指令地运行代码,并在您指定的位置暂停。 |
所选模式会被记住;按钮会显示该模式的名称,快捷键也会以该模式运行。选择逐步执行或回放后,编辑器下方会立即出现该调试器的工具栏,其中的命令已就位但处于停用状态:在启动之前不会执行任何内容。成功运行后,编辑器中的代码会被重新格式化;历史中则保留您原本书写的文本。
查看结果

结果依次堆叠,最新的在最上面;控制台最多保留 20 个。每个结果都会显示其类型、上下文、日期、时间和执行时长;点击其标题可将其折叠,点击其叉号可将其删除,清除会清空列表。
- 简单值会连同一个复制按钮一起显示。
- 记录会连同一个在 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”。因此,切换语言后调出的代码仍然能够编译。
- 启动时,控制台会恢复您最后的代码、其上下文、结果和断点——在共用的电脑上,每个人恢复的都是自己的内容。
- 对于管理员,历史和最后的代码还会在不同电脑之间同步,并且在清除浏览器数据后依然保留。
注意
此历史以明文形式保存在插件的设置中,而数据库的所有用户都会加载这些设置。请不要在其中留下密码或访问密钥。
