Traduction d'expression à l'aide de Workflow Manager Tools 1.0

 

Les flux de travail hébergés dans Workflow Manager 1.0 sont entièrement déclaratifs et ne peuvent donc être créés qu'à l'aide d'activités, d'expressions et de variables provenant de la surface approuvée.(Pour plus d'informations sur la surface approuvée Workflow Manager, voir Création de flux de travail déclaratifs pour Workflow Manager 1.0.)Les expressions des flux de travail sont traduites en activités d'expression avant le chargement du workflow dans Workflow Manager.Afin d'optimiser la création, Workflow Manager Tools 1.0 pour Visual Studio 2012 inclut une Expression Translation Build Task et une Expression Translation API.Les développeurs peuvent choisir d'utiliser la tâche de génération ou l'API pour valider les expressions dans un flux de travail au moment de la génération.Pour obtenir des instructions sur l’installation de Workflow Manager Tools, voir Installation de Workflow Manager Tools 1.0 pour Visual Studio 2012.

  • Utilisation de la tâche de génération de traduction d'expression

  • Utilisation de l'API de traduction d'expression

Utilisation de la tâche de génération de traduction d'expression

Pour utiliser la tâche de génération, ajoutez l'élément Import suivant au fichier csproj (ou vbproj) de votre projet.

<Import Project=
"C:\Program Files (x86)\MSBuild\Microsoft\Workflow Service\1.0\Microsoft.WorkflowServiceBuildExtensions.targets"/>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Pour obtenir un exemple de fichier de projet contenant l'élément Import précédent, utilisez le fichier ActivityLibrary1.csproj disponible dans l'exemple Utilisation d'outils de flux de travail.

Pour étudier le comportement de la tâche de génération, ajoutez une expression non prise en charge, par exemple, une activité WriteLine avec new Guid().ToString() en tant qu'argument Text, puis générez le projet.Notez les erreurs affichées avant et après l'importation du fichier de cibles de tâche de génération de traduction d'expression.

Utilisation de l'API de traduction d'expression

Pour valider par programme les expressions du flux de travail, il est possible d'utiliser la méthode d'assistance suivante.

public static string TranslateWorkflow(string originalWorkflow)
{
    string translatedWorkflowString = null;

    using (TextReader inputWorkflowReader = new StringReader(originalWorkflow))
    {
        using (XamlReader xamlReader = new XamlXmlReader(inputWorkflowReader))
        {
            try
            {
                TranslationResults result = ExpressionTranslator.Translate(xamlReader);
                if (result.Errors.Count == 0)
                {
                    translatedWorkflowString = CreateXamlString(result.Output);
                }
                else
                {
                    string errorMessage = string.Format(
                        "Error: Failed to translate workflow with {0} errors",
                         result.Errors.Count);
                    foreach (TranslationError error in result.Errors)
                    {
                        errorMessage += string.Format(
                            "\n Expression: {0}, Message: {1}",
                              error.ExpressionText, error.Message);
                    }

                    return errorMessage;
                }
            }
            catch (Exception e)
            {
                return "Error: " + e.Message;
            }
        }
    }

    return translatedWorkflowString;
}

static string CreateXamlString(XamlReader reader)
{
    StringBuilder stringBuilder = new StringBuilder();
    using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder, 
        new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true }))
    {
        using (XamlXmlWriter writer = new XamlXmlWriter(xmlWriter, reader.SchemaContext))
        {
            XamlServices.Transform(reader, writer);
        }
    }
    return stringBuilder.ToString();
}