by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
This is cool and funny, it’s like a wizard to generate a wizard! Nick Dallet has posted an InfoPath form which can generate a UDC file. More details and download on the InfoPath team blog:
Some time ago, we blogged about the reasons why you’d use UDC files and the anatomy of UDC files. You may be wondering, however, if it’s possible to author these files in InfoPath – after all, UDC files are just XML files. You’re right – this is definitely possible. Attached to this article is a form template that lets you author and edit UDC files. full post here
Technorati tags: infpath, udc
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
Hello All,
Due to the rich statistics information given by FeedBurner I decided to move my feed URL to FeedBurner permanently.
My blog aggregator and current FeedBurner statistics shows I’ve around 25 subscribers. Even though it’s not a great number I don’t want to lose them because of the move. I took enough time before making this decision. I’m going to remove all the links to my current feeds (Atom 0.3, Atom 1.0, RSS 2.0) and just going to publish my new contents to the following FeedBurner feed URL in the future.
For easy copy and paste:
http://feeds.feedburner.com/SaravanaKumar
With Link
http://feeds.feedburner.com/SaravanaKumar
I kindly request you to take some time to update your aggregators with the URL mentioned above straight away.
Regards,
Saravana
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
Well it’s been a while since the last post. The team has been very busy servicing our TAP customers and making sure that we hit our milestones for the upcoming Beta 2 release. That said, we will increase the frequency of posts as we describe many of the new features that will be shipping in the Beta 2 release, many of which are also present in the recently released Customer Technology Preview. Read on for more about that …
About a week ago Microsoft released to the Connect Site our BizTalk Server 2006 R2 Customer Technology Preview (CTP) release for February. This is an advance view of our upcoming Beta 2 release. The February CTP is only available to our Technology Adoption Program (TAP) customers and partners while the Beta 2 release will be a public beta. This release contains about a dozen customer-driven enhancements since the Beta 1 release in addition to numerous bug fixes. In this post we will discuss one of the most important enhancements in this release – support for multiple home organization EDI identifiers.
The Previous Approach
Prior to this release, if a customer employed multiple home organization EDI identifiers (ISA-level identifiers in X12, UNB-level identifiers in EDIFACT) you had to employ a somewhat onerous work around in order to get all of your transactions to process correctly. First, you would have to create party records for each trading partner / home identifier combination in order for outbound transactions, including acknowledgments, to have properly formatted envelopes. While it is not unusual to have to create ‘agreements’ between two parties in the EDI world, prior to this release this meant that you could no longer use the Alias to store the identifier of the trading partner because you could have two parties with the same Alias which BizTalk doesn’t allow. By no longer using the Alias you are disabling the primary party resolution mechanism for inbound transactions and being forced to employ other techniques for outbound party resolution.
Inbound Transactions
Losing Party resolution for inbound transactions means that the EDI receive pipeline will fall back on Global EDI Properties regarding acknowledgment generation and reporting and these might be counter to the behavior desired for a particular party. In addition, acknowledgments generated by the EDI receive pipeline would not automatically get the correct DestinationPartyName property which ensures proper formatting of the envelope for outbound transactions.
Outbound Transactions
Without the DestinationPartyName property the only other way to ensure proper outbound party resolution was to use Send Port party resolution by creating a Send Port for each ‘agreement’ (i.e. Party) and associate it to the Party record for the intended trading partner. This created a Send Port proliferation problem in that you had to create a specific send port for each party that had to communicate with more than one home organization identifier. In addition, this also created a Send Port filter maintenance problem because you had to employ multi-part filters to suscribe to the acknowledgments for each of these parties. Lastly, for non-acknowledgment outbound EDI you had to either set the DestinationPartyName, which would require some external cross-reference, or employ additional send ports and/or filters to subscribe to these transactions. For a small number of trading partners this would be manageable. However, companies that have multiple EDI identifiers tend to be multi-national, have grown via acquisition, or some combination of the two and typically have a significant number of trading partners making this situation undesirable.
The New Approach
Inbound Transactions
With the February CTP we have addressed these issues by changing the way that Party (agreement) resolution takes place for EDI (AS/2 party resolution will remain the same). For inbound transactions, the Alias will no longer be used to look up the sender party. Instead, we have added four new fields each to both the X12 Interchange Processing Properties and EDIFACT Interchange Processing Properties for Party as Interchange Sender. The four new fields will store the sender qualifier and identifier and the receiver qualifier and identifier and together will uniquely identify the partner agreement. (See screen shot)
Using these new fields the EDI engine will lookup a Party for an inbound transaction by using the sender AND receiver qualifiers and identifiers (ISA05, ISA06, ISA07, ISA08 in X12 and UNB2.1, UNB2.2, UNB3.1, UNB3.2 in EDIFACT) and comparing them with the values in the four new fields. If no match is found then it will revert back to using just the sender qualifier and identifier (as it does today), but by comparing them with the new sender fields in the EDI properties and NOT the Alias for that Party. If no match is found there then the engine will revert to Global EDI Properties as it did previously.
Outbound Transactions
For outbound transactions, four new context properties have been added: EDI.DestinationPartyReceiverIdentifier, EDI.DestinationPartyReceiverQualifier, EDI.DestinationPartySenderIdentifier, and EDI.DestinationPartySenderQualifier. By setting these properties on an outbound document the EDI engine will use them to lookup a Party based on the values stored in the sender and receiver qualifier and identifier fields that already exist in the ISA Segment Definition and UNB Segment Definition property pages for Party as Interchange Receiver. The outbound party resolution algorithm under this new approach is as follows. The engine will look for the DestinationPartyName property as it did previously and attempt to lookup the Party using that if it is present. If it cannot find a match and all of the four aforementioned properties are present it will attempt to lookup the Party using them as described above. If it cannot find a match it will suspend the message. The rationale here is that if one takes the time to populate these properties, it was done for a reason, and if no Party match is made that is a problem. If none of these properties are present, then the engine resorts to Send Port party resolution as it did previously.
Easier to Maintain
With this new functionality, send port proliferation and the need for extra filters on those ports is signficantly minimized. In addition, outbound party resolution is made easier because you no longer need to worry about setting the DestinationPartyName property. You can just use the sender and receiver identifiers and qualifiers and let the engine do all the work!
Cheers,
Tony
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
According to MacSoop, Apple plans to charge ($29) for the final release of
Boot Camp but the good news is that it’s supposedly going to officially support WindowsVista with the necessary drivers. Boot Camp will also ship with Leopard so if you plan to upgrade from Tiger, you’ll get it there.
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
I’m looking to purchase a new laptop and I’d appreciate your feedback on which make and model.
This will be a my primary BizTalk development environment and as such I will need something that is both powerful and at the same time light (so I can lug it around while I’m on the road), has a […]
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
Update: You should also watch the MSDN Webcast ‘Integrating Sales Data with LOB apps using the Salesforce.com adapter for BizTalk Server 2006‘.
In the month since I last posted, I’ve been working on an evaluation of Salesforce.com and its integration into an ERP system, with BizTalk 2006 acting as middleware using the TwoConnect Salesforce.com adapter.
The TwoConnect […]
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
With Oracle and the DAAB, it seems that you have to prefix parameters with a semicoln “:“, whereas with SQL Server you have to prefix params with an “@“ symbol. This is a bit of a pain when you are trying to write a data access tier that you can just switch between Oracle and SQL Server with a setting in the config file. I’d like to know how people are handling this out there in the real world? I guess you could put a ParameterPrefix setting in a config file, but there must be a better way?
Example:
Oracle Syntax:
Public Function GetProjects(ByVal authUser As Integer) As DataTable
Dim dt As New DataTable
Dim db As Database = DatabaseFactory.CreateDatabase(“bla“)
Dim sqlCommand As String = “select p.project as project,p.projectno as projectno,p.name as name,p.busent as busent “ & _
“from project p,projectpermission pp where pp.project = p.project and “ & _
“pp.isauthorised = 1 And pp.authuser = :AuthUser “ & _
“order by projectno”
Dim dbCommand As DbCommand = db.GetSqlStringCommand(sqlCommand)
db.AddInParameter(dbCommand, “:AuthUser”, DbType.Int32, authUser)
Using dataReader As IDataReader = db.ExecuteReader(dbCommand)
dt.Load(dataReader)
End Using
Return dt
End Function
SQL Server Syntax:
Public Function GetProjects(ByVal authUser As Integer) As DataTable
Dim dt As New DataTable
Dim db As Database = DatabaseFactory.CreateDatabase(“bla“
Dim sqlCommand As String = “select p.project as project,p.projectno as projectno,p.name as name,p.busent as busent “ & _
“from project p,projectpermission pp where pp.project = p.project and “ & _
“pp.isauthorised = 1 And pp.authuser = @AuthUser “ & _
“order by projectno”
Dim dbCommand As DbCommand = db.GetSqlStringCommand(sqlCommand)
db.AddInParameter(dbCommand, “@AuthUser”, DbType.Int32, authUser)
Using dataReader As IDataReader = db.ExecuteReader(dbCommand)
dt.Load(dataReader)
End Using
Return dt
End Function
by community-syndication | Feb 12, 2007 | BizTalk Community Blogs via Syndication
If you’re waking up after the new year and thinking about looking at SPS v3/MOSS 2007,
it appears that you’re not alone.
Breeze Training has put on extra courses due to popular demand. Breeze are
partnering with Dimension Data Learning Solutions to bring these to you around Australia!
’Additional dates have been put on because the 1st bootcamp sold
out with a waiting list. For those that missed out we now have an additional date
in Sydney for the end of Feb. If you are keen, book quickly as seats are limited.
Here’s the link Microsoft
Office SharePoint Server 2007 Boot Camp check for dates in a city near you.
|
Code
|
State
|
Start
Date
|
Status
|
|
MSSHARE07_BOOTCAMP_1
|
NSW
|
12/2/2007
|
SOLD
OUT
|
|
MSSHARE07_BOOTCAMP_1
|
WA
|
26/2/2007
|
SOLD
OUT
|
|
MSSHARE07_BOOTCAMP_1
|
VIC
|
27/2/2007
|
Few
Places
|
|
MSSHARE07_BOOTCAMP_1
|
NSW
|
27/2/2007
|
Few
Places
|
|
MSSHARE07_BOOTCAMP_1
|
QLD
|
12/3/2007
|
|
|
MSSHARE07_BOOTCAMP_1
|
ACT
|
20/3/2007
|
SOLD
OUT
|
|
MSSHARE07_BOOTCAMP_1
|
WA
|
26/3/2007
|
SOLD
OUT
|
|
MSSHARE07_BOOTCAMP_1
|
ACT
|
30/4/07
|
|
|
MSSHARE07_BOOTCAMP_1
|
WA
|
7/5/2007
|
|
by community-syndication | Feb 11, 2007 | BizTalk Community Blogs via Syndication
Scenario:
We send product catalogue to our partner on regular basis via SFTP. There are 3 different types of catalogue message FULL CATALOGUE, PRICE DELTA, and AVAILABILITY DELTA. Price Delta and Availability Delta messages are send every hour, whereas FULL CATALOGUE will be send only once in a month (message size is roughly around 10MB).
Architecture:
Architecture is quite straight forward we have configured a BizTalk “Receive Port” with 3 “Receive Locations” using SQL Adapter. The SQL Receive locations got different polling interval settings as shown below.
PRICE_DELTA: Polls every 1 hour.
AVAILABILITY_DELTA: Polls every 1 hour
FULL_CATALOGUE: Supposed to poll every 720 Hours once.
Through some filter conditions corresponding “Send Ports” will pick up the message and transfer it to our parter via SFTP.
So, where is the bug?
As soon as you enable the FULL CATALOGUE (with 720 Hours polling interval) SQL “Receive Location”, you’ll see hundreds of messages flooding into your BizTalk server via the SQL Receive Location. If you don’t notice it straight away with in minutes you’ll have 1000’s of messages coming non-stop into BizTalk server and to Message Box, blocking all the network traffice, maximum memory utilization in the Biztalk Host machines and SQL Server.
In our case the effect was pretty bad. We did the configuration at end of business and left it over night. Next day morning, Our Biztalk Server disk space was full (because we temporarily write this particular file to local disk for logging purpose), Event viewer was full of Error Messages related to SQL, pretty much both the BizTalk and SQL machines were useless.
We started analysing the problem and figured out SQL Adapter polling is working without any issue upto 596 hours, you put any value above 596, your SQL Adapter will start polling messages every 10millisecond or so non-stop clogging the whole Message Box.
Some dissection into Microsoft.Bizatalk.Adapter.SQL.dll
Out of curiosity I just went to figure out the root case for this bug. Lutz reflector came handy to do some dissection of the Microsoft.Bizatalk.Adapter.SQL.dll, which revealed the next polling interval is calculated by the method GetNextActivationTime() inside the TimeIntervalSchedule class, luckily the reflector is showed me the source code as well.
The problem here is “seconds” properties is of type integer (Int32) so the maximum value it can hold is 2147483647. The polling logic will be ok till 596 hours. (i.e 597 * 60 * 60 * 1000 = 2145600000 MilliSeconds), But if you try putting anything bigger than 596 is going to exceed the maxmimum threshold value for Int32 and the function is going to return a DateTime value in the past, which will result in constant polling by SQL Adapter non-stop thinking it has some work to do. Unfortunately in our case it ended up in one of the biggest messages in our system (10MB).
Reproduction of the BUG using windows application.
You can easily reproduce this behaviour by writing this simple code.
private void button1_Click(object sender, EventArgs e)
{
int f = 597 * 60 * 60;
MessageBox.Show(GetNextActivationTime(f).ToString());
}
public DateTime GetNextActivationTime(int seconds)
{
//return (DateTime.Now + TimeSpan.FromMilliseconds((double)(0x3e8 * seconds)));
return (DateTime.Now + TimeSpan.FromMilliseconds((double)(1000 * seconds)));
}
When I tested this code on 08 Feb 2007, I got the following results
For 596 hours : 05/03/2007 08:47:23
For 597 hours: 14/01/2007 16:45:39 (which is in the past)
Changing the datatype from int to uint will produce the correct result.
So, what’s the solution?
1. Option 1: Restrict the User Interface in SQL Adapter to certain values, in our case not more than 597 hours. There is bug in the UI as well, it just throws an exception saying you can enter value more than 65535 (max of uint) inspite of you choosing hours, minutes or seconds.
2. Option 2: SQL Adapter code need a fix.
Sample Application for Download
I’v just put a sample Biztalk Application you can use to see this behaviour. It got 1 Schema to support SQL Adapter, 1 SQL Receive port and 1 FILE send port to “C:\temp”. The SQL Adapter will poll data from BtsMgmtDb, here is the query I’ve used
SELECT NAME, DATEMODIFIED FROM adm_HostInstance FOR XML AUTO
Default binding got the value of 596 hours, which is OK, change it to 597 and see how many messages you are getting on your C:\Temp folder.
Note: Disable the “Receive Location” to stop polling after a minute or so. Dont forget to disable the SQL Receive location after the experiment.
Nandri!
Saravana
by community-syndication | Feb 11, 2007 | BizTalk Community Blogs via Syndication
Did you know that BizTalk Server has a hidden pipeline component that can add namespaces to inbound documents?
Often, you’ll find that you’re retrieving XML data from a system where no namespace has been provided. This can cause issues for BizTalk Server given that namespace#root is the global unique identifier for messages. If you […]