We cannot rely on documentation, if they exist, to be accurate, special regarding to the status of the machines present in the environment – I never found this kind of document that tell me what is installed on the machine, what are the updates (or CU) or service pack installed and so on… and regarding to BizTalk Server I do not remember another simple task like this, get or check the list of all BizTalk Cumulative Updates installed in your machine/environment, being so painful to perform!

Of course, there are some ways to check that, for example:

  • you can do it manually by checking “Control Panel\Programs\Programs and Features” and then view the “Installed Updates”, however, this can be a very annoying task and sometimes time consuming just to try find them in that huge list because they are not organized in a category BizTalk

BizTalk-CU1-In-RosettaNet-Category

BizTalk-CU2-and-3-In-UDDI-Category

  • you can use BizTalk MsgBoxViewer but still if you only want to check what CU are installed, or you need to analyze your entire system with this tool, or you need to uncheck all the select default queries and check only for the cumulative updates – which can also be an annoying and time consuming task

Check-BizTalk-CU-with-MsgBoxViewer

Check-BizTalk-CU-with-MsgBoxViewer-result

Probably there are other ways, nevertheless, I just want a quick and very easy way, because this is a basic and very simple task, to know what are the BizTalk Cumulative Updates installed likeConfused smile

This is the list of BizTalk Cumulative Update installed in this machine: BTS2013R2LAB01
- Microsoft BizTalk Server 2013 R2 CU1
- Microsoft BizTalk Server 2013 R2 CU2
- Microsoft BizTalk Server 2013 R2 CU3

This way I know that I need to install the last CU available: “Microsoft BizTalk Server 2013 R2 CU4”. Yehhh!

PowerShell script overview

So how can we easily automate tasks? and reuse them whenever necessary and at the same time saving significant time for other tasks?

Using PowerShell is a good option. Windows PowerShell is a Windows command-line shell designed especially for system administrators and can be used by BizTalk administrators to help them in automating repetitive tasks or tasks that are time consuming to perform manually.

This is a simple script that allows you to configure the template name of the cumulative updates, that will change from version to version, and will give you the list of all cumulative updates installed in your machine:

$keyResults = Get-ChildItem -path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ -Recurse -ErrorAction SilentlyContinue | where { $_.Name -match $CUNameTemplate}

foreach($keyItem in $keyResults)
{
    if ($keyItem.GetValue("DisplayName") -like "*$CUNameTemplate*")
    {
        write-host "-" $keyItem.GetValue("DisplayName").ToString().Substring(0,$keyItem.GetValue("DisplayName").ToString().IndexOf(" CU")+4)
    }
}

THIS SQL SCRIPT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.

After install the CU4 in my machine the result was what I was expecting:

This is the list of BizTalk Cumulative Update installed in this machine: BTS2013R2LAB01
- Microsoft BizTalk Server 2013 R2 CU1
- Microsoft BizTalk Server 2013 R2 CU2
- Microsoft BizTalk Server 2013 R2 CU3
- Microsoft BizTalk Server 2013 R2 CU4

You can download the PowerShell Script used here from:

Check all BizTalk Cumulative Updates installed in server with PowerShell (2 KB)
Microsoft | TechNet Gallery

In the previous post I provide a fix to the PowerShell script to that is able to configure the Deployment Properties of a BizTalk project, keeping my word, at least half of it, because I also found the same problems in the PowerShell script to fix or configure the Signing Properties of a BizTalk Project, i.e., it only worked if the signing properties already existed in the file(s) (.btproj). This means that:

  • if we obtain a copy of the project from the source control that have already have these properties defined, it will work otherwise the script was unable to properly set these properties.
  • if we were working on a new project then definitely the script didn’t set up the signing properties.

Again, I promised that I would fix it and now I’m keeping the rest of my word. Along with the previous, this is probably one of scripts that I use the most and the reason why is…

So, why this script is important?

Again, and this is nothing new, before deploying a BizTalk project we must first strongly sigh the assemblies involved in the project to give them a unique identification for allowing them to be installed into the GAC.

GAC (Global Assembly Cache) is a machine code cache that stores assemblies that can be shared by multiple applications on the computer. This assemblies needs to be strongly signed so that they can have a unique identification in the GAC.

A strong-named assembly provides several security benefits:

  • A strong name guarantees the uniqueness of the assembly by assigning a digital signature and a unique key pair.
  • A strong name protects the lineage of the assembly by ensuring that no one else can generate a subsequent version of the assembly.
  • A strong name provides a strong integrity check to guarantee that the contents of the assembly have not changed since the last build.

