Conversión de expresiones mediante Workflow Manager Tools 1.0

 

Los flujos de trabajo hospedados en Workflow Manager 1.0 son completamente declarativos y, por lo tanto, solo se pueden crear mediante actividades, expresiones y variables de la superficie de confianza.(Para obtener más información sobre la superficie de confianza de Workflow Manager, consulte Marcar la autoría de flujos de trabajo declarativos en Workflow Manager 1.0.)Todas las expresiones en el flujo de trabajo se convierten en actividades de expresiones antes de que el flujo de trabajo se cargue a Workflow Manager.A fin de proporcionar una mejor experiencia de autoría, Workflow Manager Tools 1.0 para Visual Studio 2012 incluye una Expression Translation Build Task y una Expression Translation API.Los desarrolladores pueden optar por usar la tarea de compilación o la API para validar la expresión en un flujo de trabajo durante la compilación.Para obtener instrucciones sobre la instalación de Workflow Manager Tools, consulte Workflow Manager Tools 1.0 para la instalación de Visual Studio 2012.

  • Uso de la tarea de compilación Expression Translation

  • Uso de la API Expression Translation

Uso de la tarea de compilación Expression Translation

Para usar la tarea de compilación, agregue el siguiente elemento Import al archivo csproj (o vbproj) del proyecto.

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

Para ver un ejemplo del archivo de proyecto que contenga el elemento Import anterior, vea el archivo ActivityLibrary1.csproj de la muestra Uso de las herramientas de flujo de trabajo.

Para explorar el comportamiento de la tarea de compilación, agregue una expresión no admitida, por ejemplo, una actividad WriteLine con new Guid().ToString() como argumento Text y compile el proyecto.Anote los errores que se muestran antes y después de importar el archivo de destino de la tarea de compilación de conversión de expresiones.

Uso de la API Expression Translation

Para validar mediante programación las expresiones en el flujo de trabajo, se puede usar el siguiente método auxiliar.

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