BizTalk 2016 Gets Real Love With Feature Pack 1

BizTalk 2016 Gets Real Love With Feature Pack 1

For quite some time, BizTalk was not getting the love it deserved. Sure, we got our platform alignment, and sometimes a new or updated adapter, but all in all, there were not many exciting new features. That changes now, with the just released Feature Pack 1 BizTalk 2016. In this feature pack, we are seeing more new features than we have in a long time, and shows that the product team, with our very own Tord at the helm, really is caring about the product once again. If you look at the user-voice page for BizTalk, you will notice a lot of suggestions are being made by the community, and this feature pack shows that we are actually being listened to as well! In this post, I will go into the new features being introduced.

Installation of this feature pack is very straight forward, just download the installer and run the wizard.

Once installed, you will see the new features in your BizTalk installation.

One of the places where BizTalk was falling behind in this world where agile is becoming increasingly important was the ALM story. Of course, we had projects like the BizTalk Deployment Framework (of which I am a big fan) which helped with this, but being dependent on a third party for this proved to be cumbersome at times. Thankfully FP1 addresses this, and gives us the option to do continuous integration using VSTS! This allows us to automatically deploy new applications or update existing applications after checking in our project. After you have installed the feature pack, you can create a new BizTalk project, called BizTalk Server Application Project. If you don’t see it in the list, make sure to select the latest .NET framework version.

To be able to deploy the project, we will also need to add the Deploy BizTalk Application task to our VSTS. This will give us a new task we can use in our VSTS build definitions.

Add new deploy definition

You can check here for a full overview on how to set this up.

With FP1, we now have the option to log our message data to Application Insights. Application Insights is already supported or planned to be supported in various places within Azure like Web and API apps, Azure Functions and Logic Apps, and as of now we can use this platform from BizTalk as well, allowing us to have a consolidated tracking mechanism for our messages both from on-premise and in the cloud.

This is the same data we see in our tracking data, and can be set up very easily. To enable integration with Application Insights, open the settings of your BizTalk group, and check the Enable group-level analytics option. In the connection parameters, you have to enter the instrumentation key, which can be found in the portal for your Application Insights instance.

C:Userseldert.grootenboerAppDataLocalMicrosoftWindowsINetCacheContent.Word2017-04-26 13_13_04-Windows Server 2016 - BizTalk 2016 RTM on KRUKALA - Virtual Machine Connection.png

And finally enable analytics on your port.

You can check here for a full overview.

With this feature pack, BizTalk 2016 now also exposes REST API’s with which you can manage your BizTalk artifacts, like your ports, orchestrations, hosts, pipelines, as well as operational data like retrieving and working with messages, service instances and much more. This gives us the possibility to integrate our BizTalk management in any application we want, as well as easily script our BizTalk management tasks. And of course, the API’s are all documented with Swagger, allowing us to get started with this right away. You can read here on how to enable the REST API’s.

Visualize With PowerBI

And what is more, we can also use PowerBI to visualize the feed from these API’s. The BizTalk team provides an out of the box template for this, which you will find in X:Program Files (x86)Microsoft BizTalk Server 2016OperationalDataServiceBizTalkOperationalData.pbit which can then be loaded into PowerBI Desktop. This template will give you a starting point, on which you can then expand and build your own PowerBI dashboards, which you can also integrate in your monitoring solution like BizTalk360.

biztalk-power-bi-dashboard - BizTalk Server 2016 Feature Pack 1

More information can be found here.

When we wanted to schedule something on BizTalk’s receive locations, we were always very confined, with just being able to specify a start date, a stop date, and the start and stop time for the service window. With Feature Pack 1, this has now been made much more granular, allowing us to set much more granular schedules, allowing us to trigger every x days, or even on certain days of the week or month. Many of these features could already be found in the Scheduled Task Adapter by Sandro, which still provides some more advanced options, but it is good to see Microsoft looking at the popular extensions the community created and incorporating them into the product.

More information can be found here.

And finally, BizTalk can now use encrypted columns in SQL server, which allows us to protect sensitive data in SQL server.

More information can be found here.

Recap – Sweden and Global Azure Bootcamp

Recap – Sweden and Global Azure Bootcamp

This week was a busy week for me, in a very good way. I got to travel around again, this time to Sweden, together with my good buddy Steef-Jan. Having been to Sweden doing sessions last year as well, I was very much looking forward going back. I also got to speak at the Global Azure Bootcamp, a massive event all over the world with people speaking, doing labs and having all kinds of interactions around Azure.