In the process of deploying a BizTalk solution, Visual Studio first builds the assemblies. The deployment process requires that each assembly is strongly signed. You can strongly sign your assemblies by associating each project in the solution with a strong name assembly key file. That is an easy and rapid task (non-time consuming task). However, if a solution in Visual Studio contains multiple projects, you must separately configure properties for each project.

This seems a slight and easy task but now imagine that you have almost 200 projects inside a unique Visual Studio Solution! It will be an insane operation and the most likely to happen is you to fall asleep in front of the pc… once again.

With this PowerShell you will be able to parameterize all projects inside a Visual Studio Solution running a single line of code and avoid spending numerous hours doing this task manually.

PowerShell script overview
    $allPropertyGroup = $xml.Project.PropertyGroup
    foreach($node in $allPropertyGroup)
    {
        if($node.AssemblyOriginatorKeyFile -ne $null)
        {
            $addNewKeyNodeFlag = $false;
            $node.AssemblyOriginatorKeyFile= $keyName;
        }

        if($node.SignAssembly -ne $null)
        {
            $addNewSignNodeFlag = $false;
            $node.SignAssembly= $true;
        }
    }

    if($addNewKeyNodeFlag -eq $true)
    {
        $childItemGroup = $xml.CreateElement("PropertyGroup",$xdNS)
        $childNone = $xml.CreateElement("AssemblyOriginatorKeyFile",$xdNS)
        $childNone.AppendChild($xml.CreateTextNode($keyName));
        $childItemGroup.AppendChild($childNone)
        $xml.Project.InsertBefore($childItemGroup, $xml.Project.ItemGroup[0])
    }

    if($addNewSignNodeFlag -eq $true)
    {
        $childItemGroup = $xml.CreateElement("PropertyGroup",$xdNS)
        $childNone = $xml.CreateElement("SignAssembly",$xdNS)
        $childNone.AppendChild($xml.CreateTextNode($true));
        $childItemGroup.AppendChild($childNone)
        $xml.Project.InsertBefore($childItemGroup, $xml.Project.ItemGroup[0])
    }

    $allItemGroup = $xml.Project.ItemGroup.None;
    foreach($node in $allItemGroup)
    {
        if($node.Include -eq $keyName)
        {
            $addKeyToSolutionFlag = $false;
        }
    }

    if($addKeyToSolutionFlag -eq $true)
    {
        $childItemGroup = $xml.CreateElement("ItemGroup",$xdNS)
        $childNone = $xml.CreateElement("None",$xdNS)
        $childNone.SetAttribute("Include", $keyName)
        $childItemGroup.AppendChild($childNone)
        $xml.Project.InsertBefore($childItemGroup, $xml.Project.Import[0])
    }
THIS SQL SCRIPT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.

You can download the PowerShell Script used here from:

BizTalk Server: Fixing BizTalk Project Signing Properties with PowerShell (2 KB)
Microsoft | TechNet Gallery

It is nothing new that before you can deploy a solution from Visual Studio into a BizTalk application, you must first set project properties, especially the Server and the Configuration Database. Otherwise two things may happen:

  • Deployment will fail when you try do to deploy it through Microsoft Visual Studio or will you are redeploying a previously deployed BizTalk project.
  • The assemblies and all their artifacts will be deployed to and unwanted BizTalk Application (normally BizTalk Application 1)

Previous I wrote a post regarding how to fix the Deployment Properties of a Visual Studio BizTalk Project with PowerShell, you can know more about it here. However, during my talks about tips and tricks I realize that the previous script was a little limited, it only worked if the deployment properties already exist in the file. This means that, if we were working on a new project or we obtaining a copy of the project from the source control, the script didn’t correctly setup or fix the deployment settings.

I promised that I would fix it and now I’m keeping my word. And I have to say that, this is probably one of scripts that I use the most and the reason why is…

So, why this script is important?

Well, if a solution in Visual Studio contains multiple projects, you need to manually configure the deployment properties for each project.

And you must keep in mind that these setting are under the Project user option file(s) (“*.btproj.user”) that are typically not under source control. The reason is that the Visual Studio deployment feature main focus is for development scenarios where one user settings might differ from another. And it will be up to you, or your client, to decide if you want these files to be checked in and available to all of the developers on your team. (you can read it more about this here)

So, this seems a slight and easy task but now imagine that you have almost 200 projects inside a unique Visual Studio Solution! It will be an insane and consuming task to do and most likely to happen is you to fall asleep in front of the pc.

With this PowerShell you will be able to parameterize all projects inside a Visual Studio Solution running a single line of code and avoid spending numerous hours doing this task manually.

