Tallan's Technology Blog

Tallan's Top Technologists Share Their Thoughts on Today's Technology Challenges

Microsoft ESB Guidance

Dmitriy Gitelman

On November 8, 2007 Microsoft released the ESB Guidance. The ESB Guidance was developed by Microsoft patterns and practices team and the Connected Systems Division. It provides architectural guidance, patterns, practices, and a set of .NET and BizTalk Server components to simplify the development of Enterprise Service Bus (ESB) on the Microsoft platform and to allow companies to extend their messaging and integration solutions.
The Microsoft ESB Guidance is based on BizTalk Server 2006 R2 and extends its functionality to provide new capabilities that focus on building robust, connected, service-oriented applications. These capabilities include:

Policy driven mediation

Itinerary-based service invocation that supports lightweight service composition at the time of message publication
Dynamic resolution of endpoints and maps that enable decoupling the consumer from the services

Connecting systems

Message namespace normalization
JMS/WMQ connectivity
Support for messaging patterns that enable dynamic service aggregation, message routing, validation and transformation
Service registry and…

Flat File Interchanges with Multiple Document Types

Flat file interchanges with BizTalk are really useful for handling large files that contain messages that need to be individually processed. However one of their limitation is that they only support one flat file schema as the interchange’s document schema:

In some instances, one might want to process interchanges that contain more than one type of message such as:

The flat file has a batch header, and a series of purchases and work orders that have different formats. In order to parse this, one needs to create a flat file schema with a choice group that will make the flat file disassembler parse either of the two formats. That choice schema can then be used as the document schema in the flat file disassembler (the min/max occurs properties of the PO and WO nodes need to be set to 0/1):

And the following…

Install BizTalk Server 2006 Orchestration Designer for Business Analysts with Visio 2007

Dmitriy Gitelman

Recently I tried to install BizTalk Server 2006 Orchestration Designer for Business Analysts (ODBA), but the installation failed with this error message.

I had Visio 2007 on my system and it looked like ODBA installer was hard coded to look for Visio 2003. To confirm that, I used Registry Monitor utility from Windows Sysinternals web site (http://www.microsoft.com/technet/sysinternals/default.mspx).

I found that the installer does look for this registry key: HKLM\Software\Microsoft\Office\11.0\Visio, but cannot find it. However, I found similar registry key for Visio 2007: HKLM\Software\Microsoft\Office\12.0\Visio. I exported this registry branch to a file and replaced all instances of “12.0” to “11.0”.
After merging this file with the registry, I was able to install and use ODBA.

Handling of Record Tag Identifiers by BizTalk 2006 Flat File Schema Wizard

Dmitriy Gitelman

Those, who work with BizTalk 2006 Flat File Schema Wizard, probably noticed that record tag identifiers are handled differently for delimited and positional records. Let’s use a simple text file Person.txt for this example.

After opening Flat File Schema Wizard, skipping the Welcome Screen and entering required information on Flat File Schema Information screen we are presented with this Select Document Data screen.

Here tag identifier PERSON marks the whole record and it is followed by a User ID. Next line is person’s name record presented in comma delimited format. This record is tagged with NAME tag identifier. The last line represents person’s address. The address is presented using relative positions format and it is tagged with ADDRESS tag identifier. The children of the root element Person are {CR}{LF} delimited, so we make corresponding selection on Delimited Record screen and enter PERSON…

Import flat file using BizTalk server

Leo Wang

Recently I worked with a client to implement a solution to import data from an Excel file to SQL Server database. In order to provide a seamless user experience, we created a web page to allow user to upload file to server, then use BizTalk server to convert Excel file to XML file and call a web service to upload data into the SQL Server database.
By leveraging BizTalk server, we built a highly scalable and available data processing system for my client. Since my goal in this post is to introduce some core tools in the BizTalk, I simplify the real issue by 1) Changing the Excel file to the flat file, 2) uploaded data is saved into a file instead of database.
After completing this tutorial, you will be able to create flat file schema, convert flat file to XML…

Some new BizTalk links

Some interesting links:
BizTalk Server Database Optimization White Paper – This is an excellent MSDN write-up on how to optimize your BizTalk systems. The title is somewhat incorrect as it describes how to optimize the hardware (which RAID level to use, turn off hyperthreading), the Network (usage of subnets), the OS (Registry and other settings) , IIS and SQL Server tuning. This is an extensive and through document that includes lab performance tests and results, recommended configurations and links to helpful tools and utilities.
Some of the suggestions can be helpful even if you aren’t using BizTalk.
Enterprise Service Bus (ESB) Guidance Documentation and Source Code – This is the CodePlex community site for the latest release (CTP3) of the ESB Guidance package for BizTalk. Current plan is to release the final version in October.