We started on Tuesday going to Gothenburg, where I got to do a session on industrial IoT for the SWEBUG, showing how we can integrate with IoT Hub and Dynamics 365 using Logic Apps, Service Bus and more. We had a nice crowd, and lots of interaction, which is always a big plus. In my opinion industrial is where the big chances for IoT are, and had some interesting discussions on how others were seeing this.

The next day we went on to Stockholm by train, so we had some time to enjoy the country side, talk about work, and look back on the Global Integration Bootcamp, for which we both were main organizers. We are already making plans for a GIB2018 event as well, so keep your eye out on that. In Stockholm we first participated in an integration architecture forum, a great initiative by Johan Hedberg, where architects from different companies come together and discuss what is happening in the integration space, and how people are using these new techniques. It is great to see this kind of deep technical interaction, where people really are willing to help each other out.

Image may contain: 6 people, people smiling, people sitting and indoor

Next was our sessions for the SWEBUG, where I again got to do my IoT session. Once again, a great audience, with some nice discussion going on between and after the sessions.

https://pbs.twimg.com/media/C9yv7VpWsAEpcWv.jpg:large

After the sessions, it was time for some beers and discussions. The great thing of being able to do these trips is you get to meet a lot of new people, as well as catch up with friends. The next day we got all to ourselves, so we got to see a lot of Stockholm, walking around the city, and visiting the Vasa Museum. During lunch we met up with Mikael Hakansson, and talked a lot about IoT and his product microServiceBus.com, which does a great job filling the gap currently left by the big cloud providers. In the evening we met another good friend of mine, Mikael Sand, for some beers and great food.

Image may contain: one or more people, people sitting, table and indoor

As you can tell, I once again had a great time in Sweden, and look forward to going back there again.

On Saturday, it was time for the Global Azure Bootcamp, for which I was invited by Azug.be to do a session in Ghent. Having done some sessions in Belgium before, I can say I love the audience here, they really make you feel welcome. For the boot camp I adjusted my IoT session a bit, doing a bit more of a deep dive into its possibilities.

https://pbs.twimg.com/media/C-A-DCWXoAAcZSM.jpg:large

I also enjoyed the other sessions a lot, especially the session on iPaas and enterprise integration by Glenn, giving a really nice overview of just how much Azure has matured.

Recap – Sweden and Global Azure Bootcamp

Recap – Sweden and Global Azure Bootcamp

This week was a busy week for me, in a very good way. I got to travel around again, this time to Sweden, together with my good buddy Steef-Jan. Having been to Sweden doing sessions last year as well, I was very much looking forward going back. I also got to speak at the Global Azure Bootcamp, a massive event all over the world with people speaking, doing labs and having all kinds of interactions around Azure.

We started on Tuesday going to Gothenburg, where I got to do a session on industrial IoT for the SWEBUG, showing how we can integrate with IoT Hub and Dynamics 365 using Logic Apps, Service Bus and more. We had a nice crowd, and lots of interaction, which is always a big plus. In my opinion industrial is where the big chances for IoT are, and had some interesting discussions on how others were seeing this.

The next day we went on to Stockholm by train, so we had some time to enjoy the country side, talk about work, and look back on the Global Integration Bootcamp, for which we both were main organizers. We are already making plans for a GIB2018 event as well, so keep your eye out on that. In Stockholm we first participated in an integration architecture forum, a great initiative by Johan Hedberg, where architects from different companies come together and discuss what is happening in the integration space, and how people are using these new techniques. It is great to see this kind of deep technical interaction, where people really are willing to help each other out.

Image may contain: 6 people, people smiling, people sitting and indoor

Next was our sessions for the SWEBUG, where I again got to do my IoT session. Once again, a great audience, with some nice discussion going on between and after the sessions.

After the sessions, it was time for some beers and discussions. The great thing of being able to do these trips is you get to meet a lot of new people, as well as catch up with friends. The next day we got all to ourselves, so we got to see a lot of Stockholm, walking around the city, and visiting the Vasa Museum. During lunch we met up with Mikael Hakansson, and talked a lot about IoT and his product microServiceBus.com, which does a great job filling the gap currently left by the big cloud providers. In the evening we met another good friend of mine, Mikael Sand, for some beers and great food.

Image may contain: one or more people, people sitting, table and indoor

As you can tell, I once again had a great time in Sweden, and look forward to going back there again.

On Saturday, it was time for the Global Azure Bootcamp, for which I was invited by Azug.be to do a session in Ghent. Having done some sessions in Belgium before, I can say I love the audience here, they really make you feel welcome. For the boot camp I adjusted my IoT session a bit, doing a bit more of a deep dive into its possibilities.

https://pbs.twimg.com/media/C-A-DCWXoAAcZSM.jpg:large

