Skip to main content

BizTalk as a collection of tools OUTSIDE of integration

BizTalk Server 2006 R2 has a set of features which work great doing what BizTalk is normally used for, integration. But these features are so powerful by themselves in a non-integration environment that I can see customers buying BizTalk and never using it, just some of the features. The first I want to look at is a feature call BAM, Business Activity Monitoring. This feature initially allowed you to see inside a running BizTalk orchestration. This is helpful in so many many ways. But the real power is starting to come through in R2 as it now allows you to see in side Workflow Foundation (WF) processes, since R2 supports those.

But most of the time IT thinks BizTalk = Integration. But really with BAM it is almost an infrastructure tool as well, especially if you think the following products all have WF as a core system:

  • Microsoft CRM 4.0 (was Titan)
  • Microsoft Office SharePoint Server 2007
  • Speech Server 2008
  • Customer Care Framework 2008

Now how do you see whats going on inside all of these without your own tools or Visual Studio? BAM it! Also just think of developing a custom WF solution, now you can no spend time on a WF monitor rather just use BAM for that.

The next feature is the rules engine. The rules engine takes data from a BizTalk mapping, .NET component (so basically anything) or a database and runs it through a set of rules. The rules are versioned and items on one set of rules remain on those until they end of life. Now just thinking about how many applications I have written which have a very tightly built rules engine (i.e. business rules) which you can only really change the parameters, to extend that to add/remove rules etc... would be great. The rule designer also is in readable English, rather than C# or some weird language. This is great since it means that a business analyst or customer can manage it, not a developer. Why this is great is that you can integrate this engine into .NET in 5 lines of code or less! Image just plugging in a full rules engine in 5 min and then moving onto something else (in reality maybe not that easy but still easier than building your own).

The last feature is Enterprise Single Sign On (ESSO), where it was originally developed to store credential mappings. i.e. You are MYDOMAIN\USER1 in AD and in Siebel you are ROBMAC01 and your password is XYZ. BizTalk could then use ESSO to authenticate you into these other systems because it knows your user name/password etc.... and it's authenticated you against AD. It's also secure since your credentials are encrypted by your AD account, meaning no one can see other peoples details and there is even a nice client tool which users can use to manage password changes. This is great and maybe useful in your next application, but BizTalk internally and many other people don't use it for this. They use it for configuration setting storage per user. Since the credentials could be anything, including simple name/value pairs, instead of storing credentials you store values. Now instantly you have a accessible and secure config system with a client management tool and a great admin interface which is also scriptible. Once again all for very little development.

Update 16 October 2007: Thanks to Ryan for pointing out BAM is Business Activity Monitoring not Business Automation Monitoring.

Microsoft is pushing open source

Before I begin let me clarify a few points so you are aware of the context of this post.
1) I currently work for a Microsoft Gold Partner, been contracted to Microsoft (through my employer) and spoken at TechEd.
2) Before that I worked for company which used almost solely open source software and developed software for that. I also did work with the Shuttleworth foundation at the linux days event.
So I have been on both sides of the fence, now on to the content...

Go anywhere near Slashdot and mention Microsoft and you will get atleast a few zealots who complain about it's attitude/actions to FOSS (Free and Open Source Software).

Well I am not going into the free part, since until I can live without money making everything free doesn't help and there is many people in the traditional OSS community which do make money (RedHat, Novell, many linux contributors etc...) so I guess I am not alone in this view.

But many people bring up the open source side, which makes less sense to me. Microsoft does have this shared source thingy which is some special license for special people, but that doesn't fit with true OSS where anyone can access it so I'm not including it. Microsoft has Port25 (there public front for their internal open source lab) which has some interesting information, but not really pushing OSS. There are also a few "sponsored" projects on SourceForge and the now defunct CodePlex. Neither of these push OSS as part of major projects. So while benefical aren't big enough.

So what is it that doesn't make sense to me? Simple, the .Net framework is completely open source. All of the .Net assemblies are in source code (IL) all the time and thanks to reflection can be transformed into a convient language of choice of the viewer. Since .Net is the big push from Microsoft the new core of their systems will be open source. This can be seen currently with their applications built on top of it, like Microsoft CRM which has all their assemblies in .Net and can all be opened and viewed. Microsoft CCF is even further advanced with it including some applications in .Net (like the admin console) but the bulk is available in direct source code. BTW Neither are obfuscated in anyway, so there is no attempt to close this source.

Agreed that the core big money makers (Windows, Office etc...) are still closed source, but how much of that is legacy versus how much is based on the choice of language tool (C++ Win32 vs Dot Net) and how much of that is specific plans to close off the source I can not say and no one outside the core executive at Microsoft could say, but the argument that Microsoft doesn't get it, is just wrong. They get it and probebly more than most of the zealots mentioned earlier since they have figured out to use it strategically.

