1

在我的设置表单中,我为我的自定义模块配置了一些设置。设置存储在批次类的自定义存储中。给定变量IBatchClass batchClass,我可以通过执行访问数据

string data = batchClass.get_CustomStorageString("myKey");

并通过执行设置数据

batchClass.set_CustomStorageString("myKey", "myValue");

当自定义模块被执行时,我想从存储中访问这些数据。我返回的值是批处理字段集合索引字段集合批处理变量集合的键。创建 Kofax 导出连接器脚本时,我可以访问包含ReleaseSetupData这些集合的对象。

是否可以在运行时访问这些字段?

    private string GetFieldValue(string fieldName)
    {
        string fieldValue = string.Empty;

        try
        {
            IIndexFields indexFields = null; // access them
            fieldValue = indexFields[fieldName].ToString();
        }
        catch (Exception e)
        {
        }

        try
        {
            IBatchFields batchFields = null; // access them
            fieldValue = batchFields[fieldName].ToString();
        }
        catch (Exception e)
        {
        }

        try
        {
            dynamic batchVariables = null; // access them
            fieldValue = batchVariables[fieldName].ToString();
        }
        catch (Exception e)
        {
        }

        return fieldValue;
    }

该格式包含一个字符串,如

"{@Charge};{当前日期} {当前时间};扫描操作员:{扫描操作员的用户 ID};页面:x/y"

并且由{...}包裹的每个字段代表这 3 个集合之一中的一个字段。

4

1 回答 1

2

Kofax 将批处理公开为 XML,并且DBLite基本上是所述 XML 的包装器。该结构在 AcBatch.htm 和 AcDocs.htm 中进行了说明(可在 CaptureSV 目录下找到)。这是基本思想(仅显示文档):

  • AscentCapture 运行时
      • 文件
        • 文档

对于标准服务器安装,该文件将位于此处:\\servername\CaptureSV\AcBatch.htm. 单个文档本身具有子元素(例如索引字段)和多个属性(例如ConfidenceFormTypeNamePDFGenerationFileName.

以下是如何从活动批次(您的IBatch实例)中提取元素以及访问所有批次字段的方法:

var runtime = activeBatch.ExtractRuntimeACDataElement(0);
var batch = runtime.FindChildElementByName("Batch");
foreach (IACDataElement item in batch.FindChildElementByName("BatchFields").FindChildElementsByName("BatchField"))
{        
}

索引字段也是如此。但是,由于它们位于文档级别,您需要先深入到 Documents 元素,然后检索所有 Document 子元素。以下示例也访问所有索引字段,将它们存储在名为 的字典中IndexFields

var documents = batch.FindChildElementByName("Documents").FindChildElementsByName("Document");
var indexFields = DocumendocumentstData.FindChildElementByName("IndexFields").FindChildElementsByName("IndexField");

foreach (IACDataElement indexField in indexFields)
{
    IndexFields.Add(indexField["Name"], indexField["Value"]);
}

关于批处理变量,例如{Scan Operator's User ID},我不确定。最坏的情况是将它们作为默认值分配给索引或批处理字段。

于 2019-04-25T23:35:00.517 回答