Como faço para acessar os dados passados ??para trás de uma forma associação fluxo de trabalho?
-
20-08-2019 - |
Pergunta
Como faço para acessar passou os dados de volta de uma forma associação fluxo de trabalho?
Cenário: Quando um administrador associa um fluxo de trabalho com uma lista sharepoint eu quero mostrar um formulário do InfoPath que permite que as variáveis ??para ser definido que se aplicam a todas as instâncias nessa lista. O formulário de associação surge como seria de esperar e envia os dados indicados de volta para o ambiente de hospedagem. Eu li que eu possa chegar aos dados, uma vez dentro de um fluxo de trabalho exemplo, através SPWorkflowActivationProperties.ActivationData mas esta é uma seqüência de caracteres XML. Não é possível acessar os dados retornados por meio de propriedades estendidas muito parecido com o que você faz com formulários InfoPath normais?
Solução
Tanto quanto eu sei que isso não parece possível usando InfoPath OOTB. Entretanto, a maioria da minha experiência com formulários de início personalizado usado ASP.NET Web Forms onde serializado uma classe e enfiou-activationData.
abordagens possíveis podem ser:
-
Encapsulate XML parsing
-
Use Xsd.exe para criar uma classe baseado fora do esquema do seu formulário do InfoPath.
1. Encapsulate XML parsing
Você pode criar uma classe que encapsula os dados de formulário e leva a string XML como um parâmetro do que do construtor.
forma 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>
classe de dados de formulário personalizado
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. Use xsd.exe xsd pode ser usado para gerar uma classe que se baseia o esquema usado por seu formulário de fluxo de trabalho. Veja: Como: Associação Acesso e Iniciação dados de formulário em um fluxo de trabalho