Workflow 如何从工作流中更新原始InfoPath表单?
我创建了一个InfoPath表单(例如form_ExpenseReport),用于从最终用户收集数据,并创建了许多任务表单(还有InfoPath表单,例如TaskForm_1、TaskForm_2),用于我的状态机工作流。用户希望看到原始IP表单(form_ExpenseReport)中任务表单(TaskForm_1和TaskForm_2)的所有注释。如何从工作流中更新第一个表单?有人能给我一些提示吗 我的环境:Workflow 如何从工作流中更新原始InfoPath表单?,workflow,infopath,Workflow,Infopath,我创建了一个InfoPath表单(例如form_ExpenseReport),用于从最终用户收集数据,并创建了许多任务表单(还有InfoPath表单,例如TaskForm_1、TaskForm_2),用于我的状态机工作流。用户希望看到原始IP表单(form_ExpenseReport)中任务表单(TaskForm_1和TaskForm_2)的所有注释。如何从工作流中更新第一个表单?有人能给我一些提示吗 我的环境: MOSS 2007企业许可证 VS 2008 使用以下方法从工作流更新InfoP
- MOSS 2007企业许可证
- VS 2008
。。FieldName
asxpath(/myfields/my:txtcoments”,您的值)
public void SetFormFieldvalue(字符串字段名,字符串字段值)
{
SPFile file=workflowProperties.Item.file;
string strLabel=string.Empty;
尝试
{
XmlDocument modifyEmpXMlDoc=新的XmlDocument();
使用(MemoryStream MemoryStream=new MemoryStream(file.OpenBinary())
{
modifyEmpXMlDoc.PreserveWhitespace=true;
modifyEmpXMlDoc.Load(memorySream);
memorySream.Close();
}
如果(modifyEmpXMlDoc==null)
返回;
XPathNavigator modifyEmpFormNav=modifyEmpXMlDoc.CreateNavigator();
修改empformnav.MoveToFollowing(XPathNodeType.Element);
XmlNamespaceManager nsManager=newxmlnamespacemanager(newnametable());
foreach(KeyValuePair)命名空间
在modifyEmpFormNav.GetNamespacesInScope(XmlNamespaceScope.All))中
{
if(nameSpace.Key==String.Empty)
{
nsManager.AddNamespace(“def”,nameSpace.Value);
}
其他的
{
nsManager.AddNamespace(nameSpace.Key,nameSpace.Value);
}
}
//更改InfoPath表单字段的值
modifyEmpXMlDoc.SelectSingleNode(字段名,
nsManager).InnerText=字段值;
//将XML文档的字节另存为内容
//表示InfoPath表单的SPFile对象的
SaveBinary(Encoding.UTF8.GetBytes(modifyEmpXMlDoc.OuterXml));
//保存对SPFile对象所做的更改
file.Update();
}
捕获(例外情况除外)
{
}
}
谢谢,
阿姆贾德
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)
{
}
}