c# - 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 参考指南中得到它
解决方案
一般来说,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,而无需重新构建您的解决方案。
推荐阅读
- javascript - 拥有多个
- r - R中的矩阵与训练集大小不匹配的错误
- roslyn - 在 Roslyn API 中,推测语义模型是什么?
- python - 任务栏图标设置
- c# - PostgreSQL 表依赖
- html - 我如何将图像切成两半以便看不到它并且没有水平滚动?
- python - 分配 tkinter 之前引用的局部变量“demo_hour”
- javascript - 我可以在常规 javascript 中使用用于节点的 js 吗?
- ios - iOS 上的 AudioKit 5 设置音频格式
- dpkg - apt upgrade dpkg error wile processing (Segmentation fault)..?