Как получить доступ к данным, переданным обратно из формы связи рабочего процесса? - PullRequest
1 голос
/ 09 декабря 2008

Как получить доступ к данным, переданным из формы ассоциации рабочего процесса?

Сценарий: когда администратор связывает рабочий процесс со списком общих точек доступа, я хочу отобразить форму информационного пути, которая позволяет устанавливать переменные, которые применяются ко всем экземплярам в этом списке. Форма ассоциации появляется, как я и ожидал, и отправляет введенные данные обратно в среду хостинга. Я читал, что могу получить данные один раз внутри рабочего процесса экземпляра через SPWorkflowActivationProperties.ActivationData, но это строка XML. Разве невозможно получить доступ к возвращенным данным через расширенные свойства, очень похожие на то, что вы делаете с обычными формами infopath?

1 Ответ

2 голосов
/ 09 декабря 2008

Насколько я знаю, это невозможно с помощью InfoPath OOTB. Однако большая часть моего опыта с пользовательскими формами инициации использовала веб-формы ASP.NET, где мы сериализовали класс и вставили его в ActivationData.

Возможны следующие подходы:

  1. Инкапсуляция XML-анализа

  2. Используйте xsd.exe для создания класса, основанного на схеме вашей формы infopath.

1. Инкапсуляция XML-разбор

Вы можете создать класс, который инкапсулирует данные вашей формы и принимает строку xml в качестве параметра своего конструктора.

Форма Infopath:

<?xml version="1.0" encoding="UTF-8"?><?mso-infoPathSolution solutionVersion="1.0.0.2" productVersion="12.0.0" PIVersion="1.0.0.0" href="file:///C:\Documents%20and%20Settings\Administrator\My%20Documents\Template1.xsn" name="urn:schemas-microsoft-com:office:infopath:Template1:-myXSD-2005-10-21T21-12-27" ?><?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?><my:assetTracking xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-10-21T21:12:27" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-gb">
<my:employee>
    <my:employeeName></my:employeeName>
    <my:employeeDepartment></my:employeeDepartment>
</my:employee>
<my:assets>
    <my:asset>
        <my:assetID></my:assetID>
        <my:assetDescription></my:assetDescription>
        <my:assetMake></my:assetMake>
        <my:assetModel></my:assetModel>
        <my:assetSerialNumber></my:assetSerialNumber>
        <my:assetAssignedTo></my:assetAssignedTo>
        <my:assetDepartment></my:assetDepartment>
        <my:assetLocation></my:assetLocation>
        <my:assetCategory></my:assetCategory>
        <my:assetNotes></my:assetNotes>
    </my:asset>
</my:assets>

Класс данных пользовательской формы

public class FormData
{

  public string EmployeeName { get; set; }
  public string EmployeeDepartment { get; set; }

  public FormData(string formData)
  {
       XmlDocument document = new XmlDocument();
       document.LoadXml(formData);
       XmlNamespaceManager namespaceManager = new XmlNamespaceManager(document.NameTable);
       namespaceManager.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-05-08T04:21:20");

       // Initialize member fields
       this.EmployeeName = document.SelectSingleNode("/my:employee/my:employeeName", nsmgr).InnerText;
       this.EmployeeDepartment = doc.SelectSingleNode("/my:employee/my:employeeDepartment", nsmgr).InnerText;

       etc....
  }
 }

2. Используйте xsd.exe xsd может использоваться для генерации класса, основанного на схеме, используемой формой вашего рабочего процесса. См .: Как: получить доступ к данным формы ассоциации и инициации в рабочем процессе

...