I also enjoyed the other sessions a lot, especially the session on iPaas and enterprise integration by Glenn, giving a really nice overview of just how much Azure has matured.

Recap – Sweden and Global Azure Bootcamp

Recap – Sweden and Global Azure Bootcamp

This week was a busy week for me, in a very good way. I got to travel around again, this time to Sweden, together with my good buddy Steef-Jan. Having been to Sweden doing sessions last year as well, I was very much looking forward going back. I also got to speak at the Global Azure Bootcamp, a massive event all over the world with people speaking, doing labs and having all kinds of interactions around Azure.

We started on Tuesday going to Gothenburg, where I got to do a session on industrial IoT for the SWEBUG, showing how we can integrate with IoT Hub and Dynamics 365 using Logic Apps, Service Bus and more. We had a nice crowd, and lots of interaction, which is always a big plus. In my opinion industrial is where the big chances for IoT are, and had some interesting discussions on how others were seeing this.

The next day we went on to Stockholm by train, so we had some time to enjoy the country side, talk about work, and look back on the Global Integration Bootcamp, for which we both were main organizers. We are already making plans for a GIB2018 event as well, so keep your eye out on that. In Stockholm we first participated in an integration architecture forum, a great initiative by Johan Hedberg, where architects from different companies come together and discuss what is happening in the integration space, and how people are using these new techniques. It is great to see this kind of deep technical interaction, where people really are willing to help each other out.

Image may contain: 6 people, people smiling, people sitting and indoor

Next was our sessions for the SWEBUG, where I again got to do my IoT session. Once again, a great audience, with some nice discussion going on between and after the sessions.

https://pbs.twimg.com/media/C9yv7VpWsAEpcWv.jpg:large

After the sessions, it was time for some beers and discussions. The great thing of being able to do these trips is you get to meet a lot of new people, as well as catch up with friends. The next day we got all to ourselves, so we got to see a lot of Stockholm, walking around the city, and visiting the Vasa Museum. During lunch we met up with Mikael Hakansson, and talked a lot about IoT and his product microServiceBus.com, which does a great job filling the gap currently left by the big cloud providers. In the evening we met another good friend of mine, Mikael Sand, for some beers and great food.

Image may contain: one or more people, people sitting, table and indoor

As you can tell, I once again had a great time in Sweden, and look forward to going back there again.

On Saturday, it was time for the Global Azure Bootcamp, for which I was invited by Azug.be to do a session in Ghent. Having done some sessions in Belgium before, I can say I love the audience here, they really make you feel welcome. For the boot camp I adjusted my IoT session a bit, doing a bit more of a deep dive into its possibilities.

https://pbs.twimg.com/media/C-A-DCWXoAAcZSM.jpg:large

I also enjoyed the other sessions a lot, especially the session on iPaas and enterprise integration by Glenn, giving a really nice overview of just how much Azure has matured.

Global Integration Bootcamp 2017

Global Integration Bootcamp 2017

Yesterday, we held the first Global Integration Bootcamp, an event set up by integration communities around the world. We ended up doing the event in 12 countries, with 16 locations, over 55 speakers and an amazing number of over 650 attendees. Starting in New Zealand, and going around the globe, finally ending in Seattle, this truly has been a global event, bringing the community together.

I am proud to have been one of the organizers and drivers behind this great event, along with my good friends and community leaders, Steef-Jan, Rob, Tomasso, Martin, Gijs, Glenn and Sven.

Back in august, Mandi Ohlinger sent out the following tweet, about the BizTalk Bootcamp which had been done in Charlotte.

Mandi Ohlinger Following @mandi_onlinger Agenda is lookin' good. Great lineup of discussion leaders. aka.ms/BizTalkBootCamp #BizTalkBootCamp #LogicApps #msbts

The tweet quickly got picked up by the community, to do an event like this in more locations.

Gijs in 't veld @gintveld 22 Aug 2016 @mandi_onlinger now about a European counterpart? #msöts 1 Martin Abbott @martinabbott - 23 Aug 2016 @gintveld @mandi_onlinger and APAC tor that matter, f you need a body helping organise let me know 2 Glenn Colpaert @GlennColpaert - 23 Aug 2016 @martinaööott @gintveld @mandi_onlinger f you need a speaker, let me know (Can't blame a guy tor trying» 1 Glenn Colpaert @GlennColpaert - 23 Aug 2016 @martinaööott @gintveld @mandi_onlinger less liking, more inviting ; 1 Martin Abbott @martinabbott - 23 Aug 2016 @GlennColpaert @gintveld @mandi_onlinger leave t witn me.. I 1 Mandi Ohlinger @mandi_ohlinger - 23 Aug 2016 @martinaööott @GlennColpaert @gintveld Great idea guys. It needed, I can provide some guidance. 1 Eldert Grootenboer @egrootenboer - 23 Aug 2016 @mandi_onlinger @martinaööott @GlennColpaert @gintveld Would definitely be a great idea, let me know now I can help out' 1 Martin Abbott @martinabbott - 23 Aug 2016 @egrootenöoer @mandi_onlinger @GlennColpaert @gintveld I love the integration community #msöts

