# 标签与报告

> 一次运行记录的报告卷宗、标签卷宗和数据库行卷宗：每一条登记、每一件产物、每一行及其投递尝试、队列选择框、打开 PDF、重发报告、打印和重新打印、重新发送，以及记下一份新文档的两种办法。

档案把这次运行产出的文档收在两个卷宗里，**报告**和**标签**，位置在已判定的判据和事件条目之间。两者首先是证据，其次才是操作界面：每一件产物都列出它的每一次投递尝试、送去了哪个队列以及它持久保存下来的状态，而且两者都绝不把一份排进队列的文档说成“已打印”。两者带着同一对动作，区别只在介质：用这次运行冻结下来的证据记下一份**新的**文档，以及不重新排版就**重出**一份已经记下来的文档。查看跟着查看历史权限走；下面的每个动作会写明它自己的门槛。

角色不具备某项权限，和某个时刻拒绝，是两回事，卷宗对这两者的答复也不一样。不具备下面某项权限的角色，与之相关的控件一个都不画出来：发送那一行、它的队列选择框，以及记下新文档的那一块，直接不存在，卷宗标题处会有一条提示条说明原因（“标签操作不可用”“报告操作不可用”），而每一件产物、每一个解析出来的值和每一次投递尝试仍然可读，那正是这个角色来看的东西。只是被当下时刻拒绝的控件则留在原处、变灰，并在自己身上说明缺了什么。

对于可以发送的角色，两个卷宗都为每一件产物提供一个队列选择框，其默认值是该文档的种类和边界在这次运行的单元上生效的那个队列（见[打印机](process-printers)），前提是那个队列已经安装，否则写“请选一个已安装的队列”。一个队列都没装时会有一行这样写着，选择框和动作都变灰在“这台工作站上没有安装任何 Windows 打印队列。”上。

## 状态 {#statuses}

| 状态 | 含义 |
| --- | --- |
| 未发送 | 产物或登记存在，从来没有记录过任何一次尝试。 |
| 已送入队列 | Windows 接受了这份文档。它并不确认纸真的出来了。 |
| 失败 | 队列拒绝了；错误显示在这次尝试旁边。 |
| 发送结果不确定 | 应用在记下这次尝试之后、记下队列的答复之前停止了。它永远不会自动重试，因为打印机可能已经把文档打出来了。 |
| 生成失败 | 命令生成不出来的标签；原因会显示出来，也没有东西可打印。 |

每一次尝试都显示它的状态、它的队列、它的时间窗口（“开始 → 完成”，或者“开始 → 没有牢固的答复”）和它的错误。

## 报告 {#report}

这个卷宗清点登记在这次运行记录上的报告：每一条选择了自动打印或选择了留存副本的报告命令各一条，两样都没选的命令则什么也不留，因为单纯生成一份等于一次导出。一条都没有时它写着“这条运行记录上没有登记任何报告。当流程把运行结束时的 PDF 留在运行记录里，或者自动打印它时，那份 PDF 才会记在这里”，并且只对能看到生成那一块的角色补上“；不过在下面随时可以重新出一份新的。”

每一条登记都是一个折叠区，标题写着分组名称、版式名称、时刻和状态。里面是：已发布的文件名，运行记录里保存了它的什么（“运行记录里保留了副本 · 312.4 KB”或者“只保留引用”，并附一句提示说明重发会送出什么），产物标识，然后是：

| 控件 | 做什么 | 什么时候变灰 | 需要什么 |
| --- | --- | --- | --- |
| 打开 PDF（在工作站上）或下载 PDF（在浏览器里） | 用系统查看器从报告文件夹里打开已发布的 PDF，或者在浏览器里用新标签页打开它（浏览器拦下新标签页时改为下载）。登记里存下的名称不是这台工作站上已发布的报告，也就是从别的安装导入的运行记录带来的那种，读任何东西之前就被拒绝：“这条登记没有指向这台工作站上保存的报告。请在“历史”里重新生成。”名称确实是已发布的报告、文件却已经不在了，则会写“这份报告 PDF 已不在这台工作站上。请在“历史”里重新生成。” | 有一次生成、一次重发或者另一次打开还在进行。 | 查看历史 |
| 队列发送记录 | 尝试的清单，最新的在最前。 | | |
| 重新发送报告 | 把一份文档送到选中的队列，并给这条登记追加一次尝试，绝不新建一条登记。副本留在运行记录里的登记，送出的就是那份副本，逐字节一致；仅引用的登记，送出的是已发布的 PDF 当前的样子，因此后来重排的那一份才是送出去的东西，而 PDF 不见了则会被拒绝（“报告 PDF 已不在报告目录下。请先重新生成，再重发。”）。 | 没有选队列、有别的动作在进行、工作站处于只读状态。 | 查看历史、运行流程 |

