我创建了一个InfoPath表单(例如Form_ExpenseReport),用于收集来自最终用户的数据,以及一些任务表单(也是InfoPath表单,例如TaskForm_1,TaskForm_2),用于我的状态机工作流程使用。用户希望在原始IP表单(Form_ExpenseReport)中查看任务表单(TaskForm_1& TaskForm_2)的所有注释。如何从工作流程中更新第一个表单?有人可以给我一些提示吗?
我的环境:
答案 0 :(得分:1)
使用以下方法从Workflow更新InfoPath表单中的值..它是通用方法..
您需要将.. FieldName
作为xpath (/myfields/my:txtcomments",your values)
public void SetFormFieldvalue(string FieldName, string FieldValue)
{
SPFile file = workflowProperties.Item.File;
string strLabel = string.Empty;
try
{
XmlDocument modifyEmpXMlDoc = new XmlDocument();
using (MemoryStream memorySream = new MemoryStream(file.OpenBinary()))
{
modifyEmpXMlDoc.PreserveWhitespace = true;
modifyEmpXMlDoc.Load(memorySream);
memorySream.Close();
}
if (modifyEmpXMlDoc == null)
return;
XPathNavigator modifyEmpFormNav = modifyEmpXMlDoc.CreateNavigator();
modifyEmpFormNav.MoveToFollowing(XPathNodeType.Element);
XmlNamespaceManager nsManager = new XmlNamespaceManager(new NameTable());
foreach (KeyValuePair<string, string> nameSpace
in modifyEmpFormNav.GetNamespacesInScope(XmlNamespaceScope.All))
{
if (nameSpace.Key == String.Empty)
{
nsManager.AddNamespace("def", nameSpace.Value);
}
else
{
nsManager.AddNamespace(nameSpace.Key, nameSpace.Value);
}
}
// Change the value of the InfoPath form field
modifyEmpXMlDoc.SelectSingleNode(FieldName,
nsManager).InnerText = FieldValue;
// Save the bytes of the XML document as the contents
// of the SPFile object that represents the InfoPath form
file.SaveBinary(Encoding.UTF8.GetBytes(modifyEmpXMlDoc.OuterXml));
// Save the changes made to the SPFile object
file.Update();
}
catch (Exception ex)
{
}
}
谢谢, 阿姆贾德