We quickly got a core group of people together, with whom we started moving this idea forward, and thus the organization of the Global Integration Bootcamp was formed. After a couple of Skype calls with Mandi and the group in the following weeks, we started to reach out to members of the community to see if we could expand our reach. It became clear that there definitely was a lot of interest for an event like this, starting with around 6 countries, so we started a Slack group, brought up a website, and opened registrations for locations. In the meantime, a lot of work has been going on behind the scenes. A couple of us started working on creating labs for the locations, thinking of a scenario and working this into fun labs, using the technologies Microsoft has given us over the years, like BizTalk, Logic Apps, Service Bus, API Management, On-Premise Data Gateway, IoT Hub and more!

As time progressed, more and more locations started contacting us to join in on the event as well, turning it into a real global event. We also worked closely with the MS Pro Integration product group during our preparations, where Jon arranged some very nice shirts and stickers for all the locations.

GLOBAL BO *ORLDWIOE

And we even got a video from the product group which the locations got to use in the welcome slides, with Jim welcoming everyone to the Global Integration Bootcamp, bringing the global communities even closer together.

Global Integration Bootcamp Welcome Video

And so finally, March 25th was here, and the Global Integration Bootcamp got on the way. As people started in New Zealand, twitter was starting to become busy on the #GIB2017 hashtag, and as the event started going around the globe, positive messages from around the globe started coming in, the Bootcamp was a success!

I got to do 2 sessions myself in Rotterdam, one being on Hybrid Integration using BizTalk, and the other on IoT with Azure, with Steef-Jan, Tomasso, Rob and Gijs doing sessions as well. We had a very nice turn-out, and people had a lot of fun watching the sessions and doing the labs.

C:UsersELDER_~1AppDataLocalTempmsohtmlclip12clip_image001.png

Below are some impression of the event, and reactions we had from the attendees, speakers and product group. Looking at the feedback we received, we decided we have to make this an annual event, so be prepared for Global Integration Bootcamp 2018! More information will follow in the coming weeks and months, keeping you up to date as we move forward. Thanks to everyone who helped us make this such a great event, my co-organizers, the locations organizers, the product groups, the attendees, and anyone I may have missed here! I will close this post with some impressions and feedback we got of the event. Be sure to check out the #GIB2017 hashtag on twitter for more, read the blogpost Saravana made about this as well, and join us at Integrate if you want to talk more about this years or next years Global Integration Bootcamp.

Tord Glad Nordahl Help Microsoft build Integration software know of very few products that have a community spinning up everything needed for a hands on m across multiple services and tools, book it on a Saturday cwer 17 cities, 12 countries and get over 700 people to sign up worldwide. Microsofts integration community is unique. And I am incredibly proud!

Jeff Hollan @jefhollan 20h Incredible to see #gib2017 around the world. @Microsoft integration stands apart because of our community. Lucky to consider myself a member

Jim Harrer @JimHarrer 7h Thank you for the support' Gijs in 't Veld @gintveld Microsott has spawned an awesome global #integration community @scottgu @JimHarrer Greetings trom the Dutch Team' #giö2017 @microsott #Azure

Tord Glad Nordahl @tordeman - 7h Hey, shoutout to the integration community, YOU ROCK! #msbts #gib2017

Jon Fancey @onfancey 10h more awesomeness from our fantastic community of MVPs and partners #gib2017 ROD FOX robfox The Rotterdam speakers ot #giö2017 @egrootenöoer @SteetJan @tlagroenendijk @gintveld @xroötox #mstt #azure #integration

C:UsersELDER_~1AppDataLocalTempmsohtmlclip12clip_image001.png

Integration Down Under

Integration Down Under

In February I went on vacation to Australia for almost a month, and had decided to throw in some work-related activities as well (fortunately I have a very understanding wife 🙂 ). I had an amazing time here, catching up with old friends, and meeting new ones. I love the integration community, and always have a lot of fun with these people. In this post, I will go into some of the work-related highlights of my vacation.

Sydney was basically our central hub throughout the vacation, where we returned a couple of times during these weeks. My old colleague Rene Brauers lives here, as does Mick Badran, so we have had a lot of time catching up and being shown around.