查阅这次运行已经发布的东西是读取，而做出或者重新送出一份文档不是，所以这三个动作是分开把关的：文件那一行画给每一个读得到这份卷宗的角色，没有运行流程的角色看不到队列选择框和重发，没有导出/导入历史的角色看不到重新排出新 PDF 的那一块。当下时刻拒绝什么，就写在变灰的控件本身上：“还有一份报告正在打开。”“还有一份报告正在发送。”“还有一份报告正在渲染。”“运行时已停止”“这台工作站上没有安装任何 Windows 打印队列。”“请选定这份报告要送去的打印队列。”

列表下面那个折叠区**用当前报告出一份新的 PDF**是这一对动作的另一半：一个**报告**选择框（“（流程自带的报告）”或库里任何一个版式）和**生成报告**，后者从这次运行自己的文件里重新排出它的 PDF，用运行记录的普通名称重新发布到报告文件夹里，不登记任何东西，也不送到任何队列。整个折叠区只对具备导出/导入历史的角色画出来，而在运行记录仍在记录期间，它带着提示“运行记录结束、最终证据冻结之后，才能渲染报告。”，下面的选择框和动作变灰在“这条运行记录还在记录，因此还没有冻结的快照。”上；这一条上的生成 PDF 做的是同一次排版，只是它还会把结果打开（见[导出一次运行记录](histories-export#pdf)）。卷宗打开期间被删掉的版式会从选择框里消失，选择框退回到流程自己的那一个。

## 标签 {#labels}

这个卷宗清点存在这次运行记录里的产物，最新的在最前：流程在开始时和完成时发出的标签，以及后来记下的每一张标签，后者的名称说明它是从哪条路来的：用那一条上的**新建标签**排出的叫 `<group> · Generated from Histories`，用**用当前模板出一个新标签**排出的不属于任何分组，只叫 `Generated from Histories`。无论屏幕是什么语言，这个名称都以英文记下。一件都没有时它写着“这条运行记录里没有保存任何标签存档件。自动动作，以及日后为它出的每一个标签，都会出现在这里。”

每一件产物都是一个折叠区，标题写着分组名称、模板名称、边界（开始或完成）、时刻和状态。里面是：有生成错误时写出那个错误；RAW 那一条（冻结下来的字节数或者“没有数据内容”、模板的源文件、所用模板版本的 SHA-256、产物标识）；**已解析的值**，一个标记一行，写出替换进去的值和它的来源（固定标签写“这个固定指令文件里没有标记。”）；**队列发送记录**；带命令的产物还有发送那一行：

| 控件 | 做什么 | 什么时候变灰 | 需要什么 |
| --- | --- | --- | --- |
| 打印（有过一次尝试之后是重新打印） | 把冻结下来的那些字节原样送到选中的队列，并追加一次尝试。不重新解析任何标记，也从不读取模板，因此无论此后有什么变化，队列收到的都是这件产物逐字节的样子。 | 没有选队列、有别的发送在进行、工作站处于只读状态。 | 查看历史、运行流程 |

两项权限都没有的角色，发送那一行根本不画出来，排版那一块也不画：它读产物、读它们解析后的值和尝试记录，卷宗不给它任何可按的东西。当下时刻拒绝什么，就写在变灰的控件本身上：“还有一个标签正在发送。”“运行时已停止”“这台工作站上没有安装任何 Windows 打印队列。”“请选定这个存档件要送去的打印队列。”

为这次运行记录新建一张标签有两条路，两条都不发送它：新的产物一记下就排在卷宗最前面，之后从它自己的条目里打印。

- **新建标签**在档案上方的那一条上，它排出这次运行的流程所配置的某一张标签，那张标签已经把模板和确认过的标记映射配成一对，因此不需要填表。它的选择框默认是“（流程自带的标签）”，也就是按发出顺序排在最前的那张完成标签（流程在完成时不发出标签时，则是最前的那张开始标签），并按分组名称列出该流程的每一条标签命令（一个分组里有好几条时带“· 开始时”或“· 完成时”）。模板已经离开库的选项写“· 无模板”，模板里没有命令的写“· 无指令”；两者都仍然列出来，但生成不出东西。命令的结论筛选条件在这里忽略：这张标签是你要的。流程已经不在的运行记录，以及导入进来的运行记录，都没有配置标签（“这条运行记录的流程没有配置标签。”）。只有已结束的运行记录才生成。
- 产物下面那个折叠区**用当前模板出一个新标签**，接受库里任何一个带命令的模板，并把每一个标记手工映射到这次运行里已经冻结下来的证据上。每一个标记有：一个**信号源**选择框，列出冻结下来的那些值和它们的预览（“运行记录标识 · 模型名称：气候试验箱”“元数据 · 序列号：A12”“判据 · 超调 · 第 1 个循环 · 结果：合格”），日期信号源还有一个格式（按记录原样、工作站日期、工作站时间、工作站日期和时间、ISO 8601 格式），数值信号源则有小数位数（“按记录原样”，0 到 9），以及一个**确认映射**复选框。行下面那一句清点“m 个标记中已明确确认 n 个”，而**生成标签**在每一个标记都用真实信号源确认之前，一直变灰在“请先把每一个标记都对着一个冻结来源确认一遍。”上；没有标记的模板生成的是固定命令，没有命令的模板会被拒绝（“这个模板还没有打印机指令。”）。这里能选的只有冻结下来的值：不读取任何实时数据，而仍在记录的运行记录也没有终态快照可用来生成（“最终快照不可用”，动作变灰在“这条运行记录还在记录，因此还没有冻结的快照。”上）。

两条路都需要查看历史和运行流程，没有它们两条都不画出来；也都需要一台接受写入的工作站，缺了它只是变灰（“运行时已停止”）。它们记下的产物不可更改，结果落在操作记录条上（“已记录新标签 · 模板名”）。

## 数据库行 {#database-rows}

动作会写入工厂数据库的运行记录（[数据库行命令](process-actions#database-row-commands)），在另外两个卷宗下面还有第三个卷宗：**数据库行**；没有这种行的运行记录不画出它。它数出这次运行写入或尝试写入的行（“1 行”“`<n>` 行”）。每一行是一个可展开的条目，抬头是组名、它去往的表和设备（“通过 `<device>` 写入 `<table>`”）、时机和时刻，以及它最近一次尝试的状态。展开后，**值**按列各列一行，写出命令触发时运行记录冻结下来的值（空值写作“（没有值）”），**尝试**列出每一次尝试，连同它的状态、时间窗和数据库的回答。

| 状态 | 含义 |
| --- | --- |
| 行已写入 | 数据库接受了这一行。 |
| 行未写入 | 数据库拒绝了它、没有及时回答，或者连不上；原因写在这次尝试旁边，用的是驱动的原话。 |
| 写入情况不明 | 工作站在记下这次尝试之后、数据库回答之前停了下来。它绝不会自己重新发送，因为数据库可能已经有了这一行。 |
| 从未发送 | 这一行已经记下，但从没尝试过。 |

| 控件 | 做什么 | 什么时候变灰 | 需要 |
| --- | --- | --- | --- |
| 重新发送 | 把这次运行冻结下来的值原样发到同一张表，经过按现在配置的那台设备，并给这一行添一次尝试。不会从配置里重新解析任何东西。数据库已经接受过的一行会被第二次添加。 | 还有一行正在发送、工作站处于只读状态。 | 查看历史、运行流程 |

两种权限不全的角色只能读这些行和它们的尝试，看不到发送那一排；卷宗抬头写着“重新发送一行同时需要“查看历史”和“运行流程”权限。这些行和它们的尝试仍可查看。”一次发送的结果出现在操作动态里：“这一行已写入 `<table>`。”或者“这一行没有写入：`<reason>`”。

## 这两个卷宗不做的事 {#what-the-dossiers-do-not-do}

它们绝不为了重出而重排一张已记下的标签或一份已记下的报告：一次重新打印送出的是冻结下来的字节，一次重发送出的是已登记的那份文档。它们绝不改动更早的产物。它们不打印模板的测试页（那是模板自己那一页的事，见[模板](process-labels#test-send)），它们也不决定一个流程从哪个队列打印：这里的选择框是按产物、按每一次发送来的。
