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

时间:2010-06-10 01:17:24

标签: workflow infopath

我创建了一个InfoPath表单(例如Form_ExpenseReport),用于收集来自最终用户的数据,以及一些任务表单(也是InfoPath表单,例如TaskForm_1,TaskForm_2),用于我的状态机工作流程使用。用户希望在原始IP表单(Form_ExpenseReport)中查看任务表单(TaskForm_1& TaskForm_2)的所有注释。如何从工作流程中更新第一个表单?有人可以给我一些提示吗?

我的环境:

  • MOSS 2007 Enterprise许可证
  • VS 2008

1 个答案:

答案 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)
        {

        }
    }

谢谢, 阿姆贾德