26 August 2009

AWOL

"So," I hear you asking, "Where have you been for three months?" And I answer, Nursing my wife through the last two months of pregnancy, and welcoming my second child (Emily Marie) into the world. So I've had more important things on my mind than this blog. I'll be getting back to the "regularly scheduled" stuff pretty soon, but I wanted to go ahead and chart out some of what I'll be posting about in the next few weeks so I don't forget. So, here's the list: * BizTalk 101 * Pipelines * Adapters / Accelerators * Basic Architecture * EDI 101 * Internal Standards * External Standards * SOP * New work project So, here's hoping I'll be able to get this back up and running...

09 June 2009

Well, Gee...

So, at work I've been trying to get a BizTalk solution together- both to alleviate some actual pain points and as a 'proof of concept' and it's been a real pain in the donkey. It took much longer than it should have to get BizTalk installed and configured, but we finally did it, and now I'm actually coding the solution. Yipee for me. Mostly it's going ok, but I keep running into things which make me wish (again) that I had some kind of formal training. I'm sure these questions are basic, BizTalk 101 type questions, but I can't find the answers anywhere- or, at least, not illustrated well enough to teach the concept. So, dear reader, I'm wondering if you can help me. Below is my list of "Man I wish I knew" for BizTalk:
  • how to: evaluate the inbound filename of a file and make a decision based on that
  • how to: establsih and use a Send Port Group
  • if multiple send groups are necessary for different types of send ports (e.g. SQL Adapter vs. FILE)
  • best practice for sending results to SQL for update, and archive file to seperate folder.
  • how to: use SQL Send Adapater
  • how to: set up SQL Stored Procedure to INSERT or UPDATE DB instead of only querying
  • how to: Configure a .NET assembly/class for use with BizTalk and call it from an orchestration

30 May 2009

A Call to Excellence

DISCLAIMER: This will be one of my Political Opinion posts. If you're not interested, then don't read it. If you are, and I upset you, I'll be more than happy to trade emails. You have been warned. ************************************************************************************* For the last decade or more, some in our country have attempted to make America and Americans to be less than we are. One in particular speaks of "American Arrogance" and says that we "are one nation among many." I call B.S. Among the nations, America alone has stood as the defender of all men's rights to liberty. Even when we do not act directly to secure it, we do not deny it's existence, and lend what support we are able. Twice in history have we stood up to Evil when we could easily have stayed at home. In WWI, we had no legitimate reason to go to war. One passenger ship was mistakenly sunk by German forces. But we, who had been looking for an excuse, took it. In WWII, the only nation we had reason to fight was Japan: we focused on them second. Instead of spending our considerable might crushing the Japanese, we sent innumerable troops to shed their blood once more on foreign soil fighting for the rights of Europe. We have spent our blood, our sweat, and our treasure to secure freedom, liberty, and hope for as many as we can. Domestically, we have advanced the human condition to such a point that humans are free to believe that animals are more important than we are. Health care is such that any person can get immediate, life saving care with no thought to their ability to pay. People by the millions brave dangers we can hardly imagine- literally risking death- to come here; and the vast majority of those are willing to come and settle for a less-than-second-class existence because that is better than their "middle class" existence in their home countries. Despite all this, we are told that we are arrogant, not excellent. We are told that we are "one nation among many," not "the bright, shining City on a hill." My fellow Americans, I call once more for American Excellence. Our country was founded on the idea that free persons, pursuing their passions without government interference, could become the best place on Earth. Despite this, there are those who wish us to cede more and more of our freedom in the name of security. We are told that only the Great-and-Powerful Federal Government can save: our banks, the car industry, our health care, and even our own computers. This is the same Federal Government which has: bankrupted Social Security and Medicare, instituted policies which encouraged and(by one interpretation) required the banks to make loans to people who could not afford them, encourages sloth and indolence by rewarding them through welfare programs, and has usurped the rights of "the several States, and the people." So I call for Excellence. I call for "We, the People" to stand up and say, "no more." We can take control of our own destinies, and we can succeed in anything we wish. To do so, we must no longer assume that those who "have not" are victims. Calling them "victims" denigrates them and makes them less than us. They, too, are free Americans, able, by the fruits of their labor, to overcome obstacles and to succeed in life. Do not enslave them to the state by saying they are unable to care for themselves, and do not enslave the rest of us by saying we must care for them. To be free means to be responsible for oneself. It means taking chances and risking failure. Liberty means that what I work for is mine. It means the Government does not interfere with my life any more than necessary for any reason. Most of all, Freedom and Liberty mean that all men are truly equal in worth, and equal in opportunities. Freedom does not mean a right against being offended. It does not mean that I do not have to worry about my next meal. Liberty does not mean that I will be cared for. It does not mean that I will never be worried. Most of all Freedom and Liberty do not mean that others must work so that I can live well. To find your worth, go and be excellent. Find what you do best and be the best. Don't let anyone tell you that you are unable to succeed, and, most of all, when you fall down, pick yourself up, dust yourself off, and keep trying.

27 May 2009

X12 != EDI