PowerShell script overview
    $allPropertyGroup = $xml.Project.PropertyGroup
    foreach($node in $allPropertyGroup)
    {
        if($node.Server -ne $null)
        {
            #If the Deployment Setting already exists, then we just need to update them
            $addNewNodeFlag = $false
            $node.Server= $ServerName;
            $node.ConfigurationDatabase= $DatabaseName;
            $node.ApplicationName= $ApplicationName;
            $node.Redeploy= $RedeployFlag;
            $node.Register= $RegisterFlag;
            $node.RestartHostInstances= $RestartHostInstancesFlag;
        }
    }

    if($addNewNodeFlag -eq $true)
    {
        #Add a PropertyGroup node if the Deployment Setting doesn't exist
        $newXmlPropertyGroup = $xml.CreateElement("PropertyGroup", "http://schemas.microsoft.com/developer/msbuild/2003")
        $newXmlPropertyGroup.SetAttribute(“Condition”,”'`$(Configuration)|`$(Platform)' == 'Debug|AnyCPU'”);

        $newXmlElement = $newXmlPropertyGroup.AppendChild($xml.CreateElement("Server", "http://schemas.microsoft.com/developer/msbuild/2003"));
        $newXmlTextNode = $newXmlElement.AppendChild($xml.CreateTextNode($ServerName));
 
        $newXmlElement = $newXmlPropertyGroup.AppendChild($xml.CreateElement("ConfigurationDatabase", "http://schemas.microsoft.com/developer/msbuild/2003"));
        $newXmlTextNode = $newXmlElement.AppendChild($xml.CreateTextNode($DatabaseName));

        $newXmlElement = $newXmlPropertyGroup.AppendChild($xml.CreateElement("ApplicationName", "http://schemas.microsoft.com/developer/msbuild/2003"));
        $newXmlTextNode = $newXmlElement.AppendChild($xml.CreateTextNode($ApplicationName));

        $newXmlElement = $newXmlPropertyGroup.AppendChild($xml.CreateElement("Redeploy", "http://schemas.microsoft.com/developer/msbuild/2003"));
        $newXmlTextNode = $newXmlElement.AppendChild($xml.CreateTextNode($RedeployFlag));

        $newXmlElement = $newXmlPropertyGroup.AppendChild($xml.CreateElement("Register", "http://schemas.microsoft.com/developer/msbuild/2003"));
        $newXmlTextNode = $newXmlElement.AppendChild($xml.CreateTextNode($RegisterFlag));

        $newXmlElement = $newXmlPropertyGroup.AppendChild($xml.CreateElement("RestartHostInstances", "http://schemas.microsoft.com/developer/msbuild/2003"));
        $newXmlTextNode = $newXmlElement.AppendChild($xml.CreateTextNode($RestartHostInstancesFlag));

        $xml.Project.InsertAfter($newXmlPropertyGroup, $xml.Project.PropertyGroup[1])
    }

THIS SQL SCRIPT IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.

You can download the PowerShell Script used here from:

BizTalk Server: Fixing BizTalk Project Deployment Properties with PowerShell (1 KB)
Microsoft | TechNet Gallery

On 12th May, during my session in the Integrate 2016 event about “A new set of BizTalk Server Tips and Tricks” (you can watch the full session online here) I announce that I had BizTalk Server 2016 stickers to offer (it was a way to buy the audience hehehe).

sticker-buying-votes

I always felt a little “jealousy”, maybe not the best word to describe, probably: “sad”, “eager to have or find”, some kind of merchandise related to the technology “I love”: BizTalk Server:

  • a bag, a shirt, jacket or a simple sticker

Most of the times just to annoy/upset my fellow coworkers or MVPs Smile. Although they exist, I have a BizTalk Server 2002 jacket, they are very rare to find, believe me!

And in an epoch or popular trend that what you will find more is stickers to put in your laptop from Azure, Gulp, Visual Studio and more recently Microsoft Flow, PowerApps, Hololens, API and many more stickers… you will not find any BizTalk Server stickers!

So, in the absence of official Microsoft sticker I decide to put my hands in the mud and create them.

I did not expect, but the result for me was a big success and the attendees and speakers seem to have enjoy them:

sticker-giveawaysticker-thanks-01sticker-thanks-02

I had several requested after my session but unfortunately I only took close to 100 stickers for an event with more than 300 attendees…

sticker-request

And some of them arrived to Australia after the event!

sticker-in-australia

But now I finally got a free time to publish them and you are now able to download  and print them:

There are the “dear”/”sweet” T-Rex version:~

stickers-sandro-pereira-01

And the infamous badass T-Rex version:

stickers-sandro-pereira-02

They are in the perfect size/resolution, you just need to download the zip file and send it to a graphic shop!

Hope you enjoy!

You can download BizTalk Server 2016 Stickers from:

BizTalk Server 2016 Stickers (7,3 Kb)
Microsoft | TechNet Gallery

