SBUG April 2010
We are just putting together the details for the SBUG meeting in April, the registration page is already open on the following link
We are just putting together the details for the SBUG meeting in April, the registration page is already open on the following link
We have an SBUG meeting in may planned where Udi Dahan (nServiceBus) will join us.
Check out the following for details:
I recently built a POC that wrapped an SAP RFC call in a WCF Service exposed by BizTalk. I exposed schemas as WCF services instead of opting for exposing the Orchestration as a WCF Service. The purpose of the Service was to validate a utility meter’s status inside of SAP. Some of the statuses may include active/inactive/meter not found. The RFC that I used is called RFC_Read_Table. This is a pretty generic, out of box, RFC that allows you to query SAP tables. The RFC is fairly complex due to a lack of good documentation available. Perhaps I am just not part of the secret SAP consultant’s club where you can actually get useful documentation. I plan on documenting my findings in an upcoming post so that other people do not have to endure the pain I went through in order to get it working.
One of the benefits of InfoPath is the ability to consume a web service (asmx). I was pleasantly surprised that InfoPath can also consume some WCF endpoints(.svc). The endpoint type that I exposed was based on the basicHttpbinding which happens to be one of the more interoperable bindings. At this point, the SOAP adapter has been identified as an Adapter that will be removed in an upcoming release of BizTalk. The idea behind this is that people should be moving to the WCF adapter. There are some gaps between the SOAP and WCF adapter, which is outside the scope of this post, but my advice would be if you can use the WCF Adapter then you should. If you cannot, due to a limitation, then you should provide this feedback to Microsoft so they can either enhance the WCF adapter or hold off on removing the SOAP adapter.
The InfoPath service consumption wizard is fairly straight forward with the exception of “how the form works with the Web Service”. The 3 options that you do have include:
When I think of a client consuming a Web Service, I think in terms of the client providing a Request message and the Server providing a Response. With this in mind, I decided to use the “Submit data” option. What I ran into is that I could submit data to my BizTalk Service, BizTalk would process the request and provide a response but nothing was being updated in my form. I discovered that I needed to use the “Receive and submit data” option instead. The description is counter intuitive as it implies I am receiving data first then I am submitting it. Perhaps if Microsoft would have called this option “Submit and receive data” this would have been a little clearer.
I have recently been teased by a few colleagues and friends about the amount of detail and screen shots that I have put in my blog posts. At the risk of more torture, here is a step by step guide of how I got this all working.
[In addition to blogging, I am also now using Twitter for quick updates and to share links. Follow me at: twitter.com/scottgu]
Patrick recently posted about something he found odd when installing the VS 2010 RC – which was that code intellisense for C# wasn’t working. When he pulled up Tools->Options and checked under the Text Editor->C# settings he noticed that the reason Intellisense wasn’t working was because his profile had them turned off – and he couldn’t understand why it was configured to be off by default:
The above situation occurs because:
1) When you run VS 2010 the first time on a machine that has had VS 2008 installed on it, it asks you if you want to import your existing VS 2008 profile settings. By default this checkbox is checked – which means you by default automatically import your existing settings.
2) Some VS plugins – for example Resharper – turn off the built-in C# code intellisense within VS and instead replace it with their own implementation. If you’ve installed Resharper on VS 2008, the above VS code intellisense profile settings are turned off. When you import your existing profile during VS 2010’s first time run experience the code intellisense settings import over in a disabled state. If you haven’t installed Resharper on VS 2010 (which is a separate install) – then by default you’ll end up with intellisense turned off.
Fixing this situation with the VS 2010 RC is pretty easy. Just do one of two things:
1) Use the Tools->Options menu command, select the Text Editor->C# settings, and then check the two circled check boxes above (Auto-list members and Parameter information). Intellisense will then be turned on and work fine.
or:
2) Install the version of Resharper that works with the VS 2010 RC. It then enables intellisense using its own mechanism.
We’ve heard reports of a few people running into this – and since the behavior is pretty confusing we are modifying the profile import behavior with the final release of VS 2010 to avoid it. If a plugin has turned intellisense off with VS 2008, by default when you import the profile into VS 2010 we will re-enable it. This will ensure that on a clean VS 2010 install intellisense always works by default.
Hope this helps,
Scott
I ran into a situation where I needed to get the last value from a re-occurring node that SAP was returning.
In order to extract the last record, I utilized the Record Count functoid and fed that value into the Index functoid. The Index functoid is also fed with the value from the “WA” element that I am really interested in. The result is then passed to a String Concatenate functoid where the data is enriched before being assigned to the destination document.
Hotfix for resolving issues with references between projects: http://support.microsoft.com/?kbid=977428
Hotfix for problem with orchestrations saying “The expression that you have entered is not valid.” when they are in fact valid: http://support.microsoft.com/?kbid=979153
The San Diego .NET User Group will be hosting our first Azure day-long conference on March 6th. This first one will be more overview level, we’re planning at least one other which will be more focused and deeper for later this year, and then perhaps more after that. For this first one, we will be covering:
And yes, the way it turned out, all speakers for this are from Microsoft, and David is a fellow co-author from the oh_so_close_to_done_now book I’ve been involved with for quite some time. “SOA with .NET and Windows Azure”.
These conferences are usually a lot of fun and great investments, and this one in particular will be a great way to jump-start your Azure knowledge, or fill in some gaps you may have.
The event page with further details is here. As usual, great discounts for user group members.
Hope to see you there!
Pure XSLT is very powerful but it definitely has its weaknesses (I’ve written about how to extend XSLT using mapping and BizTalk previously here) … One of those are handling numbers that uses a different decimal-separator than a point (“.”).
Take for example the XML below
<Prices>
<Price>10,1</Price>
<Price>10,2</Price>
<Price>10,3</Price>
</Prices>
Just using the XSLT sum-function on these values will give us a “NaN” values. To solve it we’ll have to use recursion and something like in the sample below.
The sample will select the node-set to summarize and send it to the “SummarizePrice” template. It will then add the value for the first Price tag of the by transforming the comma to a point. It will then check if it’s the last value and if not use recursion to call into itself again with the next value. It will keep adding to the total amount until it reaches the last value of the node set.
<xsl:template match="Prices">
<xsl:call-template name="SummurizePrice">
<xsl:with-param name="nodes" select="Price" />
</xsl:call-template>
</xsl:template>
<xsl:template name="SummurizePrice">
<xsl:param name="index" select="1" />
<xsl:param name="nodes" />
<xsl:param name="totalPrice" select="0" />
<xsl:variable name="currentPrice" select="translate($nodes[$index], ',', '.')"/>
<xsl:choose>
<xsl:when test="$index=count($nodes)">
<xsl:value-of select="$totalPrice + $currentPrice"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="SummurizePrice">
<xsl:with-param name="index" select="$index + 1" />
<xsl:with-param name="totalPrice" select="$totalPrice + $currentPrice" />
<xsl:with-param name="nodes" select="$nodes" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Simple but a bit messy and nice to have for future cut and paste 😉
Charles Young mentioned, the Compensation is one of the most under-used features of the BizTalk.
[“BizTalk Server 2006: The Compensation Model” http://geekswithblogs.net/cyoung/articles/100424.aspx]
If you didn’t read his article, I would strictly recommend it. Next article to read is
[“Transactions and Compensation Using BizTalk Server”
http://blogs.msdn.com/richardbpi/archive/2006/12/06/transactions-and-compensation-using-biztalk-server.aspx]
by Richard Seroter.
When deploying the Microsoft.BizTalk.ESB.BAM.Exceptions.xml BAM activity (as part of the Core ESB Toolkit install) we ran into this error:
—
OLE DB error: OLE DB or ODBC error: DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied : 08001
Errors in the high-level relational engine. A connection could not be made to the data source with the DataSourceID of ’bam_ExcByApplication’, Name of ’bamExcByApplication’
—
The issue was that we used a SQL Server Alias while configuring BizTalk to point to our backend SQLservers. This apparently led to the alias name being embedded into the Analysis Services artifact generation when we tried to deployed the BAM Activity. We had the SQL Server Alias on the two BizTalk application servers. We did not have it on the two Analysis Services cluster nodes. Once we added it to the SSAS nodes we were able to successfully deploy the activity.