Как обновить исходную форму InfoPath из рабочего процесса? - PullRequest
0 голосов
/ 10 июня 2010

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

Моя среда:

  • MOSS 2007 Лицензия на предприятие
  • VS 2008

1 Ответ

1 голос
/ 18 декабря 2010

Используйте приведенный ниже метод для обновления значений в форме 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)
        {

        }
    }

Спасибо, Amjad

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...