Because yesterday Portugal was European Champion I decide today to give a gift to the community by making an earlier release of my Microsoft Integration Stencils Pack.

After the major release in June 16, I started to realize that with so many stencils it was becoming a little hard to find, or rather, I was spending too much time to find some representations that I wanted to use in my diagrams. Don’t get me wrong, I will continue to add new stencils and I already did in this release, however, the major improvement that I’m trying to make is to divide the Stencils in different files for a better organization.

With these new additions, this package now contains an astounding total of ~831 (~100 additions) (symbols/icons) that will help you visually represent Integration architectures (On-premise, Cloud or Hybrid scenarios) and solutions diagrams in Visio 2016/2013. It will provide symbols/icons to visually represent features, systems, processes and architectures that use BizTalk Server, Microsoft Azure and related technologies.

  • BizTalk Server
  • Microsoft Azure
    • BizTalk Services
    • Azure App Service (API Apps, Web Apps, Mobile Apps, PowerApps and Logic Apps)
    • Microsoft Flow
    • Event Hubs
    • Service Bus
    • API Management, IoT and Docker
    • Machine Learning, Stream Analytics, Data Factory, Data Pipelines
    • and so on
  • PowerBI
  • PowerShell
  • And many more…

Divided in 8 files to be easier to maintain and find the right shapes:

  • Microsoft Integration Stencils v2.0 (420 shapes)
  • MIS Apps and Systems Logo Stencils (69 shapes)
  • MIS IoT Devices Stencils (123 shapes)
  • MIS Support Stencils (101 shapes)
  • MIS Servers and Hardware v2.1 (39 shapes)
  • MIS Originals v2.1 (22 shapes)
  • MIS Users (27 shapes)
  • MIS Devices v2.1 (30 shapes)

Some of the new additions:

MIS-Stencils-v2.1-last-additions

You can download Microsoft Integration Stencils Pack for Visio 2016/2013 from:

Microsoft Integration Stencils Pack for Visio 2016/2013 (7,1 MB)
Microsoft | TechNet Gallery

A goal from Eder, at the 109 minutes of the match, it was worth the European champion title to Portugal, an unprecedented title in Portuguese football, succeeding our neighbor Spain.

PORTUGAL are the Euro 2016 champions. No matter what anyone says or does, that will not change.

Portugal-Euro-2016-champion

(photo from: UEFA)

No matter now saying that we all (the Portuguese people) believed. It is easy to speak when things are over and we all know the end result but the reality is that even though we all have believed in the beginning, during the group phase we all doubt and at some point we all throw the towel to the floor… except on man who had the task to lead the group and encourage a handful of great players: coach Fernando Santos!

He said after the null against Austria (second match): "I only return to Portugal on 11th and I will be received in party" –he was criticized/joked by everyone. I was one of these unbelieving that believed that the only way for that to happens was if he was staying on holiday in France to see the other games.

Sorry for doubting you mister Fernando Santos… But we start to believe after we beat Croatia in the Round of 16… and you all know the rest of the story… we were unstoppable, tremendous efficiency, and despite a lot of criticism about him, I never saw Ronaldo playing so well for is team and he was there when we need him.

We are champions and the feeling is tremendously good, these is a people that deserved this for many years!

But… I this – Portugal been European Champion will affect the Integrate2017 in London, even without Saravana Kumar knowing yet?

Well, if you already attended to a BizTalk/Integrate event in London, you probably realized that sometimes we (the speakers) like to play tricks to each other… it happened in 2014 with Johan using a Canadian Hockey jersey (lost a bet against Kent), this year the revenge with a picture of Ken using a Sweden Hockey Jersey. And for that reason, I’m happy to public announce, again even without Saravana Kumar knowing, we already have two confirmed speakers for Integrate2017:

  • Steef-Jan Wiggers (wearing Pepe number 3 Portugal green jersey)
  • and Mikael Hakansson (wearing Cristiano Ronaldo number 7 Portugal jersey)!

How did that happen?
Well let’s say that Portugal wasn’t the favorite team within our MVP’s Integration WhatsApp group (Spain, Germany or Belgium were there favorites teams) with the exception of Kent Weare that supported Portugal from day 1… So after Croatia, even without knowing the result of Wales and Belgium and thinking that we would play against Belgium, I bet with Steef-Jan Wiggers (at that time a Belgium supporter J) that Portugal will reach the final!

Lost-bet-Steef

Why Pepe? Because he is a Barcelona fan and doesn’t like Pepe too much Smile.

In the final, I had 99% support of all MVP’s with the exception of Mikael – the only one supporting French – and I had bet with him, he gave power to Johan Hedberg to accept all the deals while he was in vacations, that if Portugal won the tournament he would have to wear the jersey your pet’s enemy: CR7 (also a Barcelona fan). He is now trying to find reasons to get away and not fulfill the bet Smile.

