Библиотека InfoPath выдает исключение NotImplementedException для метода XmlFormView.XmlForm.SaveAs

#c# #.net #sharepoint #infopath #xmlformview

#c# #.net #sharepoint #infopath #xmlformview

Вопрос:

Я использую XmlFormView на странице SharePoint для просмотра форм с поддержкой браузера InfoPath и программного добавления некоторой логики открытия и сохранения.

Все идет нормально, без метода XmlForm.SaveAs. Этот метод выдает исключение NotImplementedException, если я вызываю его в созданной XmlForm и с допустимым местоположением, см. Код:

ASPX:

 <InfoPath:XmlFormView ID="infoPathFormView" ShowHeader="false" Style="width: 100%;" runat="server" />
  

Код, лежащий в основе:

 infoPathFormView.SaveLocation = "http://localhost/MyFormLibrary";
infoPathFormView.DataBind();

if(infoPathFormView.XmlForm.New)
{
   string fileName = Page.User.Identity.Name;
   infoPathFormView.XmlForm.SaveAs(fileName); // This line throws.
}
else
{
   infoPathFormView.XmlForm.Save();
}
  

Приводящий к следующему исключению и отслеживанию стека:

Метод или операция не реализованы. в Microsoft.Офис.Информационный путь.Сервер.DocumentLifetime.XmlFormHost.SaveAs(строка fileURL) в MyProject.ShowInfoPathForm.SaveButton_Click(отправитель объекта, EventArgs eventArguments)
в System.Web.UI.WebControls.LinkButton.Щелкните (EventArgs e) в System.Web.UI.WebControls.LinkButton.Поднимите postbackevent(String eventArgument) в System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.Поднимите postbackevent (String eventArgument) в System.Web.UI.Page.Поднимите postbackevent (IPostBackEventHandler SourceControl, String eventArgument)
в System.Web.UI.Page.Поднимите postbackevent (NameValueCollection postData) в System.Web.UI.Page.ProcessRequestMain(Логическое значение includeStagesBeforeAsyncPoint, Логическое значение includeStagesAfterAsyncPoint)

Для наглядности я обнаружил, что Microsoft.Офис.Информационный путь.Сервер.DocumentLifetime.XmlFormHost — это внутренний класс, который наследуется от абстрактного класса XmlForm.

  • У кого-нибудь есть идея, почему этот фрагмент кода выдает NotImplementedException?
  • Есть ли обходной путь, позволяющий сохранить XmlForm с указанным именем файла?

Заранее спасибо!!

Ответ №1:

По соображениям безопасности свойства XsnLocation, XmlLocation и SaveLocation элемента управления XmlFormView должны указывать местоположения в том же семействе сайтов, что и пользовательская страница.

Ответ №2:

Обратите внимание, что SaveAs недоступен для серверных форм, как указано в статье, на которую вы ссылались в вопросе: «К этому типу или элементу можно получить доступ только из кода, запущенного в формах, открытых в Microsoft Office InfoPath 2007».

Рассмотрите возможность использования SaveLocation ( http://msdn.microsoft.com/en-us/library/microsoft.office.infopath.server.controls.xmlformview.savelocation.aspx ), чтобы указать имя файла в том же семействе сайтов, что и шаблон.