| Contents at a Glance | 5 |
|---|
| Contents | 7 |
|---|
| About the Authors | 16 |
|---|
| About the Technical Reviewer | 17 |
|---|
| Acknowledgments | 18 |
|---|
| Introduction | 19 |
|---|
| Who This Book Is For | 19 |
| How This Book Is Structured | 20 |
| Conventions | 20 |
| Prerequisites | 21 |
| Downloading the Code | 21 |
| Contacting the Authors | 22 |
| Creating a Simple Map | 24 |
|---|
| Using the Development Studio | 24 |
| Creating the Map | 30 |
| Summary | 51 |
| How BizTalk Maps Work | 52 |
|---|
| Understanding How BizTalk Maps Work | 52 |
| Examining the Hidden Constructs in Maps | 57 |
| Digging into the HelloWorld Map Rules | 61 |
| Summary | 78 |
| Using Scripting in Maps | 79 |
|---|
| Choosing Between Scripts and Functoids | 79 |
| Selecting from Available Scripting Languages | 85 |
| Choosing Your Scripting Language | 102 |
| Combining Types of Scripting | 104 |
| Examples of When You Should Use a Script | 108 |
| Summary | 111 |
| Testing BizTalk Maps | 112 |
|---|
| Incremental Testing | 112 |
| Addressing Architecture Considerations | 115 |
| Test Data | 119 |
| Testing in the Map Editor | 122 |
| Summary | 129 |
| Mapping Conditionals | 132 |
|---|
| Checking If Data Exists | 132 |
| Blocking Output When Data Doesn t Exist | 134 |
| Checking If a Specific Condition Exists | 136 |
| Checking If a Specific Condition Does Not Exist | 138 |
| An If/Else Condition | 140 |
| Using the Logical OR for a Single Return Value | 142 |
| Using a case Statement | 143 |
| Summary | 145 |
| Dealing with Numbers | 147 |
|---|
| Is This a Number? | 147 |
| Is This Number an Integer? | 151 |
| Rounding Numbers | 153 |
| Summing Numbers | 155 |
| Counting Records | 157 |
| Converting Real Numbers to Integers (and Back Again) | 161 |
| Moving the Sign to a Trailing Position | 162 |
| Converting a Number to or from Sign-Trailing Overpunch Format | 165 |
| Summary | 168 |
| Manipulating Strings | 169 |
|---|
| Trimming Strings | 169 |
| Trimming Nonblank Characters from a String | 172 |
| Padding a String | 173 |
| Selecting Substrings from String Data | 174 |
| Concatenating Strings | 177 |
| Searching String Data | 179 |
| Removing and Replacing Characters from Strings | 180 |
| Using the RegEx Function to Remove Garbage from a String | 183 |
| Summary | 183 |
| Manipulating Dates and Times | 184 |
|---|
| BizTalk Date and Time Functoids | 184 |
| Altering the Format of a Date | 186 |
| Calculating a Due Date | 189 |
| Comparing Date Intervals | 190 |
| Performing Time Zone Conversions | 191 |
| Converting Gregorian Dates to Ordinal Dates | 192 |
| Converting Ordinal Dates to Gregorian Dates | 193 |
| Converting Dates and Times Using the ParseExact Method | 195 |
| Getting Dates and Times for an XSLT Script | 195 |
| Summary | 197 |
| Collecting Data | 198 |
|---|
| Collecting Nonlooping Data from the Source | 198 |
| Collecting Looping Data from the Source | 200 |
| Modifying the Target Schema for Data Collection | 204 |
| Using Global Variables for Data Collection | 205 |
| Loading a Unique List from Input Data | 209 |
| Arrays vs. Hash Tables | 210 |
| Using an Array to Control Data Selection for Output | 210 |
| Summary | 217 |
| Accessing External Data | 218 |
|---|
| Using External Flat Files | 219 |
| Using the BizTalk Database Functoids with External Data | 231 |
| Locating External Files
|