![](/img/trans.png)
[英]Incorporating a workflow Initiation Infopath form in Visual Studio 2010 for Sharepoint 2010
[英]How to reset digital signature of an InfoPath form during c# workflow in Sharepoint 2010?
正如問題所說,我在提交時使用ac#工作流在SP2010上運行了一個InfoPath表單。 如果表單在工作流程中被拒絕,那么我需要重置它。 我掌握了一切,除了如何將數字簽名重置為null,nill,nada,沒有,非現存! 有任何想法嗎? 我現在正在看谷歌,但就目前而言,我甚至不確定是否有數字簽名?
哇,我注意到這個問題突然獲得了很多流行音樂,獎金幾乎消失了。 只是把它放在那里,我不打算不給別人,但我本周早些時候需要答案(2012年11月第2周),因此我盡可能地搜索和播放代碼,直到我找到了自己的代碼。在別人回答我之前回答。 但是,為了將來參考,如果有人給出了更好的答案,我很樂意回來並代表他們。 謝謝大家的支持,我真的希望我的回答對我來說同樣有用。
我發現了一個AN AN AN AN AN AN AN AN AN AN!!!!!!! ! !
從工作流程開始工作!!!
通過大量的試煉和磨難,我終於能夠找到解決方案。 它涉及幾個步驟。 一,提升安全性! 否則,非管理員用戶將導致工作流程出錯。 看起來它應該以這種方式工作,但是......其次,獲得正確的架構! 我花了一段時間找到我的,
我忘記了確切的步驟,但是,這並不難找到。
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();
});
請記住,此設置用於通過多個簽名。 雖然我懷疑如果只有一個簽名會有任何改變。
關於使這種更甜更小的建議被接受,但是,我必須要求解釋。 老實說,我幾乎不明白這里發生了什么!
以下答案僅適用於HALF。 它留在這里用於教學目的。 ( 完整的工作答案可以在這里找到。 )它適用於管理員用戶,但沒有更少。 它也只能在代碼后面的InfoPath表單中使用。 不是來自工作流程。 增加高架權利似乎有0效果
我將這個答案與我的其他人一起留在這里,以便有人可以從這兩個例子中學習,或者甚至可以通過評論指導其他人(包括我自己),而不是為什么一種方式可能比另一方更好。 在這一點上,我真的不在乎解釋,因為我真的不在乎再看到這個代碼! 大聲笑!
public void FormEvents_Loading(object sender, LoadingEventArgs e)
{
string[] actionFields = new string[] { "/my:myFields/my:.../my:...", "/my:myFields/my:.../my:...", etc... };
for (int i = 0; i < actionFields.Length; i++)
{
String field = actionFields[i];
XPathNavigator node = this.MainDataSource.CreateNavigator().SelectSingleNode(field, this.NamespaceManager);
if (node.Value.ToLower() == "reject")
{
XPathNavigator sigNode = this.MainDataSource.CreateNavigator();
if (this.Signed) //then unsign it
{
for (int ii = 2; ii <= 13; ii++)
{
try
{
XPathNavigator xSignedSection = sigNode.SelectSingleNode(String.Format("my:myFields/my:signatures1/my:signatures{0}", ii), this.NamespaceManager);
if (xSignedSection.HasChildren)
{
xSignedSection.MoveToChild(XPathNodeType.Element); xSignedSection.DeleteSelf();
};
}
catch (Exception ex) { };
};
};
};
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.