BizTalk Adapter Pack V2.0/WCF LOB Adapter SDK Poster
BizTalk Adapter V2.0/WCF LOB Adapter SDK Poster is available
Another of those things to stick up around the office… 🙂
Download
From HERE
BizTalk Adapter V2.0/WCF LOB Adapter SDK Poster is available
Another of those things to stick up around the office… 🙂
Download
From HERE
After working on the product for a number of year (more than 8 to be exact) I certainly hope not! It is often one of the most misunderstood products in the Microsoft stable and has (unfairly) got quite a bad name out there in the market. Just the mention Read More……(read more)
My last couple of projects have been very interesting, challenging and a lot of fun. My current project is no exception. I have the pleasure of working with a great group of people (I’ve got to give a shout out to C-Mappity (Casey), v-slice (Dan), Sniff Packy Packet (Rich) and 10 Bit (pronounced 2 bit) (Mike) – you know who you are). Anyways, this a great group and we are working on a fun project to create their services architecture which will be the framework for their ESB.
During our redesign and re-platform of some of their current services we have come up on some interesting scenarios. One that I think many people may run into is the need to take a source xml document that has a repeating list and map it to a destination that requires that repeating list to be formatted into a single delimited string.
The picture below shows what the Mapper looks like to get this working along with the structure of the source and destination schemas.
If we take a look at a sample source xml we will get a better understanding of the format of the repeated list.
<SearchByCodeList>
<FirstName>Jim</FirstName>
<LastName>Anderson</LastName>
<NetworkCodeList>
<NetworkCode>44</NetworkCode>
<NetworkCode>64</NetworkCode>
<NetworkCode>49</NetworkCode>
</NetworkCodeList>
</SearchByCodeList>
and lets take a look at the output before we get into the mapping functionality
<ProviderSearchCanonical>
<FirstName>Jim</FirstName>
<LastName>Anderson</LastName>
<NetworkCodeList>44|64|49</NetworkCodeList>
</ProviderSearchCanonical>
So, how do we do this in the Mapper?
We need to use the looping functoid and connect it to the NetworkCode node. If our source xml had each NetworkCode node surrounded by opening and closing NetworkCodeList nodes then the looping functoid would need to be connected to the NetworkCodeList node.
Since we are using the looping functoid we will get an output record for each of the NetworkCode elements. The first output would include the first value, the next loop would include the first value and the delimiter and the second value and so on. This is not what we want. We really want the last iteration of the loop to be output and none of the previous iterations. This is what the script functoid at the bottom of the map does.
The code returns a true when we want the output to be sent to the output message and false all other times. The value of this functoid is sent to the Value Mapping functoid as the first parameter (which is the logical true or false that is required). The code for the script functoid looks like:
public bool ShouldThereBeOutput( string inputIgnored, int totalRecords )
{
if(sbCount.Length == (totalRecords))
{
return true;
}
else
{
return false;
}
}
The totalRecs parameter is the value from the Record Count functoid (which is used in both Script functoids). The inputIgnored parameter is a little trick. We needed to make sure that the map processed the ShouldThereBeOutput method after the other Script functoid. By drawing a line from the first Script functoid to this one we can ensure that it will be called afterwards.
Now lets look at the functionality in the first Script functoid. The first thing that is in the code are two StringBuilder objects. They appear above the method declaration which will make them global in scope.
System.Text.StringBuilder NCLState = null;
System.Text.StringBuilder sbCount = new System.Text.StringBuilder();
The first is our state object which will hold the delimited string. The second is sbCount which holds the current iteration through the loop. There is an Iteration functoid but that only keeps track of the iterations on the destination side. We need the iteration that we are on based on the source.
The code below shows the method in the first Script functoid. The bottom else statement is run for our first time through the loop. It adds the value of the first node and appends a character to sbCount. You can add any single character to sbCount. The length property will tell us which loop we are currently in. The embedded else statement is fired for every subsequent loop iteration and will prepend the delimiter. Finally we check if the length of the sbCount object is equal to the value past in from the <<itermation>> functoid. If it is then we are all done looping and need to return the final delimited string. The code for this method looks like:
public string DetermineCodeList( string codeList, int totalRecords )
{
if(NCLState == null)
{
NCLState = new System.Text.StringBuilder();
}
if (sbCount.Length > 0)
if (sbCount.Length == totalRecords)
{return NCLState.ToString();}
else
{
NCLState.Append(“|” + codeList);
sbCount.Append(“x”);
return NCLState.ToString();
}
else
{
NCLState.Append(codeList);
sbCount.Append(“x”);
return NCLState.ToString();
}
}
Once the map is executed we will end up with our delimited list.
My latest screencast in the Windows WF developer screencast series has been loaded up. In this session, I go into detail about how to use one of the more powerful control flow activities in the framework. I show how to use data to drive control flow with the replicator, how to control the execution style and how to use rules to control when execution should complete. In addition, I show how to use code to initialize child activities before they are executed.
Pluralsight Screencast – Using the Replicator activity in Windows WF
Previous screencasts in this series can be found on the screencast section of the Pluralsight website. You will also find short screen casts on other technologies both current (e.g. WCF) and future ("Oslo") on this page.
My latest screencast in the Windows WF developer screencast series has been loaded up. In this session, I follow up on my previous screencast where I covered using SQL Tracking Services and dive into how Tracking Profiles work and how you can create them in code. I also showcase a couple of sample applications from the Windows SDK that allow you to visually create tracking profiles and then monitor a workflow using tracking data and the visual designer.
Pluralsight Screencast – Working with Tracking Profiles in Windows WF
Previous screencasts in this series can be found on the screencast section of the Pluralsight website. You will also find short screen casts on other technologies both current (e.g. WCF) and future ("Oslo") on this page.
Get it here. One note
of caution – delete your Repository database first. I didn’t and had to
completely uninstall and re-install again – YMMV but at least you are warned 🙂
Check out my new book on REST.
I will be speaking at VSLive! San Francisco at the end of February, specifically on the 25th and 26th. I'm presenting the following sessions:
![]() |
|
Blog readers may utilize a unique promo code (NS9F08) to receive $500 off of the standard pricing for the VSLive! PLUS package. There is no deadline for his offer. Simply browse to http://vslive.com/2009/sf to get started. Hope to see you there.
You can follow the VSLive! SF action on Twitter at http://twitter.com/VSLiveSF as well as on Facebook.
Certification for BizTalk Server 2006 R2 is available, at http://www.microsoft.com/learning/en/us/Exams/70-241.aspx.
Apparently it came out last October…..anyone done it? let’s go there!
I’ll post back shortly and let you know how I went…. 🙂
Exam details…
Overview
This exam is intended for candidates developing business solutions using Microsoft
BizTalk Server 2006 R2.
Audience Profile
A candidate for this exam will have experience developing, deploying, and testing
Microsoft BizTalk Server 2006 solutions across multiple real-world projects.
The candidate should have a solid understanding of fundamental BizTalk concepts and
familiarity with extended R2 capabilities.
The candidate should also have experience using the Microsoft .NET Framework, XML,
Microsoft Visual Studio, Microsoft SQL Server, Web Services, and Windows Communication
Foundation (WCF) while developing BizTalk integration solutions.
When you pass Exam 70-241: TS: Developing Business Process and Integration Solutions
by Using Microsoft BizTalk Server 2006 R2, you complete the requirements for the following
certification(s):MCTS: BizTalk Server 2006 R2
Exam 70-241: TS: Developing Business Process and Integration Solutions by Using Microsoft
BizTalk Server 2006 R2: counts as credit toward the following certification(s):
Note This preparation guide is subject to change at any time without prior
notice and at the sole discretion of Microsoft. Microsoft exams might include adaptive
testing technology and simulation items. Microsoft does not identify the format in
which exams are presented. Please use this preparation guide to prepare for the exam,
regardless of its format.
Skills Being MeasuredThis exam measures your ability to accomplish the technical tasks
listed below.The percentages indicate the relative weight of each major topic area
on the exam.
Configuring a Messaging Architecture
Set up and manage ports.
This objective may include but is not limited to: add a map, ordered delivery, send
ports, send port groups, starting vs. enlisting, receive ports, receive locations,
subscriptions
Plan for and implement secure messaging.
This objective may include but is not limited to: certificates, signing, encryption,
port authentication, encoding
Configure core adapters.
This objective may include but is not limited to: HTTP, SQL, POP3, SMTP, FTP, File
Configure content-based routing.
This objective may include but is not limited to: set a filter that uses a
promoted property
Implement messaging patterns.
This objective may include but is not limited to: normalizing/canonical messages,
splitter, large messages
Developing BizTalk Artifacts
Create schemas.
This objective may include but is not limited to: create a flat-file schema, create
a property schema, enveloping, promoted/distinguished properties, MessageType, schema
re-use (import/include)
Create maps.
This objective may include but is not limited to: functoid scripting, XSLT, pass a
parameter to a map, multiple schemas, looping
Create pipelines.
This objective may include but is not limited to: disassembling, create a custom pipeline,
create a pipeline component, XML validation
Develop orchestrations.
This objective may include but is not limited to: work with transactions and persistence,
integrate with Microsoft .NET assemblies, parameters, shapes
Configure orchestration bindings.
This objective may include but is not limited to: direct, dynamic, self correlating
Configure correlation.
This objective may include but is not limited to: listener shape, parallel shape,
correlation sets
Construct messages.
This objective may include but is not limited to: multi-part, untyped, construct messages
in .NET, construct messages in orchestrations, context properties
Implement orchestration patterns.
This objective may include but is not limited to: convoys, aggregator, splitter
Debugging and Exception Handling
Handle exceptions in orchestrations.
This objective may include but is not limited to: compensation, scope shapes, throw
exceptions, long-running transactions
Route errors.
This objective may include but is not limited to: port configuration, recoverable
interchange
Validate and test artifacts.
This objective may include but is not limited to: schemas, maps, pipelines
Integrating Web Services and Windows Communication Foundation (WCF) Services
Configure a WCF adapter.
This objective may include but is not limited to: WS*, custom bindings
Consume services.
This objective may include but is not limited to: Web port type, add a Web/Service
reference, consuming from orchestrations or pure messaging
Handle Web exceptions.
This objective may include but is not limited to: delivery notifications, catching
SOAP exceptions
Implementing Extended Capabilities
Create and deploy Business Rules Engine (BRE) components.
This objective may include but is not limited to: work with the Business Rules Composer,
deploy Business Rules policies, call from an orchestration, develop vocabularies
Develop EDI solutions.
This objective may include but is not limited to: trading partner setup, batching,
acknowledgments, importing schemas
Configure AS2.
This objective may include but is not limited to: party configurations, pipelines,
ports, certificates
Implement an RFID solution.
This objective may include but is not limited to: handle events, configure RFID devices,
manage and configure event sink endpoints
Plan and implement Business Activity Monitoring (BAM).
This objective may include but is not limited to: BAM alerts, tracking profile editor,
BAM workbook, activities, views, deployment
Deploying, Tracking, and Supporting a BizTalk Solution
Install and configure a multi-server BizTalk environment.
This objective may include but is not limited to: trusted vs. untrusted environments,
Active Directory groups
Deploy BizTalk applications.
This objective may include but is not limited to: MSI deployment, versioning, resources,
multiple staging environments such as development, test, and production
Partition a BizTalk solution.
This objective may include but is not limited to: hosts, host instances, handlers,
groups, multiple message boxes
Configure tracking.
This objective may include but is not limited to: orchestrations, schemas, ports,
pipelines, policies
Manage BizTalk solutions by using the Administration Console.
This objective may include but is not limited to: query for instances, terminate,
resume
Audit BizTalk solutions by using Health and Activity Tracking (HAT).
This objective may include but is not limited to: querying, saving messages, creating
custom fields, policy execution
[Via Paul Andrew] Now here is a must have tool for every SharePoint developer that wants to make sure that his code isn’t causing any nasty memory leaks due to forgotten Dispose calls (typically on the SPSite and SPWeb instances)! The SPDisposeCheck utility can actually review a compiled assembly and tell you if there are any forgotten Dispose calls, so you can even check third party assemblies. But remember, it’s a tool: nothing beats a full code review, but it certainly speeds up the process.
Get the detail’s on Paul’s blog: SPDisposeCheck is a tool to help SharePoint Developers follow memory management best practices when using the SharePoint API with IDisposable objects including SPSite and SPWeb. This tool is not supported by Microsoft and is recommended to be used on Developer workstations and not on production SharePoint Server installations.
Download from http://code.msdn.microsoft.com/SPDisposeCheck.
In a recent internal discussion I was enlightened to the fact that there is a BizTalk Server 2006 R2 certification exam available. This exam is available at http://www.microsoft.com/learning/en/us/Exams/70-241.aspx , so get going and be one of the…(read more)