워크플로 관리자 도구 1.0을 사용하여 표현식 변환

 

Workflow Manager 1.0에서 호스팅되는 워크플로는 완전히 선언적이므로 신뢰할 수 있는 표면의 작업, 표현식 및 변수만 사용하여 작성할 수 있습니다.Workflow Manager 신뢰할 수 있는 표면에 대한 자세한 내용은워크플로 관리자 1.0의 선언적 워크플로 작성을 참조하세요.워크플로의 모든 표현식은 워크플로가 Workflow Manager으로 업로드되기 전의 표현식 작업으로 변환됩니다.향상된 작성 환경을 제공하기 위해 Visual Studio 2012용 Workflow Manager Tools 1.0에는 Expression Translation Build TaskExpression Translation API가 포함되어 있습니다.개발자는 이 빌드 작업 또는 API를 사용하여 빌드 시 워크플로의 표현식에 대한 유효성을 검사할 수 있습니다.Workflow Manager Tools을 설치하는 방법은 Visual Studio 2012용 워크플로 관리자 1.0 설치를 참조하세요.

  • 표현식 변환 빌드 작업 사용

  • 표현식 변환 API 사용

표현식 변환 빌드 작업 사용

빌드 작업을 사용하려면 다음 Import 요소를 프로젝트의 csproj 또는 vbproj 파일에 추가하세요.

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

이전 Import 요소를 포함하는 예제 프로젝트 파일의 경우 워크플로 도구 사용 샘플의 ActivityLibrary1.csproj 파일을 참조하세요.

빌드 작업의 동작을 살펴보려면 지원되지 않는 표현식(예: WriteLinenew Guid().ToString() 인수로 사용하는 Text 작업)을 추가하고 프로젝트를 빌드합니다.표현식 변환 빌드 작업 대상 파일을 가져오기 이전과 이후에 각각 표시되는 오류를 확인합니다.

표현식 변환 API 사용

워크플로의 표현식에 대해 프로그래밍 방식으로 유효성을 검사하려면 다음 도우미 메서드를 사용하면 됩니다.

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