다음을 통해 공유


사용자 지정 펑토이드 개발

BizTalk Server에서는 여러 작업 범위를 지원하는 많은 펑토이드를 제공하지만 다른 접근 방법이 필요한 상황이 발생할 수 있습니다. 사용자 지정 펑토이드는 BizTalk Server 매핑 환경에서 사용 가능한 작업의 범위를 확대할 수 있는 방법을 제공합니다. 각 사용자 지정 펑토이드는 Microsoft.BizTalk.BaseFunctoids에서 파생된 클래스를 사용하여 .NET 어셈블리로 배포됩니다. 어셈블리에 여러 개의 사용자 지정 펑토이드가 포함될 수 있습니다.

다음과 같은 경우 사용자 지정 펑토이드를 사용할 수 있습니다.

  • 고유 레거시 API를 통해서만 액세스할 수 있는 데이터를 사용하는 문자 코드 필드에 대한 특별한 유효성 검사 및 변환 규칙이 있는 경우

  • 사용자 지정 비즈니스 논리 및 키 관리를 사용하여 필드를 암호화하거나 암호 해독하는 경우

  • 다른 응용 프로그램에서 사용할 메시지의 일부에서 해시 코드를 생성하는 경우

  • 회계 부서에서 제품 유형별 총 판매액에 대한 요약 정보가 들어 있는 메시지를 요청하는 경우

  • 여러 관련 단계를 결합하거나 별도의 접근 방법을 사용하거나 새로운 클래스 라이브러리를 사용하여 맵의 복잡성을 줄이려는 경우

  • 둘 이상의 맵이 스크립트 펑토이드에서 동일한 스크립트 코드를 사용하는 경우

  • 작업 실패 시 이벤트 로그에 기록해야 하는 경우

    사용자 지정 펑토이드는 인라인 코드를 사용하여 솔루션으로 직접 통합되거나 전역 어셈블리 캐시로 배포된 클래스 라이브러리의 메서드에 대한 참조를 통해 간접적으로 통합될 수 있습니다. 두 유형의 통합 모두 BizTalk.BaseFunctoid 클래스를 사용하고 동일한 일반 단계 집합을 따릅니다.

  1. 원하는 .NET 언어를 사용하여 새 클래스 라이브러리 프로젝트를 만듭니다.

  2. 강력한 이름 지정 유틸리티(sn.exe)를 사용하여 키 파일을 만들고 해당 키 파일을 프로젝트에 할당합니다.

  3. Microsoft.BizTalk.BaseFunctoids.dll 대한 참조를 추가합니다. 이 어셈블리에는 BaseFunctoid 기본 클래스가 포함됩니다.

  4. 리소스 파일을 만들어 프로젝트에 추가합니다. 펑토이드 이름, 도구 설명 및 설명에 대한 문자열 리소스를 추가합니다. 16x16 픽셀 이미지 리소스를 추가하여 맵 디자이너 팔레트에 펑토이드를 나타냅니다.

  5. BaseFunctoid에서 파생되고, 생성자에서 기본 매개 변수를 설정한 다음, 펑토이드 메서드 및 지원 메서드를 작성하여 펑토이드 클래스를 구현합니다. 어셈블리에 여러 사용자 지정 펑토이드가 포함될 수 있습니다.

  6. 어셈블리를 배포하고 새 펑토이드가 도구 상자 팔레트에서 사용 가능한지 확인합니다. Visual Studio 도구 상자에서 사용자 지정 펑토이드 추가 및 제거를 참조하세요.

    다음은 Floor 펑토이드에 대한 그림입니다.

/// <summary>  
/// Floor Functoid - finds the floor of input  
/// </summary>  
public class FloorFunctoid : BaseFunctoid  
{  
    public FloorFunctoid()  
        : base()  
    {  
        this.ID = 11001;  
        SetupResourceAssembly("MultipleFunctoids.Resource", Assembly.GetExecutingAssembly());  
  
        SetName("NAME_FLOOR");  
        SetDescription("DESCRIPTION_FLOOR");  
        SetTooltip("DESCRIPTION_FLOOR");  
        SetBitmap("IMAGE_FLOOR");  
  
        SetExternalFunctionName(GetType().Assembly.FullName, " MultipleFunctoids.FloorFunctoid", "MathFloor");  
        this.RequiredGlobalHelperFunctions = InlineGlobalHelperFunction.IsNumeric;  
  
        AddScriptTypeSupport(ScriptType.CSharp);  
        SetMinParams(1);  
        SetMaxParams(1);  
  
        this.Category = FunctoidCategory.Math;  
        this.OutputConnectionType = ConnectionType.AllExceptRecord;  
        AddInputConnectionType(ConnectionType.AllExceptRecord);  
        this.HasSideEffects = false;  
    }  
  