The other panel

Last week I posted about the floating panels option, well there is another option for panels, that being: hiddenPanel

This setting causes the application not to show at all. Interesting ideas around this...

CCF with floating windows

CCF comes in pretty much any design you like, thanks to having the source code for the agent desktop available. One of the properties of the applications you add is a "Display Group" property which allows you to set where you want the application to go. If you leave it blank, then it defaults to the first CCF panel it finds. If you fill it in and it matches the name of an existing panel it will go on that panel (have a look at the out of box examples for Workflow, Current Session and Session Explorer). What is not documented anywhereUpdated: It is in the developer guide is you can also put in either "floating" or "floatingtool" which will cause the window not to be in the CCF SDI interface (i.e. on the tabs or on some other area) but in it's own pop-up window. The "floatingtool" option changes the type of pop-up form to a tool form (i.e. thin header). it is possible to push the boundry on this one further by putting in your own terms, and then modifing the "AddApplication" method of UIConfiguration.cs to handle those special terms. An idea I had here is that you could do something like have the window be stay on top, align to the right of the window and have it load a reporting services report with graphs on it. Nice mini-dashboard!

CCF Wikipedia Entry

There is an entry in Wikipedia for CCF :) It is unfortunately very light in content.

What does spur me to post about it is not the article itself, but the comments in the history:
"(cur) (last) 21:07, 25 September 2006 Jmcnamera (Talk | contribs) (This reads like an ad plus I can not find anything notable on the web about this except some vague marketing material at MS web site. I'm an MS booster but this doesn't look real.)"

The whole "it doesn't look real" is bad, and it is not the first time this has been brought up. Because so few people know of CCF and the website is tiny (compared to others like MSCRM or Dynamics GP, let alone someone like Office) it really does appear to be a vaporware or beta or some other product which does not exist yet.

Definately the CCF community needs to put more content up in public places, but Microsoft also needs to help drive this, even if it is just with a better website (which links to the forums would also help show real activity with the product).

Agent Desktop: Error: Failed to connect to the web server.

It appears that a few people have had the problem where everything works great in agent desktop, but not when selecting a contact to work with, as they get some thing like
The underlying connection was closed: The remote name could not be resolved.\n\nStack:\n at Microsoft.Ccf.Csr.Sessions.SetActiveSession(Guid sessionID)
at Microsoft.Ccf.Csr.Sessions.AddSession(String name, Int32 callID, Object customer)
at Microsoft.Ccf.Samples.Csr.AgentDesktop.Desktop.AddSession(CustomerRecord customer, CallClassProvider call)

and/or
Customer Care Framework 2005 - Agent Desktop: Error: Failed to connect to the web server. Please verify that you can connect to the web server.

Well it would appear from the outside that the SetActiveSession method (atleast in the .Net 1.1 QFE 3 version, and likely the earlier .Net 1.1 version) has the server hard coded (since this is one of the few assemblies you don't get the code for and reflector wasn't much help in finding out I can not state for sure).

If it is hard coded it is insanity and *hopefully* fixed in the .Net 2.0 release. But if you do hit this because your CCF server is not named CCFIIS the simple fix is either add an entry to the DNS server on your network to redirect to that or (if you can't due to security restrictions during development) add it to the hosts file in c:\Windows\System32\Drivers\Etc\

Once that is done, restart agent desktop and enjoy.

Update:Thanks to MattB on the CCF Forum for confirming it is hard coded and that a hotfix is available for 1.1 from PSS and 2.0 is already fixed :)

CCF Workflow and Workflow step addition fails with "Unable to update the requested information"

When in the CCF admin console you may get an "Unable to update the requested information" when trying to add a new workflow or workflow step (from here I will just say workflow but I mean both). This is because you can not add a workflow when no others exist. i.e. DON'T delete the demo ones until you create one of your own.

What is happening is the ID field in the table in the database is used in a relationship and thus can not be an identify field. So the admin tool does a check for the highest value and adds one to it and uses it as the new ID. When there is no items it fails.

If you need to manually add a workflow in to the database (instead of doing a redeploy) it is in dbo.ContactCenterAIF.WorkflowsMaster and for workflow steps it is in dbo.ContactCenterAIF.WorkflowStepsMaster

RegisterListener Exception

If you get an exception with the CCF agent desktop which involves "RegisterListener" then likely you got a little too confident in your deployment and didn't follow the deployment guide like for line. If you had you would have installed Microsoft WSE 2.0 SP3 Runtime.msi which is in the Others folder of the deployment on the desktop prior to trying.

So you are also aware, if this fails pretty much a ton of other items (menu's, status updates etc...) will also fail.