I had a brief discussion with a friend about this, and I think I need expound on the subject a little. In the world of Development, if you say "EDI" people automatically assume (in America) ANSI X12. Some of the more enlightened also consider EDIFACT (for our European counterparts) and HL7 (healthcare). I'm here to explain that none of these are, in fact, EDI. Yes, you read that correctly. ANSI X12, EDIFACT, HL7, and Joe-Bob's Custom Layout all share one thing in common: they are file specifications. EDI goes far beyond file specification and, in the original sense of the term (first widely used by Financial institutions, IIRC), doesn't really care about format at all. EDI is, litteraly, "Electronic Data Interchange." EDI is much more concerned with parties and transport than it is with specific layout. Indeed, my trading partners and I can choose any layout we wish - including making up our own - and we'll still be doing EDI. As long as I'm sending and receiving electronic data (in the old, CS101 sense of "raw facts given to the computer") with one or more external parties, I'm doing EDI. Now, why is this important? I don't guess it is really. On the other hand, I believe it will become increasingly important, with the myriad of file specifications in addition to transport specifications, for the demarcation to be clear. AS/1, 2 & 3 are EDI. ANSI X12 is not. FTP over SSL or SSH is EDI. EDIFACT is not. HTTPS is EDI. HL7 is not. This demarcation becomes important because there is so much to know about each world. I'm one of those who still gets FTP/SSL and FTP/SSH confused. I certainly couldn't tell you the difference between AS1 and AS2. On the other hand, I can explain in detail why I prefer XML or Looped files (Such as the X12 standard) over Fixed-Width or delimited (Comma, Tab, or otherwise) flat files. I can explain why, if I must have a flat file, I prefer delimiters to fixed-width. I do not prettend that those who can explain the difference between AS1 & AS2 are not EDI professionals. I recommend that you not do so either.

20 May 2009

BizTalk 101 - Installment 1 - HIPAA EDI

As I mention in my bio- I'm new to this. And one thing I've found is that it is very difficult for newbies like myself to find information that everyone else 'just knows.' So, fairly frequently, I'll be posting some of these 100 & 200 level tidbits, in case some other young developer comes along and says "That's great! But how do I get from nothing to that point!?" So, the first installment has to do with HIPAA. I work for a Health Revenue Cycle Management company, so we do a lot of HIPAA EDI (ANSI X12 837, 835, etc.). For one particular client, we don't actually do anything with the files we receive except forward them on, but we do need to know what's in them so we can log them properly. Now, for any normal implementation, that would be no big deal: the filenames would follow some standard which could be used, or the ISA 05/06 & 07/08 information would be sufficient, or whatever. Oh, no. That would be too easy. Anyone already in the HIPAA EDI world may know that Medicare and Medicaid often use Third Party Administrators - sometimes including normal, commercial insurance companies - to handle their claims processing. This can mean, in the right circumstances, that a file comming from, say, CIGNA, might actually be full of Medicare claims. This prevents us from just using the ISA sender/receiver information. Instead, we have to parse out the entire file, just so we can read the first instance of a Patient level NM109 for the Insurance member Id to determine if this is a Medicare or Medicaid file, or if this is really a commercial payer. Luckilly, BizTalk is our friend in this. And this is where that long lead-off gets to some BizTalk 101. I spent the last couple of days trying to figure out how to get BizTalk 2009 to parse out those records. I knew that my friend Tim Rayburn (http://timrayburn.net) had addressed something similar, but it took me a while to find (in his blog, no less). The secret, as is said in Kung-Fu Panda, is that there is no secret. The entire process is 7 steps. 1) Open your BizTalk project (a new one, in my case) 2) Locate the HIPAA maps (harder than you'd think- look for a self extracting zip file burried in the BizTalk folder structure). 3) Add the necessary maps to your project. 4) Deploy the project. 5) Create/Configure a Receive Port & receive location. 6) Create/Configure a Send Port. 7) Restart the BizTalk application. There are a whole lot of specifics that are left out here. But this should be enough to point anyone in the right direction to get such a thing up and running. Tim calls this "From zero to Claims Processing in 15 minutes or less."

Windows Services in C# (.NET Framework 3.5)

Okay... maybe I'm just completely mis-remembering, but IIRC, when authoring a Windows Service in C# 2.0, there was a nifty 'Installer' class you could just add to your project that would be nicely configured for you. You'd have to set the service name and a few other things, but, other than that, you could just build your application and install via MSI or (as I normally did) through InstallUtil.exe. I guess the guys in Redmond decided we were too lazy, though, because I and two of my buddies at work (both rather more experienced than I) spent most of yesterday and a fair deal of time today figuring out why we couldn't get a @#*&%# service to install. We kept getting a strange error message: "No Public Installer with RunInstallerAttribute.Yes was found." We [SEARCHENGINE]-ed the message and we kept getting posts talking about setting up the installer class, but that wasn't good enough for us. "Who wants to know how to do that by hand" we said. Apparently, anyone using Visual Studio 2008. For the life of us, we couldn't find the prebuilt installer. So, because I'll forget if I don't have it listed somewhere... You must create your own Installer Class (which must inherit from Installer) to install a Windows Service created in VS2008. If anyone knows of an automated way to do this, I'd appreciate the comments...

07 May 2009

Console.WriteLine("Hello World!");

Does anyone get really bored by that statement? I never really understood how it was supposed to be an introduction into programming... So, welcome to my blog. Don't mind the mess, it's still under construction. This is the first post, so I'm not going into too much depth. I've been developing in C# for the last couple of years, but just got my first "real" gig, so I figured I'd share as I got deeper into the world of programming. I'll probably also post questions here, occassionally, so feel free to chime in if you have answers or comments. Besides posts about C# and BizTalk, you'll occassionally see political and/or religous posts. I'll try to put a nice disclaimer on those so if you find yourself thinking "shut up and code!" you can just ignore those posts and go on. So, with that, I introduce you to EDI-fication, and hope you'll learn as much as I do.