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

时间:2019-04-24 13:30:34

标签: kofax

在我的设置表单中,我为自定义模块配置了一些设置。设置存储在批处理类的自定义存储中。给定变量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”

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

1 个答案:

答案 0 :(得分:2)

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}之类的批处理变量,我不确定。最糟糕的情况是将它们作为默认值分配给索引或批处理字段。