In both cases if I had lost I would have worn the jersey of Barcelona – Messi (although good player is by far one of my favorite players) or use the Spain jersey in my session in London… ufff I’m safe from that but I always believed!

Congratulations Portugal!

Finally, I found some extra minutes to be able to write and after spending all my available free time over the last few weeks, mainly in researching but also in creating several ones… I’m happy to say that a major version, 360 new shapes – that is the double of the previous version, of Microsoft Integration Stencils Pack for Visio 2016/2013 is now available for you to download.

With these new additions, this package now contains an astounding total of 721 shapes (symbols/icons) that will help you visually represent Integration architectures (On-premise, Cloud or Hybrid scenarios) and solutions diagrams in Visio 2016/2013. It will provide symbols/icons to visually represent features, systems, processes and architectures that use BizTalk Server, Microsoft Azure and related technologies.

  • BizTalk Server
  • Microsoft Azure
    • BizTalk Services
    • Azure App Service (API Apps, Web Apps, Mobile Apps, PowerApps and Logic Apps)
    • Microsoft Flow
    • Event Hubs
    • Service Bus
    • API Management, IoT and Docker
    • Machine Learning, Stream Analytics, Data Factory, Data Pipelines
    • and so on
  • PowerBI
  • PowerShell
  • And many more…

With so many new shapes, I decide to divide the package in 4 files to be easier to maintain and find the right shapes:

  • Microsoft Integration Stencils v2.0 (416 shapes)
  • MIS Apps and Systems Logo Stencils (60 shapes)
  • MIS IoT Devices Stencils (123 shapes)
  • MIS Support Stencils (122 shapes)
BizTalk Server

Requested by several community member I added two special shapes:

  • The infamous T-Rex
  • and “The Chicken Way”

MIS-Stencils-Pack-BizTalk-Server

BizTalk Services

MIS-Stencils-Pack-BizTalk-Services

Azure App Service, Microsoft Flow and API Management

MIS-Stencils-Pack-App-Services

Azure

MIS-Stencils-Pack-Azure

Infrastructure

MIS-Stencils-Pack-Infraestructure

PowerBI, PowerShell and Service Fabric

MIS-Stencils-Pack-PowerBI

IoT

MIS-Stencils-Pack-IoT

and many more:

MIS-Stencils-Pack-More

That you can use and resize without losing quality.

Again, I didn’t create all of this shapes, maybe half of them, the other half was the work of gathering all the available resources and combine them together, for example, if you’re looking for more or official Azure Visio stencils, then you can find them here: Microsoft Azure, Cloud and Enterprise Symbol / Icon Set – Visio stencil, PowerPoint, PNG.

There are still many points that could be improved as well as adding new stencils but I hope you like the final result.

You can download Microsoft Integration Stencils Pack for Visio 2016/2013 from:

Microsoft Integration Stencils Pack for Visio 2016/2013 (6,4 MB)
Microsoft | TechNet Gallery

Bigger and better this is what to expect in this fourth conference that will take place in London. I think we can say with great certainty that this will be the biggest integration conference in the world that will happen this year! (of course related to Microsoft technologies, I don’t want to compare with other integration technologies)

Integration-2016-banner

This will be a three-day event purely focused to the Microsoft Integration stack, so we invite you all to join us in London, England. The event will take place at ExCeL London Exhibition Center and once again is being organized by BizTalk360 in conjunction with Microsoft. Please visit this link for more detail about the event and for registration information.

We will have:

  • This is not anymore a BizTalk related event this is now an Integration event covering a broad set of technologies that will appeal to integration focused professionals:
    • BizTalk Server and its expected new release BizTalk Server 2016
    • Azure App Service – API Apps and Logic Apps – PowerApps and Microsoft flows
    • Azure Service Bus (Event Hubs and Messaging)
    • And other topics like Internet of Things (IoT), Azure API Management, Azure Stream Analytics and Power BI or even Open Source technologies
  • 27 speakers (16 Integration MVP and 11 Microsoft program managers) and 27 sessions
    • The first half of the sessions and speakers are represented by Microsoft product group and the second half from Microsoft Integration MVP’s
  • There will be a paid Live Stream option for those who are not able to attend locally to this event see more about this option here.

This will also be an amazing opportunity to Network, Connect, and Reconnect with Colleagues. Meet some of the people you have been following on Twitter and blogs and network with them and others who are interested in the same things you are. To hang out with the smartest people you know – and I’m not talking about the speakers or Microsoft! I’m talking about you guys! – last reports mention that more than 370 attendees from over 150 companies across 25+ countries are going to attend the event, so imagine the experience that all of us have combined!

