#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 ), чтобы указать имя файла в том же семействе сайтов, что и шаблон.