Ausdrucksübersetzung mithilfe von Workflow Manager Tools 1.0

 

In Workflow-Manager 1.0 gehostete Workflows sind vollständig deklarativ und können daher nur mithilfe von Aktivitäten, Ausdrücken und Variablen aus der vertrauenswürdigen Oberfläche erstellt werden.Den Weitere Informationen über zur vertrauenswürdigen Oberfläche von Workflow-Manager finden Sie unter Erstellen deklarativer Workflows für Workflow Manager 1.0.)Alle Ausdrücke in den Workflows werden in Ausdrucksaktivitäten übersetzt, bevor der Workflow in Workflow-Manager hochgeladen wird.Workflow-Manager Tools 1.0 Beta für Visual Studio 2012 enthält einen Expression Translation Build Task und eine Expression Translation API, um bessere Möglichkeiten für die Erstellung bereitzustellen.Entwickler können den Erstellungstask oder die API zum Überprüfen der Ausdrücke in einem Workflow zur Laufzeit verwenden.Anweisungen zum Installieren von Workflow-Manager Tools finden Sie unter Workflow Manager Tools 1.0 für Visual Studio 2012-Installation.

  • Verwenden des Ausdrucksübersetzungs-Erstellungstasks

  • Verwenden der Ausdrucksübersetzungs-API

Verwenden des Ausdrucksübersetzungs-Erstellungstasks

Wenn Sie den Erstellungstask verwenden möchten, fügen Sie das folgende Import-Element der Datei csproj (oder vbproj) für Ihr Projekt hinzu.

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

Eine Beispielprojektdatei, die das oben genannte Import-Element enthält, finden Sie in der Datei ActivityLibrary1.csproj aus dem Beispiel Verwenden von Workflowtools.

Wenn Sie das Verhalten des Erstellungstasks untersuchen möchten, fügen Sie einen nicht unterstützten Ausdruck hinzu, z. B. eine WriteLine-Aktivität mit new Guid().ToString() als Text-Argument, und erstellen Sie dann das Projekt.Beachten Sie die Fehler, die vor und nach dem Importieren der Zieldatei des Ausdrucksübersetzungs-Erstellungstasks angezeigt werden.

Verwenden der Ausdrucksübersetzungs-API

Zum programmgesteuerten der Ausdrücke im Workflow kann die folgende Hilfsmethode verwendet werden.

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();
}