Загрузить старые данные XML в новую версию формы InfoPath - PullRequest
2 голосов
/ 25 марта 2009

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

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

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

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

1 Ответ

1 голос
/ 25 марта 2009

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

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

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

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

...