如何设置将在 Batch 打开时初始化、在 SeparateCurrentPage 中更新并在 BatchClose 中使用的 KOFAX KTM Server 全局变量值?
How to set KOFAX KTM Server global variable value which will be initialized in Batch open, updated in SeparateCurrentPage & used in BatchClose?
我正在尝试计算 Project.Document_SeparateCurrentPage 中的特定条码值,并在 BatchClose 中使用它来比较计数是否大于 1,如果大于 1,则将批次发送到具有特定的特定队列优先。我在 KTM Project Script 中使用了一个全局变量来保存在 Batch open 中初始化为 0 的计数值。在单元测试之前它工作正常。但是我们的自动化团队发现,在 20 个类似的批次中,只有少数批次被发送到只有计数满足大于一个条件时才应该去的队列,尽管他们只使用了一个条形码。
我用谷歌搜索发现 KTM 服务器脚本事件不允许在不同进程中使用共享信息(https://docshield.kofax.com/KTM/en_US/6.4.0-uuxag78yhr/help/SCRIPT/ScriptDocumentation/c_ServerScriptEvents.html)。然后我尝试使用批处理字段来保存条形码计数,但无法使用 pXRootFolder.Fields.ItemByName("BatchFieldName").Text = "GreaterThanOne"
从 Project.Document_SeparateCurrentPage 函数更新其值。日志显示批量读取第一页3次然后出错。
任何链接都会有所帮助。提前致谢。
如您所述,batch/document 处理的不同阶段可以在不同的进程中执行,因此在一个事件中初始化的全局变量不一定在其他事件中可用。理想情况下,如果全局变量的内容可以从 Application_InitializeScript 或 Application_InitializeBatch 设置,则您应该只使用它们,因为这些事件发生在每个单独的进程中。正如您所发现的,您不应该为您的用例使用全局变量,因为 Document_SeparateCurrentPage 和 Batch_Close 一个批次可能出现在不同的进程中,就像同一个进程可能会执行这些多个批次的事件。
此外,由于一个相关原因,您不能设置文档级事件的批次字段:任何数量的单独进程都可以并行处理批次的文档,因此批次级数据对于文档事件是只读的。这有点不直观,但分离是一个文档级别的事件,尽管它似乎作用于整个批次。 (你看到的三次只是错误重试机制。)
如果它满足您的需要,最简单的答案可能是使用条形码定位器作为正常提取的一部分(而不仅仅是分离),并在需要时分配给字段。虽然您无法从文档事件中设置批处理字段,但您可以从批处理事件中读取文档数据。因此,与其尝试跟踪文档事件过程中的计数之类的东西,不如确保您需要的任何数据都保存在文档级别。然后在 Batch_Close 中你可以迭代文档和 count/calculate 任何你需要的。 (在您的情况下,可能是每个文档中条形码定位器的定位器替代品数量。)
我正在尝试计算 Project.Document_SeparateCurrentPage 中的特定条码值,并在 BatchClose 中使用它来比较计数是否大于 1,如果大于 1,则将批次发送到具有特定的特定队列优先。我在 KTM Project Script 中使用了一个全局变量来保存在 Batch open 中初始化为 0 的计数值。在单元测试之前它工作正常。但是我们的自动化团队发现,在 20 个类似的批次中,只有少数批次被发送到只有计数满足大于一个条件时才应该去的队列,尽管他们只使用了一个条形码。
我用谷歌搜索发现 KTM 服务器脚本事件不允许在不同进程中使用共享信息(https://docshield.kofax.com/KTM/en_US/6.4.0-uuxag78yhr/help/SCRIPT/ScriptDocumentation/c_ServerScriptEvents.html)。然后我尝试使用批处理字段来保存条形码计数,但无法使用 pXRootFolder.Fields.ItemByName("BatchFieldName").Text = "GreaterThanOne"
从 Project.Document_SeparateCurrentPage 函数更新其值。日志显示批量读取第一页3次然后出错。
任何链接都会有所帮助。提前致谢。
如您所述,batch/document 处理的不同阶段可以在不同的进程中执行,因此在一个事件中初始化的全局变量不一定在其他事件中可用。理想情况下,如果全局变量的内容可以从 Application_InitializeScript 或 Application_InitializeBatch 设置,则您应该只使用它们,因为这些事件发生在每个单独的进程中。正如您所发现的,您不应该为您的用例使用全局变量,因为 Document_SeparateCurrentPage 和 Batch_Close 一个批次可能出现在不同的进程中,就像同一个进程可能会执行这些多个批次的事件。
此外,由于一个相关原因,您不能设置文档级事件的批次字段:任何数量的单独进程都可以并行处理批次的文档,因此批次级数据对于文档事件是只读的。这有点不直观,但分离是一个文档级别的事件,尽管它似乎作用于整个批次。 (你看到的三次只是错误重试机制。)
如果它满足您的需要,最简单的答案可能是使用条形码定位器作为正常提取的一部分(而不仅仅是分离),并在需要时分配给字段。虽然您无法从文档事件中设置批处理字段,但您可以从批处理事件中读取文档数据。因此,与其尝试跟踪文档事件过程中的计数之类的东西,不如确保您需要的任何数据都保存在文档级别。然后在 Batch_Close 中你可以迭代文档和 count/calculate 任何你需要的。 (在您的情况下,可能是每个文档中条形码定位器的定位器替代品数量。)