So my advice is: Don’t be afraid or shy, don’t wait for people come to you, instead, take your chances, engage the people you want to meet by easily saying "Hi my name is… ". This experience can be a great morale booster for you, lifelong friendships and connections have evolved from such conferences – I’m speaking for personal experience!

Integration-2016-engage-networking

And me to facilitate this approach or initiative to engage people – I will take near to 50 BizTalk cool gifts to distribute among the attendees that probably will ask questions in my session or who engage me during the event to have a simple conversation – doesn’t need to be about BizTalk or technologies it can be a simple introduction or normal conversation Smile.

Integration-2016-gifts

I’m also thrilled to be once again (fourth time) a speaker in this amazing event that I help to construct among with the other BizTalkCrew members (Nino Crudele, Steej-Jan Wiggers, Tord G. Nordahl and Saravana Kumar).

Integration-2016-im-speaking

I liked my session last year and the feedback that I received and based on the time that I have to present (30 min session) I decided that my topic would be one again about tips and tricks for developers and admins: “A new set of BizTalk Server Tips and Tricks”

Session Abstract

It’s critical to use good tools and techniques to maintain, support and produce new working solutions as quickly as possible. In this session, Sandro will introduce you to a new set of useful BizTalk Server Tips and Tricks, acquired by years of experience in the field.

The session will cover the expectations for all the roles: architects, managers, developers, and administrators. Topics include BizTalk migration strategy, content-based routing techniques, Mapping, BizTalk administration tips, extending BizTalk out-of-the-box capabilities and many more.

Integration-2016-sandro-session

I hope that, like me, you find it an interesting topic! See you there!

And remember, this annual conference has become a must-attend event for those interested in integration, so check more details about this event here.

Exciting news… Version 1.9.0.0 of BizTalk Mapper Extensions UtilityPack for BizTalk Server 2013 R2 and 2013 is now available!

Here’s the change-log for this release:

  • Ten new functoids:
    • Advance Logical AND Functoid
    • Advance Equal Functoid
    • Advance Greater Than Functoid
    • Advance Greater Than or Equal To Functoid
    • Advance Less Than Functoid
    • Advance Less Than or Equal To Functoid
    • Advance Not Equal Functoid
    • Advance Logical NOT Functoid
    • Advance Logical OR Functoid
    • If-Then-Else Functoid
  • Updates on the deployment scripts
What’s new in this version?

Although BizTalk Server provides many functoids to support a range of diverse operations when working with conditional mapping, we are limited to the number of existing operations or otherwise have to use custom XSLT.

This new library – Logical Functoids – includes a suit of functoids to perform a variety of logical operations, often controlling whether a particular element or attribute is created in an output instance message. Most of the Logical Functoids are a replica of the existent Logical Functoids that came out-of-the-box with BizTalk Server with the advantage that these will allow you to connect with others Custom String Functoids. They are fully compatible with existing functoids and don’t produce any more additional code.

biztalk-mapper-extensions-utilitypack-2013-r2-v1-9

See also the reason I decide to create this library here: Why is so hard to make a simple If-Then-Else Functoid? … well, not anymore!

Advance Logical AND Functoid

Use the Advance Logical AND functoid to return the logical AND of input parameters. It determines whether all of the specified input parameters are true.

Parameters

This functoid requires a minimum of two input parameters and a maximum of one hundred:

  • Parameter 1: A value that can be evaluated as either True or False.
  • Parameters 2 – 100: Values that can be evaluated as either True or False.

Returns the logical AND of parameters. True if all of the specified input parameters evaluate to True; False otherwise.

01-Advance-Logical-AND-Functoid

Advance Equal Functoid

Use the Advance Equal functoid to return the value “true” if the first input parameter is equal to the second input parameter. It tests whether the two input parameters are equal.

Parameters

This functoid requires two input parameters:

  • Parameter 1: A value to be tested for equality with the parameter 2.
  • Parameter 2: A value to be tested for equality with the parameter 1.

Returns “True” if the values of the two input parameters are equal; “False” otherwise.

02-Advance-Equal-Functoid

Advance Greater Than Functoid

Use the Advance Greater Than functoid to return the value “true” if the first input parameter is greater than the second input parameter. It tests whether the first input parameter is greater than the second input parameter.

Parameters

This functoid requires two input parameters:

  • Parameter 1: A value to be tested to determine whether it is greater than parameter 2.
  • Parameter 2: A value to be tested to determine whether it is greater than parameter 1.

Returns “True” if the value of the first input parameter is greater than the value of the second input parameter; “False” otherwise.

03-Advance-Greater-Than-Functoid

Advance Greater Than or Equal To Functoid

