SIGN UP MEMBER LOGIN:    
ARTICLE

Developing a Custom Functoid in BizTalk Server

Posted by John Charles Olamendy Articles | BizTalk Server November 24, 2009
In this article, I will show how to create a custom functoid in BizTalk.
Reader Level:

Introduction

In this article, I will show how to create a custom functoid in BizTalk. A functoid is a mapping artifact which enable encapsulate custom business logic in the component in order to transform documents with different formats. As an example, I will describe the process to develop, deploy, and use a custom functoid which implements the addition mathematical operation. The functoid will have two input parameters representing the numbers to be added and one output parameter representing the result of the addition operation.

Getting started with the solution

First of all, create a solution and an Empty BizTalk Server Project (see Figure 1).

1.gif

Figure 1

Then a create a Class Library .NET project which hosts the functoid component (see Figure 2).

2.gif

Figure 2

Add a reference to the Microsoft.BizTalk.BaseFunctoids.dll assembly located in the %PROGRAM FILES%\Microsoft BizTalk Server 2006\Developer Tools\ directory (see Figure 3).

3.gif

Figure 3

Now let's add class to the Class Library project and name it as CustomAddition (see Figure 4).

4.gif

Figure 4

Now it's time to write the code to implement the CustomAddition class.

First of all, reference the namespace Microsoft.BizTalk.BaseFunctoids and inherit the CustomAddition from the BaseFunctoid base class as well as annotate the class as Serializable using the appropriate attribute. Then write the initialization code in the constructor of the CustomAddition class in order to set an identifier to this class, set a name, description, tooltip, constraints in the minimum and maximum number of parameters and connection to external nodes, a reference to function that implements the addition logic as well as a category inside the Toolbox in Visual Studio (see Listing 1).

It's remarkable to say that in the case of name, description and tooltip properties of the functoid, we don't actually set the value instead we set the identifier to the associated resource. Thus, we need to create a resource file (resx) to store these properties and then add a reference to the resources in the code.

using
System;
using System.Collections.Generic;
using System.Text;
using Microsoft.BizTalk.BaseFunctoids;
using System.Reflection; 

namespace CustomFunctoidsLib

{

    [Serializable]

    public class CustomAddition : BaseFunctoid

    {

        public CustomAddition() : base()

        {

            //Identifier for the class. 6000 or higher

            this.ID = 8888;

            //Reference to the resources

            this.SetupResourceAssembly("CustomFunctoidsLib.CustomFunctoidsLibResource",Assembly.GetEntryAssembly());

            //Functoid name

            this.SetName("CUSTOM_ADDITION_NAME");

            //Description of the functoid

            this.SetDescription("CUSTOM_ADDITION_DESCRIPTION");

            //Tooltip fot the functoid

            this.SetTooltip("CUSTOM_ADDITION_TOOLTIP");

            //Constraints in the minimum and maximum number of parameters

            this.SetMinParams(1);

            this.SetMaxParams(2);

            //Constraints on the connections to external nodes

            this.AddInputConnectionType(ConnectionType.All);

            this.OutputConnectionType = ConnectionType.All;

            //Reference to function that implements the addition logic

            this.SetExternalFunctionName(this.GetType().Assembly.FullName, "CustomFunctoidsLib.CustomAddition","Addition");

            //Category inside the Toolbox in Visual Studio

            this.Category = FunctoidCategory.Math;

        }

 

        public string Addition(string strParam1, string strParam2)

        {

            decimal dParam1 = System.Convert.ToDecimal(strParam1);

            decimal dParam2 = System.Convert.ToDecimal(strParam2);

            decimal dResult = dParam1 + dParam2;

 

            return dResult.ToString();

        }

    }
}

Listing 1

Finally, add a strong name key and build the project.

Next, place a copy of the assembly in the %PROGRAM FILES%\Microsoft BizTalk Server 2006\Developer Tools\Mapper Extensions\ directory and register the assembly in the Global Assembly Cache (GAC) using the gacutil tool (see Figure 5). It's remarkable to say that functoids can be tested without being deployed to the GAC.

5.gif

Figure 5

Now add the functoid into the Toolbox, by right-click on the Toolbar and selecting Choose Toolbox Items option in order to display the Choose Toolbox Items dialog box. Go to the Functoid tab and click on the Browse button to search for the library. Finally, drag and drop the created functoid onto the maps surface and create the links with the underlying schemas.

Conclusion

In this article, I covered the development of a BizTalk functoid so that you can apply this solution to your own business situation.

Login to add your contents and source code to this article
share this article :
post comment
 

test

Posted by Mahesh Chand Nov 24, 2009
Nevron Gauge for SharePoint
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Become a Sponsor