We also did a Meet Up organized by Simon and Rene, where I was joined on stage by Steef-Jan, my good friend and fellow MVP from the Netherlands, as well as Jon and Kevin.

When I had booked my vacation, I found out that Ignite would be held when I was in Australia, so I decided this would be a good opportunity to visit this as well. Here at Ignite, it was confirmed for me that Integration is alive and kicking, with many integration sessions. Even Scott Guthrie had a nice part on it in the keynote, which confirms for me Microsoft is sharing my vision that integration keeps getting more important in these days.

A large part of the Pro Integration team was represented at Ignite as well, with Jim, Kevin, Jon and Jeff, and they did a great session showing Microsoft’s vision on Hybrid Integration. Also Dan was here, and he had an awesome session on messaging in Azure, showing the capabilities of the Service Bus stack.

Furthermore, my good friends and fellow MVP’s Martin and Daniel did a couple of great sessions as well, it’s really cool to see how much love the integration space is getting. And of course the best thing about events like this, is socializing after the sessions are done ;-).

For a full overview of all the sessions at Ignite, you can see all the videos here.

After Ignite, we got invited by Daniel to join him for a tour of Brisbane. I have to say, I really love this place, it’s not too crowded, and just has a great scenery.

In Melbourne we did a lot of sight-seeing, and met up with Bill, Jim and Jeff, for some more socializing.

We also did a webcast here at Bill’s house, after having had some of the best BBQ steaks.

As you can tell, we had a great time in Australia, and I want to thank everyone who made this such a great experience for us. Of course, we did not only do work-related stuff, and if you ever happen to find yourself in Australia, I can definitely recommend going to the Blue Mountains, one of the most beautiful places we have been so far.

Looking back on another great year…

Looking back on another great year…

The first month of 2017 is almost over, and I was thinking back on my experiences over the last year. Looking at the integration space, 2016 was the year where Azure really matured. Of course, we already have been having the Service Bus stack for quite some time, but last year we also had Logic Apps go GA, which allows us to create flows in Azure, and easily connecting cloud services. And later in the year, Azure Functions went live as well, which gives us the ability to write small pieces of code, which can also be used from Locic Apps, closing the gap for custom code. And this was also the year we got a new BizTalk Server release, BizTalk 2016, which brings us even better integration with Azure, allowing us to focus even more on hybrid integration scenarios. For me personally, this was a year where I had lot of fun speaking, writing and visiting conferences.

BizTalk Server Extensibility Book

In March, we published our book which I wrote together with Steef-Jan Wiggers and Johann Cooper. In this book, we describe various ways in which you can extend BizTalk, like custom pipelines, adapters, BAM, WCF Behaviors, etc. I had a blast writing this book, it was awesome to be able to work together with these two great minds and put our experiences with a great product into this book, which is free for everyone to download.

Conferences

In May, i attended Integrate, a must visit conference for anyone working with Microsoft’s integration technologies. Organized by BizTalk360, this was 3 days full of great sessions on integration, and discussion and socializing with the product group and fellow integrators. Make sure to be there this year as well, and come and say hi, it will be held June 26,27,28, and registrations will open soon.

Also in may, I visited TUGA IT in Portugal, where I had a great time together with my friends Steef-Jan, Sandro and Nino.

Usergroups

I love getting involved with the community, and what better way to do this then visit as much of usergroup meetings as I can. I will visit these whenever I can, either as a participant or as a speaker, and always have a blast. At our local user group here in the Netherlands, BTUG NL, I got to do 2 sessions this year. My first session was in March, which was actually a duo session together with my good friend Steef-Jan, where we talked about BizTalk Server Extensibility, of course inspired by our book. My second session was in November, this time on Hybrid Integration using BizTalk and Azure.

For me this was also the year I got to speak internationally, to be precise in Sweden and Belgium. I did another duo-session with Steef-Jan in Sweden in June, both in Stockholm and Goteborg. Sweden is such a nice country, with really friendly people, and being able to speak here together with Steef-Jan was a great experience. I also try to visit our friends from Belgium at BTUG BE as often as possible. They have a great community, and I also got the chance to speak here in June, on IoT and Azure.

Integration Monday

Every Monday Michael Stephenson and Saravana Kumar bring in another speaker on Integration Monday, talking about something integration related. I got to do 2 sessions here, one in March on BizTalk Server Extensibility together with Steef-Jan, and another on IoT and Azure in September. Doing these sessions is very different, as you don’t have an audience in front of you, but I love doing these, as you get to share with a global community.

The year 2017 started especially great for me, as on January 1st I received my first MVP Award. I can’t express how honored I am with this, it feels awesome to be part of such a great community.

