访问自定义模块中的索引字段、批处理字段和批处理变量

access indexfields, batchfields and batch variables in custom module

在我的设置表单中,我为自定义模块配置了一些设置。设置存储在批处理 class 的自定义存储中。给定变量 IBatchClass batchClass 我可以通过执行

来访问数据
string data = batchClass.get_CustomStorageString("myKey");

并通过执行

设置数据
batchClass.set_CustomStorageString("myKey", "myValue");

执行自定义模块后,我想从存储中访问此数据。我返回的值是 batchfield 集合 or indexfield 集合 or 批处理变量集合的键。创建 Kofax Export Connector 脚本时,我可以访问包含这些集合的 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}; {Current Date} {Current Time}; Scan Operator: {Scan Operator's User ID}; Page: x/y"

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

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

  • AscentCaptureRuntime
    • 批量
      • 文件
        • 文档

对于标准服务器安装,该文件位于此处:\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}等批处理变量,我不太确定。最坏的情况是将它们作为默认值分配给索引或批处理字段。