¡¡¡私はMYFRIGGINの答えを見つけました!!!
¡¡¡そしてそれはワークフローから動作します!!!
多くの試練と苦難を経て、私はついに解決策を思いつくことができました。それはいくつかのステップを含みます。1つは、セキュリティを強化することです。そうしないと、管理者以外のユーザーがワークフローでエラーを発生させます。このように機能するようですが...次に、適切なスキーマを取得してください。私の物を見つけるのに少し時間がかかりました。正確な手順を忘れましたが、見つけるのは難しくありません。 UPDATED: Can be found as an attribute of xmlDoc.Document, see updated code
名前空間/スキーマを使用せずにワークフローをステップスルー(デバッグ)し、ドキュメントに到達したら強調表示します。プロパティの1つは、スキーマリンクである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();
});
この設定は、複数の署名を通過するためのものであることに注意してください。署名が1つしかない場合、何かが変わるとは思えませんが。
これをより甘く、より小さくするための提案は受け入れられますが、私は説明を要求しなければなりません。正直なところ、私はここで何が起こっているのかほとんど理解していません!