I did another session on Integration Monday in January, this time on Hybrid Integration. But it’s only the beginning of the year, and I have a lot more planned. As I already mentioned, I will be going to Integrate in June, but first I will be going to Australia in February. Here I will be meeting with Rene, Mick, Dean, Bill, Dan and many others, I will be speaking in Sydney and Melbourne, and will be attending Ignite. I am one of the organizers of the Global Integration Bootcamp which will be done in March, where communities worldwide will be spending an entire day with integration using BizTalk and Azure, and I will be speaking here myself as well. I will be back in Sweden to do another session as well, probably in April, and will also be in Portugal in May for another TUGA IT. As you can tell, this will be another great year, and I am looking forward to catch up with old friends, and meet many new friends.

Writing Azure Functions for Logic Apps using Visual Studio

Writing Azure Functions for Logic Apps using Visual Studio

In this post, I will show how we can use Visual Studio to write Azure Functions and use these in our Logic Apps. Azure Functions, which went GA on November 15th are a great way to write small pieces of code, which then can be used from various places, like being triggered by a HTTP request or a message on Service Bus, and can easily integrate with other Azure services like Storage, Service Bus, DocumentDB and more. We can also use our Azure Functions from Logic Apps, which gives us powerful integrations and workflow, using the out of the box Logic Apps connectors and actions, and placing our custom code in re-usable Functions.

Previously, our main option to write Azure Functions was by using the online editor, which can be found in the portal.

However, most developers will be used to develop from Visual Studio, with its great debugging abilities and easy integration with our source control. Luckily, earlier this month the preview of Visual Studio Tools for Azure Functions was announced, giving us the ability to write Functions from our beloved IDE. For this post I used a machine with Visual Studio 2015 installed, along with Microsoft Web Developer Tools and Azure 2.9.6 .NET SDK.

After this, our first step will be to install Visual Studio Tools for Azure Functions.

Now that the tooling is installed, we can create a new Azure Functions project.

Our project will now be created, and we can start adding functions to it. To do so, rightclick on the project, choose Add, and the New Azure Function…. This will load a dialog where we can select what type of function we want to create. To use an Azure Function from a Logic App, we need to create a Generic Webhook.

For each function we add to our project, a folder will be created with its contents, including a run.csx where we will do our coding, and a function.json file containing the configuration for our Function.

For this sample, let’s write some code which receives a order JSON message, and returns a message for the order, accessing the subnodes of the json message.

#r "Newtonsoft.Json"
 
using System;
using System.Text;
using System.Net;
using Newtonsoft.Json;
 
public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
    string jsonContent = await req.Content.ReadAsStringAsync();
    dynamic data = JsonConvert.DeserializeObject(jsonContent);
 
    var toReturn = new StringBuilder($"Company name is {data.Order.Customer.Company}.");
 
    foreach (var product in data.Order.Products)
    {
        toReturn.Append($" Ordered {product.Amount} of {product.ProductName}.");
    }
 
    return req.CreateResponse(HttpStatusCode.OK, new { greeting = toReturn });
}

As you can see, by using the dynamic keyword, we can easily access the JSON nodes.

Debugging

Now one of powers of Visual Studio is it’s great debugging possibilities, and we can now debug our Function locally as well. The first time you will start your Function, you will get a popup to download the Azure Functions CLI tools, accept this and wait for the tools to be downloaded and installed.

Once installed, it will start a local instance of your Function, and as we created a Generic Webhook Function, give you an endpoint where you can place your message.

Using a tool like Postman, we can now call our function, and debug our code, a great addition for more complex functions!

Deployment

Once we are happy with how our Function is working, we can deploy it to our Azure account. To do this, rightclick the project, and choose Publish…. A dialog will show, where we can choose to publish to a Microsoft Azure App Service. Here we can select an existing App Service or create a new one.

Update any settings if needed, and finally clock Publish, and your Function will be published to your Azure account and will be available for your applications. If you make any changes to your Function, just publish the updated function and it will overwrite your existing code.

Now that we have published our Function, let’s create a Logic App which uses this function. Aagain, you could do this from the portal, but luckily there is also the possibility these days to create them from Visual Studio. Go to Tools and choose Extensions and Updates. Here we download and install the Azure Logic Apps Tools for Visual Studio extension.

Now that we have our extension installed, we can create a Logic App project using the Azure Resource Group template.

This will show a dialog with various Azure templates, select the Logic App template.

Now rightclick the LogicApp.json file, and choose Open With Logic App Designer, and select and account and resource group for your Logic App.

