一般来说,Kofax 将任何类型的映射数据组织为所谓的Links. 然而,它自己并不负责映射任何东西,这是我们的工作(出于某种原因)。你会发现两个不同的对象供你使用:
- 您的安装脚本将包含对一个ReleaseSetupData对象的引用,通常命名为SetupData.
- 您的发布脚本有另一个对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,而无需重新构建您的解决方案。