2010-06-10 7 views
0

Я создал форму InfoPath (например, Form_ExpenseReport) для сбора данных от конечных пользователей и нескольких форм задач (также формы InfoPath, например TaskForm_1, TaskForm_2) для использования в рабочем процессе моего конечного автомата. Пользователи хотят увидеть все комментарии форм задач (TaskForm_1 & TaskForm_2) в исходной форме IP (Form_ExpenseReport). Как я могу обновить первую форму из рабочего процесса? Может ли кто-нибудь дать мне несколько советов?Как обновить исходную форму InfoPath из Workflow?

Моя среда:

  • MOSS 2007 Enterprise лицензия
  • VS 2008

ответ

1

Используйте следующий метод для обновления значений в InfoPath формы из Workflow .. это общий метод ..

Необходимо ввести .. 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) 
     { 

     } 
    } 

Thanks, Amjad

Смежные вопросы