¡¡¡ 我找到了我的答案!!!
¡¡¡ 它适用于工作流程!
历经千辛万苦,我终于想出了一个解决办法。它涉及几个步骤。一、提升安全!否则,非管理员用户将导致工作流程出错。似乎它应该以这种方式工作,但是......其次,获得正确的架构!我花了一段时间才找到我的,我忘记了确切的步骤,但是,它并不难找到。 UPDATED: Can be found as an attribute of xmlDoc.Document, see updated code
单步执行(调试)您的工作流程,无需命名空间/架构,并在文档到达时突出显示它。其中一个属性是作为架构链接的 url。无论如何,你想看看解决方案!?是吗?向下看!
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPFile formFile = workflowProperties.Item.File;
MemoryStream ms = new MemoryStream(formFile.OpenBinary());
XmlTextReader rdr = new XmlTextReader(ms);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(rdr);
rdr.Close();
ms.Close();
XmlNamespaceManager nsm = new XmlNamespaceManager(xmlDoc.NameTable);
String schemaUri = xmlDoc.DocumentElement.GetAttributeNode("xmlns:my") != null ? xmlDoc.DocumentElement.GetAttributeNode("xmlns:my").Value : "http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-09-04T20:19:31";
nsm.AddNamespace("my", schemaUri);
XmlNode nodeSignatureCollection = xmlDoc.DocumentElement.SelectSingleNode("my:signatures1", nsm);
if (nodeSignatureCollection != null)
{
if (nodeSignatureCollection.HasChildNodes)
{
foreach (XmlNode nodeSignature in nodeSignatureCollection.ChildNodes)
{
// HERE IT IS!!!
if (nodeSignature.HasChildNodes && !nodeSignature.IsReadOnly) nodeSignature.RemoveAll();
}
}
}
byte[] xmlData = System.Text.Encoding.UTF8.GetBytes(xmlDoc.OuterXml);
formFile.SaveBinary(xmlData);
formFile.Update();
});
请记住,此设置用于通过多个签名。虽然我怀疑如果只有一个签名会改变任何事情。
任何关于使这个更甜更小的建议都被接受,但是,我必须要求解释。老实说,我几乎不明白这里发生了什么!