Загрузить старые данные XML в новую версию формы InfoPath

У нас есть приложение ASP.NET с компонентом форм InfoPath, доставляющее формы InfoPath в браузер с помощью InfoPath Forms Server. Вместо того, чтобы сохранять формы в SharePoint, мы отправляем данные формы XML в веб-службу ASP.NET, которая сохраняет данные как тип данных XML в SQL Server 2005. Это работает нормально, и у нас нет проблем с загрузкой данных XML. обратно в форму InfoPath.

Наша проблема возникает, когда мы пытаемся загрузить старые данные (из версии 1 формы) в новую версию формы (версия 2). Эта новая версия формы (V2), например, имеет новое поле текстового поля. Поскольку поля V2 не существует в XML V1, они видны в форме V2, но отключены и не могут быть заполнены.

Наш вопрос заключается в том, как загрузить данные XML V1 в формы V2 и дать пользователю возможность заполнить те поля, которые теперь присутствуют в V2 формы.

Такое поведение возможно при использовании InfoPath Forms Server и форм, хранящихся в библиотеке форм. если вы обновите шаблон формы, вы можете открывать старые формы в новом шаблоне, видеть новые поля и сохранять данные в новых полях. Нам нужно знать, как это сделать программно, когда данные формы XML хранятся в SQL Server, а не в библиотеке форм.


person Eoin Connolly    schedule 25.03.2009    source источник


Ответы (1)


Прошло много времени с тех пор, как я ничего не делал с InfoPath, поэтому извиняюсь за некоторую расплывчатость:

Часть шаблона InfoPath, который в значительной степени представляет собой просто ZIP-архив с другим расширением, представляет собой файл с именем «upgrade.xsl». Этот файл содержит одно или несколько преобразований XSL, которые «обновляют» документы, ориентированные на более ранние версии схемы.

Возникает вопрос: почему правильное преобразование применяется в одном сценарии (SharePoint / Библиотека форм), а не в другом (веб-служба)? Возможно, второй процесс потеряет тег, который InfoPath использует для определения версии схемы, на которую нацелен исходный документ? Я считаю, что это тег «? Mso-infoPathSolution» (атрибут «solutionVersion»).

Если этот тег действительно удаляется из документа (и вы не можете легко предотвратить это), вам может потребоваться применить соответствующее преобразование XSL «вручную». Конечно, если вы имеете дело с несколькими версиями, может быть сложно определить, какое преобразование необходимо применить в любом случае.

person Daniel Pratt    schedule 25.03.2009
comment
Upgrade.XSL - это элемент, которого нам не хватало - он должен вызываться, когда InfoPath открывает данные формы для формы, более ранней, чем текущая версия. Есть ли способ получить этот XSL через объектную модель InfoPath вместо того, чтобы извлекать его вручную и запускать преобразование старых данных? - person Eoin Connolly; 26.03.2009