# 运行记录列表

> 运行记录列表和它的筛选条件、一行的构成、翻页与刷新、导入控件，以及删除一次运行记录或一整批。

浏览界面的左半边标题是**运行记录**，标题栏上有两个控件：**导入**（一个在别处记录的 `.glab` 文件，见[导入运行记录](histories-import)）和**刷新**。下面是筛选条，勾选运行记录时出现的批量操作条，一页 50 条运行记录（最近开始的排在最前），以及翻页器（“第 1–50 项，共 3214 项”，只在至少有一条运行记录命中时才画出来）。除此之外没有别的排序方式。选中一行就在右边打开这次运行记录，并把该行标记出来。

刷新会重新载入当前页，并重新读取单元和责任人两个下拉框的选项，因此面板打开之后才配置的单元或才创建的用户，不必离开浏览界面就能拿来筛选。列表不会自己刷新：你在读另一条记录时录下的运行记录，要等下一次刷新、改动筛选条件或翻页才会出现。

## 一行的构成 {#the-row}

| 元素 | 含义 |
| --- | --- |
| 运行记录名称 | 这次运行被记录下来时用的名称：流程运行是“流程 · 单元”，单条命令是“快照 · 数据记录”或“判定 · 判定名”。 |
| 自动化标记 | 这次运行是由单元的自动化接口受理的，不是由人启动的。 |
| 已导入标记 | 这次运行是以 `.glab` 文件的形式从另一套安装来的。 |
| 绿色圆点 | 这次运行正在运行中。 |
| 合格、不合格或无法判定标记 | 结论。一次运行没有标记，说明它没有结论，或者还没有结束。 |
| 副行 | 生命周期状态，随后是单元的外部停止信号结束了这次运行时出现的**联锁**，再随后是启动它的人，最后是按工作站格式写的开始时刻。列宽不够时责任人的名字会被截断；整行内容在这一行的悬停提示里。 |
| 复选框 | 勾选这次运行记录以便批量删除（“勾选以便删除”）。只有持有管理历史权限的角色才画得出它。尚未结束的运行记录和工作站处于只读状态时，它是灰的（“尚未结束的运行记录不能删除。”）。 |

## 筛选条件 {#filters}

每一个筛选条件都是运行索引里的一列，搜索框也一样：索引把每条运行记录的元数据值和它的名称放在一起保存。因此整条筛选条会解析成一次带索引的查询：判断是否命中不需要打开任何运行记录文件，跨年的归档也永远不会被整个载入。改动筛选条件会回到第一页。

| 筛选条件 | 可选项 | 说明 |
| --- | --- | --- |
| 按名称或元数据值筛选运行记录 | 自由文本 | 运行记录名称的一部分，或者这次运行启动时填写的任何元数据值（序列号、批次等）的一部分，不区分大小写，边输入边生效。 |
| 结论 | 全部结论、合格、不合格、无法判定、没有结论 | **没有结论**列出没有结论的运行记录，无论它是否已经结束。 |
| 状态 | 全部状态、运行中、已暂停、已完成、已中止、失败 | **运行中**也会列出仍在写文件的运行记录（保存中），在你看来它还没有停止记录。 |
| 单元 | 全部单元，然后是每个单元一项，写作“模型 · 单元” | 这次运行发生在哪里，先按模型排序，再按单元排序。导入的运行记录不属于任何单元，只在全部单元下列出。 |
| 负责人 | 全部负责人、工作站、自动化、代理，然后是每一个本地用户的名字 | 启动这次运行的是谁。人是按冻结在运行记录里的身份来匹配的，不是按名字：改了名的操作员仍然拥有他的运行记录，被删除的操作员仍然留在选项里，因为他的运行记录仍然写着他。 |
| 从 / 到 | 日历日期 | 要列出的最早和最晚的运行开始时间。两者都按工作站本地日期算，“到”那一天整天都包含在内。 |

没有命中的运行记录时，列表既不画行，也不画翻页器，只在那个位置写一行字。只要设着任何一个筛选条件（搜索框也算），就写着“没有符合筛选条件的运行记录。”，哪怕这个工作站什么都还没有记录过；筛选条件全部清空之后，只有一条运行记录都没有的工作站才会什么都不命中，这时写着“还没有记录任何运行记录。”索引的第一页读完之前，这一行写着“正在载入运行记录……”；索引读不出来时，这一行会说明这一点和原因。

由索引尚未保存元数据值的版本记录的运行记录，会在更新后第一次启动时起，在后台一次性获得这些值。工作站一次读取一个运行记录文件，在有运行记录正在记录或运行时已停止时等待，因此不会耽误任何事情。在这项工作完成之前，搜索只能按名称找到这些运行记录，并在搜索框下方说明：“搜索尚未涵盖较早运行记录的元数据：它们仍在建立索引，在此之前只能按名称找到。”无法读取的运行记录文件会被跳过，在[重建运行历史索引](settings-backups#rebuild-run-history-index)重新读取它之前，这条运行记录只能按名称找到。

## 翻页 {#paging}

上一页和下一页每次走过一页命中结果；翻页之后勾选的那一批和打开的运行记录都还在。删掉归档末尾之后，位置会退回到仍然存在的最后一页。

## 删除运行记录 {#deleting-runs}

删除一次运行记录需要**管理历史**。没有这项权限的角色看不到勾选框、批量操作条和**删除**：这个动作根本不画出来，而不是画成灰的。

**删除**是档案那一条动作末尾的危险动作，它在“要删除‘名称’吗？这会删除这条运行记录及其文件。已经为它发布的文档仍留在报告文件夹里。尚未结束的运行记录不能删除。”之后移除打开的运行记录和它的文件。工作站处于只读状态时，以及运行记录处于运行中、已暂停或保存中时，它是灰的；服务端对仍然占着信号源锁的运行记录按同一条规则拒绝。结果会落在操作记录条上（“已删除 · 名称”）。

要成批删除，就在列表里勾选运行记录：这时出现批量操作条，上面有“已选 N 条”、**本页**（勾选本页每一条可删除的运行记录）、**清除**（取消勾选全部运行记录）和**删除**（工作站处于只读状态时，以及一批删除正在进行时是灰的）。勾选的那一批是按运行记录的标识保存的，翻页和刷新都不会丢，因此一批按日期筛出来的运行记录可以一页一页攒起来，最后由一次确认（“要永久删除 N 条已记录的运行记录及其文件吗？已经为它们发布的文档仍留在报告文件夹里。此操作无法撤销。”）一次删掉。每一条运行记录都是单独删除的，索引行和文件一起删，因此运行时仍然占着的那一条只会被单独拒绝，操作记录条报出“已删除 Y 条中的 X 条运行记录 · 拒绝 Z 条：原因”，而不是让整批失败。删除一次运行记录，也会把它对该单元产量的贡献一并去掉。它还会把这次运行的导出文件名释放出来，除非为这次运行发布的某份文档仍在报告文件夹里：这些文档是有意留在那里的，而且带着那个名字，所以只要它们还在，那个名字就仍被占用，后来的运行记录都不能覆盖它们。

## 这个列表不做的事 {#what-the-list-does-not-do}

它只按开始时刻排序，不按别的；它不搜索运行记录的备注和记录下的数值（只搜索名称和元数据值）；它也不同时打开两条运行记录，另开一个浏览器标签页就是另一个浏览界面，有它自己的选择和筛选条件。
