首页 > 解决方案 > Kofax 导出连接器 - 从 IndexField 获取值

问题描述

我为我的 Kofax 导出连接器创建了一个映射。此连接器使用 Web 服务与外部应用程序交互。

我想将 indexfield 值连接到外部应用程序的字段 ID。目前我有一个包含外部应用程序 ID 和索引字段 ID 的字典。

Dictionary<double, double?> // external fieldID <-> indexfieldID

该键可以为空,因为可能未分配字段。我不想将 indexfieldID 传递给外部应用程序,而是要传递这个 indexfield 的值。

目前我有这个

releaseSetupData.CustomProperties.Add("MetaFieldID", "IndexFieldID");

期望的结果是

releaseSetupData.CustomProperties.Add("MetaFieldID", "IndexFieldValue");

如何获取索引字段的值?indexfield 本身没有“value”属性,Kofax 用户可以使用自定义 dataType 设置自定义字段。那么值会是什么样子呢?

我没有从Kofax Capture 导出类型库 API 参考指南中得到它

标签: c#kofax

解决方案


一般来说,Kofax 将任何类型的映射数据组织为所谓的Links. 然而,它自己并不负责映射任何东西,这是我们的工作(出于某种原因)。你会发现两个不同的对象供你使用:

  1. 您的安装脚本将包含对一个ReleaseSetupData对象的引用,通常命名为SetupData.
  2. 您的发布脚本有另一个对ReleaseData对象的引用,即DocumentData.

现在,在设置期间建立的所有链接都将在发布期间可用。所述链接可以包含不同种类的数据,例如索引字段、批处理字段、Kofax 值或自定义属性。现在,假设您的文档类中有索引字段“FirstName”,并且您确实希望在发布期间访问它的值 - 这就是您需要做的。

设置脚本

setupData.Links.Add(
        setupData.IndexFields["FirstName"].Name, 
        KfxLinkSourceType.KFX_REL_INDEXFIELD,
        setupData.IndexFields["FirstName"].Name);
setupData.Apply();

请记住,这些链接类似于字典条目,因此您不能将同一个项目链接两次。我通常喜欢在我的设置脚本加载时删除所有链接,并在它再次卸载时再次添加它们(请注意,您可以安全地遍历 setupData.Indefields 集合以添加所有字段而不仅仅是一个字段)。

发布(运行)时间

在发布期间,所有链接都在DocumentData.Values集合中可用。要访问您的索引字段及其值,您需要执行以下操作。以下假设您已经设置了一个Dictionary<string, string>named IndexFields,它进一步向您展示了如何访问所有其他类型的链接(批处理字段、自定义属性等):

foreach (Value v in DocumentData.Values)
{
    switch (v.SourceType)
    {
        case KfxLinkSourceType.KFX_REL_BATCHFIELD:
            BatchFields.Add(v.SourceName, v.Value);
            break;
        case KfxLinkSourceType.KFX_REL_DOCUMENTID:
            break;
        case KfxLinkSourceType.KFX_REL_INDEXFIELD:
            // index fields may also contain table fields
            if (v.TableName == "")
            {
                // this is a regular index field
                IndexFields.Add(v.SourceName, v.Value); 
            }
            else
            {
                // this is a table field! 
            }
            break;
        case KfxLinkSourceType.KFX_REL_TEXTCONSTANT:
            TextConstants.Add(v.SourceName, v.Value);
            break;
        case KfxLinkSourceType.KFX_REL_UNDEFINED_LINK:
            break;
        case KfxLinkSourceType.KFX_REL_VARIABLE:
            break;
    }
}

如果您想将 Kofax 索引字段映射到某个外部 ID,您可以使用自定义属性安全地执行此操作。示例:您可以在设置期间将 id 42 分配给 FirstName(只需使用自定义类创建属性网格),在设置期间添加自定义属性,然后在发布期间访问其值。这样您就可以通过设置表单维护 ID,而无需重新构建您的解决方案。


推荐阅读