Use the Advance Greater Than or Equal To functoid to return the value “true” if the first input parameter is greater than or equal to the second input parameter. It tests whether the first input parameter is greater than or equal to the second input parameter.

Parameters

This functoid requires two input parameters:

  • Parameter 1: A value to be tested to determine whether it is greater than or equal to parameter 2.
  • Parameter 2: A value to be tested to determine whether it is greater than or equal to parameter 1.

Returns “True” if the value of the first input parameter is greater than or equal to the value of the second input parameter; “False” otherwise.

04-Advance-Greater-Than-or-Equal-To-Functoid

Advance Less Than Functoid

Use the Advance Less Than functoid to return the value “true” if the first input parameter is less than the second input parameter. It tests whether the first input parameter is less than the second input parameter.

Parameters

This functoid requires two input parameters:

  • Parameter 1: A value to be tested to determine whether it is less than parameter 2.
  • Parameter 2: A value to be tested to determine whether it is less than parameter 1.

Returns “True” if the value of the first input parameter is less than the value of the second input parameter; “False” otherwise.

05-Advance-Less-Than-Functoid

Advance Less Than or Equal To Functoid

Use the Advance Less Than or Equal To functoid to return the value “true” if the first input parameter is less than or equal to the second input parameter. It tests whether the first input parameter is less than or equal to the second input parameter.

Parameters

This functoid requires two input parameters:

  • Parameter 1: A value to be tested to determine whether it is less than or equal to parameter 2.
  • Parameter 2: A value to be tested to determine whether it is less than or equal to parameter 1.

Returns “True” if the value of the first input parameter is less than or equal to the value of the second input parameter; “False” otherwise.

06-Advance-Less-Than-or-Equal-To-Functoid

Advance Not Equal Functoid

Use the Advance Not Equal functoid to return the value “true” if the first input parameter is not equal to the second input parameter. It tests whether the two input parameters are not equal.

Parameters

This functoid requires two input parameters:

  • Parameter 1: A value to be tested for inequality with parameter 2.
  • Parameter 2: A value to be tested for inequality with parameter 1.

Returns “True” if the values of the two input parameters are not equal; “False” otherwise.

07-Advance-Not-Equal-Functoid

Advance Logical NOT Functoid

Use the Advance Logical NOT functoid to return the logical inversion of the input parameter. Use to logically negate the value of the Boolean input parameter.

Parameters

This functoid requires one input parameter only:

  • Parameter 1: A value that can be evaluated as either True or False.

Returns “True” if the specified input parameter evaluates to False; “False” otherwise.

08-Advance-Logical-NOT-Functoid

Advance Logical OR Functoid

Use the Advance Logical OR functoid to return the logical OR of input parameters. The input parameters have to be Boolean or numeric. It determines whether any of the specified input parameters are true.

Parameters

This functoid requires a minimum of two input parameters and a maximum of one hundred:

  • Parameter 1: A value that can be evaluated as either True or False.
  • Parameters 2 – 100: Values that can be evaluated as either True or False.

Returns “True” if any of the specified input parameters evaluate to True; “False” otherwise.

09-Advance-Logical-OR-Functoid

If-Then-Else Functoid

Use the If-Then-Else Functoid to return a value from one of two input parameters based on a condition. If the condition (first input) is True, then the value of the second input parameter is returned, otherwise the Third input is returned.

Parameters

This functoid requires three input parameters:

  • Boolean representing the result of a previous condition
  • The value to be returned if the condition is True.
  • The value to be returned if the condition is False.

If the condition is True, then the value of the second input parameter is returned, otherwise the Third input is returned.

10-If-Then-Else-Functoid

You can found and download Source Code, Application Binaries and Documentation in CodePlex BizTalk Mapper Extensions UtilityPack home page:

BizTalk Mapper Extensions UtilityPack
CodePlex

 

or from MSDN Code Gallery:

BizTalk Mapper Extensions UtilityPack for BizTalk Server 2013 R2 (685.6 KB)
Microsoft | MSDN Code Gallery

If you are following Logic Apps since its beginning, you must love the new Logic Apps Designer! That is a little closer to his on premise brother (BizTalk Orchestration Designer). I am saying this because now, finally, the new designer uses a top-down approach instead of a left-right approach that existed in the previous version of Logic Apps.

01-Logic-Apps-Designer-left-right-approach

Besides this big improvement in the Visual Flow (top-down approach instead of a left-right approach), the designer is being constantly improved with a several new capabilities such as:

  • Managed Connectors, search capabilities within the designer
    • Adding API Apps to a logic app is now more intuitive
  • We now also have the ability to collapse and expand the tiles/shapes
  • We have a first class experience with the HTTP + Swagger connector within the designer
  • If-else conditions within the designer itself. No need to open up the code view to look into the conditions box.
  • Call nested Logic Apps within the designer
  • And many more, the list go on and on!