BizTalk R2 Webcasts

Some useful webcasts to get started with BizTalk R2:
BizTalk 2006 R2 Technical Overview (Mitch Stein)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-01&pw=BTS06R2
Building EDI Solutions with BizTalk Server 2006 R2 (Tony Bernard)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-02&pw=BTS06R2
Orchestrating the real-time enterprise with the BizTalk RFID platform (Anush Kumar)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-03&pw=BTS06R2
AS2 Adapter & EDI Business Value (Tony Bernard)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-04&pw=BTS06R2
Building device providers for the BizTalk RFID platform (Anush Kumar)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-05&pw=BTS06R2
Designing and deploying BizTalk RFID Business Processes (Anush Kumar)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-06&pw=BTS06R2
Using BAM Interceptors for WCF and WF (Brad Paris)
http://www.livemeeting.com/cc/microsoft/view?id=Jumpstart-07&pw=BTS06R2

Testing Multi-part Map

Yuriy

Recently I was debugging an orchestration and found unexpected output from the map. The obvious decision was to use Visual Studio’s “Test Map” option. I opened the Map and realized that “Input” schema is a multi-part schema.

Combining two xml messages into one file will produce the multiple roots exception. So, I looked at the map’s source to figure out the structure. In order to view the map source, I simply ran “Validate map” and opened the generated xslt stylesheet.

The interesting part I found on the top of the schema was:
<?xml version=”1.0″ encoding=”UTF-16″?>
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform
xmlns:msxsl=”urn:schemas-microsoft-com:xslt”
xmlns:var=”http://schemas.microsoft.com/BizTalk/2003/var
exclude-result-prefixes=”msxsl var s1 s0 userCSharp”
version=”1.0″
The aggregation schema
xmlns:s1=http://schemas.microsoft.com/BizTalk/2003/aggschema
Here is the root
<xsl:apply-templates select=”/s1:Root” />
</xsl:template>
The  catch statement
<xsl:template match=”/s1:Root”>
<ns0:CreateNewTaskRequest>
<xsl:for-each select=”InputMessagePart_1/ns0:WorkflowTaskList…”>
The Input message has to have the following structure in order to comply with the generated schema:
<ns0:Root xmlns:ns0=”http://schemas.microsoft.com/BizTalk/2003/aggschema>
<InputMessagePart_0>
Message 1
</InputMessagePart_0>
<InputMessagePart_1>
Message 2
</InputMessagePart_1>
</ns0:Root>
Here is the resulting message I came up with for testing.
<ns0:Root xmlns:ns0=”http://schemas.microsoft.com/BizTalk/2003/aggschema>
<InputMessagePart_0>
<ns0:IssueProcessRequest xmlns:ns0=http://Workflow.IssueProcessing.IssueProcessRequest>
<IssueId xmlns=””>16</IssueId>
<IssueTypeId xmlns=””>1</IssueTypeId>
<IssueTypeCode xmlns=””>REQUEST</IssueTypeCode>
<IssuePurposeId…

BizTalk Books!

You can find a dedicated page for BizTalk books on B&N!
http://btob.barnesandnoble.com/index.asp?sourceID=0041631635&btob=Y

A Custom Functoid – EBCDIC to ASCII

Here is an example of a custom functoid method that converts an EBCDIC signed value to ASCII format:
Add a new C# class library project to your BizTalk solution and call it MyCompany.BizTalk.Functoids. Create a C# class in the project and use the same project name for the namespace.
Example:

using System;
using System.Collections.Generic;
using System.Text;
namespace MyCompany.BizTalk.Functoids
{
    /// <summary>
    /// Summary description for Utils.
    /// </summary>
    public class Utils
    {
        public Utils()
        {
        }

Add the method to perform the conversion:

/// <summary>
        /// Convert EBCDIC signed values to ASCII format
        /// </summary>
        /// <param name=”amount”>Amount to be converted</param>
        /// <param name=”sign”>Signed Value</param>
        /// <returns></returns>
        public double ConvertFromEBCDIC(double amount, string sign)
        {
            switch (sign)
            {
                case “{“:
                    amount = (amount / 10);
                   …

\\\