如何在Sharepoint 2010中的c#工作流程中重置InfoPath表单的数字签名?

SpY*_*3HH 5 c# workflow digital-signature sharepoint-2010 infopath2010

正如问题所说,我在提交时使用ac#工作流在SP2010上运行了一个InfoPath表单.如果表单在工作流程中被拒绝,那么我需要重置它.我掌握了一切,除了如何将数字签名重置为null,nill,nada,没有,非现存!有任何想法吗?我现在正在看谷歌,但就目前而言,我甚至不确定是否有数字签名?

哇,我注意到这个问题突然获得了很多流行音乐,奖金几乎消失了.只是把它放在那里,我不打算不给别人,但我本周早些时候需要答案(2012年11月第2周),因此我尽可能地搜索和播放代码,直到我找到了自己的代码.在别人回答我之前回答.但是,为了将来参考,如果有人给出了更好的答案,我很乐意回来并代表他们.谢谢大家的支持,我真的希望我的回答对我来说同样有用.

现在 Bloggered && Gisted 可能再没有人像我对这个答案那样努力搜索,:P

SpY*_*3HH 2

\n

\xc2\xa1\xc2\xa1\xc2\xa1 我找到了我的FRIGGIN \'答案!!!

\n \xc2\xa1\xc2\xa1\xc2\xa1 它从工作流程中工作!

\n

\n\n

经过一番尝试和磨难,我终于想出了一个解决办法。它涉及几个步骤。一、提升安全性!否则,非管理员用户将导致工作流程出错。看起来应该这样工作,但是......其次,获得正确的模式!我花了一段时间才找到我的,我忘记了具体步骤,但是,它并不难找到。 UPDATED: Can be found as an attribute of xmlDoc.Document, see updated code单步调试(调试)您的工作流程,无需命名空间/架构,并在文档到达时突出显示您的文档。属性之一是作为架构链接的 url。无论如何,你想看看解决方案吗!?是吗?向下看!

\n\n
SPSecurity.RunWithElevatedPrivileges(delegate()\n{\n    SPFile formFile = workflowProperties.Item.File;\n    MemoryStream ms = new MemoryStream(formFile.OpenBinary());\n    XmlTextReader rdr = new XmlTextReader(ms);\n    XmlDocument xmlDoc = new XmlDocument();\n    xmlDoc.Load(rdr);\n    rdr.Close();\n    ms.Close();\n    XmlNamespaceManager nsm = new XmlNamespaceManager(xmlDoc.NameTable);\n    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";\n    nsm.AddNamespace("my", schemaUri);\n    XmlNode nodeSignatureCollection = xmlDoc.DocumentElement.SelectSingleNode("my:signatures1", nsm);\n    if (nodeSignatureCollection != null)\n    {\n        if (nodeSignatureCollection.HasChildNodes)\n        {\n            foreach (XmlNode nodeSignature in nodeSignatureCollection.ChildNodes)\n            {\n                //  HERE IT IS!!!\n                if (nodeSignature.HasChildNodes && !nodeSignature.IsReadOnly) nodeSignature.RemoveAll();\n            }\n        }\n    }\n    byte[] xmlData = System.Text.Encoding.UTF8.GetBytes(xmlDoc.OuterXml);\n    formFile.SaveBinary(xmlData);\n    formFile.Update();\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

请记住,此设置用于检查多个签名。尽管我怀疑如果只有一个签名,任何事情都会改变。

\n\n
\n

任何关于让它变得更甜、更小的建议都可以接受,但是,我必须要求一个解释。老实说,我几乎不明白这里发生了什么!

\n
\n