02-Logic-Apps-Designer-top-down-approach

In this post we will provide some tips and tricks in working within the new Logic Apps Designer, in terms of actions that we can make on it, and describe some of its behavior

Adding actions (tiles or shapes) …

Adding actions in the middle of the existing flow is not allowed, at least for now. We are only able to add actions on the bottom of our Logic App flow or at the bottom of each condition branches.

To add an action or condition in the Logic App flow: we need to click on the plus sign, and then choose “Add a condition” or “Add an action

09-Logic-Apps-Designer-add-action-or-condition

To add an action inside condition branches, we need to click in “Add an action” button that is present on the top right corner of the condition branch

10-Logic-Apps-Designer-add-action-condition

  • We can add several actions inside a branch;
  • Nested conditions, at least for now, are not allowed;
  • And we can only add actions on the “If no, do nothing” branch, if we have at least one action in the “If yes” branch;

Deleting actions (tiles or shapes) …

If we take in consideration the flow in the picture above, you will notice 4 actions will have “…” (three dots) option in the tile. This means that we can take an action on them, in this case the “Delete” option:

03-Logic-Apps-Designer-Delete-option-action

However, in this sample the other two tiles/shapes available, “Search tweet” and “Condition” doesn’t have this option and we cannot easily delete this action or step.

The reason is because:

  • Their outputs are being used by other actions
    • In this case the “Search tweet” output is being used as input on the “Condition”, “Create File” and “Send approval email”
  • or they contain child action
    • The “Condition” tile as one “child” action in each branch;

04-Logic-Apps-Designer-Cannot-Delete-action

If we remove the “Search tweet” output being used as input on the “Condition”, “Create File” and “Send approval email” or remove these actions, we will now be able to delete the “Search tweet” action

05-Logic-Apps-Designer-Cannot-Delete-action-fixed

Moving actions (tiles or shapes) …

Noticed that you make a mistake and forgot to add an action between previous ones! Well, adding actions in the middle of the existing flow is not allowed, at least for now. However, we have the possibility to add and action in the end and drag and drop to another position inside your flow (arranging/modifying shape dispositions) … within certain conditions…

Again, if we take in consideration the Logic App that we are working above. We have several shapes, “Condition”, “Create file” and “Send approval email” that is consuming the output of a previous action, the “Search tweet

06-Logic-Apps-Designer-movind-Dependecies

If we try to move the “Condition” shape on top of the “Search tweet” shape:

11-Logic-Apps-Designer-moving-condition

We can’t move because it depends on the “Search tweet” action. However, if we try to do the same for the “Dynamic CRM Online – Create a new record”, that is still to be configured, i.e., it doesn’t have any dependency from previous ones

07-Logic-Apps-Designer-movind-no-Dependecies

We will then be able to drag and drop to any place of our flow

08-Logic-Apps-Designer-movind-no-Dependecies-1

08-Logic-Apps-Designer-movind-no-Dependecies-2

The only exception is that you cannot put on top of the trigger, in this case, the “Recurrence” shape.

In summary, you can move shapes only to:

  • Underneath the Logic Apps trigger;
  • Underneath their dependencies;
Moving actions inside conditions

Yes, we can move actions into the conditions branches, between them or remove them from within the conditions branches… again, within certain conditions regarding mainly the “If yes” branch:

  • If we have only one action inside the “If yes” branch
    • We cannot remove this action to outside the “If yes” branch, if the “If no” branch contains any action;
    • We need to delete or remove the shapes inside the “If no” branch to be able to move/remove the action inside the “If yes”;

The reason that this happens is because, the design doesn’t allow you to add action in the “If no” branch until you have an action inside the “If yes” branch

  • If we have several actions inside the “If yes” branch
    • We cannot remove the first action to outside the “If yes” branch, if the “If no” branch contains any action;
    • We need to delete or remove the shapes inside the “If no” branch to be able to remove the action inside the “If yes”;
    • Or we need to move the first action to another position inside the “If yes” branch and then move it to another position inside your flow (outside the “If yes”);

The reason that this happens is because, the first action inside the “If yes” is the “trigger” that allows you add actions in the “If no” branch… so it will be deep tied to the “If yes” branch and the design will not allow it to be moved

  • If we don’t have any action inside the “If yes” branch
    • We cannot move or add an action to the “If no, do nothing” branch;
    • We need to first add an action in the “If yes” branch;

The reason that this happens is because we need to have at least one action inside the If yes” branch to be able to add or move actions to the “If no, do nothing” branch – this is a default behavior of the design. The first action inside the “If yes” is the “trigger” that allows you add or move actions in the “If no, do nothing” branch.