如何访问从工作流程关联表单传回的数据?

时间:2008-12-09 09:55:06

标签: sharepoint infopath

如何访问从工作流程关联表单传回的数据?

场景:当管理员将工作流与sharepoint列表关联时,我想显示一个infopath表单,该表单允许设置适用于该列表上所有实例的变量。关联表单按照我的预期出现,并将输入的数据提交回托管环境。我已经读过,我可以通过SPWorkflowActivationProperties.ActivationData在实例工作流中获取数据,但这是一个xml字符串。是否无法通过扩展属性访问返回的数据,就像使用普通的infopath表单一样?

1 个答案:

答案 0 :(得分:2)

据我所知,使用InfoPath OOTB似乎无法做到这一点。但是,我使用自定义启动表单的大部分经验都使用ASP.NET Web表单,我们将类序列化并将其填充到ActivationData中。

可能的方法可能是:

  1. 封装XML解析

  2. 使用xsd.exe根据信息表格的架构创建一个类。

  3. <强> 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可用于生成基于工作流表单使用的模式的类。请参阅:How to: Access Association and Initiation Form Data in a Workflow