This will load the template chooser, where we can use an predefined template, or create a blank Logic App, which we will use here. This will open the designer we know from the portal, and we create our logic app. We will use a HTTP request as our trigger. If you want, you can specify a JSON schema for your message, which can be easily created with http://jsonschema.net/. Now lets add an action which uses our Function, by clicking New step and Add an action. Use the arrow to show more options, and choose Show Azure Functions in the same region. Now select the function we created earlier.

For this example we will just pass in the body we received in our Logic App, but of course you can make some serious integrations and flows with this using all the possibilities which Logic Apps provide. Finally, we will send back the output from our function as the response.

Deployment

Rightclick on your project, and choose Deploy and selecty the resource group you selected earlier. Edit your parameters, which will include any connection settings for resources used in your Logic App as well. Once all your properties have been set, click OK to start the deployment.

Note that is you get the error The term ‘Get-AzureRmEnvironment’ is not recognized as the name of a cmdlet, function, script file, or operable program. you might have to restart your computer for the scripts to be loaded in correctly.

Now that your logic app is deployed, you can use Postman on your Logic App endpoint, and you will see the output from your Azure Function.

The code with this post can be found here.

Using Common SettingsFileGenerator File With BizTalk Deployment Framework

Using Common SettingsFileGenerator File With BizTalk Deployment Framework

One of the great features of the BizTalk Deployment Framework is the ability to use a SettingsFileGenerator file to set your environment specific settings in an excel file, and use this in your other files, so you can have generic files like portbindings and BRE rules, being updated with the correct settings for the environment we’re working on, like DEV, TEST or PROD. If you are like me, you will probably also have placed a lot of common settings which are used accross all your applications in this file, like SSO user groups, host instance names, common endpoints, webservice users, etc. This means we end up with a lot of duplicate settings accross our environment settings files, which becomes cumbersome to maintain. Fortunatly, there is a way to work around this.

The BTDF has a nice option which we can use, to have a single SettingsFileGenerator file for all our applications. In this example we have two applications, with a couple of common settings, as well as some application specific settings. The applications were already set up with BTDF, so we already have all necessary placeholders in the PortBindingsMaster file. Lets start by creating a CommonSettingsFileGenerator file which has all these settings in one place. To do this, copy the SettingsFileGenerator from one of my projects to a general Tools directory, rename it, and update it with all the common and application specific settings.


For easy access to this common file, we can add it to our solution by going to Add -> Existing Item and selecting the file we just created. Also, if you still have the old SettingsFileGenerator file in your solution, make sure to delete it, so we don’t use that by accident when updating our settings at a later time.

Now open your btdfproj file, and in the first PropertyGroup add the next line at the bottom.

<SettingsSpreadsheetPath>EnvironmentSettingsMergedSettingsFileGenerator.xml</SettingsSpreadsheetPath>

Now when you use BTDF to deploy your solution locally, or you build an MSI for remote deployment, our CommonSettingsFileGenerator will be used for our settings.

Now this is really nice, as we only have a single place to maintain our settings, but if you have a lot of applications with a lot of application specific settings, this does make our SettingsFileGenerator quite large. It would be even better if we could have one settings file for our common settings, and another settings file for our application specific settings. Luckily, we also have this option, thanks to Giulio Vian. On my search for an easy way to merge two setting files, I came accross this post about a SettingsMerger project, where Giulio mentions the tool has been merged into Environment Settings Exporter, the tool which the BTDF uses to do all its goodness with the environment settings. At this moment, Giulio’s changes are not part yet of the Environment Settings Exporter which is shipped with BTDF, but we can download and build the code ourselves (or you can download the built exe from here) and use it from a custom target in our btdfproj file. The BTDF comes with a couple of custom targets out of the box, which gives us the ability to run custom commands at certain stages of the deployment or build of the MSI.

For this example we are going to use another application which has already been set up with the BizTalk Deployment Framework, so it already has the PortBindingsMaster file configured, as well as a SettingsFileGenerator with the application’s settings as well as the common settings. Make sure you have the new version of Environment Settings Exporter which we downloaded or built earlier on in your Tools directory. Now copy the application’s SettingsFileGenerator file to our Tools directory as well, and rename it to CommonSettingsFileGeneratorMerge. Now in the application’s SettingsFileGenerator remove all the common settings so this only has the settings intended for that application, and in CommonSettingsFileGeneratorMerge remove all the application specific settings so this now has the common settings which we want to use accross multiple applications.

For easy access to the common file, we can also add it to our solution by going to Add -> Existing Item and selecting the file we just created, placing it alongside SettingsFileGenerator in our solution.

Now open your btdfproj file, and in the first PropertyGroup add the next line at the bottom (if you allready added this line in the previous part, just update its value).

