Workflow 如何从工作流中更新原始InfoPath表单?

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

我创建了一个InfoPath表单(例如form_ExpenseReport),用于从最终用户收集数据,并创建了许多任务表单(还有InfoPath表单,例如TaskForm_1、TaskForm_2),用于我的状态机工作流。用户希望看到原始IP表单(form_ExpenseReport)中任务表单(TaskForm_1和TaskForm_2)的所有注释。如何从工作流中更新第一个表单?有人能给我一些提示吗

我的环境:

  • MOSS 2007企业许可证
  • VS 2008

使用以下方法从工作流更新InfoPath表单中的值。。这是一种通用方法

您需要通过
。。FieldName
as
xpath(/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)
        {

        }
    }