    /// <summary>  
    /// To create the C# function  
    /// </summary>  
    /// <param name="scriptType">Script type</param>  
    /// <param name="numParams">Number of parameters</param>  
    /// <param name="functionNumber">Functoid number</param>  
    /// <returns>C# script</returns>  
    protected override string GetInlineScriptBuffer(ScriptType scriptType, int numParams, int functionNumber)  
    {  
        if (ScriptType.CSharp == scriptType)  
        {  
            StringBuilder builder = new StringBuilder();  
  
            builder.Append("public string MathFloor(string input)\n");  
            builder.Append("{\n");  
            builder.Append("  if(string.IsNullOrEmpty(input))\n");  
            builder.Append("    return string.Empty;\n");  
            builder.Append("double d = 0.0;\n");  
            builder.Append("if (IsNumeric(input, ref d))\n");  
            builder.Append("    return Math.Floor(d).ToString(System.Globalization.CultureInfo.InvariantCulture);\n");  
            builder.Append("else\n");  
            builder.Append("    return string.Empty;\n");  
            builder.Append("}\n");  
  
            return builder.ToString();  
        }  
        else  
        {  
            return string.Empty;  
        }  
    }  
}  
  

이 샘플 코드를 C# 프로젝트의 일부로 사용하는 동안 "어셈블리 이름"을 "MultipleFunctoids"로 설정해야 합니다. 이 코드가 포함된 C# 프로젝트에 Resource.resx 파일을 포함해야 합니다.

SetName("NAME_FLOOR");  
SetDescription("DESCRIPTION_FLOOR");  
SetTooltip("DESCRIPTION_FLOOR");  
SetBitmap("IMAGE_FLOOR");  
  

위 코드에서 "NAME_FLOOR", "DESCRIPTION_FLOOR" 및 "DESCRIPTION_FLOOR" 값은 Resource.resx 파일에 포함된 리소스 문자열의 "키"입니다. 또한 "IMAGE_FLOOR"는 Resource.resx 파일에 포함된 이미지의 이름입니다. 이 이미지는 펑토이드의 아이콘 역할을 합니다.

적합한 리소스 키를 지정하지 않거나 SetName 메서드를 삭제할 경우 이름이 없는 사용자 지정 펑토이드가 만들어지므로 올바른 방법이 아닙니다. SetDescription 및 SetTooltip 메서드의 경우에도 마찬가지입니다. 항상 이러한 메서드를 올바르게 사용하여 원하지 않게 쓸데없는 동작이 발생하는 것을 방지합니다. 그러나 펑토이드 아이콘으로 사용할 적합한 이미지가 없는 경우에는 SetBitmap 메서드를 건너뛸 수 있습니다. 이러한 경우 아이콘이 없는 펑토이드가 여러 개가 아닌 한, 사용자 지정 펑토이드에는 기본 아이콘이 사용되며 아무런 부작용도 없습니다.

사용자 지정 펑토이드를 만드는 방법에 대한 자세한 내용은 Custom 펑토이드(BizTalk Server 샘플)를 참조하세요.

중요

특정 펑토이드 ID는 표준/기본 제공 맵 편집기 펑토이드에 사용하도록 예약되어 있습니다. 일반적으로 표준 매퍼 펑토이드는 1에서 10000까지의 ID를 사용합니다. 사용자 지정 펑토이드를 만드는 동안 펑토이드 ID가 10000보다 작으면 사용하지 마세요.

섹션 내용

이 섹션에는 다음 항목이 포함됩니다.

참고 항목

펑토이드를 사용하여 보다 복잡한 매핑 만들기