Sharepoint XmlForm.Submit();生皮;验证结果消息?
我正在SharePoint站点中托管的自定义aspx页面上使用XmlFormView控件。 最近,我们的SharePoint升级到2010年,之后我遇到了由XmlForm.Submit()触发的表单验证问题 如果提交表单的验证失败,自定义页面实际上依赖SharePoint引发的异常。验证消息已格式化,并以友好的方式向用户显示 提交包含无效用户提供数据的表单时,将返回“Microsoft.Office.InfoPath.Server.Util.InfoPathFatalException”。 此异常不包含有关witch字段包含无效数据的信息。 实际上,我期待的是“Microsoft.Office.InfoPath.Server.SolutionLifetime.DataAdapterException”。 (提交成功,如果表单不包含验证错误,则不会引发异常) 如果我取消选中Visual Studio中的“仅启用我的代码(仅限托管)”选项并调试表单提交,则会出现以下异常(包含丹麦文本): Microsoft.Office.InfoPath.Server.SolutionLifetime.DataAdapterException发生异常Sharepoint XmlForm.Submit();生皮;验证结果消息?,sharepoint,sharepoint-2010,xmlformview,Sharepoint,Sharepoint 2010,Xmlformview,我正在SharePoint站点中托管的自定义aspx页面上使用XmlFormView控件。 最近,我们的SharePoint升级到2010年,之后我遇到了由XmlForm.Submit()触发的表单验证问题 如果提交表单的验证失败,自定义页面实际上依赖SharePoint引发的异常。验证消息已格式化,并以友好的方式向用户显示 提交包含无效用户提供数据的表单时,将返回“Microsoft.Office.InfoPath.Server.Util.InfoPathFatalException”。 此异
Message=公式,适用于独立持有人有效的ejl。她是一个有责任的人,她是一个有责任感的人,她是一个有责任感的人 Felt-eller-gruppe:市政房地产鉴定人
2月1日:安杰夫斯和贝斯特姆·莫斯特的作品
Source=Microsoft.Office.InfoPath.Server
BypassWatson=true
LogId=5567
SaveUserSession=false
UserMessage=公式,用于确定独立持有人的有效性。她是一个有责任的人,她是一个有责任感的人,她是一个有责任感的人 Felt-eller-gruppe:市政房地产鉴定人
2月1日:安杰夫斯和贝斯特姆·莫斯特的作品
OverrideTopLevelMessage=true
StackTrace:
位于Microsoft.Office.InfoPath.Server.SolutionLifetime.DatabaseHelper.CheckErrorBoard(文档文档、DataAdapter适配器、XPathNavigator子目录检查、布尔模式错误)
内部异常: 这很好!异常包含有关验证错误的信息。 我继续调试。将重新引发所需的异常,输出内容如下: 单步执行:单步执行不带符号“Microsoft.Office.InfoPath.Server.SolutionLifetime.DatabaseHelper.CheckErrorBoard”的方法 单步执行:单步执行不带符号的方法“Microsoft.Office.InfoPath.Server.DocumentLifetime.Document.ExecuteDefaultSubmitAction” 这还不错!我继续调试,但现在原始异常丢失,并且返回InfoPathFatalException 出现Microsoft.Office.InfoPath.Server.Util.InfoPathFatalException异常
Message=引发了类型为“Microsoft.Office.InfoPath.Server.Util.InfoPathFatalException”的异常。
Source=Microsoft.Office.InfoPath.Server
参数=false
SaveUserSession=false
UserMessage=behandlingen af formularen下的alvorlig fejl选项。
StackTrace:
在Microsoft.Office.InfoPath.Server.Util.GlobalStorage.get_CurrentFormId()中 内部异常: VS输出现在显示: 单步执行:单步执行不带符号“Microsoft.Office.InfoPath.Server.SolutionLifetime.DatabaseHelper.CheckErrorBoard”的方法 单步执行:单步执行不带符号的方法“Microsoft.Office.InfoPath.Server.DocumentLifetime.Document.ExecuteDefaultSubmitAction” 单步执行:单步执行不带符号“Microsoft.Office.InfoPath.Server.DocumentLifetime.OmeExceptionManager.ExecuteOMCallWithExceptions”的方法 谈到SharePoint,我是个新手,但我觉得这有点像安全问题? 似乎不允许原始异常“冒泡”回调用方 我已尝试在SharePoint中启用完全登录,但当我查看“.\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\logs”中的日志时,我只能看到“原始”异常,而看不到它被覆盖的原因 其他信息: 站点当前使用以下配置设置运行:
<trust level="Full" originUrl="" />
有人对这个问题有什么想法吗
在SharePoint 2007上,所需的异常会返回给调用者。认为这个问题已经讨论得够久了:-) 问题在于我们使用XMLFormView控件的方式。 我没有改变我们的代码逻辑,而是选择实现一种变通方法 简言之: 我阅读了以下Microsoft文档: 其中一节内容如下: 只能在以下事件之一期间访问XmlForm属性:
- 初始化
- 通知主机
- 提交主机
- 接近
/// <summary>
/// Dirty hack to fix issue after update to InfoPath 2010
/// </summary>
private static void InfoPath2010Hack()
{
if (HttpContext.Current != null)
{
if (HttpContext.Current.Items["__GlobalStorage.FormIds"] == null)
{
var formIds = new Stack<string>();
formIds.Push("XmlFormView1");
HttpContext.Current.Items["__GlobalStorage.FormIds"] = formIds;
}
else
{
var formIds = ((Stack<string>)HttpContext.Current.Items["__GlobalStorage.FormIds"]);
if (formIds.Count <= 0)
{
formIds.Push("XmlFormView1");
HttpContext.Current.Items["__GlobalStorage.FormIds"] = formIds;
}
}
}
}
//
///更新到InfoPath 2010后修复此问题的恶意攻击
///
私有静态无效InfoPath2010Hack()
{
if(HttpContext.Current!=null)
{
if(HttpContext.Current.Items[“\uu GlobalStorage.FormIds”]==null)
{
var formIds=新堆栈();
formIds.Push(“XmlFormView1”);
HttpContext.Current.Items[“\uu GlobalStorage.FormIds”]=FormIds;
}
其他的
{
var formIds=((堆栈)HttpContext.Current.Items[“\uuu Glob