Вообще говоря, 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>
с именем 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 с каким-либо внешним идентификатором, вы можете безопасно сделать это с помощью пользовательских свойств. Пример: вы можете присвоить идентификатору 42 имя FirstName во время установки (просто создайте сетку свойств с пользовательским классом), добавить пользовательское свойство во время настройки, а затем получить доступ к его значению во время выпуска. Таким образом, вы можете поддерживать идентификаторы с помощью формы установки без необходимости перестраивать свое решение.