<SettingsSpreadsheetPath>EnvironmentSettingsMergedSettingsFileGenerator.xml</SettingsSpreadsheetPath>

Next place the following code in the btdfproj file after <Import Project=”$(DeploymentFrameworkTargetsPath)BizTalkDeploymentFramework.targets” />.

<!-- Merge the settings file in case of local deployment -->
<Target Name="CustomPreExportSettings" Condition="$(Configuration) != 'Server'">
<Exec Command='C:ProjectsToolsEnvironmentSettingsUtil.exe Merge /input:C:ProjectsToolsCommonSettingsFileGeneratorMerge.xml /input:.EnvironmentSettingsSettingsFileGenerator.xml /output:.EnvironmentSettingsMergedSettingsFileGenerator.xml' />
</Target>
<!-- Merge the settings file in case of building MSI for remote deployment -->
<Target Name="CustomPreRedist">
<Exec Command='C:ProjectsToolsEnvironmentSettingsUtil.exe Merge /input:C:ProjectsToolsCommonSettingsFileGeneratorMerge.xml /input:.EnvironmentSettingsSettingsFileGenerator.xml /output:.EnvironmentSettingsMergedSettingsFileGenerator.xml' />
</Target>

This will use the EnvironmentSettingsUtil to merge the common settings and application specific settings into a new file, which we earlier told BTDF to use in our deployments.
Now when you use BTDF to deploy your solution locally, or you build an MSI for remote deployment, you will find that the application will have access to all the common settings, as well as it’s application specific settings.

The code for the examples can be downloaded here.

Integrate 2016 – My take-aways

Integrate 2016 – My take-aways

Last week I attended Integrate 2016 in London, the biggest Microsoft integration event this year, organized by BizTalk360. The outcome was almost 400 attendees, and there were sessions from the Microsoft Product Group, industry leaders and MVP’s.

The major take-away I have from the event, is that Microsoft now has a great vision on the future of integration, which I felt was missing the last couple of years. Now though, they recognize that even though the cloud is a great asset, on premise is not going away for a long time. Also Microsoft has now officially announced that their on-premise integration solution will be BizTalk, which has not been getting a lot of love lately.


This means BizTalk will be getting adapters which will allow it to be easily integrated with the cloud, like Service Bus (which we already have) and Logic Apps, allowing it to consume Logic Apps and the cloud connectors.

Also we will be getting connectors in Azure which will allow us to easily connect from Logic Apps to BizTalk, giving us a true solid hybrid experience.

Microsoft has a very wide offering with Azure, and now with BizTalk and Logic Apps in the center of their integration offering, things are really starting to get together. We can use BizTalk for our on-premise applications and Logic Apps for our cloud applications, but there is much more. For example, we can use Azure Functions to create small re-usable pieces, which we can use stand-alone, or from Logic Apps. The Service Bus stack can be used for our messaging needs or IoT scenarios. For exposing and managing our API’s, including those provided by Azure Functions and Logic Apps, we have API Management to our disposal. And there’s many more services we can use to build and complement on our scenarios.

As for our B2B and EAI, Microsoft will introduce a premium pack on Logic Apps called Enterprise Integration Pack, which will be able to handle your EDI requirements, including TPM etc.

As you can tell from my blog posts, I am a big IoT fan, and I really think this will be one of the major growth enablers for us integrators. It was good to see that a lot of sessions at Integrate 2016 were on this subject as well, including announcements from the Service Bus team. For example the Premium tier has been announced for Service Bus, which will allow larger messages, isolation and dedicated resources. Also we heard that both Service Bus and Event Hubs will be coming to on-premise with the Azure Stack. Looking at the numbers for the Service Bus stack just keeps amazing me.

Integrate 2016 was once again an amazing event for me, I had a lot of fun catching up with old friends, making new friends, hearing all this great new news, and seeing love Microsoft is once again showing for us integrators. For anyone working in the Microsoft integration space, I can only recommend attending these events as well.

For those who want to read some more recaps, here are some of my favorites.

Steef-Jan Wiggers
A solid vision for integration – Day 1 Integrate 2016

Kent Weare
Integrate 2016 – Day 1 Recap
Integrate 2016 Wrap-up

Gijs in ‘t Veld
Integrate 2016 – highlights from the Microsoft product team sessions

Rob Fox
Integrate 2016 – Day 1 Recap
Wrapping up Integrate 2016

Codit
Integrate 2016 – Day 1
Integrate 2016 – Day 2
Integrate 2016 – Day 3

BizTalk360
INTEGRATE 2016 – A Recap of Day 1 & Announcements from the Product Group
Updates on Azure Service Bus – INTEGRATE 2016 Day 2