Comment accéder aux données renvoyées par un formulaire d'association de flux de travail?

StackOverflow https://stackoverflow.com/questions/352268

  •  20-08-2019
  •  | 
  •  

Question

Comment accéder aux données renvoyées par un formulaire d'association de flux de travail?

Scénario: lorsqu'un administrateur associe un flux de travail à une liste de points de partage, je souhaite afficher un formulaire Infopath qui permet de définir des variables qui s'appliquent à toutes les instances de cette liste. Le formulaire d'association se présente comme je le pensais et il renvoie les données saisies à l'environnement d'hébergement. J'ai lu que je pouvais accéder aux données une fois dans un flux de travail d'instance via SPWorkflowActivationProperties.ActivationData, mais il s'agit d'une chaîne xml. N’est-il pas possible d’accéder aux données renvoyées via des propriétés étendues, comme ce que vous faites avec les formulaires Infopath normaux?

Était-ce utile?

La solution

Autant que je sache, cela ne semble pas possible d’utiliser InfoPath OOTB. Cependant, la plupart de mes expériences avec les formulaires d'initiation personnalisés utilisaient des formulaires Web ASP.NET dans lesquels nous avions sérialisé une classe et l'avions intégrée à ActivationData.

Les approches possibles pourraient être:

  1. Encapsuler l'analyse XML

  2. Utilisez xsd.exe pour créer une classe basée sur le schéma de votre formulaire Infopath.

1. Encapsuler l'analyse XML

Vous pouvez créer une classe qui encapsule vos données de formulaire et prend la chaîne xml en tant que paramètre de son constructeur.

forme d'infopathe:

<?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>

Classe de données de formulaire personnalisée

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. Utilisez xsd.exe xsd peut être utilisé pour générer une classe basée sur le schéma utilisé par votre formulaire de flux de travail. Voir: Comment: accéder aux données de formulaire d'association et d'initiation dans un flux de travail

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top