我使用info path 2013将一堆infopath表单(许多在infopath 2003中创建)移动到SharePoint。
我们多年来一直在做表单的方式之一就是允许用户保存填写表单的进度。在infopath中,我们通过检查验证错误来解决此问题,如果存在为什么在xml中设置一个节点指示表单不完整,保存并清除错误,调用save webservice然后将错误放回来只需将具有验证错误的每个节点的值设置为已有的值。
实施例: 检查错误:
XPathNavigator node = MainDataSource.CreateNavigator().SelectSingleNode("//my:reportIsValid", NamespaceManager);
if (Errors.Count == 0)
node.SetValue("1");
else
node.SetValue("0");
保存并清除错误:
System.Collections.Generic.List<FormError> SaveErrors = new System.Collections.Generic.List<FormError>();
SaveErrors.AddRange(Errors.GetErrors(FormErrorType.SchemaValidation));
SaveErrors.AddRange(Errors.GetErrors(FormErrorType.SystemGenerated));
SaveErrors.AddRange(Errors.GetErrors(FormErrorType.UserDefined));
Errors.DeleteAll();
恢复错误:
foreach (FormError er in SaveErrors)
{
string tempval = er.Site.Value;
er.Site.SetValue(tempval);
}
虽然这对我们在infopath中失败了,但它只是某些形式在sharepoint中失败了,我还没弄清楚为什么,或者如何解决它。
在sharepoint中,当我们尝试设置值时,restore方法有时会返回异常。
有没有人有任何想法为什么这会在infopath中100%的时间工作,但只有80%的时间在sharepoint中工作?
还有其他方法可以恢复验证吗?