diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AdapterManagement.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AdapterManagement.cs
new file mode 100644
index 00000000..dc860f90
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AdapterManagement.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AdapterManagement.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AdapterManagement.csproj
new file mode 100644
index 00000000..88b02bb9
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AdapterManagement.csproj
@@ -0,0 +1,236 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}
+ Debug
+ AnyCPU
+
+
+
+
+ ODBCAdapterManagement
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ Library
+ Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ Microsoft.Biztalk.Adapter.Framework
+ ..\..\..\Program Files\Microsoft BizTalk Server 2004\Developer Tools\Microsoft.Biztalk.Adapter.Framework.dll
+
+
+ Microsoft.BizTalk.ExplorerOM
+ ..\..\..\Program Files\Microsoft BizTalk Server 2004\Developer Tools\Microsoft.BizTalk.ExplorerOM.dll
+
+
+ Microsoft.BizTalk.Pipeline
+ ..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.BizTalk.Pipeline.dll
+
+
+ System
+
+
+ System.Data
+
+
+ System.Drawing
+
+
+ System.Drawing.Design
+
+
+ System.Windows.Forms
+
+
+ System.XML
+
+
+ {F25132D9-07AA-4B41-90AD-828E54704692}
+ ODBCDriverPrompt
+
+
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}
+ ODBCSchemaWizard
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Form
+
+
+ Form
+
+
+ Code
+
+
+ Code
+
+
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+ SchemaPicker.cs
+ Designer
+
+
+ SQLUITypeEditor.cs
+ Designer
+
+
+ Designer
+
+
+ Designer
+
+
+
+
+ TransmitHandler.xsd
+
+
+ TransmitLocation.xsd
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AssemblyInfo.cs
new file mode 100644
index 00000000..bd5b223c
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/AssemblyInfo.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/DatalinkTypeConverter.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/DatalinkTypeConverter.cs
new file mode 100644
index 00000000..a9c348f6
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/DatalinkTypeConverter.cs
@@ -0,0 +1,95 @@
+/*************************************************************************
+ * Copyright (c) 1999-2002 Microsoft Corporation. All rights reserved. *
+ * *
+ * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY *
+ * KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR *
+ * PURPOSE. THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE *
+ * OF THIS CODE AND INFORMATION REMAINS WITH THE USER. *
+ *************************************************************************/
+using System;
+using System.ComponentModel;
+using System.Globalization;
+
+using Microsoft.BizTalk.Adapter.Framework;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime
+{
+ ///
+ /// Class DatalinkTypeConverter.
+ ///
+ public class DatalinkTypeConverter : StringConverter
+ {
+ #region Methods
+
+ public override bool CanConvertTo( ITypeDescriptorContext context, Type destinationType )
+ {
+ return ( typeof( string ) == destinationType ) || base.CanConvertTo( context, destinationType );
+ }
+
+ ///
+ /// Convert actual value to desired type for display.
+ ///
+ ///
+ /// The parameter value contains the actual connection string,
+ /// including password. For security reasons, the password
+ /// must be masked.
+ ///
+ ///
+ /// Property grid cell context.
+ ///
+ ///
+ /// Culture to use for localized formatting.
+ ///
+ ///
+ /// Actual value to display in grid cell.
+ ///
+ ///
+ /// Desired type to display (grid cell's type).
+ ///
+ ///
+ /// Converted value with password masked.
+ ///
+ public override object ConvertTo( ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType )
+ {
+ if ( typeof( string ) == destinationType && value is string )
+ {
+ string pass = base.ConvertTo( context, culture, value, destinationType ) as string;
+ return SecurePassword( pass );//FIXConnectionString.SecurePassword(pass);
+ }
+ return base.ConvertTo( context, culture, value, destinationType );
+ }
+
+ private string SecurePassword( string ConnectionString )
+ {
+ if ( ConnectionString != "" )
+ {
+ int iPasswordIndex = ConnectionString.IndexOf( "PWD=", 1 );
+
+ if ( iPasswordIndex > 0 )
+ {
+ int iEndOfPassword = ConnectionString.IndexOf( ";", iPasswordIndex );
+
+ //Deal with the fact that we may not have a ; at the end of our statement
+ if ( iEndOfPassword < 0 )
+ iEndOfPassword = ConnectionString.Length;
+
+ string password = ConnectionString.Substring( iPasswordIndex + 4, iEndOfPassword - ( iPasswordIndex + 4 ) );
+ return ConnectionString.Replace( password, "*********" );
+
+ }
+ else
+ {
+ return ConnectionString;
+ }
+ }
+ else
+ {
+ return String.Empty;
+ }
+
+ }
+
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/DatalinkUITypeEditor.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/DatalinkUITypeEditor.cs
new file mode 100644
index 00000000..1b82e8cd
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/DatalinkUITypeEditor.cs
@@ -0,0 +1,256 @@
+//---------------------------------------------------------------------
+// File: DatalinkUITypeEditor.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.ComponentModel;
+using System.Data.OleDb;
+using System.Diagnostics;
+using System.Windows.Forms;
+using System.Windows.Forms.Design;
+using System.Security;
+using System.Security.Permissions;
+using System.Runtime.InteropServices;
+
+using ODBCDriverPrompt; //Custom written dialog to get ODBC connections
+
+namespace Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime
+{
+ #region DatalinkDialog
+
+ public class DataLinkDialog
+ {
+
+ private string connectionString = String.Empty;
+
+ public DataLinkDialog( )
+ {
+
+ }
+
+ public string ConnectionString
+ {
+ get
+ {
+ return connectionString;
+ }
+ set
+ {
+ connectionString = value;
+ }
+ }
+
+ public DialogResult Show( System.IntPtr parent )
+ {
+ try
+ {
+ CDataLink datalink = new CDataLink( );
+
+ System.Guid riid = new Guid( "0C733A8B-2A1C-11CE-ADE5-00AA0044773D" ); //IID_IDBInitialize
+ IDataInitialize dataInitialize = ( IDataInitialize )datalink;
+
+ object pIDBInit = null;
+ dataInitialize.GetDataSource( null, 1, connectionString, ref riid, out pIDBInit );
+
+ IDBPromptInitialize dbPrompt = ( IDBPromptInitialize )datalink;
+ dbPrompt.PromptDataSource( null, parent, 18, 0, 0, null, ref riid, ref pIDBInit );
+
+ dataInitialize.GetInitializationString( pIDBInit, true, out connectionString );
+ }
+ catch ( System.Runtime.InteropServices.COMException )
+ {
+ // A COM exception is thrown when user cancels
+ return DialogResult.Cancel;
+ }
+
+ return DialogResult.OK;
+ }
+ }
+
+ #endregion
+
+ class LaunchForm : Form
+ {
+ private DataLinkDialog form;
+ private DialogResult dialogResult;
+ private delegate void NextDialogDelegate( );
+ private NextDialogDelegate nextDialog;
+
+ public LaunchForm( DataLinkDialog form )
+ {
+ this.form = form;
+ this.dialogResult = DialogResult.Cancel;
+ this.ShowInTaskbar = false;
+ this.StartPosition = FormStartPosition.CenterParent;
+
+ // Switch to using Opacity if it is supported (its not on win2k)
+ if ( Environment.OSVersion.Version.Major > 5 || ( Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor > 0 ) )
+ this.Opacity = 0.00;
+ else
+ this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
+
+ this.nextDialog = new NextDialogDelegate( NextDialog );
+ this.Load += new EventHandler( LoadEvent );
+ }
+
+ private void NextDialog( )
+ {
+ this.dialogResult = this.form.Show( this.Handle );
+ this.Close( );
+ }
+
+ private void LoadEvent( object sender, EventArgs e )
+ {
+ this.nextDialog.BeginInvoke( null, null );
+ }
+
+ public new DialogResult DialogResult
+ {
+ get
+ {
+ return dialogResult;
+ }
+ }
+ }
+
+ #region DatalinkTypeEditor
+
+ public class DatalinkUITypeEditor : System.Drawing.Design.UITypeEditor
+ {
+ private DataLinkDialog _form;
+
+ public DatalinkUITypeEditor( )
+ {
+ this._form = new DataLinkDialog( );
+ this._form.ConnectionString = "";//"Provider=SQLOLEDB.1";
+ }
+
+ public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle( System.ComponentModel.ITypeDescriptorContext context )
+ {
+ return System.Drawing.Design.UITypeEditorEditStyle.Modal;
+ }
+
+ public override object EditValue( System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value )
+ {
+ // If the value is null or it's an invalid connection string, we will discard it
+ if ( null != value )
+ {
+ try
+ {
+ Validator.ValidateConnectionString( value.ToString( ) );
+ this._form.ConnectionString = value.ToString( );
+ }
+ catch ( SqlValidationException ) { }
+ }
+
+ ODBCDriverUI DriverDialog = new ODBCDriverUI( );
+ this._form.ConnectionString = DriverDialog.GetDSN( );
+
+ // // this form used to launch the dialog - see comment on class
+ // LaunchForm launchForm = new LaunchForm(this._form);
+ //
+ // // seems to be only way to launch modal dialogs from the adapter framework
+ // IWindowsFormsEditorService service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));
+ // DialogResult result = service.ShowDialog(launchForm);
+ //
+ // DialogResult dialogResult = launchForm.DialogResult;
+
+ // switch (dialogResult)
+ // {
+ // case System.Windows.Forms.DialogResult.OK:
+ value = this._form.ConnectionString;
+
+ // Use OleDbConnection to read the database name and server name, generates URI
+ // OleDbConnection myConnection = new OleDbConnection(this._form.ConnectionString);
+ // string uriString = string.Empty;
+ //// if (myConnection.DataSource.Length == 0)
+ //// uriString = "ODBC://" + "." + "/" + myConnection.Database + "/";
+ //// else
+ // uriString = "ODBC://" + value + "/";
+ //
+ // // Writes to URI property
+ // object o = context.Instance;
+ // Type t = o.GetType();
+ // System.Reflection.PropertyInfo p = t.GetProperty("uri");
+ // if (null != p)
+ // p.SetValue(context.Instance, uriString , null);
+
+ // break;
+ // case System.Windows.Forms.DialogResult.Cancel:
+ // break;
+ // }
+ return value;
+ }
+ }
+
+ #endregion
+
+ #region Interop Classes
+
+ [ComImport]
+ [TypeLibType( TypeLibTypeFlags.FCanCreate )]
+ [ClassInterface( ClassInterfaceType.None )]
+ [Guid( "2206CDB2-19C1-11D1-89E0-00C04FD7A829" )]
+ public class CDataLink { }
+
+ [ComImport]
+ [InterfaceTypeAttribute( ComInterfaceType.InterfaceIsIUnknown )]
+ [Guid( "2206CCB0-19C1-11D1-89E0-00C04FD7A829" )]
+ [CLSCompliant( false )]
+ public interface IDBPromptInitialize
+ {
+ void PromptDataSource(
+ [MarshalAs( UnmanagedType.Interface )] Object pUnkOuter,
+ IntPtr hWndParent,
+ uint dwPromptOptions,
+ uint cSourceTypeFilter,
+ int rgSourceTypeFilter,
+ string pwszszzProviderFilter,
+ ref System.Guid riid,
+ [MarshalAs( UnmanagedType.Interface )] ref Object ppDataSource );
+
+ }
+
+ [ComImport]
+ [InterfaceTypeAttribute( ComInterfaceType.InterfaceIsIUnknown )]
+ [Guid( "2206CCB1-19C1-11D1-89E0-00C04FD7A829" )]
+ [CLSCompliant( false )]
+ public interface IDataInitialize
+ {
+ void GetDataSource(
+ [MarshalAs( UnmanagedType.Interface )] Object pUnkOuter,
+ uint dwClsCtx,
+ string pwszInitializationString,
+ ref System.Guid riid,
+ [MarshalAs( UnmanagedType.Interface )] out Object ppDataSource );
+
+ void GetInitializationString(
+ [MarshalAs( UnmanagedType.Interface )] Object pDataSource,
+ bool fIncludePassword,
+ [MarshalAs( UnmanagedType.LPWStr )] out string ppwszInitString );
+ }
+
+ [ComImport]
+ [InterfaceTypeAttribute( ComInterfaceType.InterfaceIsIUnknown )]
+ [Guid( "0C733A8B-2A1C-11CE-ADE5-00AA0044773D" )]
+ public interface IDBInitialize { }
+
+ #endregion
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ODBCAdapterResource.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ODBCAdapterResource.resx
new file mode 100644
index 00000000..4fc8538e
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ODBCAdapterResource.resx
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.0.0.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Virtual Directory
+
+
+ Enter virtual directory, including query string
+
+
+ Return Content Type
+
+
+ Enter content type to be used for the HTTP repsonse
+
+
+ Loop Back
+
+
+ Select loopback to route the request back as the response
+
+
+ Endpoint Configuration
+
+
+ Tuning Parameters
+
+
+ Error Threshold
+
+
+ Destination Url
+
+
+ Enter the destination URI that identifies the Internet resource that the message will be sent to
+
+
+ Transmit Location
+
+
+ HTTP Method
+
+
+ Enter the HTTP request method to use when contacting the Internet resource
+
+
+ GET
+
+
+ HEAD
+
+
+ POST
+
+
+ Time out
+
+
+ Enter the time-out value for the HTTP request
+
+
+ ContentType
+
+
+ Enter content type of the HTTP request
+
+
+ Authentication Type
+
+
+ Enter the type of Authentication to use to contact the Internet resource
+
+
+ Security Settings
+
+
+ Kerberos
+
+
+ Anonymous
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ReceiveHandler.xsd b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ReceiveHandler.xsd
new file mode 100644
index 00000000..ef07fdac
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ReceiveHandler.xsd differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ReceiveLocation.xsd b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ReceiveLocation.xsd
new file mode 100644
index 00000000..8c8513c1
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/ReceiveLocation.xsd differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SQLUITypeEditor.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SQLUITypeEditor.cs
new file mode 100644
index 00000000..b4b32e21
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SQLUITypeEditor.cs
@@ -0,0 +1,90 @@
+//---------------------------------------------------------------------
+// File: SQLUITypeEditor.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.IO;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Xml;
+using System.Xml.Schema;
+using System.Reflection;
+using System.Security;
+using System.Security.Permissions;
+
+using Microsoft.BizTalk.Component.Interop;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime
+{
+ public class SqlUITypeEditor : System.Drawing.Design.UITypeEditor
+ {
+ private SchemaPicker _form;
+
+ public SqlUITypeEditor( )
+ {
+ this._form = new SchemaPicker( );
+ }
+
+ [EnvironmentPermissionAttribute( SecurityAction.LinkDemand, Unrestricted = false )]
+ public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle( System.ComponentModel.ITypeDescriptorContext context )
+ {
+ return System.Drawing.Design.UITypeEditorEditStyle.Modal;
+ }
+
+ [EnvironmentPermissionAttribute( SecurityAction.LinkDemand, Unrestricted = false )]
+ public override object EditValue( System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value )
+ {
+ string target = null;
+ string root = null;
+ string uriString = string.Empty;
+
+ switch ( this._form.ShowDialog( ) )
+ {
+ case System.Windows.Forms.DialogResult.OK:
+ value = this._form.sqlScript;
+ root = this._form.rootElementName;
+ target = this._form.targetNamespace;
+
+ //WARNING: This could be a problem if the query gets over 256 characters!
+ uriString = "ODBC://" + value + "/";
+
+ // Writes to URI property
+ object o = context.Instance;
+ Type t = o.GetType( );
+ System.Reflection.PropertyInfo p = t.GetProperty( "RootName" );
+
+ p.SetValue( context.Instance, root, null );
+ p = t.GetProperty( "Namespace" );
+ p.SetValue( context.Instance, target, null );
+
+ p = t.GetProperty( "uri" );
+ p.SetValue( context.Instance, uriString, null );
+
+ break;
+ case System.Windows.Forms.DialogResult.Cancel:
+ break;
+ }
+
+ return value;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SQLUITypeEditor.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SQLUITypeEditor.resx
new file mode 100644
index 00000000..97edff15
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SQLUITypeEditor.resx
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ (Default)
+
+
+ False
+
+
+ False
+
+
+ 4, 4
+
+
+ True
+
+
+ SqlScriptForm
+
+
+ SqlScriptForm
+
+
+ 80
+
+
+ True
+
+
+ Private
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SchemaPicker.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SchemaPicker.cs
new file mode 100644
index 00000000..d3af4c51
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SchemaPicker.cs
@@ -0,0 +1,384 @@
+//---------------------------------------------------------------------
+// File: SchemaPicker.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.IO;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Xml;
+using System.Xml.Schema;
+
+using Microsoft.Win32;
+
+using Microsoft.BizTalk.ExplorerOM;
+using Microsoft.BizTalk.Component.Interop;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime
+{
+ ///
+ /// Summary description for SchemaPicker.
+ ///
+ internal class SchemaPicker : System.Windows.Forms.Form
+ {
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Button buttonOK;
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+ private System.Windows.Forms.ComboBox comboProject;
+ private System.Windows.Forms.ComboBox comboSchema;
+
+ private BtsCatalogExplorer ce;
+ private ArrayList schemaNames = new ArrayList( );
+ private System.Windows.Forms.Button buttonCancel;
+
+ private string m_sqlScript = String.Empty;
+ private string m_rootElementName = String.Empty;
+ private string m_targetNamespace = String.Empty;
+
+ public string sqlScript
+ {
+ get
+ {
+ return m_sqlScript;
+ }
+ set
+ {
+ m_sqlScript = value;
+ }
+ }
+
+ public string targetNamespace
+ {
+ get
+ {
+ return m_targetNamespace;
+ }
+ set
+ {
+ m_targetNamespace = value;
+ }
+ }
+
+ public string rootElementName
+ {
+ get
+ {
+ return m_rootElementName;
+ }
+ set
+ {
+ m_rootElementName = value;
+ }
+ }
+
+ public SchemaPicker( )
+ {
+ //
+ // Required for Windows Form Designer support
+ //
+ InitializeComponent( );
+
+ // this.label1.Text = ODBCResourceHandler.GetResourceString("SchemaPickerSelectLabel");
+ // this.label2.Text = ODBCResourceHandler.GetResourceString("SchemaPickerSelectSchemaLabel");
+ // this.buttonOK.Text = ODBCResourceHandler.GetResourceString("FormOKButton");
+ // this.label3.Text = ODBCResourceHandler.GetResourceString("SchemaPickerTitleLabel");
+ // this.buttonCancel.Text = ODBCResourceHandler.GetResourceString("FormCancelButton");
+ // this.Text = ODBCResourceHandler.GetResourceString("SchemaPickerTitle");
+
+ RegistryKey bts30admin = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\BizTalk Server\3.0\Administration" );
+ string mgmtDBName = ( string )bts30admin.GetValue( "MgmtDBName" );
+ string mgmtDBServer = ( string )bts30admin.GetValue( "MgmtDBServer" );
+
+ // Initialize ExplorerOM
+ ce = new BtsCatalogExplorer( );
+ ce.ConnectionString = "Server=" + mgmtDBServer + ";Database=" + mgmtDBName + ";Integrated Security=SSPI";
+
+ // Get all the assembly names (project names)
+ //comboProject.Items.Add(ODBCResourceHandler.GetResourceString("SchemaAllProjects"));
+ ICollection assemblies = ce.GetCollection( CollectionType.Assembly );
+ foreach ( IBtsAssembly assembly in assemblies )
+ {
+ comboProject.Items.Add( assembly.Name );
+ }
+
+ // Get all the schema names but don't show them yet
+ ICollection schemas = ce.GetCollection( CollectionType.Schema );
+ foreach ( IBtsSchema schema in schemas )
+ {
+ if ( SchemaType.Property != schema.Type && !schema.BtsAssembly.IsSystem )
+ schemaNames.Add( schema.AssemblyQualifiedName );
+ }
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.label1 = new System.Windows.Forms.Label( );
+ this.label2 = new System.Windows.Forms.Label( );
+ this.comboProject = new System.Windows.Forms.ComboBox( );
+ this.comboSchema = new System.Windows.Forms.ComboBox( );
+ this.buttonOK = new System.Windows.Forms.Button( );
+ this.label3 = new System.Windows.Forms.Label( );
+ this.buttonCancel = new System.Windows.Forms.Button( );
+ this.SuspendLayout( );
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point( 12, 52 );
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size( 100, 16 );
+ this.label1.TabIndex = 10;
+ this.label1.Text = "Assembly";
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point( 12, 100 );
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size( 100, 16 );
+ this.label2.TabIndex = 12;
+ this.label2.Text = "Schema";
+ //
+ // comboProject
+ //
+ this.comboProject.AccessibleName = "comboProject";
+ this.comboProject.Location = new System.Drawing.Point( 12, 72 );
+ this.comboProject.Name = "comboProject";
+ this.comboProject.Size = new System.Drawing.Size( 348, 21 );
+ this.comboProject.TabIndex = 11;
+ this.comboProject.SelectedIndexChanged += new System.EventHandler( this.comboProject_SelectedIndexChanged );
+ //
+ // comboSchema
+ //
+ this.comboSchema.AccessibleName = "comboSchema";
+ this.comboSchema.Location = new System.Drawing.Point( 12, 120 );
+ this.comboSchema.Name = "comboSchema";
+ this.comboSchema.Size = new System.Drawing.Size( 348, 21 );
+ this.comboSchema.TabIndex = 13;
+ //
+ // buttonOK
+ //
+ this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK;
+ this.buttonOK.Location = new System.Drawing.Point( 198, 156 );
+ this.buttonOK.Name = "buttonOK";
+ this.buttonOK.Size = new System.Drawing.Size( 76, 23 );
+ this.buttonOK.TabIndex = 14;
+ this.buttonOK.Text = "OK";
+ this.buttonOK.Click += new System.EventHandler( this.buttonOK_Click );
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point( 12, 12 );
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size( 348, 32 );
+ this.label3.TabIndex = 5;
+ this.label3.Text = "Please select the BizTalk assembly and schema containing the database script to e" +
+ "xecute";
+ //
+ // buttonCancel
+ //
+ this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.buttonCancel.Location = new System.Drawing.Point( 282, 156 );
+ this.buttonCancel.Name = "buttonCancel";
+ this.buttonCancel.Size = new System.Drawing.Size( 76, 23 );
+ this.buttonCancel.TabIndex = 15;
+ this.buttonCancel.Text = "Cancel";
+ //
+ // SchemaPicker
+ //
+ this.AcceptButton = this.buttonOK;
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 13 );
+ this.CancelButton = this.buttonCancel;
+ this.ClientSize = new System.Drawing.Size( 370, 188 );
+ this.Controls.Add( this.buttonCancel );
+ this.Controls.Add( this.label3 );
+ this.Controls.Add( this.buttonOK );
+ this.Controls.Add( this.comboSchema );
+ this.Controls.Add( this.comboProject );
+ this.Controls.Add( this.label2 );
+ this.Controls.Add( this.label1 );
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+ this.Name = "SchemaPicker";
+ this.Text = "Select Schema";
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+
+ private void comboProject_SelectedIndexChanged( object sender, System.EventArgs e )
+ {
+ comboSchema.Items.Clear( );
+ comboSchema.ResetText( );
+ string strProjName = comboProject.SelectedItem.ToString( );
+
+ // Show all the schemas
+ if ( strProjName == "AllProjects" ) //ODBCResourceHandler.GetResourceString("SchemaAllProjects"))
+ strProjName = "";
+
+ // If the project name contains space, it will be converted to underscore in schema name
+ strProjName = strProjName.Replace( " ", "_" );
+
+ for ( int i = 0; i < schemaNames.Count; i++ )
+ if ( schemaNames[ i ].ToString( ).IndexOf( strProjName ) >= 0 )
+ comboSchema.Items.Add( schemaNames[ i ].ToString( ) );
+ }
+
+ private void buttonOK_Click( object sender, System.EventArgs e )
+ {
+ if ( comboSchema.SelectedIndex < 0 )
+ {
+ MessageBox.Show( "Please select a schema before continuing", "ODBC Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return;
+ }
+
+ //Use the full schema name to get the content of the schema
+ try
+ {
+ string assemblyQualifiedName = comboSchema.SelectedItem.ToString( );
+
+ int index = assemblyQualifiedName.IndexOf( ',' );
+ string docName = assemblyQualifiedName.Substring( 0, index );
+ string assemblyName = assemblyQualifiedName.Substring( index + 1 );
+
+ IDocumentSpec ds = new DocumentSpec( docName, assemblyName );
+
+ //Get the first schema
+ XmlSchemaCollection schemas = ds.GetSchemaCollection( );
+ XmlSchemaCollectionEnumerator enumerator = schemas.GetEnumerator( );
+ enumerator.MoveNext( );
+ XmlSchema schema = enumerator.Current;
+ sqlScript = GetFirstSQLStatement( schema );
+ targetNamespace = GetTarget( schema );
+ rootElementName = GetRoot( schema );
+
+ if ( sqlScript == null )
+ {
+ MessageBox.Show( "The selected schema does not contain a SQL script. Please select another", "ODBC Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return;
+ }
+ else
+ {
+ // We don't support parameters as part of a receive process. How would someone
+ // populate the parameters on a receieve only port?
+
+ //WARNING: Need to fix this as they could be calling a proc with outparameters
+ //We'll skip the RC for a SP.
+ if ( sqlScript.IndexOf( "?", 3 ) > 0 )
+ {
+ MessageBox.Show( "The selected schema contain a SQL script input parameters. This is not supported for receive ports. Please select another", "ODBC Configuration Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return;
+ }
+ else
+ {
+ this.DialogResult = DialogResult.OK;
+ this.Close( );
+ }
+ }
+ }
+ catch ( System.Runtime.InteropServices.COMException ) // Something wrong in schema cache
+ {
+ MessageBox.Show( "An error has occured connecting the BizTalk Configuration system", "ODBC Configruation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return;
+ }
+ catch ( Exception exp )
+ {
+ string msg = exp.Message;
+ MessageBox.Show( "An error has occured connecting the BizTalk Configuration system" + " " + msg, "Big trouble", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return;
+ }
+ }
+
+ private string GetFirstSQLStatement( XmlSchemaObject parent )
+ {
+ if ( parent is XmlSchemaAppInfo )
+ {
+ foreach ( XmlNode child in ( ( XmlSchemaAppInfo )parent ).Markup )
+ {
+ if ( child.LocalName == "ODBCCMD" )
+ {
+ XmlAttribute att = child.Attributes[ "value" ];
+ if ( null != child.InnerText )
+ return child.InnerText;
+ }
+ }
+ return null;
+ }
+ else if ( parent is XmlSchema )
+ {
+ foreach ( XmlSchemaObject child in ( ( XmlSchema )parent ).Items )
+ {
+ string result = GetFirstSQLStatement( child );
+ if ( result != null )
+ return result;
+ }
+ }
+ else if ( parent is XmlSchemaAnnotation )
+ {
+ foreach ( XmlSchemaObject child in ( ( XmlSchemaAnnotation )parent ).Items )
+ {
+ string result = GetFirstSQLStatement( child );
+ if ( result != null )
+ return result;
+ }
+ }
+ return null;
+ }
+
+ private string GetRoot( XmlSchema parent )
+ {
+ foreach ( XmlSchemaObject child in parent.Items )
+ {
+ if ( child is XmlSchemaElement )
+ return ( ( XmlSchemaElement )child ).Name;
+ }
+ return null;
+ }
+
+ private string GetTarget( XmlSchema parent )
+ {
+ return parent.TargetNamespace;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SchemaPicker.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SchemaPicker.resx
new file mode 100644
index 00000000..22a0d178
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/SchemaPicker.resx
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ (Default)
+
+
+ False
+
+
+ False
+
+
+ 4, 4
+
+
+ SchemaPicker
+
+
+ True
+
+
+ 80
+
+
+ True
+
+
+ Private
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitHandler.xsd b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitHandler.xsd
new file mode 100644
index 00000000..2fa23162
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitHandler.xsd differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitHandler.xsx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitHandler.xsx
new file mode 100644
index 00000000..43265faf
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitHandler.xsx
@@ -0,0 +1,9 @@
+
+
+
+
+
+ <_x0028_TransactionSupport_x0029__XmlSimpleType left="317" top="5080" width="5292" height="2963" selected="0" zOrder="5" index="0" expanded="1" />
+
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitLocation.xsd b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitLocation.xsd
new file mode 100644
index 00000000..f28e5007
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitLocation.xsd differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitLocation.xsx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitLocation.xsx
new file mode 100644
index 00000000..3dd98353
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/TransmitLocation.xsx
@@ -0,0 +1,9 @@
+
+
+
+
+
+ <_x0028_TransactionSupport_x0029__XmlSimpleType left="317" top="5080" width="5292" height="2963" selected="0" zOrder="5" index="0" expanded="1" />
+
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/WSDLGen.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/WSDLGen.cs
new file mode 100644
index 00000000..56d1a440
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/WSDLGen.cs
@@ -0,0 +1,101 @@
+//---------------------------------------------------------------------
+// File: WSDLGen.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Xml;
+using System.IO;
+using System.Reflection;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime
+{
+ public class WSDLGen
+ {
+ private static string WsdlNamespace = "http://schemas.xmlsoap.org/wsdl/";
+
+ public WSDLGen( ) { }
+
+ private static string CreateWSDLFromTemplate( string MessageSchema, string targetNamespace, string RootElementName, string wsdlTemplate )
+ {
+ try
+ {
+ XmlDocument xsdDocument = new XmlDocument( );
+ xsdDocument.LoadXml( MessageSchema );
+
+ // get the WSDL from the resources and set the targetNamespace
+ XmlDocument wsdlDocument = GetWSDL( targetNamespace, wsdlTemplate );
+
+ // add the schema to the WSDL
+ XmlNamespaceManager nsManager = new XmlNamespaceManager( new NameTable( ) );
+ nsManager.AddNamespace( "wsdl", WsdlNamespace );
+
+ XmlNode types = wsdlDocument.SelectSingleNode( "wsdl:definitions/wsdl:types", nsManager );
+ XmlNode schema = wsdlDocument.ImportNode( xsdDocument.DocumentElement, true );
+ types.AppendChild( schema );
+
+ // add other WSDL junk into the WSDL document
+ XmlNode part = wsdlDocument.SelectSingleNode( "wsdl:definitions/wsdl:message/wsdl:part", nsManager );
+ part.Attributes["element"].Value = "ODBC_" + RootElementName;
+
+ // Make sure we change the schema name by modifing the ServiceName element in the WSDL
+ XmlNode Servicepart = wsdlDocument.SelectSingleNode( "wsdl:definitions/wsdl:service", nsManager );
+ Servicepart.Attributes["name"].Value = "ODBC_" + RootElementName;
+
+ return wsdlDocument.OuterXml;
+ }
+ catch
+ {
+ return "";
+ }
+ }
+
+ public static string CreateWSDL( string MessageSchema, string targetNamespace, string RootElementName, bool isRequestMessage )
+ {
+ if (isRequestMessage)
+ {
+ return CreateWSDLFromTemplate(MessageSchema, targetNamespace, RootElementName, "Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime.wsdlODBCSchemaReq.xml");
+ }
+ else
+ {
+ return CreateWSDLFromTemplate(MessageSchema, targetNamespace, RootElementName, "Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime.wsdlODBCSchemaResp.xml");
+ }
+ }
+
+ private static XmlDocument GetWSDL( string targetNamespace, string wsdlTemplateName )
+ {
+ Stream stream = Assembly.GetExecutingAssembly( ).GetManifestResourceStream( wsdlTemplateName );
+ StreamReader reader = null;
+ string wsdlTemplate = null;
+
+ using ( reader = new StreamReader( stream ) )
+ {
+ wsdlTemplate = reader.ReadToEnd( );
+ }
+
+ XmlDocument wsdlDocument = new XmlDocument( );
+ wsdlDocument.LoadXml( wsdlTemplate );
+
+ wsdlDocument.DocumentElement.SetAttribute( "xmlns", targetNamespace );
+ wsdlDocument.DocumentElement.SetAttribute( "targetNamespace", targetNamespace );
+
+ return wsdlDocument;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/wsdlODBCSchemaReq.xml b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/wsdlODBCSchemaReq.xml
new file mode 100644
index 00000000..d44f9572
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/wsdlODBCSchemaReq.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/wsdlODBCSchemaResp.xml b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/wsdlODBCSchemaResp.xml
new file mode 100644
index 00000000..b20f073d
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Design-Time/wsdlODBCSchemaResp.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/AssemblyInfo.cs
new file mode 100644
index 00000000..016e3e7e
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/AssemblyInfo.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCAdapterProperties.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCAdapterProperties.cs
new file mode 100644
index 00000000..c4fc77b1
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCAdapterProperties.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCMsgContext.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCMsgContext.cs
new file mode 100644
index 00000000..62940b56
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCMsgContext.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiveAdapter.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiveAdapter.csproj
new file mode 100644
index 00000000..857dcf01
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiveAdapter.csproj
@@ -0,0 +1,195 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}
+ Debug
+ AnyCPU
+
+
+
+
+ ODBCReceiveAdapter
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ Library
+ Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCReceiveAdapter
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ Microsoft.BizTalk.GlobalPropertySchemas
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.BizTalk.GlobalPropertySchemas.dll
+
+
+ Microsoft.BizTalk.Interop.TransportProxy
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.BizTalk.Interop.TransportProxy.dll
+
+
+ Microsoft.BizTalk.Pipeline
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.BizTalk.Pipeline.dll
+
+
+ Microsoft.XLANGs.BaseTypes
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.XLANGs.BaseTypes.dll
+
+
+ System
+
+
+ System.Data
+
+
+ System.XML
+
+
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}
+ ODBCBaseAdapter
+
+
+ ODBCQueryProcessor
+ {516F27B0-23E4-4704-9A86-A5064769522A}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiver.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiver.cs
new file mode 100644
index 00000000..86632b7e
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiver.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiverEndpoint.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiverEndpoint.cs
new file mode 100644
index 00000000..24735699
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCReceive/ODBCReceiverEndpoint.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/AssemblyInfo.cs
new file mode 100644
index 00000000..016e3e7e
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/AssemblyInfo.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/BTSExplorerHelper.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/BTSExplorerHelper.cs
new file mode 100644
index 00000000..d67c5a09
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/BTSExplorerHelper.cs
@@ -0,0 +1,76 @@
+//---------------------------------------------------------------------
+// File: BTSExplorerHelper.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+
+using Microsoft.Win32;
+
+using Microsoft.BizTalk.ExplorerOM;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCTransmitAdapter
+{
+ ///
+ /// This Class provides helper functions as relates to the the scehmas stored in biztalk assemblies
+ ///
+ public class BtsSchemaHelper
+ {
+ RegistryKey btsAdmin = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\BizTalk Server\3.0\Administration" );
+ string mgmtDBName;
+ string mgmtDBServer;
+ BtsCatalogExplorer ce;
+
+ public BtsSchemaHelper( )
+ {
+ // Initialize ExplorerOM
+ // NB: The ce.ConnectionString call can take several seconds to return, hence it is done
+ // here and can be cached by caller for later use.
+
+ mgmtDBName = ( string )btsAdmin.GetValue( "MgmtDBName" );
+ mgmtDBServer = ( string )btsAdmin.GetValue( "MgmtDBServer" );
+ ce = new BtsCatalogExplorer( );
+ ce.ConnectionString = "Server=" + mgmtDBServer + ";Database=" + mgmtDBName + ";Integrated Security=SSPI";
+ }
+
+ public string GetSchema( string sAssemblyQualifiedName )
+ //Input string containing namespace
+ //Returns matching schema's XML or "" if no matches found
+ {
+ //NOTE: This is a fix to addess formatting inconsitencies between the context object and
+ //the BizTalk Explorer
+ sAssemblyQualifiedName = sAssemblyQualifiedName.Remove( sAssemblyQualifiedName.IndexOf( " ", 1 ), 1 );
+
+ string strResult = string.Empty;
+
+ System.Collections.ICollection schemas = ce.GetCollection( CollectionType.Schema );
+
+ foreach ( IBtsSchema schema in schemas )
+ {
+ if ( schema.AssemblyQualifiedName == sAssemblyQualifiedName )
+ {
+ strResult = schema.XmlContent;
+ break;
+ }
+ }
+ return strResult;
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapterExceptions.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapterExceptions.cs
new file mode 100644
index 00000000..2c3f36e5
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapterExceptions.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapterProperties.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapterProperties.cs
new file mode 100644
index 00000000..6873bd68
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCAdapterProperties.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitAdapter.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitAdapter.csproj
new file mode 100644
index 00000000..f19955a3
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitAdapter.csproj
@@ -0,0 +1,194 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}
+ Debug
+ AnyCPU
+
+
+
+
+ ODBCTransmitAdapter
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ Library
+ Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCTransmitAdapter
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ Microsoft.BizTalk.ExplorerOM
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Developer Tools\Microsoft.BizTalk.ExplorerOM.dll
+
+
+ Microsoft.BizTalk.Interop.TransportProxy
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.BizTalk.Interop.TransportProxy.dll
+
+
+ Microsoft.BizTalk.Pipeline
+ ..\..\..\..\Program Files\Microsoft BizTalk Server 2004\Microsoft.BizTalk.Pipeline.dll
+
+
+ System
+
+
+ System.Data
+
+
+ System.XML
+
+
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}
+ ODBCBaseAdapter
+
+
+ ODBCQueryProcessor
+ {516F27B0-23E4-4704-9A86-A5064769522A}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+ Code
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitAdapterBatch.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitAdapterBatch.cs
new file mode 100644
index 00000000..a4c110e0
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitAdapterBatch.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitter.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitter.cs
new file mode 100644
index 00000000..e6d1d355
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Adapter/Run-Time/ODBCTransmit/ODBCTransmitter.cs differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Adapter.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Adapter.cs
new file mode 100644
index 00000000..1785d8cd
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Adapter.cs
@@ -0,0 +1,134 @@
+//---------------------------------------------------------------------
+// File: Adapter.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: This class is the root object for an adapter, it
+// implements IBTTransport, IBTTransportControl, IPersistPropertyBag
+// which are required for all adapters, though IPersistPropertyBag is
+// optional
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.TransportProxy.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for Adapter.
+ ///
+ public abstract class Adapter :
+ IBTTransport,
+ IBTTransportControl,
+ IPersistPropertyBag
+ {
+ // core member data
+ private string propertyNamespace;
+ private IBTTransportProxy transportProxy;
+ private IPropertyBag handlerPropertyBag;
+ private bool initialized;
+
+ // member data for implementing IBTTransport
+ private string name;
+ private string version;
+ private string description;
+ private string transportType;
+ private Guid clsid;
+
+ protected Adapter (
+ string name,
+ string version,
+ string description,
+ string transportType,
+ Guid clsid,
+ string propertyNamespace)
+ {
+ this.transportProxy = null;
+ this.handlerPropertyBag = null;
+ this.initialized = false;
+
+ this.name = name;
+ this.version = version;
+ this.description = description;
+ this.transportType = transportType;
+ this.clsid = clsid;
+
+ this.propertyNamespace = propertyNamespace;
+ }
+
+ protected string PropertyNamespace { get { return propertyNamespace; } }
+ protected IBTTransportProxy TransportProxy { get { return transportProxy; } }
+ protected IPropertyBag HandlerPropertyBag { get { return handlerPropertyBag; } }
+ protected bool Initialized { get { return initialized; } }
+
+ // IBTTransport
+ public string Name { get { return name; } }
+ public string Version { get { return version; } }
+ public string Description { get { return description; } }
+ public string TransportType { get { return transportType; } }
+ public Guid ClassID { get { return clsid; } }
+
+ // IBTransportControl
+ public virtual void Initialize (IBTTransportProxy transportProxy)
+ {
+ // this is a Singleton and this should only ever be called once
+ if (this.initialized)
+ {
+ Trace.WriteLine("Adapter already initialized!","Base Adapter: Error" );
+ throw new AdapterException(AdapterException.Error_AlreadyInitialized);
+ }
+
+ this.transportProxy = transportProxy;
+ this.initialized = true;
+ }
+ public virtual void Terminate ()
+ {
+ // NOTE: The adapter should not return from Terminate
+ // until it has completed all outstanding work items.
+ // The messaging engine will kill the adapter once it
+ // returns from Terminate
+ if (!this.initialized)
+ {
+ Trace.WriteLine("Adapter not initialized!","Base Adapter: Error" );
+ throw new AdapterException(AdapterException.Error_NotInitialized);
+ }
+
+ this.transportProxy = null;
+ }
+
+ protected virtual void HandlerPropertyBagLoaded ()
+ {
+ // let any derived classes know the property bag has now been loaded
+ }
+
+ // IPersistPropertyBag
+ public void GetClassID (out Guid classid) { classid = this.clsid; }
+ public void InitNew () { }
+ public void Load (IPropertyBag pb, int pErrorLog)
+ {
+ this.handlerPropertyBag = pb;
+ HandlerPropertyBagLoaded();
+ }
+ public void Save (IPropertyBag pb, bool fClearDirty, bool fSaveAllProperties) { }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AdapterException.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AdapterException.cs
new file mode 100644
index 00000000..e0c70537
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AdapterException.cs
@@ -0,0 +1,57 @@
+//---------------------------------------------------------------------
+// File: AdapterException.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Adapter exception class
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Runtime.Serialization;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ public class AdapterException : ApplicationException
+ {
+ // Error messages...
+ public static string Error_AlreadyInitialized = "The Adapter was initialize more than once.";
+ public static string Error_NotInitialized = "Termiante was called on the uninitialized adapter.";
+ public static string Error_EndPointCreation = "Unable to create endpoint location URI:{0}";
+ public static string Error_NoAdapterConfig = "No adapter configuration XML was found on the configuration when one was expected.";
+ public static string Error_NoSuchProperty = "The required property:{0} was not found on adapter configuration XML.";
+ public static string Error_UnInitialized = "The Adapter has not been initialized.";
+ public static string Error_EndPointAlreadyExists = "The endpoint:{0} already exists.";
+ public static string Error_EndPointCreateFailed = "Unable to create the endpoint for location URI:{0}.";
+ public static string Error_EndPointNotExists = "The endpoint {0} does not exist.";
+ public static string Error_ErrorThresholdExceeded = "The error threshold has been exceeded, the receive location:{0} will be shutdown";
+
+ public AdapterException () { }
+
+ public AdapterException (string msg) : base(msg) { }
+
+ public AdapterException (Exception inner) : base(String.Empty, inner) { }
+
+ public AdapterException (string msg, Exception e) : base(msg, e) { }
+
+ protected AdapterException (SerializationInfo info, StreamingContext context) : base(info, context) { }
+ }
+}
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AdapterTransaction.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AdapterTransaction.cs
new file mode 100644
index 00000000..3e3e6c2a
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AdapterTransaction.cs
@@ -0,0 +1,132 @@
+//---------------------------------------------------------------------
+// File: IAdapterTransaction.cs
+//
+// Summary: Utilities for MSMQC adapter.
+//
+//---------------------------------------------------------------------
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Diagnostics;
+using System.EnterpriseServices;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ public interface IAdapterTransaction : IDisposable
+ {
+ void Commit();
+ void Abort();
+ bool IsDTCTransaction { get; }
+ ITransaction Transaction { get; }
+ Microsoft.BizTalk.TransportProxy.Interop.IBTDTCCommitConfirm DTCCommitConfirm { get; set; }
+ }
+
+ public class BYOTTransaction : IAdapterTransaction
+ {
+ public enum TxState { Pending, Aborted, Committed };
+ private TxState currentState = TxState.Pending;
+
+ private ITransaction tx = null;
+ private Microsoft.BizTalk.TransportProxy.Interop.IBTDTCCommitConfirm commitConfirm = null;
+ private static ITransactionDispenser txnDispenser = new ITransactionDispenser();
+ private static IWrapByot byot = new IWrapByot();
+
+ public BYOTTransaction()
+ {
+ // NOTE: The transaction isolation level is set to Serializable due to a W2K issue.
+ // For W2K3 ReadCommitted is suffiecient and will give better performance.
+ this.tx = (ITransaction)txnDispenser.GetTransaction(null, 0, (int)System.Data.IsolationLevel.Serializable);
+ }
+
+ public BYOTTransaction( ITransaction transaction )
+ {
+ this.tx = transaction;
+ }
+
+ public TxState TransactionState
+ {
+ get { return currentState; }
+ }
+
+ public object CreateInstance( System.Guid guid )
+ {
+ // Create instance will create a new serviced component with this transaction
+ return byot.CreateInstance( this.tx, guid );
+ }
+
+ #region IAdapterTransaction Members
+
+ public void Commit()
+ {
+ if ( TxState.Pending == this.currentState )
+ {
+ try
+ {
+ this.tx.Commit( 0, 1, 0 );
+ this.currentState = TxState.Committed;
+ this.commitConfirm.DTCCommitConfirm( this.tx, true );
+ }
+ catch( Exception e )
+ {
+ EventLog.WriteEntry( "MSMQC", "Commit failed. Exception:\n " + e.Message, EventLogEntryType.Error );
+ this.currentState = TxState.Aborted;
+ this.commitConfirm.DTCCommitConfirm( this.tx, false );
+ }
+ }
+ }
+
+ public void Abort()
+ {
+ if ( TxState.Pending == this.currentState )
+ {
+ try
+ {
+ BOID boid = new BOID();
+ boid.rgb = null;
+ this.tx.Abort( ref boid, 0, 0 );
+ }
+ finally
+ {
+ lock( this )
+ {
+ if ( null != this.commitConfirm )
+ {
+ this.commitConfirm.DTCCommitConfirm( this.tx, false );
+ }
+ }
+ }
+
+ this.currentState = TxState.Aborted;
+ }
+ }
+
+ public bool IsDTCTransaction
+ {
+ get { return true; }
+ }
+
+ public ITransaction Transaction
+ {
+ get { return this.tx; }
+ }
+
+ public Microsoft.BizTalk.TransportProxy.Interop.IBTDTCCommitConfirm DTCCommitConfirm
+ {
+ get { return this.commitConfirm; }
+ set { this.commitConfirm = value; }
+ }
+
+ #endregion
+
+ public void Dispose()
+ {
+ this.tx = null;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncBatchedTransmitter.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncBatchedTransmitter.cs
new file mode 100644
index 00000000..8f73f3e5
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncBatchedTransmitter.cs
@@ -0,0 +1,125 @@
+//---------------------------------------------------------------------
+// File: AsyncBatchedTransmitter.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Base implementation for a batched aware send adapter, the
+// messages are sent a-sync, meaning that they will be sent on the
+// adapters thread and not on the engines thread. This is the recomended
+// approach for performance reasons
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.TransportProxy.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for Transmitter.
+ ///
+ public class AsyncBatchedTransmitter :
+ Adapter,
+ IBTBatchTransmitter
+ {
+ private Type batchType;
+ protected IThreadPool threadPool;
+
+ private ControlledTermination control;
+
+ protected AsyncBatchedTransmitter (
+ string name,
+ string version,
+ string description,
+ string transportType,
+ Guid clsid,
+ string propertyNamespace,
+ Type batchType)
+ : base(
+ name,
+ version,
+ description,
+ transportType,
+ clsid,
+ propertyNamespace)
+ {
+ this.batchType = batchType;
+ this.control = new ControlledTermination();
+ InitializeThreadPool();
+ }
+
+ protected virtual int MaxBatchSize
+ {
+ get { return 1; }
+ }
+
+ public IThreadPool ThreadPool
+ {
+ get { return threadPool; }
+ }
+
+ // IBTBatchTransmitter
+ public IBTTransmitterBatch GetBatch ()
+ {
+ Trace.WriteLine("AsyncBatchedTransmitter.GetBatch() called","Base Adapter: Info" );
+
+ object[] args = new object[4];
+ args[0] = this.MaxBatchSize;
+ args[1] = this.PropertyNamespace;
+ args[2] = this.TransportProxy;
+ args[3] = this;
+
+ IBTTransmitterBatch batch = (IBTTransmitterBatch)Activator.CreateInstance(this.batchType, args);
+
+ return batch;
+ }
+
+ public override void Terminate ()
+ {
+ Trace.WriteLine("AsyncBatchedTransmitter.Terminate() called","Base Adapter: Info" );
+
+ // Block until we are done...
+ this.control.Terminate();
+ base.Terminate();
+
+ if ( null != threadPool )
+ threadPool.Stop();
+
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+ }
+
+ public bool Enter ()
+ {
+ return this.control.Enter();
+ }
+
+ public void Leave ()
+ {
+ this.control.Leave();
+ }
+
+ public virtual void InitializeThreadPool()
+ {
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncTransmitter.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncTransmitter.cs
new file mode 100644
index 00000000..edc5bfe1
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncTransmitter.cs
@@ -0,0 +1,104 @@
+//---------------------------------------------------------------------
+// File: AsyncTransmitter.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Base implementation for a non-batch aware send adapter, the
+// messages are sent a-sync, meaning that they will be sent on the
+// adapters thread and not on the engines thread. This is the recomended
+// approach for performance reasons
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.Message.Interop;
+using Microsoft.BizTalk.TransportProxy.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for Transmitter.
+ ///
+ public abstract class AsyncTransmitter : Adapter, IBTTransmitter
+ {
+ protected IThreadPool threadPool;
+ private ControlledTermination control;
+
+ protected AsyncTransmitter
+ ( string name, string version, string description, string transportType,
+ Guid clsid, string propertyNamespace )
+ : base( name, version, description, transportType, clsid, propertyNamespace )
+ {
+ this.control = new ControlledTermination();
+ InitializeThreadPool();
+ }
+
+ public IThreadPool ThreadPool
+ {
+ get { return threadPool; }
+ }
+
+ public abstract void EnQueueWorkItem(IBaseMessage msg);
+ public abstract void InitializeThreadPool();
+
+ // IBTTransmitter
+ public bool TransmitMessage(IBaseMessage msg)
+ {
+ Trace.WriteLine("AsyncTransmitter.TransmitMessage() called","Base Adapter: Info" );
+
+ EnQueueWorkItem(msg);
+
+ // Note: returning false indicates to the messaging engine
+ // that the adapter is taking responsibility for deleting the
+ // message once sent as well as handling any failures while
+ // transmitting. This is refered to as sending the message
+ // asynchronously since we are not using the messaging engines
+ // thread.
+ return false;
+ }
+
+ public override void Terminate ()
+ {
+ Trace.WriteLine("AsyncTransmitter.Terminate() called","Base Adapter: Info" );
+
+ // Block until we are done...
+ this.control.Terminate();
+ base.Terminate();
+
+ if ( null != threadPool )
+ threadPool.Stop();
+
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+ }
+
+ public bool Enter ()
+ {
+ return this.control.Enter();
+ }
+
+ public void Leave ()
+ {
+ this.control.Leave();
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncTransmitterBatch.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncTransmitterBatch.cs
new file mode 100644
index 00000000..5b74eeed
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/AsyncTransmitterBatch.cs
@@ -0,0 +1,122 @@
+//---------------------------------------------------------------------
+// File: AsyncTransmitterBatch.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Base implementation for a batch to be used by a batch
+// aware send adapter
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Xml;
+using System.Diagnostics;
+using Microsoft.BizTalk.TransportProxy.Interop;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// AsyncTransmitterBatch batch
+ ///
+ ///
+ public class AsyncTransmitterBatch : IThreadpoolWorkItem, IBTTransmitterBatch
+ {
+ private int maxBatchSize;
+ private string propertyNamespace;
+ protected IBTTransportProxy transportProxy;
+ protected AsyncBatchedTransmitter asyncTransmitter;
+ private ArrayList messages;
+ protected ConfigProperties.CreateProperties createProperties;
+
+ public ArrayList Messages
+ {
+ get { return messages; }
+ }
+
+ public AsyncTransmitterBatch (int maxBatchSize, string propertyNamespace, IBTTransportProxy transportProxy, AsyncBatchedTransmitter asyncTransmitter)
+ {
+ this.maxBatchSize = maxBatchSize;
+ this.propertyNamespace = propertyNamespace;
+ this.transportProxy = transportProxy;
+ this.asyncTransmitter = asyncTransmitter;
+ this.createProperties = createProperties;
+ this.messages = new ArrayList();
+ }
+
+ // IBTTransmitterBatch
+ public object BeginBatch (out int maxBatchSize)
+ {
+ Trace.WriteLine(string.Format("AsyncTransmitter.BeginBatch( maxBatchSize:{0} ) called", this.maxBatchSize),"Base Adapter: Info" );
+
+ maxBatchSize = this.maxBatchSize;
+ return null;
+ }
+
+ // Just build a list of messages for this batch - return false means we are asynchronous
+ public bool TransmitMessage (IBaseMessage message)
+ {
+ Trace.WriteLine("AsyncTransmitter.TransmitMessage() called", "Base Adapter: Info" );
+
+ TransmitterMessage msg = new TransmitterMessage(message, propertyNamespace, createProperties);
+ this.messages.Add(msg);
+ return false;
+ }
+
+ public void Clear ()
+ {
+ Trace.WriteLine("AsyncTransmitter.Clear() called", "Base Adapter: Info" );
+
+ this.messages.Clear();
+ }
+
+ public void Done (IBTDTCCommitConfirm commitConfirm)
+ {
+ Trace.WriteLine("AsyncTransmitter.Done() called", "Base Adapter: Info" );
+
+ // this call blocks an EPM Terminate call while we still have work to complete
+ this.asyncTransmitter.Enter();
+
+ asyncTransmitter.ThreadPool.AddItem(this);
+ }
+
+ public bool HandleFailedBatch()
+ {
+ // If this batch faield we need to resubmit for future transmission. Note,
+ // the StandardTransmitBatchHandler will do the right thing if there are not
+ // enough retries, no backup transports etc
+ StandardTransmitBatchHandler btsBatch = new StandardTransmitBatchHandler( transportProxy, null );
+
+ foreach( TransmitterMessage msg in Messages )
+ {
+ btsBatch.Resubmit( msg.Message, null );
+ }
+
+ BatchResult br = btsBatch.Done( null );
+ return br.BatchSucceeded;
+ }
+
+ public virtual void ProcessWorkItem ()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BTSTicket.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BTSTicket.cs
new file mode 100644
index 00000000..2dc7f925
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BTSTicket.cs
@@ -0,0 +1,59 @@
+//---------------------------------------------------------------------
+// File: BTSTicket.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ // only include those flags that apply to these interfaces
+ // see ssoflags.idl
+
+ internal enum BTSTicketFlags
+ {
+ SSO_FLAG_NONE = 0x00000000,
+ SSO_FLAG_REFRESH = 0x00000001,
+ };
+
+ [ComImport]
+ [TypeLibType(TypeLibTypeFlags.FCanCreate)]
+ [ClassInterface(ClassInterfaceType.None)]
+ [Guid("8DA848D0-E703-4043-9AF7-C569AC1F4507")]
+ internal class BTSTicket
+ {
+ }
+
+ [ComImport]
+ [InterfaceType(ComInterfaceType.InterfaceIsDual)]
+ [Guid("54596C7F-D343-4F20-BF7A-0722C5DA1F7D")]
+ [CoClass(typeof(BTSTicket))]
+ internal interface IBTSTicket
+ {
+ string[] ValidateAndRedeemTicket(
+ [In, MarshalAs(UnmanagedType.IUnknown)] object message,
+ string applicationName,
+ int flags,
+ out string externalUserName);
+ };
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchAsyncResult.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchAsyncResult.cs
new file mode 100644
index 00000000..1a70b294
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchAsyncResult.cs
@@ -0,0 +1,86 @@
+//---------------------------------------------------------------------
+// File: BatchAsyncResult.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Implementation of IAsyncResult to be used in the batch
+// handler classes
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Threading;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for BatchAsyncResult.
+ ///
+ public class BatchAsyncResult : IAsyncResult
+ {
+ private bool isCompleted = false;
+ private AutoResetEvent waitHandle = new AutoResetEvent(false);
+ private object state = null;
+ private BatchResult batchResult = null;
+
+ public BatchAsyncResult(object state)
+ {
+ this.state = state;
+ }
+
+ public BatchResult BatchStatus
+ {
+ get { return this.batchResult; }
+ set { this.batchResult = value; }
+ }
+
+ #region IAsyncResult
+
+ // IAsyncResult.IsCompleted
+ public bool IsCompleted
+ {
+ get { return this.isCompleted; }
+ }
+
+ // IAsyncResult.AsyncWaitHandle
+ public WaitHandle AsyncWaitHandle
+ {
+ get
+ {
+ return this.waitHandle;
+ }
+ }
+
+ // IAsyncResult.AsyncState
+ public Object AsyncState
+ {
+ get { return this.state; }
+ }
+
+ // IAsyncResult.CompletedSynchronously
+ public bool CompletedSynchronously
+ {
+ get { return false; }
+ }
+
+ #endregion // IAsyncResult
+
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchResult.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchResult.cs
new file mode 100644
index 00000000..b5bd092f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchResult.cs
@@ -0,0 +1,92 @@
+//---------------------------------------------------------------------
+// File: BatchResult.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Implementation of IAsyncResult to be used in the batch
+// handler classes
+//
+// Description: This class holds the outcome of a batch of work submitted
+// to a bacth handler class
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+using System.Runtime.InteropServices;
+using Microsoft.BizTalk.TransportProxy.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for BatchResult.
+ ///
+ public class BatchResult
+ {
+ private ArrayList successArray = new ArrayList();
+ private ArrayList failedArray = new ArrayList();
+ private bool batchSucceeded = false;
+ private IBTDTCCommitConfirm dtcCommitConfirm = null;
+ private BYOTTransaction transaction = null;
+
+ public BatchResult(bool batchSucceeded, IBTDTCCommitConfirm dtcCommitConfirm, BYOTTransaction transaction, ArrayList successArray, ArrayList failedArray)
+ {
+ this.successArray = successArray;
+ this.dtcCommitConfirm = dtcCommitConfirm;
+ this.transaction = transaction;
+ this.failedArray = failedArray;
+ this.batchSucceeded = batchSucceeded;
+ }
+
+ public bool BatchSucceeded
+ {
+ get
+ {
+ if ( null == this.transaction )
+ return this.batchSucceeded;
+ else
+ {
+ // If we were doing transactions, we were only successful if we committed the transaction...
+ if ( this.batchSucceeded && BYOTTransaction.TxState.Committed == this.transaction.TransactionState )
+ return this.batchSucceeded;
+ else
+ return false;
+ }
+ }
+ }
+
+ public IBTDTCCommitConfirm DTCCommitConfirm
+ {
+ get { return this.dtcCommitConfirm; }
+ }
+
+ public ArrayList SuccessBatchMsgArray
+ {
+ get { return this.successArray; }
+ }
+
+ public ArrayList FailedBatchMsgArray
+ {
+ get { return this.failedArray; }
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchState.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchState.cs
new file mode 100644
index 00000000..8fd24f96
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/BatchState.cs
@@ -0,0 +1,104 @@
+//---------------------------------------------------------------------
+// File: BatchState.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ public class BatchState
+ {
+ private ArrayList submit;
+ private ArrayList delete;
+ private ArrayList resubmit;
+ private ArrayList moveToSuspendQ;
+ private ArrayList moveToNextTransport;
+ private ArrayList submitRequest;
+ private ArrayList cancelRequestForResponse;
+
+ public ArrayList Submit
+ {
+ get
+ {
+ if (null == submit)
+ submit = new ArrayList();
+ return submit;
+ }
+ }
+ public ArrayList Delete
+ {
+ get
+ {
+ if (null == delete)
+ delete = new ArrayList();
+ return delete;
+ }
+ }
+ public ArrayList Resubmit
+ {
+ get
+ {
+ if (null == resubmit)
+ resubmit = new ArrayList();
+ return resubmit;
+ }
+ }
+ public ArrayList MoveToSuspendQ
+ {
+ get
+ {
+ if (null == moveToSuspendQ)
+ moveToSuspendQ = new ArrayList();
+ return moveToSuspendQ;
+ }
+ }
+ public ArrayList MoveToNextTransport
+ {
+ get
+ {
+ if (null == moveToNextTransport)
+ moveToNextTransport = new ArrayList();
+ return moveToNextTransport;
+ }
+ }
+ public ArrayList SubmitRequest
+ {
+ get
+ {
+ if (null == submitRequest)
+ submitRequest = new ArrayList();
+ return submitRequest;
+ }
+ }
+ public ArrayList CancelRequestForResponse
+ {
+ get
+ {
+ if (null == cancelRequestForResponse)
+ cancelRequestForResponse = new ArrayList();
+ return cancelRequestForResponse;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ConfigProperties.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ConfigProperties.cs
new file mode 100644
index 00000000..8b7a39db
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ConfigProperties.cs
@@ -0,0 +1,178 @@
+//---------------------------------------------------------------------
+// File: ConfigProperties.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Base implementation for an adapters configuration properties
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Xml;
+using System.Text;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for EndPoint.
+ ///
+ public class ConfigProperties
+ {
+ private string uri;
+ public delegate ConfigProperties CreateProperties(string uri);
+
+ public ConfigProperties(IBaseMessage msg)
+ {
+ SystemMessageContext smc = new SystemMessageContext(msg.Context);
+ this.uri = smc.InboundTransportLocation;
+ }
+
+ public ConfigProperties(string uri)
+ {
+ this.uri = uri;
+ }
+
+ public virtual void LocationConfiguration (XmlDocument configDOM)
+ {
+ }
+
+ public virtual void UpdateUriForDynamicSend()
+ {
+ }
+
+ public string Uri
+ {
+ set { this.uri = value; }
+ get { return this.uri; }
+ }
+
+
+ // Various useful helper functions
+ public static XmlDocument ExtractConfigDomImpl (IPropertyBag pConfig, bool required)
+ {
+ object obj = null;
+ pConfig.Read("AdapterConfig", out obj, 0);
+ if (!required && null == obj)
+ return null;
+ if (null == obj)
+ throw new AdapterException(AdapterException.Error_NoAdapterConfig);
+
+ XmlDocument configDom = new XmlDocument();
+
+ string adapterConfig = (string)obj;
+ configDom.LoadXml(adapterConfig);
+
+ return configDom;
+ }
+
+ public static XmlDocument ExtractConfigDom (IPropertyBag pConfig)
+ {
+ return ExtractConfigDomImpl(pConfig, true);
+ }
+
+ public static XmlDocument IfExistsExtractConfigDom (IPropertyBag pConfig)
+ {
+ return ExtractConfigDomImpl(pConfig, false);
+ }
+
+ public static string ExtractImpl (XmlDocument document, string path, bool required)
+ {
+ XmlNode node = document.SelectSingleNode(path);
+ if (!required && null == node)
+ return String.Empty;
+ if (null == node)
+ throw new AdapterException(string.Format(AdapterException.Error_NoSuchProperty,path));
+ return node.InnerText;
+ }
+
+ public static string Extract (XmlDocument document, string path)
+ {
+ return ExtractImpl(document, path, true);
+ }
+
+ public static string IfExistsExtract (XmlDocument document, string path)
+ {
+ return ExtractImpl(document, path, false);
+ }
+
+ public static int ExtractInt (XmlDocument document, string path)
+ {
+ string s = Extract(document, path);
+ return int.Parse(s);
+ }
+
+ public static int IfExistsExtractInt (XmlDocument document, string path)
+ {
+ string s = IfExistsExtract(document, path);
+ if (0 == s.Length)
+ return 0;
+ return int.Parse(s);
+ }
+
+ public static long ExtractLong (XmlDocument document, string path)
+ {
+ string s = Extract(document, path);
+ return long.Parse(s);
+ }
+
+ public static long IfExistsExtractLong (XmlDocument document, string path)
+ {
+ string s = IfExistsExtract(document, path);
+ if (0 == s.Length)
+ return 0;
+ return long.Parse(s);
+ }
+
+ public static bool ExtractBool (XmlDocument document, string path)
+ {
+ string s = Extract(document, path);
+ return bool.Parse(s);
+ }
+
+ public static bool IfExistsExtractBool (XmlDocument document, string path)
+ {
+ string s = IfExistsExtract(document, path);
+ if (0 == s.Length)
+ return false;
+ return bool.Parse(s);
+ }
+
+ public static string CreateFileName (IBaseMessage message, string uri)
+ {
+ string uriNew = ReplaceMessageID(message, uri);
+
+ return uriNew;
+ }
+
+ private static string ReplaceMessageID (IBaseMessage message, string uri)
+ {
+ Guid msgId = message.MessageID;
+
+ string res = uri.Replace("%MessageID%", msgId.ToString());
+ if ( res != null )
+ return res;
+ else
+ return uri;
+ }
+ }
+}
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ControlledTermination.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ControlledTermination.cs
new file mode 100644
index 00000000..b108e426
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ControlledTermination.cs
@@ -0,0 +1,113 @@
+//---------------------------------------------------------------------
+// File: ControlledTermination.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: This class is used to keep count of work in flight, an
+// adapter should not return from terminate if it has work outstanding
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Threading;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ public class ControlledTermination
+ {
+ private AutoResetEvent e = new AutoResetEvent(true);
+ private int activityCount = 0;
+ private bool terminate = false;
+
+ // to be called at the start of the activity
+ // returns false if terminate has been called
+ public bool Enter ()
+ {
+ Trace.WriteLine("ControlledTermination.Enter() called", "Base Adapter: Info" );
+
+ try
+ {
+ lock (this)
+ {
+ if (true == this.terminate)
+ return false;
+ }
+ this.e.Reset();
+ lock (this)
+ {
+ this.activityCount++;
+ }
+ return true;
+ }
+ finally
+ {
+ Trace.WriteLine("ControlledTermination.Enter() leaving", "Base Adapter: Info" );
+ }
+ }
+
+ // to be called at the end of the activity
+ public void Leave ()
+ {
+ Trace.WriteLine("ControlledTermination.Leave() called", "Base Adapter: Info" );
+
+ lock (this)
+ {
+ this.activityCount--;
+
+ if (this.activityCount == 0)
+ this.e.Set();
+ }
+
+ Trace.WriteLine("ControlledTermination.Leave() leaving", "Base Adapter: Info" );
+ }
+
+ // this method blocks waiting for any activity to complete
+ public void Terminate ()
+ {
+ Trace.WriteLine("ControlledTermination.Terminate() called", "Base Adapter: Info" );
+
+ bool result;
+
+ lock (this)
+ {
+ this.terminate = true;
+ result = (this.activityCount == 0);
+ }
+ if (!result)
+ {
+ this.e.WaitOne();
+ }
+
+ Trace.WriteLine("ControlledTermination.Terminate() leaving", "Base Adapter: Info" );
+ }
+
+ public bool TerminateCalled
+ {
+ get
+ {
+ lock (this)
+ {
+ return this.terminate;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/IManageEndpoints.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/IManageEndpoints.cs
new file mode 100644
index 00000000..547fb787
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/IManageEndpoints.cs
@@ -0,0 +1,39 @@
+//---------------------------------------------------------------------
+// File: IManageEndpoints.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+
+ public interface IManageEndpoints
+ {
+ void Remove (string uri);
+
+ bool Enter ();
+ void Leave ();
+ bool TerminateCalled { get; }
+ }
+
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/IThreadpoolWorkItem.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/IThreadpoolWorkItem.cs
new file mode 100644
index 00000000..b6b4f262
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/IThreadpoolWorkItem.cs
@@ -0,0 +1,38 @@
+//---------------------------------------------------------------------
+// File: IThreadpoolWorkItem.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+
+ public delegate void EnQueueAdapterWorkItem(IBaseMessage msg);
+
+ public interface IThreadpoolWorkItem
+ {
+ void ProcessWorkItem ();
+ }
+
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/NativeCalls.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/NativeCalls.cs
new file mode 100644
index 00000000..18664f64
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/NativeCalls.cs
@@ -0,0 +1,113 @@
+//---------------------------------------------------------------------
+// File: NativeCalls.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Native call wrappers
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+using System.Text;
+using System.Runtime.InteropServices;
+using SD = System.Diagnostics;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ //
+ // Wrapper for a couple of native calls.
+ //
+ public class NativeCalls
+ {
+
+ [DllImport("kernel32.dll",EntryPoint="GetCurrentProcess")]
+ private static extern IntPtr GetCurrentProcess_Native();
+
+ public static IntPtr GetCurrentProcess()
+ {
+ return GetCurrentProcess_Native();
+ }
+
+ [DllImport("kernel32.dll",EntryPoint="GetProcessAffinityMask")]
+ private static extern bool GetProcessAffinityMask_Native
+ (
+ IntPtr hProcess,
+ out uint procMask,
+ out uint systemMask
+ );
+
+ [DllImport("kernel32.dll")]
+ internal static extern UInt32 GetTempFileName
+ (
+ string path,
+ string prefix,
+ UInt32 unique,
+ StringBuilder name
+ );
+
+ [DllImport("kernel32.dll")]
+ internal static extern IntPtr CreateFile
+ (
+ string name,
+ UInt32 accessMode,
+ UInt32 shareMode,
+ IntPtr security,
+ UInt32 createMode,
+ UInt32 flags,
+ IntPtr template
+ );
+
+ public static bool GetProcessAffinityMask
+ (
+ IntPtr hProcess,
+ out uint procMask,
+ out uint systemMask
+ )
+ {
+ return GetProcessAffinityMask_Native
+ (
+ hProcess,
+ out procMask,
+ out systemMask
+ );
+ }
+
+ public static int GetNumberOfProcessors()
+ {
+ uint procMask, systemMask;
+
+ IntPtr hProc = GetCurrentProcess();
+ if (!GetProcessAffinityMask( hProc, out procMask, out systemMask))
+ throw new Exception("GetProcessAffinityMask");
+
+ int procs = 0;
+ while (procMask != 0)
+ {
+ if ((1 & procMask) != 0)
+ procs++;
+ procMask >>= 1;
+ }
+ return procs;
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ODBCBaseAdapter.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ODBCBaseAdapter.csproj
new file mode 100644
index 00000000..3c67b7cf
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ODBCBaseAdapter.csproj
@@ -0,0 +1,119 @@
+
+
+
+ Debug
+ AnyCPU
+ 8.0.30703
+ 2.0
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}
+ Library
+ Properties
+ ODBCBaseAdapter
+ ODBCBaseAdapter
+ v4.0
+ 512
+
+
+
+
+
+
+
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+
+
+ ODBCAdapter.snk
+
+
+
+ False
+ ..\..\..\..\..\..\Program Files (x86)\Microsoft BizTalk Server 2010\Microsoft.BizTalk.GlobalPropertySchemas.dll
+
+
+ False
+ ..\..\..\..\..\..\Program Files (x86)\Microsoft BizTalk Server 2010\Microsoft.BizTalk.Interop.TransportProxy.dll
+
+
+ False
+ ..\..\..\..\..\..\Program Files (x86)\Microsoft BizTalk Server 2010\Microsoft.BizTalk.Pipeline.dll
+
+
+ False
+ ..\..\..\..\..\..\Program Files (x86)\Microsoft BizTalk Server 2010\Microsoft.XLANGs.BaseTypes.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Properties/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..69bb12d8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("BasaeAdapter")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("BasaeAdapter")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("83333f6f-0c68-4630-9675-1cf1ea6e84c4")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Receiver.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Receiver.cs
new file mode 100644
index 00000000..0d51aaed
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/Receiver.cs
@@ -0,0 +1,185 @@
+//---------------------------------------------------------------------
+// File: Receiver.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Base implementation for a receive adapter
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Collections;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.TransportProxy.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Abstract base class for receiver adapters. Provides stock implementations of
+ /// core interfaces needed to comply with receiver adapter contract.
+ /// (1) This class is actually a Singleton. That is there will only ever be one
+ /// instance of it created however many locations of this type are actually defined.
+ /// (2) Individual locations are identified by a URI, the derived class must provide
+ /// the Type name and this class acts as a Factory using the .NET Activator
+ /// (3) It is legal to have messages from different locations submitted in a single
+ /// batch and this may be an important optimization. And this is fundamentally why
+ /// the Receiver is a singleton.
+ ///
+ public abstract class Receiver : Adapter, IBTTransportConfig, IManageEndpoints
+ {
+ // core member data
+ private Hashtable endpoints;
+ private Type endpointType;
+
+ private ControlledTermination control;
+
+ protected Receiver (
+ string name,
+ string version,
+ string description,
+ string transportType,
+ Guid clsid,
+ string propertyNamespace,
+ Type endpointType)
+ : base(
+ name,
+ version,
+ description,
+ transportType,
+ clsid,
+ propertyNamespace)
+ {
+ this.endpointType = endpointType;
+ this.control = new ControlledTermination();
+ }
+
+ // IBTTransportConfig
+ public void AddReceiveEndpoint (string bstrURL, IPropertyBag pConfig, IPropertyBag pBizTalkConfig)
+ {
+ Trace.WriteLine(string.Format("Receiver.AddReceiveEndpoint( bstrURL:{0} ) called", bstrURL), "Base Adapter: Info" );
+
+ try
+ {
+ if (!this.Initialized)
+ throw new AdapterException(AdapterException.Error_UnInitialized);
+
+ if (this.endpoints.Contains(bstrURL))
+ throw new AdapterException(string.Format(AdapterException.Error_EndPointAlreadyExists,bstrURL));
+
+ ReceiverEndpoint endpoint = (ReceiverEndpoint)Activator.CreateInstance(this.endpointType);
+
+ if (null == endpoint)
+ throw new AdapterException(string.Format(AdapterException.Error_EndPointCreateFailed, bstrURL));
+
+ endpoint.Initialize(bstrURL, pConfig, pBizTalkConfig, this.HandlerPropertyBag, this.TransportProxy, this.TransportType, this.PropertyNamespace, (IManageEndpoints)this);
+
+ this.endpoints[bstrURL] = endpoint;
+ }
+ catch (AdapterException exception)
+ {
+ Trace.WriteLine(string.Format("Exception caught in ControlledTermination.AddReceiveEndpoint(): {0}", exception), "Base Adapter: Error" );
+
+ this.TransportProxy.SetErrorInfo(exception);
+ throw exception;
+ }
+ }
+
+ public void UpdateEndpointConfig (string bstrURL, IPropertyBag pConfig, IPropertyBag pBizTalkConfig)
+ {
+ Trace.WriteLine(string.Format("Receiver.UpdateEndpointConfig( bstrURL:{0} ) called", bstrURL), "Base Adapter: Info" );
+
+ if (!this.Initialized)
+ throw new AdapterException(AdapterException.Error_UnInitialized);
+
+ ReceiverEndpoint endpoint = (ReceiverEndpoint)this.endpoints[bstrURL];
+
+ if (null == endpoint)
+ throw new AdapterException(string.Format(AdapterException.Error_EndPointNotExists,bstrURL));
+
+ // delegate the update call to the endpoint instance itself
+ endpoint.Update(pConfig, pBizTalkConfig, this.HandlerPropertyBag);
+ }
+
+ public void RemoveReceiveEndpoint (string bstrURL)
+ {
+ Trace.WriteLine(string.Format("Receiver.RemoveReceiveEndpoint( bstrURL:{0} ) called", bstrURL), "Base Adapter: Info" );
+
+ if (!this.Initialized)
+ throw new AdapterException(AdapterException.Error_UnInitialized);
+
+ ReceiverEndpoint endpoint = (ReceiverEndpoint)this.endpoints[bstrURL];
+
+ if (null == endpoint)
+ return;
+
+ this.Remove(bstrURL);
+ endpoint.Remove();
+ }
+
+ // IBTransportControl
+ public override void Initialize (IBTTransportProxy transportProxy)
+ {
+ Trace.WriteLine("Receiver.Initialize() called", "Base Adapter: Info" );
+
+ base.Initialize(transportProxy);
+ this.endpoints = new Hashtable();
+ }
+
+ public override void Terminate ()
+ {
+ Trace.WriteLine("Receiver.Terminate() called", "Base Adapter: Info" );
+
+ // Block until we are done...
+ this.control.Terminate();
+
+ base.Terminate();
+ foreach (ReceiverEndpoint endpoint in this.endpoints.Values)
+ endpoint.Remove();
+
+ this.endpoints.Clear();
+ this.endpoints = null;
+
+ GC.Collect();
+ GC.WaitForPendingFinalizers();
+ }
+
+ // IManageEndpoints
+ public void Remove (string uri)
+ {
+ this.endpoints.Remove(uri);
+ }
+
+ public bool Enter ()
+ {
+ return this.control.Enter();
+ }
+
+ public void Leave ()
+ {
+ this.control.Leave();
+ }
+
+ public bool TerminateCalled
+ {
+ get { return this.control.TerminateCalled; }
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ReceiverEndpoint.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ReceiverEndpoint.cs
new file mode 100644
index 00000000..225df51f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ReceiverEndpoint.cs
@@ -0,0 +1,42 @@
+//---------------------------------------------------------------------
+// File: ReceiverEndpoint.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Abstractio class for a receiver's endpoint
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.BizTalk.TransportProxy.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Base class for end point configurations - a home for contains various helper functions.
+ ///
+ public abstract class ReceiverEndpoint
+ {
+ public abstract void Initialize (string uri, IPropertyBag config, IPropertyBag bizTalkConfig, IPropertyBag handlerPropertyBag, IBTTransportProxy transportProxy, string transportType, string propertyNamespace, IManageEndpoints manageEndpoints);
+ public abstract void Update (IPropertyBag config, IPropertyBag bizTalkConfig, IPropertyBag handlerPropertyBag);
+ public virtual void Remove () { }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/SSOResult.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/SSOResult.cs
new file mode 100644
index 00000000..b74e39b1
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/SSOResult.cs
@@ -0,0 +1,68 @@
+//---------------------------------------------------------------------
+// File: SSOResult.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// SSOResult
+ ///
+ ///
+ public class SSOResult
+ {
+ private string userName;
+ private string[] result;
+
+ public SSOResult (IBaseMessage message, string affiliateApplication)
+ {
+ // SSO Results
+ string userName = null;
+ string[] result = null;
+
+ // Ask SSO to redeem the ticket
+ // Redeem the sso ticket in the context with the affiliate application name
+ IBTSTicket ticket = new IBTSTicket();
+ // Validate and redeem the ticket
+ result = ticket.ValidateAndRedeemTicket(
+ message,
+ affiliateApplication,
+ 0,
+ out userName);
+
+ this.userName = userName;
+ this.result = result;
+ }
+
+ public string UserName
+ {
+ get { return userName; }
+ }
+ public string[] Result
+ {
+ get { return result; }
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardReceiveBatchHandler.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardReceiveBatchHandler.cs
new file mode 100644
index 00000000..a60e6742
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardReceiveBatchHandler.cs
@@ -0,0 +1,316 @@
+//---------------------------------------------------------------------
+// File: StandardReceiveBatchHandler.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Batch helper class to to be used by a receive adapter,
+// handles batch errors in the standard mannor
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using Microsoft.BizTalk.TransportProxy.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// This class handles the failure modes of a receivers batch, it performes the
+ /// recomended recovery policy for all the possible types of failures for a
+ /// receive batch.
+ /// In summary our policy is:
+ /// (1) on a submit failure we move the message to the suspend queue
+ /// (2) on suspend failure we there is nothing we can do, so we pass the
+ /// error back to the client
+ /// (3) register delegates to handle various events
+ /// Otherwise:
+ ///
+ public class StandardReceiveBatchHandler
+ {
+ protected StandardReceiveBatch batch = null;
+ protected IBTTransportProxy transportProxy = null;
+ protected ArrayList successfulMsgArray = new ArrayList();
+ protected ArrayList failedMsgArray = new ArrayList();
+ protected BYOTTransaction transaction = null;
+ protected bool suspendOnError = true;
+ protected bool blockOnDone = false;
+ protected AutoResetEvent doneEvent = new AutoResetEvent(false);
+ protected uint numberIterations = 3;
+ protected bool batchSucceeded = false;
+ protected BatchAsyncResult asyncResult = null;
+ protected AsyncCallback asyncCb = null;
+ protected IBTDTCCommitConfirm dtcCommitConfirm = null;
+ protected bool autoCommitTx = false;
+
+ // Adapter client code may register the following types of delegates
+ // to take action on these events...
+ #region Client Delegates
+
+ private AboutToSuspendMessageEvent aboutToSuspendMsgCallBack;
+ private MessageSubmittedSuccessfullyEvent messageSubmittedSuccessfullyEvent;
+
+ public delegate void AboutToSuspendMessageEvent (IBaseMessage message, object userData, out IBaseMessage msgToSuspend);
+ public delegate void MessageSubmittedSuccessfullyEvent (IBaseMessage message, Int32 hrStatus, object userData);
+ public delegate void BatchCompleteEvent(ArrayList successfulMsgArray, ArrayList failedMsgArray);
+
+ public MessageSubmittedSuccessfullyEvent MessageSubmittedSuccessfullyCallBack
+ {
+ set { this.messageSubmittedSuccessfullyEvent = value; }
+ }
+
+ public AboutToSuspendMessageEvent AboutToSuspendMessageEventCallBack
+ {
+ set
+ {
+ this.aboutToSuspendMsgCallBack = value;
+ this.batch.AboutToSuspendMessageEventCallBack = this.aboutToSuspendMsgCallBack;
+ }
+ }
+
+ #endregion // Client Delegates
+
+ public StandardReceiveBatchHandler(IBTTransportProxy transportProxy, AboutToSuspendMessageEvent aboutToSuspendMessageCallback)
+ {
+ this.transportProxy = transportProxy;
+ this.batch = new StandardReceiveBatch(this.transportProxy, new StandardReceiveBatch.BatchCompleteEvent(BatchComplete), this.suspendOnError);
+ }
+
+ public StandardReceiveBatchHandler(IBTTransportProxy transportProxy, AboutToSuspendMessageEvent aboutToSuspendMessageCallback, bool suspendOnError, uint numberIterations)
+ {
+ this.transportProxy = transportProxy;
+ this.suspendOnError = suspendOnError;
+ this.numberIterations = numberIterations;
+ this.batch = new StandardReceiveBatch(this.transportProxy, new StandardReceiveBatch.BatchCompleteEvent(BatchComplete), this.suspendOnError);
+ }
+
+ public void SubmitMessage(IBaseMessage message, object userData)
+ {
+ Trace.WriteLine("StandardReceiveBatchHandler.SubmitMessage() called", "Base Adapter: Info" );
+
+ this.batch.Batch.SubmitMessage(message, userData);
+ }
+
+ public void MoveToSuspendQ (IBaseMessage message, object userData)
+ {
+ Trace.WriteLine("StandardReceiveBatchHandler.MoveToSuspendQ() called", "Base Adapter: Info" );
+
+ this.batch.Batch.MoveToSuspendQ(message, userData);
+ }
+
+ public BatchResult Done (BYOTTransaction transaction)
+ {
+ Trace.WriteLine("StandardReceiveBatchHandler.Done() called", "Base Adapter: Info" );
+
+ IAsyncResult ar = BeginDone( transaction, null, null);
+ return EndDone(ar);
+ }
+
+ public IAsyncResult BeginDone(BYOTTransaction transaction, AsyncCallback cb, Object asyncState)
+ {
+ Trace.WriteLine("StandardReceiveBatchHandler.BeginDone() called", "Base Adapter: Info" );
+
+ this.asyncResult = new BatchAsyncResult(asyncState);
+ this.transaction = transaction;
+ this.asyncCb = cb;
+ this.dtcCommitConfirm = this.batch.Batch.Done( ((null != transaction) ? transaction.Transaction : null) );
+ if ( null != this.transaction )
+ this.transaction.DTCCommitConfirm = this.dtcCommitConfirm;
+
+ return this.asyncResult;
+ }
+
+ public BatchResult EndDone(IAsyncResult ar)
+ {
+ Trace.WriteLine("StandardReceiveBatchHandler.EndDone() called", "Base Adapter: Info" );
+
+ this.doneEvent.WaitOne();
+
+ return ((BatchAsyncResult)ar).BatchStatus;
+ }
+
+ public void BatchComplete(bool batchSucceeded, StandardReceiveBatch filteredBatch, ArrayList successArray, ArrayList failedArray, object cookie)
+ {
+ Trace.WriteLine(string.Format("StandardReceiveBatchHandler.BatchComplete( batchSucceeded:{0} ) called", batchSucceeded), "Base Adapter: Info" );
+
+ try
+ {
+ this.numberIterations--;
+ this.batchSucceeded = batchSucceeded;
+
+ // If the batch failed we need commit the filtered batch.
+ // Note: if we are using a DTC transaction we should not retry the batch
+ // since the transaction needs to be aborted inorder to undo any work done
+ // against the Message Box
+ if ( !batchSucceeded && (null != filteredBatch) && (this.numberIterations > 0) && (null == this.dtcCommitConfirm) )
+ {
+ filteredBatch.Batch.Done(this.transaction);
+ return;
+ }
+ else
+ {
+ // Call back the client to notify it of the outcome so it can clean up the data
+ // received from the wire...
+ this.successfulMsgArray = successArray;
+ this.failedMsgArray = failedArray;
+
+ if ( batchSucceeded && this.autoCommitTx && null != this.transaction )
+ {
+ this.transaction.Commit();
+ }
+ }
+ }
+ finally
+ {
+ this.asyncResult.BatchStatus = new BatchResult(this.batchSucceeded, this.dtcCommitConfirm, (((null != this.transaction) && (this.autoCommitTx)) ? this.transaction : null), this.successfulMsgArray, this.failedMsgArray);
+
+ if ( null != this.asyncCb )
+ this.asyncCb(this.asyncResult);
+
+ this.doneEvent.Set();
+ }
+ }
+ }
+
+ public class StandardReceiveBatch
+ {
+ private Batch batch;
+ private bool batchSucceeded = true;
+ private bool suspendOnError = true;
+ private IBTTransportProxy transportProxy;
+ private BatchCompleteEvent batchComplete;
+ private ArrayList successArray = new ArrayList();
+ private ArrayList failedArray = new ArrayList();
+ private StandardReceiveBatch filteredBatch;
+ private StandardReceiveBatchHandler.AboutToSuspendMessageEvent aboutToSuspendMsgEvent;
+
+ public delegate void BatchCompleteEvent(bool batchSucceeded, StandardReceiveBatch filteredBatch, ArrayList _successArray, ArrayList _failedArray, object cookie);
+
+ public Batch Batch
+ {
+ set { this.batch = value; }
+ get { return this.batch; }
+ }
+
+ public StandardReceiveBatchHandler.AboutToSuspendMessageEvent AboutToSuspendMessageEventCallBack
+ {
+ set { this.aboutToSuspendMsgEvent = value; }
+ }
+
+ public StandardReceiveBatch(IBTTransportProxy transportProxy, BatchCompleteEvent batchComplete, bool suspendOnError)
+ {
+ this.transportProxy = transportProxy;
+ this.batch = new Batch(this.transportProxy, null, true);
+ this.batchComplete = batchComplete;
+ this.suspendOnError = suspendOnError;
+ SetCallbacks();
+ }
+
+ private void SetCallbacks()
+ {
+ this.batch.StartBatchCompleteCallBack = new Batch.StartBatchCompleteEvent(StartBatchComplete);
+ this.batch.SubmitSuccessCallBack = new Batch.SubmitSuccessEvent(SubmitSuccess);
+ this.batch.SubmitFailureCallBack = new Batch.SubmitFailureEvent(SubmitFailure);
+ this.batch.MoveToSuspendQFailureCallBack = new Batch.MoveToSuspendQFailureEvent(MoveToSuspendQFailure);
+ this.batch.MoveToSuspendQSuccessCallBack = new Batch.MoveToSuspendQSuccessEvent(MoveToSuspendQSuccess);
+ this.batch.EndBatchCompleteCallBack = new Batch.EndBatchCompleteEvent(EndBatchComplete);
+ }
+
+ public void StartBatchComplete(Int32 hrStatus)
+ {
+ if ( hrStatus < 0 )
+ {
+ this.batchSucceeded = false;
+ this.filteredBatch = new StandardReceiveBatch( this.transportProxy, this.batchComplete, this.suspendOnError);
+ }
+ }
+
+ public void SubmitSuccess(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.successArray.Add(new BatchMessage(message, userData, BatchOperationType.Submit));
+
+ if ( !this.batchSucceeded )
+ this.filteredBatch.Batch.SubmitMessage(message, userData);
+ }
+
+ public void SubmitFailure(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ if ( this.suspendOnError )
+ {
+ IBaseMessage msgToSuspend;
+
+ if ( null != this.aboutToSuspendMsgEvent )
+ this.aboutToSuspendMsgEvent(message, userData, out msgToSuspend);
+ else
+ msgToSuspend = message;
+
+ this.filteredBatch.Batch.MoveToSuspendQ(msgToSuspend, userData);
+ this.failedArray.Add(new BatchMessage(msgToSuspend, userData, BatchOperationType.Submit));
+ }
+ else
+ {
+ this.failedArray.Add(new BatchMessage(message, userData, BatchOperationType.Submit));
+ }
+ }
+
+ public void MoveToSuspendQSuccess(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.successArray.Add(new BatchMessage(message, userData, BatchOperationType.MoveToSuspendQ));
+
+ if ( !this.batchSucceeded )
+ {
+ IBaseMessage msgToSuspend;
+
+ if ( null != this.aboutToSuspendMsgEvent )
+ this.aboutToSuspendMsgEvent(message, userData, out msgToSuspend);
+ else
+ msgToSuspend = message;
+
+ this.filteredBatch.Batch.MoveToSuspendQ(msgToSuspend, userData);
+ }
+ }
+
+ public void MoveToSuspendQFailure(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ IBaseMessage msgToSuspend;
+
+ if ( null != this.aboutToSuspendMsgEvent )
+ this.aboutToSuspendMsgEvent(message, userData, out msgToSuspend);
+ else
+ msgToSuspend = message;
+
+ this.filteredBatch.Batch.MoveToSuspendQ(msgToSuspend, userData);
+
+ this.failedArray.Add(new BatchMessage(message, userData, BatchOperationType.MoveToSuspendQ));
+ }
+
+ public void EndBatchComplete(object cookie)
+ {
+ if ( null != this.batchComplete )
+ {
+ this.batchComplete( this.batchSucceeded, this.filteredBatch, this.successArray, this.failedArray, cookie );
+ }
+ }
+ }
+}
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardRequestResponseHandler.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardRequestResponseHandler.cs
new file mode 100644
index 00000000..41a9708b
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardRequestResponseHandler.cs
@@ -0,0 +1,149 @@
+//---------------------------------------------------------------------
+// File: StandardRequestResponseHandler.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Batch helper class to to be used by a receive adapter
+// performing two-way receives, handles batch errors in the standard mannor.
+// This class does not handle multiple request-responses in the same
+// batches, better performance would be possible if it did
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using Microsoft.BizTalk.TransportProxy.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// This class handles request-response message exchanges. It
+ /// is designed to only handle a single request-response pair
+ ///
+ public class StandardRequestResponseHandler : IBTTransmitter
+ {
+ private IBaseMessage responseMsg = null;
+ private AutoResetEvent requestCompleted = new AutoResetEvent(false);
+ private AutoResetEvent responseReady = new AutoResetEvent(false);
+ private bool requestSubmitted = false;
+ private bool requestSuccessful = false;
+ private IBTTransportProxy transportProxy = null;
+ private bool isDirty = false;
+
+ public StandardRequestResponseHandler(IBTTransportProxy transportProxy)
+ {
+ this.transportProxy = transportProxy;
+ }
+
+ public void Initialize(IBTTransportProxy transportProxy)
+ {
+ // Stub implementation..
+ }
+ public void Terminate()
+ {
+ // Stub implementation..
+ }
+
+ public bool TransmitMessage(IBaseMessage msg)
+ {
+ Trace.WriteLine("StandardRequestResponseHandler.TransmitMessage() called", "Base Adapter: Info" );
+
+ // Keep a reference to the response message...
+ this.responseMsg = msg;
+ this.responseReady.Set();
+
+ // Return false to indicate we will delete the response message
+ // since we are doing an asynchronous transmission...
+ return false;
+ }
+
+ public IBaseMessage GetResponseMessage()
+ {
+ Trace.WriteLine("StandardRequestResponseHandler.GetResponseMessage() called", "Base Adapter: Info" );
+
+ // If the request was not submitted don't bother waiting...
+ if ( false == this.requestSubmitted )
+ return null;
+
+ // Wait for the request batch callback...
+ this.requestCompleted.WaitOne();
+
+ // If the request was successfully submitted we need to wait
+ // for the response message...
+ if ( this.requestSuccessful )
+ {
+ this.responseReady.WaitOne();
+ return this.responseMsg;
+ }
+ // Otherwise if the request message failed there will not be a repsonse,
+ // returning null indicates we failed
+ else
+ return null;
+ }
+
+ public void ResponseMessageComplete()
+ {
+ Trace.WriteLine("StandardRequestResponseHandler.ResponseMessageComplete() called", "Base Adapter: Info" );
+
+ StandardTransmitBatchHandler th = new StandardTransmitBatchHandler(this.transportProxy, null);
+ th.DeleteMessage(this.responseMsg, null);
+ th.Done(null);
+ }
+
+ public void SubmitRequestMessage(IBaseMessage requestMsg, object userData)
+ {
+ Trace.WriteLine("StandardRequestResponseHandler.SubmitRequestMessage() called", "Base Adapter: Info" );
+
+ // This implementation can only handle a single request-response pair.
+ // Ideally, this batch handler should deal with multiple request-response
+ // pairs for performance reasons
+ if ( isDirty )
+ throw new ApplicationException("StandardRequestResponseHandler only handles a single request-response pair!");
+
+ isDirty = true;
+
+ // Create a new Transport Proxy batch wrapper and initialize
+ Batch batch = new Batch(this.transportProxy, null, false);
+ batch.StartBatchCompleteCallBack = new Batch.StartBatchCompleteEvent(BatchComplete);
+
+ string correlationToken = Guid.NewGuid().ToString();
+ batch.SubmitRequestMessage(requestMsg, correlationToken, true, new DateTime(0), this, userData);
+ batch.Done(null);
+ this.requestSubmitted = true;
+ }
+
+ public void BatchComplete(Int32 hrStatus)
+ {
+ Trace.WriteLine(string.Format("StandardRequestResponseHandler.BatchComplete( hrStatus:{0} ) called", hrStatus), "Base Adapter: Info" );
+
+ // If hrStatus is greater than or equal to zero, the request
+ // message was successfully submitted/persisted to the BizTalk store
+ if ( hrStatus >= 0 )
+ this.requestSuccessful = true;
+
+ this.requestCompleted.Set();
+ }
+ }
+}
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardTransmitBatchHandler.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardTransmitBatchHandler.cs
new file mode 100644
index 00000000..30c6e675
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/StandardTransmitBatchHandler.cs
@@ -0,0 +1,454 @@
+//---------------------------------------------------------------------
+// File: StandardTransmitBatchHandler.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Batch helper class to to be used by a send adapter,
+// handles batch errors in the standard mannor.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using Microsoft.BizTalk.TransportProxy.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// This class handles the failure modes of a transmitters batch, it performes the
+ /// recomended recovery policy for all the possible types of failures for a
+ /// receive batch.
+ /// In summary our policy is:
+ /// (1) on a submit failure we move the message to the suspend queue
+ /// (2) on suspend failure we there is nothing we can do, so we pass the
+ /// error back to the client
+ /// (3) register delegates to handle various events
+ /// Otherwise:
+ ///
+ public class StandardTransmitBatchHandler
+ {
+ private StandardTransmitBatch batch = null;
+ private IBTTransportProxy transportProxy = null;
+ private ArrayList successfulMsgArray = new ArrayList();
+ private ArrayList failedMsgArray = new ArrayList();
+ private BYOTTransaction transaction = null;
+ private SolicitResponseCache solicitRespCache = new SolicitResponseCache();
+ protected uint numberIterations = 3;
+ private AutoResetEvent doneEvent = new AutoResetEvent(false);
+ private bool batchSucceeded = false;
+ private BatchAsyncResult asyncResult = null;
+ private AsyncCallback asyncCb = null;
+ private IBTDTCCommitConfirm dtcCommitConfirm = null;
+ private bool autoCommitTx = false;
+
+ // Adapter client code may register the following types of delegates
+ // to take action on these events...
+ #region Client Delegates
+
+ private MessageSubmittedSuccessfullyEvent _messageSubmittedSuccessfullyEvent;
+
+ public delegate void AboutToSuspendMessageEvent (IBaseMessage message, object userData, out IBaseMessage msgToSuspend);
+ public delegate void MessageSubmittedSuccessfullyEvent (IBaseMessage message, Int32 hrStatus, object userData);
+ public delegate void BatchCompleteEvent(ArrayList _successfulMsgArray, ArrayList _failedMsgArray);
+
+ public MessageSubmittedSuccessfullyEvent MessageSubmittedSuccessfullyCallBack
+ {
+ set { _messageSubmittedSuccessfullyEvent = value; }
+ }
+
+ #endregion // Client Delegates
+
+ public StandardTransmitBatchHandler(IBTTransportProxy transportProxy, AboutToSuspendMessageEvent aboutToSuspendMessageCallback)
+ {
+ this.transportProxy = transportProxy;
+ this.batch = new StandardTransmitBatch(this.transportProxy, new StandardTransmitBatch.BatchCompleteEvent(BatchComplete), aboutToSuspendMessageCallback, this.solicitRespCache);
+ }
+
+ public StandardTransmitBatchHandler(IBTTransportProxy transportProxy, bool autoCommitTx)
+ {
+ this.transportProxy = transportProxy;
+ this.autoCommitTx = autoCommitTx;
+ this.batch = new StandardTransmitBatch(this.transportProxy, new StandardTransmitBatch.BatchCompleteEvent(BatchComplete), null, this.solicitRespCache);
+ }
+
+ public void MoveToSuspendQ(IBaseMessage message, object userData)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.MoveToSuspendQ() called", "Base Adapter: Info" );
+
+ this.batch.Batch.MoveToSuspendQ(message, userData);
+ }
+
+ public void DeleteMessage(IBaseMessage message, object userData)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.DeleteMessage() called", "Base Adapter: Info" );
+
+ this.batch.Batch.DeleteMessage (message, userData);
+ }
+
+ public void Resubmit(IBaseMessage message, object userData)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.Resubmit() called", "Base Adapter: Info" );
+
+ ResubmitDetails rd = ResubmitDetails.GetResubmitDetails(message);
+
+ if ( rd.RetryCount > 0 ) // If we have more retries available, we will retry
+ {
+ this.batch.Batch.Resubmit(message, rd.RedeliverAt, userData);
+ }
+ else // Otherwise we should move to the next transport
+ {
+ this.batch.Batch.MoveToNextTransport(message, userData);
+ }
+ }
+
+ public void MoveToNextTransport(IBaseMessage message, object userData)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.MoveToNextTransport() called", "Base Adapter: Info" );
+
+ this.batch.Batch.MoveToNextTransport(message, userData);
+ }
+
+ public void SubmitResponseMessage(IBaseMessage solicitMsgSent, IBaseMessage responseMsgToSubmit, object userData)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.SubmitResponseMessage() called", "Base Adapter: Info" );
+
+ this.solicitRespCache.Register(solicitMsgSent, responseMsgToSubmit);
+ this.batch.Batch.SubmitResponseMessage(solicitMsgSent, responseMsgToSubmit, userData);
+ }
+
+ public BatchResult Done (BYOTTransaction transaction)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.Done() called", "Base Adapter: Info" );
+
+ IAsyncResult ar = BeginDone( transaction, null, null);
+ return EndDone(ar);
+ }
+
+ public IAsyncResult BeginDone(BYOTTransaction transaction, AsyncCallback cb, Object asyncState)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.BeginDone() called", "Base Adapter: Info" );
+
+ this.asyncResult = new BatchAsyncResult(asyncState);
+ this.transaction = transaction;
+ this.asyncCb = cb;
+ this.dtcCommitConfirm = this.batch.Batch.Done( ((null != transaction) ? transaction.Transaction : null) );
+ if ( null != this.transaction )
+ this.transaction.DTCCommitConfirm = this.dtcCommitConfirm;
+
+ return this.asyncResult;
+ }
+
+ public BatchResult EndDone(IAsyncResult ar)
+ {
+ Trace.WriteLine("StandardTransmitBatchHandler.EndDone() called", "Base Adapter: Info" );
+
+ this.doneEvent.WaitOne();
+
+ return ((BatchAsyncResult)ar).BatchStatus;
+ }
+
+ public void BatchComplete(bool batchSucceeded, StandardTransmitBatch filteredBatch, ArrayList successArray, ArrayList failedArray, object cookie)
+ {
+ Trace.WriteLine(string.Format("StandardTransmitBatchHandler.BatchComplete( batchSucceeded:{0} ) called", batchSucceeded), "Base Adapter: Info" );
+
+ try
+ {
+ this.numberIterations--;
+ this.batchSucceeded = batchSucceeded;
+
+ // If the batch failed we need commit the filtered batch.
+ // Note: if we are using a DTC transaction we should not retry the batch
+ // since the transaction needs to be aborted inorder to undo any work done
+ // against the Message Box
+ if ( !batchSucceeded && (null != filteredBatch) && (this.numberIterations > 0) && (null == this.dtcCommitConfirm) )
+ {
+ filteredBatch.Batch.Done(this.transaction);
+ return;
+ }
+
+ // filteredBatch will be null if only suspend or delete message failed
+ // in which case we're done
+ if ( !batchSucceeded && (null == filteredBatch) )
+ {
+ this.batchSucceeded = batchSucceeded;
+ this.successfulMsgArray = successArray;
+ }
+ else if ( batchSucceeded )
+ {
+ this.successfulMsgArray = successArray;
+ this.failedMsgArray = failedArray;
+
+ if ( this.autoCommitTx && null != this.transaction)
+ {
+ this.transaction.Commit();
+ }
+ }
+ }
+ finally
+ {
+ this.asyncResult.BatchStatus = new BatchResult(this.batchSucceeded, this.dtcCommitConfirm, (((null != this.transaction) && (this.autoCommitTx)) ? this.transaction : null), this.successfulMsgArray, this.failedMsgArray);
+
+ if ( null != this.asyncCb )
+ this.asyncCb(this.asyncResult);
+
+ this.doneEvent.Set();
+ }
+ }
+
+ private void UpdateMessageArrays(ArrayList successMsgArr, ArrayList failedMsgArr)
+ {
+ if ( null != successMsgArr )
+ {
+ for ( int c = 0; c < successMsgArr.Count; c++ )
+ this.successfulMsgArray.Add(successMsgArr[c]);
+ }
+
+ if ( null != failedMsgArr )
+ {
+ for ( int c = 0; c < failedMsgArr.Count; c++ )
+ this.failedMsgArray.Add(failedMsgArr[c]);
+ }
+ }
+ }
+
+ public class StandardTransmitBatch
+ {
+ private Batch batch;
+ private bool batchSucceeded = true;
+ private IBTTransportProxy transportProxy;
+ private BatchCompleteEvent batchComplete;
+ private ArrayList successArray = new ArrayList();
+ private ArrayList failedArray = new ArrayList();
+ private StandardTransmitBatch filteredBatch;
+ private StandardTransmitBatchHandler.AboutToSuspendMessageEvent aboutToSuspendMessageEvent;
+ private SolicitResponseCache solicitRespCache;
+
+ public delegate void BatchCompleteEvent(bool batchSucceeded, StandardTransmitBatch filteredBatch, ArrayList successArray, ArrayList failedArray, object cookie);
+
+ public Batch Batch
+ {
+ set { this.batch = value; }
+ get { return this.batch; }
+ }
+
+ public StandardTransmitBatch(IBTTransportProxy transportProxy, BatchCompleteEvent batchComplete, StandardTransmitBatchHandler.AboutToSuspendMessageEvent aboutToSuspendMessageEvent, SolicitResponseCache solicitRespCache)
+ {
+ this.transportProxy = transportProxy;
+ this.batch = new Batch(this.transportProxy, null, true);
+ this.batchComplete = batchComplete;
+ this.aboutToSuspendMessageEvent = aboutToSuspendMessageEvent;
+ this.solicitRespCache = solicitRespCache;
+ SetCallbacks();
+ }
+
+ private void SetCallbacks()
+ {
+ // Set batch start delegate...
+ this.batch.StartBatchCompleteCallBack = new Batch.StartBatchCompleteEvent(StartBatchComplete);
+
+ // Set operation delegates...
+ this.batch.SubmitSuccessCallBack = new Batch.SubmitSuccessEvent(SubmitResponseSuccess);
+ this.batch.SubmitFailureCallBack = new Batch.SubmitFailureEvent(SubmitResponseFailure);
+ this.batch.DeleteSuccessCallBack = new Batch.DeleteSuccessEvent(DeleteSuccess);
+ this.batch.DeleteFailureCallBack = new Batch.DeleteFailureEvent(DeleteFailure);
+ this.batch.MoveToNextTransportSuccessCallBack = new Batch.MoveToNextTransportSuccessEvent(MoveToNextTransportSuccess);
+ this.batch.MoveToNextTransportFailureCallBack = new Batch.MoveToNextTransportFailureEvent(MoveToNextTransportFailure);
+ this.batch.ResubmitSuccessCallBack = new Batch.ResubmitSuccessEvent(ResubmitSuccess);
+ this.batch.ResubmitFailureCallBack = new Batch.ResubmitFailureEvent(ResubmitFailure);
+ this.batch.MoveToSuspendQFailureCallBack = new Batch.MoveToSuspendQFailureEvent(MoveToSuspendQFailure);
+ this.batch.MoveToSuspendQSuccessCallBack = new Batch.MoveToSuspendQSuccessEvent(MoveToSuspendQSuccess);
+
+ // Set batch end delegate...
+ this.batch.EndBatchCompleteCallBack = new Batch.EndBatchCompleteEvent(EndBatchComplete);
+ }
+
+ public void StartBatchComplete(Int32 hrStatus)
+ {
+ if ( hrStatus < 0 )
+ {
+ this.batchSucceeded = false;
+ this.filteredBatch = new StandardTransmitBatch( this.transportProxy, this.batchComplete, this.aboutToSuspendMessageEvent, this.solicitRespCache);
+ }
+ }
+
+ public void SubmitResponseSuccess(IBaseMessage solicitMessage, Int32 hrStatus, object userData)
+ {
+ IBaseMessage responseMessage = this.solicitRespCache.GetResponseMessage(solicitMessage);
+
+ this.successArray.Add(new BatchMessage(responseMessage, userData, BatchOperationType.Submit));
+
+ if ( !this.batchSucceeded )
+ this.filteredBatch.Batch.SubmitResponseMessage(solicitMessage, responseMessage, userData);
+ }
+
+ public void SubmitResponseFailure(IBaseMessage solicitMessage, Int32 hrStatus, object userData)
+ {
+ IBaseMessage responseMessage = this.solicitRespCache.GetResponseMessage(solicitMessage);
+ IBaseMessage msgToSuspend;
+
+ if ( null != this.aboutToSuspendMessageEvent )
+ this.aboutToSuspendMessageEvent(responseMessage, userData, out msgToSuspend);
+ else
+ msgToSuspend = responseMessage;
+
+ this.failedArray.Add(new BatchMessage(msgToSuspend, userData, BatchOperationType.Submit));
+ this.filteredBatch.Batch.MoveToSuspendQ(msgToSuspend, userData);
+ }
+
+ public void MoveToSuspendQSuccess(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.successArray.Add(new BatchMessage(message, userData, BatchOperationType.MoveToSuspendQ));
+
+ if ( !this.batchSucceeded )
+ {
+ IBaseMessage msgToSuspend;
+
+ if ( null != this.aboutToSuspendMessageEvent )
+ this.aboutToSuspendMessageEvent(message, userData, out msgToSuspend);
+ else
+ msgToSuspend = message;
+
+ this.successArray.Add(new BatchMessage(msgToSuspend, userData, BatchOperationType.Submit));
+ this.filteredBatch.Batch.MoveToSuspendQ(msgToSuspend, userData);
+ }
+ }
+
+ public void MoveToSuspendQFailure(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ // If delete message fails, there is nothing to do. This could result
+ // in the message being sent twice, though for non-transacted adapters
+ // there is no guarentee against that anyway
+ this.failedArray.Add(new BatchMessage(message, userData, BatchOperationType.MoveToSuspendQ));
+ }
+
+ public void DeleteSuccess(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.successArray.Add(new BatchMessage(message, userData, BatchOperationType.Delete));
+
+ if ( !this.batchSucceeded )
+ this.filteredBatch.Batch.DeleteMessage(message, userData);
+ }
+
+ public void DeleteFailure(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ // If delete message fails, there is nothing to do. This could result
+ // in the message being sent twice, though for non-transacted adapters
+ // there is no guarentee against that anyway
+ this.failedArray.Add(new BatchMessage(message, userData, BatchOperationType.Delete));
+ }
+
+ public void ResubmitSuccess(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.successArray.Add(new BatchMessage(message, userData, BatchOperationType.Resubmit));
+
+ if ( !this.batchSucceeded )
+ {
+ ResubmitDetails rd = ResubmitDetails.GetResubmitDetails(message);
+ this.filteredBatch.Batch.Resubmit(message, rd.RedeliverAt, userData);
+ }
+ }
+
+ public void ResubmitFailure(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ // If resubmit fails, give the backup transport a shot
+ this.filteredBatch.Batch.MoveToNextTransport(message, userData);
+ }
+
+ public void MoveToNextTransportSuccess(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.successArray.Add(new BatchMessage(message, userData, BatchOperationType.MoveToNextTransport));
+
+ if ( !this.batchSucceeded )
+ this.filteredBatch.Batch.MoveToNextTransport(message, userData);
+ }
+
+ public void MoveToNextTransportFailure(IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ // If the move the the backup transport fails, suspend the message
+ MoveToSuspendQSuccess(message, hrStatus, userData);
+ }
+
+ public void EndBatchComplete(object cookie)
+ {
+ if ( null != this.batchComplete )
+ {
+ this.batchComplete( this.batchSucceeded, this.filteredBatch, this.successArray, this.failedArray, cookie );
+ }
+ }
+ }
+
+ ///
+ /// Helper class the get the messages' resubmit details
+ ///
+ public class ResubmitDetails
+ {
+ private int retryCount;
+ private DateTime redeliverAt;
+
+ public ResubmitDetails() {}
+
+ public int RetryCount
+ {
+ set { this.retryCount = value; }
+ get { return this.retryCount; }
+ }
+
+ public DateTime RedeliverAt
+ {
+ set { this.redeliverAt = value; }
+ get { return this.redeliverAt; }
+ }
+
+ public static ResubmitDetails GetResubmitDetails(IBaseMessage msg)
+ {
+ ResubmitDetails rd = new ResubmitDetails();
+
+ SystemMessageContext context = new SystemMessageContext(msg.Context);
+
+ rd.RedeliverAt = DateTime.Now.AddMinutes(context.RetryInterval);
+ rd.RetryCount = context.RetryCount;
+
+ return rd;
+ }
+ }
+
+ public class SolicitResponseCache
+ {
+ private Hashtable cache = new Hashtable();
+
+ public void Register(IBaseMessage solicitMessage, IBaseMessage responseMessage)
+ {
+ Guid id = solicitMessage.MessageID;
+ this.cache.Add(id, responseMessage);
+ }
+
+ public IBaseMessage GetResponseMessage(IBaseMessage solicitMessage)
+ {
+ Guid id = solicitMessage.MessageID;
+ IBaseMessage responseMessage = (IBaseMessage)this.cache[id];
+ return responseMessage;
+ }
+ }
+}
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TaskScheduler.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TaskScheduler.cs
new file mode 100644
index 00000000..4eb6a3a4
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TaskScheduler.cs
@@ -0,0 +1,182 @@
+//---------------------------------------------------------------------
+// File: TaskScheduler.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Simple task scheduler class, usefull for polling receive
+// adapters
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// A Task is a unit of scheduled work for the TaskScheduler.
+ ///
+ internal abstract class Task : IDisposable
+ {
+ protected string uri;
+ protected TimerCallback onPerformTask;
+ protected Timer taskScheduler;
+ protected int dueTime;
+ protected int period;
+
+ public Timer TaskScheduler
+ {
+ get { return this.taskScheduler; }
+ }
+
+ public void Dispose()
+ {
+ this.taskScheduler.Dispose();
+ }
+
+ public abstract void Renew();
+ }
+
+ internal class PeriodicTask : Task
+ {
+ public PeriodicTask(string uri, object state, int interval, TimerCallback onPerformTask)
+ {
+ this.uri = uri;
+ this.onPerformTask = onPerformTask;
+ this.dueTime = interval * 1000;
+ this.period = interval * 1000;
+ this.taskScheduler = new Timer( this.onPerformTask, state, this.dueTime, this.period );
+ }
+
+ public override void Renew() {}
+ }
+
+ internal class SingularTask : Task
+ {
+ public SingularTask(string uri, object state, int interval, TimerCallback onPerformTask)
+ {
+ this.uri = uri;
+ this.onPerformTask = onPerformTask;
+ this.dueTime = interval * 1000;
+ this.taskScheduler = new Timer( this.onPerformTask, state, this.dueTime, Timeout.Infinite );
+ }
+
+ public override void Renew()
+ {
+ this.taskScheduler.Change( this.dueTime, Timeout.Infinite );
+ }
+ }
+
+ ///
+ /// The TaskScheduler manages Task to be performed by adapters. The
+ /// Adapter may update or remove the Task after initially adding it.
+ ///
+ public class TaskScheduler
+ {
+ private Hashtable tasks;
+
+ public TaskScheduler()
+ {
+ this.tasks = new Hashtable();
+ }
+
+ public void Stop()
+ {
+ lock(this.tasks)
+ {
+ for ( int c = 0; c < this.tasks.Count; c++ )
+ {
+ Task task = (Task)this.tasks[c];
+ task.Dispose();
+ }
+ this.tasks.Clear();
+ }
+ }
+
+ public void AddNewSingularTask(string uri, object state, int interval, TimerCallback onPerformTask)
+ {
+ lock(this.tasks)
+ {
+ Task newTask = new SingularTask(uri, state, interval, onPerformTask);
+ this.tasks.Add(uri, newTask);
+ }
+ }
+
+ public void AddNewPeriodicTask(string uri, object state, int interval, TimerCallback onPerformTask)
+ {
+ lock(this.tasks)
+ {
+ Task newTask = new PeriodicTask(uri, state, interval, onPerformTask);
+ this.tasks.Add(uri, newTask);
+ }
+ }
+
+ public void RemoveTask(string uri)
+ {
+ lock(this.tasks)
+ {
+ _RemoveTask(uri);
+ }
+ }
+
+ public void UpdateSingularTask(string uri, object state, int interval, TimerCallback onPerformTask)
+ {
+ lock(this.tasks)
+ {
+ _RemoveTask(uri);
+ Task newTask = new SingularTask(uri, state, interval, onPerformTask);
+ this.tasks.Add(uri, newTask);
+ }
+ }
+
+ public void UpdatePeriodicTask(string uri, object state, int interval, TimerCallback onPerformTask)
+ {
+ lock(this.tasks)
+ {
+ _RemoveTask(uri);
+ Task newTask = new PeriodicTask(uri, state, interval, onPerformTask);
+ this.tasks.Add(uri, newTask);
+ }
+ }
+
+ public void RenewTask( string uri )
+ {
+ lock( this.tasks )
+ {
+ Task task = (Task)this.tasks[uri];
+ if ( null != task )
+ {
+ task.Renew();
+ }
+ }
+ }
+
+ private void _RemoveTask(string uri)
+ {
+ Task task = (Task)this.tasks[uri];
+ if ( null != task )
+ {
+ this.tasks.Remove(uri);
+ task.Dispose();
+ }
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ThreadPool.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ThreadPool.cs
new file mode 100644
index 00000000..0b293483
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/ThreadPool.cs
@@ -0,0 +1,65 @@
+//---------------------------------------------------------------------
+// File: ThreadPool.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: Threadpool, thin wrapper over the CLR thread pool
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Threading;
+using System.Diagnostics;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ public interface IThreadPool
+ {
+ void Initialize();
+ void Stop();
+ void AddItem(IThreadpoolWorkItem workItem);
+ }
+
+ ///
+ /// Generic ThreadPool, work items must implement IThreadPool.
+ ///
+ public class ThreadPool : IThreadPool
+ {
+ public void Initialize()
+ {
+ }
+
+ public void Stop()
+ {
+ }
+
+ public void AddItem(IThreadpoolWorkItem workItem)
+ {
+ System.Threading.ThreadPool.QueueUserWorkItem( new WaitCallback(WorkerThreadThunk), workItem );
+ }
+
+ private void WorkerThreadThunk(object state)
+ {
+ IThreadpoolWorkItem workItem = (IThreadpoolWorkItem)state;
+ workItem.ProcessWorkItem();
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TransactionDispenser.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TransactionDispenser.cs
new file mode 100644
index 00000000..ac8df74c
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TransactionDispenser.cs
@@ -0,0 +1,87 @@
+//---------------------------------------------------------------------
+// File: TransactionDispenser.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: This class wraps a component that houses BYOT in a COM+
+// library application. There is a bug Win2K (as far as SP3) that BYOT
+// will AV if used outside of a COM+ application. The safest route until
+// a fix is created is to wrap a separate component that sits in COM+
+// and will delegate the calls to BYOT, hence this component.
+//
+// The code also contains the transaction dispenser that wraps the
+// DtcGetTransactionDispenserEx call. There is currently no way in managed
+// code to create a new transaction, so must use interop to enable this
+// at this time.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+
+ public sealed class TransactionMgmtIIDs
+ {
+ public const string CLSID_TransactionDisperserImpl = "30C1F639-A3A6-4E0A-879D-0B15020754C6";
+ public const string IID_ITransactionDisperserImpl = "B051713B-736D-408D-8E0C-9C04EDE5A16C";
+ public const string CLSID_WrapByot = "273D684A-6250-4F41-8281-DECE6711BD2D";
+ public const string IID_IWrapByot = "846E5A00-9660-4443-B402-64FF4C722095";
+ }
+
+ [ComImport]
+ [Guid(TransactionMgmtIIDs.CLSID_WrapByot)]
+ [ClassInterface(ClassInterfaceType.None)]
+ public class WrapByot {};
+
+ [ComImport()]
+ [Guid(TransactionMgmtIIDs.IID_IWrapByot)]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ [CoClass(typeof(WrapByot))]
+ public interface IWrapByot
+ {
+ [return: MarshalAs(UnmanagedType.IUnknown)]
+ object CreateInstance([MarshalAs(UnmanagedType.IUnknown)] object txn, Guid type);
+ }
+
+ [ComImport]
+ [InterfaceType(ComInterfaceType.InterfaceIsDual)]
+ [Guid(TransactionMgmtIIDs.IID_ITransactionDisperserImpl)]
+ [CoClass(typeof(TransactionDispenser))]
+ public interface ITransactionDispenser
+ {
+ [return: MarshalAs(UnmanagedType.IUnknown)]
+ object GetTransaction
+ (
+ [MarshalAs(UnmanagedType.BStr)]
+ string transactionName,
+ int timeOut,
+ int isolationLevel
+ );
+ }
+
+ [ComImport]
+ [ClassInterface(ClassInterfaceType.None)]
+ [Guid(TransactionMgmtIIDs.CLSID_TransactionDisperserImpl)]
+ public class TransactionDispenser
+ {
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TransmitterMessage.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TransmitterMessage.cs
new file mode 100644
index 00000000..7f193bb3
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/TransmitterMessage.cs
@@ -0,0 +1,115 @@
+//---------------------------------------------------------------------
+// File: TransmitterMessage.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: This class wraps a message to be transmitted, retrieving
+// the configuration form the message context
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Xml;
+using Microsoft.BizTalk.Message.Interop;
+using Microsoft.BizTalk.Component.Interop;
+using Microsoft.XLANGs.BaseTypes;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for TransmitterMessage
+ ///
+ public class TransmitterMessage
+ {
+ private IBaseMessage message;
+ private ConfigProperties properties;
+ private string propertyNamespace;
+ private SystemMessageContext context;
+ private string uri;
+ private bool portIsTwoWay = false;
+ private ConfigProperties.CreateProperties createProperties;
+ private static readonly PropertyBase IsSolicitResponseProperty = new BTS.IsSolicitResponse();
+
+ public virtual ConfigProperties CreateProperties() {return null;}
+
+ public TransmitterMessage(IBaseMessage message, string propertyNamespace, ConfigProperties.CreateProperties createProperties)
+ {
+ this.message = message;
+ this.propertyNamespace = propertyNamespace;
+
+ this.context = new SystemMessageContext(this.message.Context);
+ this.uri = this.context.OutboundTransportLocation;
+ // NOTE: the system context property IsSolicitResponse indicates whether the
+ // port is one way or two way...
+ object obj = this.message.Context.Read(IsSolicitResponseProperty.Name.Name, IsSolicitResponseProperty.Name.Namespace);
+ if ( null != obj )
+ this.portIsTwoWay = (bool)obj;
+
+ this.createProperties = createProperties;
+ }
+
+ public IBaseMessage Message
+ {
+ set { this.message = value; }
+ get { return this.message; }
+ }
+
+ public ConfigProperties Properties
+ {
+ get
+ {
+ if ( null == this.properties )
+ LoadConfiguration();
+
+ return this.properties;
+ }
+ }
+
+ public bool PortIsTwoWay
+ {
+ get { return this.portIsTwoWay; }
+ }
+
+ private void LoadConfiguration()
+ {
+ XmlDocument locationConfigDom = null;
+
+ // get the adapter configuration off the message
+ string config = (string)this.message.Context.Read("AdapterConfig", this.propertyNamespace);
+
+ // the config can be null all that means is that we are doing a dynamic send
+ if (null != config)
+ {
+ locationConfigDom = new XmlDocument();
+ locationConfigDom.LoadXml(config);
+
+ // For Dynamic Sends the destination is taken from the outboundLocation URI
+ this.properties = this.createProperties(this.uri);
+
+ if (null != locationConfigDom)
+ {
+ // For Dynamic Sends the Location config can be null
+ // Location properties - possibly override some handler properties
+ this.properties.LocationConfiguration(locationConfigDom);
+ }
+ }
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/VirtualStream.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/VirtualStream.cs
new file mode 100644
index 00000000..45597f38
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/VirtualStream.cs
@@ -0,0 +1,243 @@
+//---------------------------------------------------------------------
+// File: VirtualStream.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.IO;
+using System.Text;
+using System.Runtime.InteropServices;
+
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ ///
+ /// Summary description for VirtualStream.
+ ///
+ public class VirtualStream : Stream, IDisposable
+ {
+ private Stream stream;
+ private bool isDisposed = false;
+ private bool isInMemory = true;
+ private int threshholdSize;
+ private const int THRESHOLD_MAX = 1*1024*1024; // 1MB max size
+ private const int defaultSize = 10240; // 10K default size
+
+ public VirtualStream() : this(defaultSize)
+ {
+ }
+
+ public VirtualStream(int buffer)
+ {
+ this.stream = new MemoryStream(buffer);
+ this.threshholdSize = THRESHOLD_MAX;
+ }
+
+ // Stream Properties...
+ #region Stream Properties
+
+ override public bool CanRead
+ {
+ get {return this.stream.CanRead;}
+ }
+
+ override public bool CanWrite
+ {
+ get {return this.stream.CanWrite;}
+ }
+
+ override public bool CanSeek
+ {
+ get {return this.stream.CanSeek;}
+ }
+
+ override public long Length
+ {
+ get {return this.stream.Length;}
+ }
+
+ override public long Position
+ {
+ get {return this.stream.Position;}
+ set {this.stream.Seek(value, SeekOrigin.Begin);}
+ }
+
+ #endregion // Stream Properties
+
+ // Stream Methods...
+ #region Stream Methods
+
+ override public void Close()
+ {
+ if(!this.isDisposed)
+ {
+ GC.SuppressFinalize(this);
+ Cleanup();
+ }
+ }
+
+ override public void Flush()
+ {
+ ThrowIfDisposed();
+ this.stream.Flush();
+ }
+
+ override public int Read(byte[] buffer, int offset, int count)
+ {
+ ThrowIfDisposed();
+
+ return this.stream.Read(buffer, offset, count);
+ }
+
+ override public long Seek(long offset, SeekOrigin origin)
+ {
+ ThrowIfDisposed();
+
+ return this.stream.Seek(offset, origin);
+ }
+
+ override public void SetLength(long length)
+ {
+ ThrowIfDisposed();
+
+ if ( (length > this.threshholdSize) && this.isInMemory )
+ {
+ lock (this)
+ {
+ // The stream is currently in memory, the new write will tip
+ // it over the limit. Switching to persisted stream...
+ if ( (length > this.threshholdSize) && this.isInMemory )
+ {
+ // Create the persisted stream...
+ Stream persistedStream = CreatePersistentStream();
+
+ // Copy the contents of the memory stream into the persisted
+ CopyStreamContent((MemoryStream)this.stream, persistedStream);
+
+ // Switch over the streams...
+ this.stream = persistedStream;
+ this.isInMemory = false;
+ }
+
+ this.stream.SetLength(length);
+ }
+ }
+ else
+ this.stream.SetLength(length);
+ }
+
+ override public void Write(byte[] buffer, int offset, int count)
+ {
+ ThrowIfDisposed();
+
+ if ( ((count + this.stream.Position) > this.threshholdSize) && this.isInMemory )
+ {
+ lock (this)
+ {
+ // The stream is currently in memory, the new write will tip
+ // it over the limit. Switching to persisted stream...
+ if ( ((count + this.stream.Position) > this.threshholdSize) && this.isInMemory )
+ {
+ // Create the persisted stream...
+ Stream persistedStream = CreatePersistentStream();
+
+ // Copy the contents of the memory stream into the persisted
+ CopyStreamContent((MemoryStream)this.stream, persistedStream);
+
+ // Switch over the streams...
+ this.stream = persistedStream;
+ this.isInMemory = false;
+ }
+
+ this.stream.Write (buffer, offset, count);
+ }
+ }
+ else
+ this.stream.Write (buffer, offset, count);
+ }
+
+ #endregion // Stream Methods
+
+ #region IDisposable Interface
+
+ public void Dispose()
+ {
+ Close();
+ }
+
+ #endregion // IDisposable Interface
+
+ private void ThrowIfDisposed()
+ {
+ if(this.isDisposed || (this.stream == null))
+ throw new ObjectDisposedException("VirtualStream");
+ }
+
+ private void Cleanup()
+ {
+ if(!this.isDisposed)
+ {
+ this.isDisposed = true;
+ if(null != this.stream)
+ {
+ this.stream.Close();
+ this.stream = null;
+ }
+ }
+ }
+
+ private void CopyStreamContent(MemoryStream source, Stream dest)
+ {
+ long currentPosition = source.Position;
+
+ // Optimization
+ if (source.Length < int.MaxValue)
+ {
+ dest.Write(source.GetBuffer(), 0, (int) source.Length);
+ }
+ else
+ {
+ source.Position = 0;
+ byte[] tempBuffer = new Byte[this.threshholdSize];
+ int read = 0;
+
+ while ((read = source.Read(tempBuffer, 0, this.threshholdSize)) != 0)
+ dest.Write(tempBuffer, 0, read);
+ }
+
+ dest.Position = currentPosition;
+ }
+
+ public static Stream CreatePersistentStream()
+ {
+ StringBuilder name = new StringBuilder(256);
+ IntPtr handle;
+ if(0 == NativeCalls.GetTempFileName(Path.GetTempPath(), "VSTMP", 0, name))
+ throw new ApplicationException("GetTempFileName Failed.");
+ handle = NativeCalls.CreateFile(name.ToString(), (UInt32)FileAccess.ReadWrite, 0, IntPtr.Zero, (UInt32)FileMode.Create, 0x04000100, IntPtr.Zero);
+
+ if(IntPtr.Zero == handle)
+ throw new ApplicationException("CreateFile Failed.");
+ return new FileStream(handle, FileAccess.ReadWrite);
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/batch.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/batch.cs
new file mode 100644
index 00000000..cec0cb72
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BaseAdapter/batch.cs
@@ -0,0 +1,620 @@
+//---------------------------------------------------------------------
+// File: Batch.cs
+//
+// Summary: Implementation of an adapter framework sample adapter.
+// This class constitutes one of the BaseAdapter classes, which, are
+// a set of generic re-usable set of classes to help adapter writers.
+//
+// Sample: Base Adapter Class Library v1.0.1
+//
+// Description: The Batch class is an abstraction over the Transport Proxy
+// batch, it's main beneffit is to process the outcome of a given bacth
+// and fire delegates letting a client handle different failured/successfull
+// operations within a batch
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+using Microsoft.BizTalk.TransportProxy.Interop;
+using Microsoft.BizTalk.Message.Interop;
+
+namespace Microsoft.Samples.BizTalk.Adapters.BaseAdapter
+{
+ public class BatchMessage
+ {
+ private IBaseMessage message;
+ private object userData;
+ private string correlationToken;
+ private BatchOperationType operationType;
+
+ public BatchMessage (IBaseMessage message, object userData, BatchOperationType oppType)
+ {
+ this.message = message;
+ this.userData = userData;
+ this.operationType = oppType;
+ }
+
+ public BatchMessage (string correlationToken, object userData, BatchOperationType oppType)
+ {
+ this.correlationToken = correlationToken;
+ this.userData = userData;
+ this.operationType = oppType;
+ }
+
+ public IBaseMessage Message
+ {
+ get { return this.message; }
+ }
+ public object UserData
+ {
+ get { return this.userData; }
+ }
+ public string CorrelationToken
+ {
+ get { return this.correlationToken; }
+ }
+ public BatchOperationType OperationType
+ {
+ get { return this.operationType; }
+ }
+ }
+
+ ///
+ /// This class completely wraps the calls to a transportProxy batch. It does this so it can keep
+ /// a trail of the messages that were submitted to that batch. As it has this it can then tie the
+ /// async batch callback to a series of virtual function calls - all parameterized with the correct
+ /// assocaited message object. Derived classes can then decide what they want to do in each case.
+ ///
+ public class Batch : IBTBatchCallBack
+ {
+ private Int32 hrStatus;
+
+ public bool OverallSuccess
+ {
+ get { return (this.hrStatus >= 0); }
+ }
+
+ // IBTBatchCallBack
+ public void BatchComplete (Int32 hrStatus, Int16 nOpCount, BTBatchOperationStatus[] pOperationStatus, System.Object vCallbackCookie)
+ {
+ Trace.WriteLine(string.Format("Batch.BatchComplete( hrStatus:{0} ) called", hrStatus), "Base Adapter: Info" );
+
+ this.hrStatus = hrStatus;
+
+ StartBatchComplete(hrStatus);
+
+ // nothing at all failed in this batch so we are done
+ if (hrStatus < 0 || this.verbose)
+ {
+ StartProcessOpperations();
+
+ foreach (BTBatchOperationStatus status in pOperationStatus)
+ {
+ if (status.Status >= 0 && !this.verbose)
+ continue;
+
+ switch (status.OperationType)
+ {
+ case BatchOperationType.Submit:
+ {
+ for (int i=0; i
+ /// This class encapsulates the typical behavior we want in a Transmit Adapter running asynchronously.
+ /// In summary our policy is:
+ /// (1) on a resubmit failure Move to the next transport
+ /// (2) on a move to next transport failure move to the suspend queue
+ /// Otherwise:
+ /// TODO: we should use SetErrorInfo on the transportProxy to log the error appropriately
+ ///
+/*
+ public class TypicalAsyncTransmitResponseBatch : Batch
+ {
+ public delegate void AllWorkDoneDelegate ();
+
+ private AllWorkDoneDelegate allWorkDoneDelegate;
+
+ public TypicalAsyncTransmitResponseBatch (IBTTransportProxy transportProxy, AllWorkDoneDelegate allWorkDoneDelegate) : base(transportProxy, false)
+ {
+ this.allWorkDoneDelegate = allWorkDoneDelegate;
+ }
+ protected override void StartProcessOpperations ()
+ {
+ this.batch = new TypicalAsyncTransmitResponseBatch(this.TransportProxy, this.allWorkDoneDelegate);
+ this.allWorkDoneDelegate = null;
+ }
+ protected override void EndProcessOpperations ()
+ {
+ this.batch.Done(null);
+ }
+ protected override void EndBatchComplete (object cookie)
+ {
+ if (null != this.allWorkDoneDelegate)
+ this.allWorkDoneDelegate();
+ }
+ protected override void ResubmitFailure (IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.batch.MoveToNextTransport(message);
+ }
+ protected override void MoveToNextTransportFailure (IBaseMessage message, Int32 hrStatus, object userData)
+ {
+ this.batch.MoveToSuspendQ(message);
+ }
+ private Batch batch;
+ }
+ */
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BizTalk ODBC Adapter 2010.sln b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BizTalk ODBC Adapter 2010.sln
new file mode 100644
index 00000000..12fce06b
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/BizTalk ODBC Adapter 2010.sln
@@ -0,0 +1,104 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D4E0CF37-CC4A-40BE-A66C-D9AF9331FC75}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODBCTransmitAdapter", "Adapter\Run-Time\ODBCTransmit\ODBCTransmitAdapter.csproj", "{6ED3D08A-2369-441B-BE6F-AF06A94B4674}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODBCSchemaWizard", "ODBCSchemaWizard\ODBCSchemaWizard.csproj", "{3BCB956F-E5FB-4D40-9090-8E44E92C5353}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestHarness", "TestHarness\TestHarness.csproj", "{21B99320-0A35-4B38-B876-C090D198795E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODBCQueryProcessor", "ODBCQueryProcessor\ODBCQueryProcessor.csproj", "{516F27B0-23E4-4704-9A86-A5064769522A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdapterManagement", "Adapter\Design-Time\AdapterManagement.csproj", "{CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODBCDriverPrompt", "ODBCDriverPrompt\ODBCDriverPrompt.csproj", "{F25132D9-07AA-4B41-90AD-828E54704692}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODBCReceiveAdapter", "Adapter\Run-Time\ODBCReceive\ODBCReceiveAdapter.csproj", "{16B6C5EF-0B60-4D90-9A79-69B1CADA756A}"
+EndProject
+Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Install", "Install\Install.vdproj", "{B63CC6F2-407F-4724-81EB-7A0B7C722C0B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ODBCBaseAdapter", "BaseAdapter\ODBCBaseAdapter.csproj", "{6EF6BB4C-9417-4CAE-990D-49F1F368284B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Deployment|Any CPU = Deployment|Any CPU
+ Development|Any CPU = Development|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6ED3D08A-2369-441B-BE6F-AF06A94B4674}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}.Release|Any CPU.Build.0 = Release|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {21B99320-0A35-4B38-B876-C090D198795E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {516F27B0-23E4-4704-9A86-A5064769522A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F25132D9-07AA-4B41-90AD-828E54704692}.Release|Any CPU.Build.0 = Release|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {16B6C5EF-0B60-4D90-9A79-69B1CADA756A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B63CC6F2-407F-4724-81EB-7A0B7C722C0B}.Debug|Any CPU.ActiveCfg = Debug
+ {B63CC6F2-407F-4724-81EB-7A0B7C722C0B}.Deployment|Any CPU.ActiveCfg = Debug
+ {B63CC6F2-407F-4724-81EB-7A0B7C722C0B}.Development|Any CPU.ActiveCfg = Debug
+ {B63CC6F2-407F-4724-81EB-7A0B7C722C0B}.Release|Any CPU.ActiveCfg = Release
+ {B63CC6F2-407F-4724-81EB-7A0B7C722C0B}.Release|Any CPU.Build.0 = Release
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Deployment|Any CPU.ActiveCfg = Debug|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Deployment|Any CPU.Build.0 = Debug|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Development|Any CPU.ActiveCfg = Debug|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Development|Any CPU.Build.0 = Debug|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Install/Install.vdproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Install/Install.vdproj
new file mode 100644
index 00000000..c733d92d
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Install/Install.vdproj
@@ -0,0 +1,4332 @@
+"DeployProject"
+{
+"VSVersion" = "3:800"
+"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
+"IsWebType" = "8:FALSE"
+"ProjectName" = "8:Install"
+"LanguageId" = "3:1033"
+"CodePage" = "3:1252"
+"UILanguageId" = "3:1033"
+"SccProjectName" = "8:"
+"SccLocalPath" = "8:"
+"SccAuxPath" = "8:"
+"SccProvider" = "8:"
+ "Hierarchy"
+ {
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1AC19D6BAD25497981F990F0F23C763E"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_1BBE68A140384312AC8E0D130DA3D1A2"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "OwnerKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "OwnerKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2CD1F1C87A585BA8A15208C3405334C8"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2CD1F1C87A585BA8A15208C3405334C8"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_2CD1F1C87A585BA8A15208C3405334C8"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "OwnerKey" = "8:_2CD1F1C87A585BA8A15208C3405334C8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "OwnerKey" = "8:_542199B9FA1340818D3C1816761919C7"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "OwnerKey" = "8:_ABA3D3EACC8E4D5EAA0FD7E70EF106D0"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3E323F44761E4296A53D99323CD54AB2"
+ "OwnerKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3E323F44761E4296A53D99323CD54AB2"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3E323F44761E4296A53D99323CD54AB2"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_3E323F44761E4296A53D99323CD54AB2"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_542199B9FA1340818D3C1816761919C7"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "OwnerKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_80EB1D36530C36E6CD2F8F5214898BFA"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_80EB1D36530C36E6CD2F8F5214898BFA"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_80EB1D36530C36E6CD2F8F5214898BFA"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_80EB1D36530C36E6CD2F8F5214898BFA"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_80EB1D36530C36E6CD2F8F5214898BFA"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A4216CD9E1DE39734E77DE7F4FF7F242"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A4216CD9E1DE39734E77DE7F4FF7F242"
+ "OwnerKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A4216CD9E1DE39734E77DE7F4FF7F242"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_A4216CD9E1DE39734E77DE7F4FF7F242"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_ABA3D3EACC8E4D5EAA0FD7E70EF106D0"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AC786888A5534E82D59D0693BA259CFD"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AC786888A5534E82D59D0693BA259CFD"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AC786888A5534E82D59D0693BA259CFD"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "OwnerKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C46210393B76C6C64A1911813001C637"
+ "OwnerKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "OwnerKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "OwnerKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DAEF40376642A0288038EFDFDAA075EE"
+ "OwnerKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DAEF40376642A0288038EFDFDAA075EE"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DAEF40376642A0288038EFDFDAA075EE"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "OwnerKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "OwnerKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_2CD1F1C87A585BA8A15208C3405334C8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_DAEF40376642A0288038EFDFDAA075EE"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_69FC3E10E702922EA1A7CACCE8CCD778"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_2B092EC13E797658F99B663CA349E6C6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_078D95776C5A454089034ACCCC658380"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_12E217D3323A4946B35E7C2003FABA90"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_1AC19D6BAD25497981F990F0F23C763E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_1BBE68A140384312AC8E0D130DA3D1A2"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_27A9884B868840F9858D3ECF956B4289"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_542199B9FA1340818D3C1816761919C7"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_7C7E25C04552496696C81A549F4566AD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_837C0EA009C6435583E218E4E8D61C43"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_ABA3D3EACC8E4D5EAA0FD7E70EF106D0"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_BC507284ED9445BD914954D5C18F75CF"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_CADB28F898F44B34B55BFDBD008082B4"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_0193BE204960905334B4854F8253A81D"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_23D13C78F433A87429F5BE963A69B4CA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_2915DBA08C1181C739BFA3F877BE467B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_333327DE3B07DC8128F97CFE85C680F3"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_3E323F44761E4296A53D99323CD54AB2"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_78B2CEE29937646F24363A16777F1240"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_80EB1D36530C36E6CD2F8F5214898BFA"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_A4216CD9E1DE39734E77DE7F4FF7F242"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_AC786888A5534E82D59D0693BA259CFD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_B5FC0F02F298172973F811F32D7B1B4B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_CA9663F4AD4FCF8B323204D4ED387E87"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_D5DCA0B07F7B34F252B9B96679612940"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_DD76E7B096F522BBB5991051663B34FD"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_E73319DBA3103E80973C2846D5755E15"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_FE7B4AB50C0AE85DA166772EE93E4674"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_UNDEFINED"
+ "OwnerKey" = "8:_FEC488E5088EC06A8854698D21C8B0A6"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ }
+ "Configurations"
+ {
+ "Debug"
+ {
+ "DisplayName" = "8:Debug"
+ "IsDebugOnly" = "11:TRUE"
+ "IsReleaseOnly" = "11:FALSE"
+ "OutputFilename" = "8:Debug\\BizTalkODBCAdapter2010Debug.msi"
+ "PackageFilesAs" = "3:2"
+ "PackageFileSize" = "3:-2147483648"
+ "CabType" = "3:1"
+ "Compression" = "3:2"
+ "SignOutput" = "11:FALSE"
+ "CertificateFile" = "8:"
+ "PrivateKeyFile" = "8:"
+ "TimeStampServer" = "8:"
+ "InstallerBootstrapper" = "3:2"
+ "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+ {
+ "Enabled" = "11:TRUE"
+ "PromptEnabled" = "11:TRUE"
+ "PrerequisitesLocation" = "2:1"
+ "Url" = "8:"
+ "ComponentsUrl" = "8:"
+ "Items"
+ {
+ }
+ }
+ }
+ "Release"
+ {
+ "DisplayName" = "8:Release"
+ "IsDebugOnly" = "11:FALSE"
+ "IsReleaseOnly" = "11:TRUE"
+ "OutputFilename" = "8:Release\\BizTalkODBCAdapter2010.msi"
+ "PackageFilesAs" = "3:2"
+ "PackageFileSize" = "3:-2147483648"
+ "CabType" = "3:1"
+ "Compression" = "3:2"
+ "SignOutput" = "11:FALSE"
+ "CertificateFile" = "8:"
+ "PrivateKeyFile" = "8:"
+ "TimeStampServer" = "8:"
+ "InstallerBootstrapper" = "3:2"
+ "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
+ {
+ "Enabled" = "11:TRUE"
+ "PromptEnabled" = "11:TRUE"
+ "PrerequisitesLocation" = "2:1"
+ "Url" = "8:"
+ "ComponentsUrl" = "8:"
+ "Items"
+ {
+ }
+ }
+ }
+ }
+ "Deployable"
+ {
+ "CustomAction"
+ {
+ "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_4AA323C2EBBC4E8485BC5E848E8AE227"
+ {
+ "Name" = "8:Primary output from ODBCQueryProcessor (Active)"
+ "Condition" = "8:"
+ "Object" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "FileType" = "3:1"
+ "InstallAction" = "3:4"
+ "Arguments" = "8:"
+ "EntryPoint" = "8:"
+ "Sequence" = "3:1"
+ "Identifier" = "8:_BD2C6F12_7569_439F_9229_7E148F049B52"
+ "InstallerClass" = "11:TRUE"
+ "CustomActionData" = "8:"
+ }
+ "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_800095F4D2014EE9973958074AB924EE"
+ {
+ "Name" = "8:Primary output from ODBCQueryProcessor (Active)"
+ "Condition" = "8:"
+ "Object" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "FileType" = "3:1"
+ "InstallAction" = "3:1"
+ "Arguments" = "8:"
+ "EntryPoint" = "8:"
+ "Sequence" = "3:1"
+ "Identifier" = "8:_18180C4C_FE92_4CCA_AE45_2A66966C6ECF"
+ "InstallerClass" = "11:TRUE"
+ "CustomActionData" = "8:"
+ }
+ "{4AA51A2D-7D85-4A59-BA75-B0809FC8B380}:_E040B27C057B465484681955FBDAB36A"
+ {
+ "Name" = "8:Primary output from ODBCQueryProcessor (Active)"
+ "Condition" = "8:"
+ "Object" = "8:_E8BA589AE9754D4D81A6E22AAB39330D"
+ "FileType" = "3:1"
+ "InstallAction" = "3:2"
+ "Arguments" = "8:"
+ "EntryPoint" = "8:"
+ "Sequence" = "3:1"
+ "Identifier" = "8:_9D0CDD17_23EC_40DE_96B5_E03055210E25"
+ "InstallerClass" = "11:TRUE"
+ "CustomActionData" = "8:"
+ }
+ }
+ "DefaultFeature"
+ {
+ "Name" = "8:DefaultFeature"
+ "Title" = "8:"
+ "Description" = "8:"
+ }
+ "ExternalPersistence"
+ {
+ "LaunchCondition"
+ {
+ "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_07EE1C7583584DA6AE953A41AABEB945"
+ {
+ "Name" = "8:.NET Framework"
+ "Message" = "8:[VSDNETMSG]"
+ "FrameworkVersion" = "8:.NETFramework,Version=v4.0"
+ "AllowLaterVersions" = "11:FALSE"
+ "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=9832"
+ }
+ }
+ }
+ "File"
+ {
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0193BE204960905334B4854F8253A81D"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Streaming, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_0193BE204960905334B4854F8253A81D"
+ {
+ "Name" = "8:Microsoft.BizTalk.Streaming.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Streaming.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0F190CF5DCA7BBE4C329D271D107EB5A"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:ODBCBaseAdapter, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:ODBCBaseAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_123E25EA3E19B1C0F1E5412355EDBC2E"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Tracking.BasicTypes, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_123E25EA3E19B1C0F1E5412355EDBC2E"
+ {
+ "Name" = "8:Microsoft.BizTalk.Tracking.BasicTypes.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Tracking.BasicTypes.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_1923F21CB9AC639D9BFE3A5D3EDC7BA8"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.XLANGs.BizTalk.Engine, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:Microsoft.XLANGs.BizTalk.Engine.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_23D13C78F433A87429F5BE963A69B4CA"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.CachingService, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_23D13C78F433A87429F5BE963A69B4CA"
+ {
+ "Name" = "8:Microsoft.BizTalk.CachingService.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.CachingService.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2915DBA08C1181C739BFA3F877BE467B"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Interop.TransportProxy, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_2915DBA08C1181C739BFA3F877BE467B"
+ {
+ "Name" = "8:Microsoft.BizTalk.Interop.TransportProxy.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Interop.TransportProxy.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2B092EC13E797658F99B663CA349E6C6"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.XLANGs.Engine, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:Microsoft.XLANGs.Engine.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_2CD1F1C87A585BA8A15208C3405334C8"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:ODBCSchemaWizard, Version=1.2.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:ODBCSchemaWizard.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_333327DE3B07DC8128F97CFE85C680F3"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.ObjectModel, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_333327DE3B07DC8128F97CFE85C680F3"
+ {
+ "Name" = "8:Microsoft.BizTalk.ObjectModel.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.ObjectModel.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3B0B56BD1CE67AB0F07034CC3BEDD477"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:ODBCDriverPrompt, Version=1.2.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:ODBCDriverPrompt.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3CEB98B33E64F4C9936AD0625B13DAC8"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:ODBCQueryProcessor, Version=1.2.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:ODBCQueryProcessor.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_3E323F44761E4296A53D99323CD54AB2"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.TypeSystem, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_3E323F44761E4296A53D99323CD54AB2"
+ {
+ "Name" = "8:Microsoft.BizTalk.TypeSystem.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.TypeSystem.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Security.SSPI, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86"
+ "ScatterAssemblies"
+ {
+ "_4A7F2FFC6E2431C0C5AD38BF5090B0CB"
+ {
+ "Name" = "8:Microsoft.BizTalk.Security.SSPI.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Security.SSPI.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_69FC3E10E702922EA1A7CACCE8CCD778"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:EnvDTE.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.RuleEngineExtensions, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_6FD7E44A131BC6BA5FCD8FCF8E941E72"
+ {
+ "Name" = "8:Microsoft.BizTalk.RuleEngineExtensions.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.RuleEngineExtensions.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_78B2CEE29937646F24363A16777F1240"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.CommonSettings, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_78B2CEE29937646F24363A16777F1240"
+ {
+ "Name" = "8:Microsoft.BizTalk.CommonSettings.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.CommonSettings.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_796FD57A229CE7E724EB6AE69A7BD0F8"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Adapter.Framework, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_796FD57A229CE7E724EB6AE69A7BD0F8"
+ {
+ "Name" = "8:Microsoft.BizTalk.Adapter.Framework.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Adapter.Framework.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_80EB1D36530C36E6CD2F8F5214898BFA"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.MSIManager, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_80EB1D36530C36E6CD2F8F5214898BFA"
+ {
+ "Name" = "8:Microsoft.BizTalk.MSIManager.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.MSIManager.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Bam.EventObservation, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_84EC3A53DF515F5C74BEE25AFBC27C6A"
+ {
+ "Name" = "8:Microsoft.BizTalk.Bam.EventObservation.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Bam.EventObservation.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.XPathReader, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_8F6DDE1E3CEC73425D9AD4A613B7F0B0"
+ {
+ "Name" = "8:Microsoft.BizTalk.XPathReader.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.XPathReader.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A4216CD9E1DE39734E77DE7F4FF7F242"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.IMS, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_A4216CD9E1DE39734E77DE7F4FF7F242"
+ {
+ "Name" = "8:Microsoft.BizTalk.IMS.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.IMS.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_AC786888A5534E82D59D0693BA259CFD"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Databases, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_AC786888A5534E82D59D0693BA259CFD"
+ {
+ "Name" = "8:Microsoft.BizTalk.Databases.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Databases.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Tracing, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_AD79ABB10FB8C3AF4C3BB7DE32B092DE"
+ {
+ "Name" = "8:Microsoft.BizTalk.Tracing.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Tracing.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B5FC0F02F298172973F811F32D7B1B4B"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.BtsDbVersion, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_B5FC0F02F298172973F811F32D7B1B4B"
+ {
+ "Name" = "8:Microsoft.BizTalk.BtsDbVersion.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.BtsDbVersion.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.XLANGs.BizTalk.ProcessInterface, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C0B9306A71E944CBF75AEAF7CC3EAC6B"
+ {
+ "Name" = "8:Microsoft.XLANGs.BizTalk.ProcessInterface.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.XLANGs.BizTalk.ProcessInterface.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C46210393B76C6C64A1911813001C637"
+ {
+ "SourcePath" = "8:dte80a.olb"
+ "TargetName" = "8:dte80a.olb"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Pipeline, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_C4DB1E2CE4A106DB3BE1781738B3F20E"
+ {
+ "Name" = "8:Microsoft.BizTalk.Pipeline.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Pipeline.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CA9663F4AD4FCF8B323204D4ED387E87"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.SqmFramework, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_CA9663F4AD4FCF8B323204D4ED387E87"
+ {
+ "Name" = "8:Microsoft.BizTalk.SqmFramework.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.SqmFramework.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.Interop.Agent, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_CB1C00E60B5A25DB2DD85B5DA58469E3"
+ {
+ "Name" = "8:Microsoft.BizTalk.Interop.Agent.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.Interop.Agent.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D5DCA0B07F7B34F252B9B96679612940"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.XLANGs.BaseTypes, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_D5DCA0B07F7B34F252B9B96679612940"
+ {
+ "Name" = "8:Microsoft.XLANGs.BaseTypes.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.XLANGs.BaseTypes.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DAEF40376642A0288038EFDFDAA075EE"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:FALSE"
+ "AssemblyAsmDisplayName" = "8:stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
+ "ScatterAssemblies"
+ {
+ }
+ "SourcePath" = "8:stdole.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DD76E7B096F522BBB5991051663B34FD"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.XLANGs.RuntimeTypes, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_DD76E7B096F522BBB5991051663B34FD"
+ {
+ "Name" = "8:Microsoft.XLANGs.RuntimeTypes.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.XLANGs.RuntimeTypes.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E73319DBA3103E80973C2846D5755E15"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.RuleEngine, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_E73319DBA3103E80973C2846D5755E15"
+ {
+ "Name" = "8:Microsoft.RuleEngine.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.RuleEngine.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FE7B4AB50C0AE85DA166772EE93E4674"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.GlobalPropertySchemas, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FE7B4AB50C0AE85DA166772EE93E4674"
+ {
+ "Name" = "8:Microsoft.BizTalk.GlobalPropertySchemas.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.GlobalPropertySchemas.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_FEC488E5088EC06A8854698D21C8B0A6"
+ {
+ "AssemblyRegister" = "3:1"
+ "AssemblyIsInGAC" = "11:TRUE"
+ "AssemblyAsmDisplayName" = "8:Microsoft.BizTalk.ExplorerOM, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
+ "ScatterAssemblies"
+ {
+ "_FEC488E5088EC06A8854698D21C8B0A6"
+ {
+ "Name" = "8:Microsoft.BizTalk.ExplorerOM.dll"
+ "Attributes" = "3:512"
+ }
+ }
+ "SourcePath" = "8:Microsoft.BizTalk.ExplorerOM.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:TRUE"
+ "IsDependency" = "11:TRUE"
+ "IsolateTo" = "8:"
+ }
+ }
+ "FileType"
+ {
+ }
+ "Folder"
+ {
+ "{3C67513D-01DD-4637-8A68-80971EB9504F}:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ {
+ "DefaultLocation" = "8:C:\\Program Files\\BizTalk Adapter for ODBC"
+ "Name" = "8:#1925"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:TARGETDIR"
+ "Folders"
+ {
+ }
+ }
+ "{C7E34266-2C30-44B9-A9A3-4E394ABD6E18}:_A8ED5FC1A2C147A099C161688C2F31FF"
+ {
+ "Name" = "8:#1927"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:GAC"
+ "Folders"
+ {
+ }
+ }
+ }
+ "LaunchCondition"
+ {
+ }
+ "Locator"
+ {
+ "{CF66B7F7-B7DA-4B08-A67A-233430638C9C}:_BBFAE06FEC3842C79A7E5CCA59FAA3AA"
+ {
+ "Name" = "8:BizTalk Install Folder"
+ "Root" = "2:1"
+ "RegKey" = "8:SOFTWARE\\Microsoft\\BizTalk Server\\3.0"
+ "Value" = "8:InstallPath"
+ "Property" = "8:BIZTALKINSTALLFOLDER"
+ }
+ }
+ "MsiBootstrapper"
+ {
+ "LangId" = "3:1033"
+ "RequiresElevation" = "11:FALSE"
+ }
+ "Product"
+ {
+ "Name" = "8:Microsoft Visual Studio"
+ "ProductName" = "8:BizTalk ODBC Adapter"
+ "ProductCode" = "8:{211A1DBF-9C0E-4FC2-8943-92085FB479F4}"
+ "PackageCode" = "8:{0D00289B-71DC-4CE7-B0A2-6FAD81C4F9CB}"
+ "UpgradeCode" = "8:{0B5BAE97-9C05-41A5-89CC-27E8C45B54B2}"
+ "AspNetVersion" = "8:4.0.30319.0"
+ "RestartWWWService" = "11:FALSE"
+ "RemovePreviousVersions" = "11:FALSE"
+ "DetectNewerInstalledVersion" = "11:TRUE"
+ "InstallAllUsers" = "11:TRUE"
+ "ProductVersion" = "8:1.0.0"
+ "Manufacturer" = "8:Community"
+ "ARPHELPTELEPHONE" = "8:"
+ "ARPHELPLINK" = "8:"
+ "Title" = "8:BizTalk ODBDC Adapter"
+ "Subject" = "8:"
+ "ARPCONTACT" = "8:Community"
+ "Keywords" = "8:"
+ "ARPCOMMENTS" = "8:BizTalk ODBC Adapter"
+ "ARPURLINFOABOUT" = "8:"
+ "ARPPRODUCTICON" = "8:"
+ "ARPIconIndex" = "3:0"
+ "SearchPath" = "8:"
+ "UseSystemSearchPath" = "11:TRUE"
+ "TargetPlatform" = "3:0"
+ "PreBuildEvent" = "8:"
+ "PostBuildEvent" = "8:"
+ "RunPostBuildEvent" = "3:0"
+ }
+ "Registry"
+ {
+ "HKLM"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKCU"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKCR"
+ {
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_25BB50F90506471081D62060BA9F70B5"
+ {
+ "Name" = "8:CLSID"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_1E9056796E274E2F970184F712C1BD6E"
+ {
+ "Name" = "8:{8d285509-9e4a-4702-a8df-821e0f937d2b}"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_1DE8B25AC2BB4829A1932EF2FE1AA55B"
+ {
+ "Name" = "8:Implemented Categories"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:TRUE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B43A3A96764E4485A47176DDFA0D49CA"
+ {
+ "Name" = "8:{7F46FC3E-3C2C-405B-A47F-8D17942BA8F9}"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:TRUE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ "Values"
+ {
+ }
+ }
+ "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_5440913016DA489886E420BA795658A3"
+ {
+ "Name" = "8:BizTalk"
+ "Condition" = "8:"
+ "AlwaysCreate" = "11:FALSE"
+ "DeleteAtUninstall" = "11:FALSE"
+ "Transitive" = "11:FALSE"
+ "Keys"
+ {
+ }
+ "Values"
+ {
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_01044C7F7B9747138561EB6B05CA9E4C"
+ {
+ "Name" = "8:TransmitLocation_PageProv"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{2DE93EE6-CB01-4007-93E9-C3D71689A282}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_03A2F7DD11EC4D91B9BF6401BD9B2D90"
+ {
+ "Name" = "8:SendHandlerPropertiesXML"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_19C0EC81862A40DDB67B2C9DB7F665C7"
+ {
+ "Name" = "8:SendLocationPropertiesXML"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_200F043FD484411794FF661AEDA1C1A5"
+ {
+ "Name" = "8:Constraints"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:3"
+ "Value" = "3:81163"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_2DE01D5318F64087BBB272D0264108AE"
+ {
+ "Name" = "8:OutboundProtocol_PageProv"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{2DE93EE6-CB01-4007-93E9-C3D71689A283}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_39EC4DC56AD640AFB1640E97314F16D8"
+ {
+ "Name" = "8:OutboundEngineCLSID"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{884c48a8-0856-409a-bafa-344257874914}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_556FAD87C251483FA873861EC038548C"
+ {
+ "Name" = "8:ReceiveLocationPropertiesXML"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_5A5922C4ECA54A36AF0F7566DDE670ED"
+ {
+ "Name" = "8:AliasesXML"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:ODBC://"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_6042C49571474615BE12F76C19086ABE"
+ {
+ "Name" = "8:InboundTypeName"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCReceiveAdapter.ODBCReceiver, ODBCAdapterManagement, Version=1.2.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_76A082327612414F8F7A8C45CD75BA07"
+ {
+ "Name" = "8:InboundEngineCLSID"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{4b7d3786-5519-45e5-93e1-7ecfcd918c85}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_8F743D6852364BB58537137BB6B4B06D"
+ {
+ "Name" = "8:"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:BizTalk"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_A35EE9459B614047B0A3137ADDAD97FF"
+ {
+ "Name" = "8:ReceiveHandlerPropertiesXML"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_C23E4CC440614FD0BBF7210F4B73F2C0"
+ {
+ "Name" = "8:PropertyNameSpace"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:http://schemas.microsoft.com/ODBC"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_DD4BFEB4A43D4A9AA941AAB889FB9468"
+ {
+ "Name" = "8:TransPortType"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:ODBC"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_E89FF30A6F094DEBBBF50B4423F86DB1"
+ {
+ "Name" = "8:InboundProtocol_PageProv"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{2DE93EE6-CB01-4007-93E9-C3D71689A281}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_ECB51173DA214BFC8262046002344CE3"
+ {
+ "Name" = "8:OutboundTypeName"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCTransmitAdapter.ODBCTransmitter, ODBCAdapterManagement, Version=1.2.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_F100F8A3FCA54C2191BAF4D69168F570"
+ {
+ "Name" = "8:ReceiveLocation_PageProv"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{2DE93EE6-CB01-4007-93E9-C3D71689A280}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_FB4A4E5BD710429BB73A4CCF3D9AECCE"
+ {
+ "Name" = "8:AdapterMgmtTypeName"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime.AdapterManagement, ODBCAdapterManagement, Version=1.2.0.0, Culture=neutral, PublicKeyToken=0ad1f077efbaab97, processorArchitecture=MSIL"
+ }
+ }
+ }
+ }
+ "Values"
+ {
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_BD8239BDF5154DD3A1BED6C3AE4C1D9C"
+ {
+ "Name" = "8:AppID"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:{ea74dc63-3c08-40a1-8737-d68ccaa0130f}"
+ }
+ "{ADCFDA98-8FDD-45E4-90BC-E3D20B029870}:_D051537D844B49FB9ED2F54805A14398"
+ {
+ "Name" = "8:"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "ValueTypes" = "3:1"
+ "Value" = "8:Community BizTalk ODBC Adapter"
+ }
+ }
+ }
+ }
+ "Values"
+ {
+ }
+ }
+ }
+ }
+ "HKU"
+ {
+ "Keys"
+ {
+ }
+ }
+ "HKPU"
+ {
+ "Keys"
+ {
+ }
+ }
+ }
+ "Sequences"
+ {
+ }
+ "Shortcut"
+ {
+ }
+ "UserInterface"
+ {
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_1122453C7E1F402D8D7C1F87C9A93B76"
+ {
+ "UseDynamicProperties" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdUserInterface.wim"
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_26546C3E4D6343A9BDE4A07940DC937A"
+ {
+ "Name" = "8:#1901"
+ "Sequence" = "3:2"
+ "Attributes" = "3:2"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CD6799840BAD4B9DACD6E9F9334B31B2"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Progress"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminProgressDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "ShowProgress"
+ {
+ "Name" = "8:ShowProgress"
+ "DisplayName" = "8:#1009"
+ "Description" = "8:#1109"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3BC2F22FD243423A8BF23688BBAA0224"
+ {
+ "Name" = "8:#1900"
+ "Sequence" = "3:2"
+ "Attributes" = "3:1"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_00352C7B64564A739C6B8DBFF5951458"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Welcome"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "CopyrightWarning"
+ {
+ "Name" = "8:CopyrightWarning"
+ "DisplayName" = "8:#1002"
+ "Description" = "8:#1102"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1202"
+ "DefaultValue" = "8:#1202"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "Welcome"
+ {
+ "Name" = "8:Welcome"
+ "DisplayName" = "8:#1003"
+ "Description" = "8:#1103"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1203"
+ "DefaultValue" = "8:#1203"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_939D8F75CEDA41E28A59DE2FF01C7830"
+ {
+ "Sequence" = "3:300"
+ "DisplayName" = "8:Confirm Installation"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminConfirmDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A9FA406F0E044E1BB5EF537AF6011529"
+ {
+ "Sequence" = "3:200"
+ "DisplayName" = "8:Installation Folder"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminFolderDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_5A9C72CCD892467AA2B6716737B849B9"
+ {
+ "Name" = "8:#1902"
+ "Sequence" = "3:2"
+ "Attributes" = "3:3"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D8DD5FFE52D24932AD776C11E2DF3D44"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Finished"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdAdminFinishedDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_66EBA3A03DDD4DBDBA5787577084C53D"
+ {
+ "UseDynamicProperties" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdBasicDialogs.wim"
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7CECD9CFCF654EDD8A9520BB85652F4F"
+ {
+ "Name" = "8:#1901"
+ "Sequence" = "3:1"
+ "Attributes" = "3:2"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2F582CCE66BC494AB47E7B9AF96DD1D8"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Progress"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdProgressDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "ShowProgress"
+ {
+ "Name" = "8:ShowProgress"
+ "DisplayName" = "8:#1009"
+ "Description" = "8:#1109"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:1"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E87C635E0BEE443499D2444EAD319F15"
+ {
+ "Name" = "8:#1902"
+ "Sequence" = "3:1"
+ "Attributes" = "3:3"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_166325E9201F40CE8504A2100B738478"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Finished"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdFinishedDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "UpdateText"
+ {
+ "Name" = "8:UpdateText"
+ "DisplayName" = "8:#1058"
+ "Description" = "8:#1158"
+ "Type" = "3:15"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1258"
+ "DefaultValue" = "8:#1258"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_EEDE30F05E3E48369E4D5B6A0DFB7A6A"
+ {
+ "Name" = "8:#1900"
+ "Sequence" = "3:1"
+ "Attributes" = "3:1"
+ "Dialogs"
+ {
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_223228F358E04A98BF78D66C7C7B3F2D"
+ {
+ "Sequence" = "3:200"
+ "DisplayName" = "8:Installation Folder"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdFolderDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "InstallAllUsersVisible"
+ {
+ "Name" = "8:InstallAllUsersVisible"
+ "DisplayName" = "8:#1059"
+ "Description" = "8:#1159"
+ "Type" = "3:5"
+ "ContextData" = "8:1;True=1;False=0"
+ "Attributes" = "3:0"
+ "Setting" = "3:0"
+ "Value" = "3:0"
+ "DefaultValue" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3BB45EA187024D508108A82BAA9F50A4"
+ {
+ "Sequence" = "3:100"
+ "DisplayName" = "8:Welcome"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdWelcomeDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "CopyrightWarning"
+ {
+ "Name" = "8:CopyrightWarning"
+ "DisplayName" = "8:#1002"
+ "Description" = "8:#1102"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1202"
+ "DefaultValue" = "8:#1202"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ "Welcome"
+ {
+ "Name" = "8:Welcome"
+ "DisplayName" = "8:#1003"
+ "Description" = "8:#1103"
+ "Type" = "3:3"
+ "ContextData" = "8:"
+ "Attributes" = "3:0"
+ "Setting" = "3:1"
+ "Value" = "8:#1203"
+ "DefaultValue" = "8:#1203"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4D6B684E851F493087453115DE83BD11"
+ {
+ "Sequence" = "3:300"
+ "DisplayName" = "8:Confirm Installation"
+ "UseDynamicProperties" = "11:TRUE"
+ "IsDependency" = "11:FALSE"
+ "SourcePath" = "8:\\VsdConfirmDlg.wid"
+ "Properties"
+ {
+ "BannerBitmap"
+ {
+ "Name" = "8:BannerBitmap"
+ "DisplayName" = "8:#1001"
+ "Description" = "8:#1101"
+ "Type" = "3:8"
+ "ContextData" = "8:Bitmap"
+ "Attributes" = "3:4"
+ "Setting" = "3:1"
+ "UsePlugInResources" = "11:TRUE"
+ }
+ }
+ }
+ }
+ }
+ }
+ "MergeModule"
+ {
+ }
+ "ProjectOutput"
+ {
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_078D95776C5A454089034ACCCC658380"
+ {
+ "SourcePath" = "8:..\\Adapter\\Design-Time\\obj\\Release\\ODBCAdapterManagement.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_12E217D3323A4946B35E7C2003FABA90"
+ {
+ "SourcePath" = "8:..\\BaseAdapter\\obj\\Release\\ODBCBaseAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{6EF6BB4C-9417-4CAE-990D-49F1F368284B}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_19AB21EAD8C3456FB43BF82BD1B051DA"
+ {
+ "SourcePath" = "8:..\\BaseAdapter\\obj\\Release\\ODBCBaseAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{6EF6BB4C-9417-4CAE-990D-49F1F368284B}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1AC19D6BAD25497981F990F0F23C763E"
+ {
+ "SourcePath" = "8:..\\ODBCDriverPrompt\\obj\\Release\\ODBCDriverPrompt.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{F25132D9-07AA-4B41-90AD-828E54704692}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1BBE68A140384312AC8E0D130DA3D1A2"
+ {
+ "SourcePath" = "8:..\\ODBCDriverPrompt\\obj\\Release\\ODBCDriverPrompt.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{F25132D9-07AA-4B41-90AD-828E54704692}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_27A9884B868840F9858D3ECF956B4289"
+ {
+ "SourcePath" = "8:..\\ODBCQueryProcessor\\obj\\Release\\ODBCQueryProcessor.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{516F27B0-23E4-4704-9A86-A5064769522A}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_542199B9FA1340818D3C1816761919C7"
+ {
+ "SourcePath" = "8:..\\ODBCSchemaWizard\\obj\\Release\\ODBCSchemaWizard.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{3BCB956F-E5FB-4D40-9090-8E44E92C5353}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_5B7EA5B25E2743E5B85DCB503B5FFBBD"
+ {
+ "SourcePath" = "8:..\\TestHarness\\obj\\Release\\Microsoft.BizTalk.Adapters.ODBC.TestHarness.exe"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{21B99320-0A35-4B38-B876-C090D198795E}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_7C7E25C04552496696C81A549F4566AD"
+ {
+ "SourcePath" = "8:..\\Adapter\\Run-Time\\ODBCReceive\\obj\\Release\\ODBCReceiveAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{16B6C5EF-0B60-4D90-9A79-69B1CADA756A}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_837C0EA009C6435583E218E4E8D61C43"
+ {
+ "SourcePath" = "8:..\\Adapter\\Run-Time\\ODBCReceive\\obj\\Release\\ODBCReceiveAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{16B6C5EF-0B60-4D90-9A79-69B1CADA756A}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_8646CF2171E44BF3A78C9F4EAF8B68CF"
+ {
+ "SourcePath" = "8:..\\Adapter\\Design-Time\\obj\\Release\\ODBCAdapterManagement.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{CD29DF32-44FE-4CC6-A43E-01A74B25B9E3}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_ABA3D3EACC8E4D5EAA0FD7E70EF106D0"
+ {
+ "SourcePath" = "8:..\\ODBCSchemaWizard\\obj\\Release\\ODBCSchemaWizard.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{3BCB956F-E5FB-4D40-9090-8E44E92C5353}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BC507284ED9445BD914954D5C18F75CF"
+ {
+ "SourcePath" = "8:..\\Adapter\\Run-Time\\ODBCTransmit\\obj\\Release\\ODBCTransmitAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{6ED3D08A-2369-441B-BE6F-AF06A94B4674}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_CADB28F898F44B34B55BFDBD008082B4"
+ {
+ "SourcePath" = "8:..\\Adapter\\Run-Time\\ODBCTransmit\\obj\\Release\\ODBCTransmitAdapter.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_A8ED5FC1A2C147A099C161688C2F31FF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{6ED3D08A-2369-441B-BE6F-AF06A94B4674}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E8BA589AE9754D4D81A6E22AAB39330D"
+ {
+ "SourcePath" = "8:..\\ODBCQueryProcessor\\obj\\Release\\ODBCQueryProcessor.dll"
+ "TargetName" = "8:"
+ "Tag" = "8:"
+ "Folder" = "8:_079E1DB4B6F845BAB181AEEFE92B9CFF"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ "ProjectOutputGroupRegister" = "3:1"
+ "OutputConfiguration" = "8:"
+ "OutputGroupCanonicalName" = "8:Built"
+ "OutputProjectGuid" = "8:{516F27B0-23E4-4704-9A86-A5064769522A}"
+ "ShowKeyOutput" = "11:TRUE"
+ "ExcludeFilters"
+ {
+ }
+ }
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/AssemblyInfo.cs
new file mode 100644
index 00000000..3ee1df2f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/AssemblyInfo.cs
@@ -0,0 +1,16 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyTitle( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyDescription( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyConfiguration( "" )]
+[assembly: AssemblyCompany( "Microsoft Corporation" )]
+[assembly: AssemblyProduct( "Microsoft BizTalk Server 2006" )]
+[assembly: AssemblyCopyright( "Copyright (C) 2006 Microsoft Corporation. All rights reserved." )]
+[assembly: AssemblyTrademark( "" )]
+[assembly: AssemblyCulture( "" )]
+
+[assembly: AssemblyVersion( "1.2.0.0" )]
+
+[assembly: AssemblyDelaySign( false )]
+[assembly: AssemblyKeyName( "" )]
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverDialog.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverDialog.cs
new file mode 100644
index 00000000..db2109f5
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverDialog.cs
@@ -0,0 +1,256 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+
+namespace ODBCDriverPrompt
+{
+ public class ODBCDriverDialog : System.Windows.Forms.Form
+ {
+ internal System.Windows.Forms.Button cmdCancel;
+ internal System.Windows.Forms.CheckBox chkIncludeUID;
+ internal System.Windows.Forms.Label Label1;
+ internal System.Windows.Forms.Button cmdNewDSN;
+ internal System.Windows.Forms.Button cmdOK;
+ internal System.Windows.Forms.ListBox lstDSNs;
+
+ private System.ComponentModel.Container components = null;
+
+ private string mConnectionString = null;
+
+ public ODBCDriverDialog( )
+ {
+ Application.EnableVisualStyles( );
+
+ InitializeComponent( );
+ }
+
+ public string ConnectionString
+ {
+ get
+ {
+ return mConnectionString;
+ }
+ set
+ {
+ mConnectionString = value;
+ }
+ }
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.cmdCancel = new System.Windows.Forms.Button( );
+ this.chkIncludeUID = new System.Windows.Forms.CheckBox( );
+ this.Label1 = new System.Windows.Forms.Label( );
+ this.cmdNewDSN = new System.Windows.Forms.Button( );
+ this.cmdOK = new System.Windows.Forms.Button( );
+ this.lstDSNs = new System.Windows.Forms.ListBox( );
+ this.SuspendLayout( );
+ //
+ // cmdCancel
+ //
+ this.cmdCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.cmdCancel.Location = new System.Drawing.Point( 308, 64 );
+ this.cmdCancel.Name = "cmdCancel";
+ this.cmdCancel.Size = new System.Drawing.Size( 104, 24 );
+ this.cmdCancel.TabIndex = 11;
+ this.cmdCancel.Text = "Cancel";
+ this.cmdCancel.Click += new System.EventHandler( this.cmdCancel_Click );
+ //
+ // chkIncludeUID
+ //
+ this.chkIncludeUID.Checked = true;
+ this.chkIncludeUID.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.chkIncludeUID.Location = new System.Drawing.Point( 8, 185 );
+ this.chkIncludeUID.Name = "chkIncludeUID";
+ this.chkIncludeUID.Size = new System.Drawing.Size( 288, 16 );
+ this.chkIncludeUID.TabIndex = 10;
+ this.chkIncludeUID.Text = "Include UserID and Password";
+ //
+ // Label1
+ //
+ this.Label1.Location = new System.Drawing.Point( 8, 8 );
+ this.Label1.Name = "Label1";
+ this.Label1.Size = new System.Drawing.Size( 408, 16 );
+ this.Label1.TabIndex = 9;
+ this.Label1.Text = "Please select a data source name";
+ //
+ // cmdNewDSN
+ //
+ this.cmdNewDSN.Location = new System.Drawing.Point( 308, 155 );
+ this.cmdNewDSN.Name = "cmdNewDSN";
+ this.cmdNewDSN.Size = new System.Drawing.Size( 104, 24 );
+ this.cmdNewDSN.TabIndex = 8;
+ this.cmdNewDSN.Text = "New DSN...";
+ this.cmdNewDSN.Click += new System.EventHandler( this.cmdNewDSN_Click );
+ //
+ // cmdOK
+ //
+ this.cmdOK.Location = new System.Drawing.Point( 308, 32 );
+ this.cmdOK.Name = "cmdOK";
+ this.cmdOK.Size = new System.Drawing.Size( 104, 24 );
+ this.cmdOK.TabIndex = 7;
+ this.cmdOK.Text = "OK";
+ this.cmdOK.Click += new System.EventHandler( this.cmdOK_Click );
+ //
+ // lstDSNs
+ //
+ this.lstDSNs.Location = new System.Drawing.Point( 8, 32 );
+ this.lstDSNs.Name = "lstDSNs";
+ this.lstDSNs.Size = new System.Drawing.Size( 288, 147 );
+ this.lstDSNs.TabIndex = 6;
+ //
+ // ODBCDriverDialog
+ //
+ this.AcceptButton = this.cmdOK;
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 14 );
+ this.CancelButton = this.cmdCancel;
+ this.ClientSize = new System.Drawing.Size( 424, 206 );
+ this.Controls.Add( this.cmdCancel );
+ this.Controls.Add( this.chkIncludeUID );
+ this.Controls.Add( this.Label1 );
+ this.Controls.Add( this.cmdNewDSN );
+ this.Controls.Add( this.cmdOK );
+ this.Controls.Add( this.lstDSNs );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ODBCDriverDialog";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Choose Data Source";
+ this.Load += new System.EventHandler( this.ODBCDriverDialog_Load );
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main( )
+ {
+ Application.Run( new ODBCDriverDialog( ) );
+ }
+
+ private void cmdOK_Click( object sender, System.EventArgs e )
+ {
+ if ( lstDSNs.SelectedIndex == -1 )
+ {
+ MessageBox.Show( "Please select a database connection", "ODBC Driver Selection" );
+ }
+ else
+ {
+ if ( chkIncludeUID.Checked )
+ {
+ PasswordDialog frmCredentials = new PasswordDialog( );
+ if ( frmCredentials.ShowDialog( ) == DialogResult.OK )
+ {
+ this.ConnectionString = "DSN=" + lstDSNs.SelectedItem + ";UID=" + frmCredentials.UserID + ";PWD=" + frmCredentials.Password;
+ this.DialogResult = DialogResult.OK;
+ this.Close( );
+ }
+ else
+ {
+ this.ConnectionString = "DSN=" + lstDSNs.SelectedItem;
+ this.DialogResult = DialogResult.OK;
+ this.Close( );
+ }
+ }
+ else
+ {
+ this.ConnectionString = "DSN=" + lstDSNs.SelectedItem;
+ this.DialogResult = DialogResult.OK;
+ this.Close( );
+ }
+ }
+
+ }
+
+ private void cmdCancel_Click( object sender, System.EventArgs e )
+ {
+ this.DialogResult = DialogResult.Cancel;
+ this.Close( );
+ }
+
+ private void cmdNewDSN_Click( object sender, System.EventArgs e )
+ {
+ //'-----------------------------------------------------------------------------------
+ //'DESCRIPTION : Opens up system odbc dialog box, e.g: C:\Windows\system32\odbcad32.exe
+ //' Crude but works!
+ //'-----------------------------------------------------------------------------------
+
+ string strErMsg = "Failed to open system ODBC dialogue box";
+ string strPath = Environment.SystemDirectory + "\\odbcad32.exe";
+ //Process proDSN;
+ //Dim ipHandle As IntPtr
+
+ try
+ {
+ //'open up the system dsn dialog and wait until it exits:
+ System.Diagnostics.Process.Start( strPath ).WaitForExit( );
+ LoadList( );
+ }
+ catch ( Exception ex )
+ {
+ //'possible exceptions include security violation or bust windows box:
+ MessageBox.Show( "Error was: " + ex.Message, strErMsg, MessageBoxButtons.OK, MessageBoxIcon.Error );
+ }
+ }
+
+ private void ODBCDriverDialog_Load( object sender, System.EventArgs e )
+ {
+ LoadList( );
+ }
+
+ private void LoadList( )
+ {
+ ODBCHelper objODBCHelper = new ODBCHelper( );
+ ArrayList strDSNs;
+
+ try
+ {
+ //Get a new list of dsn instances
+ strDSNs = objODBCHelper.GetDSNList( );
+
+ lstDSNs.Items.Clear( );
+
+ if ( strDSNs != null && strDSNs.Count != 0 )
+ {
+ foreach ( string dsn in strDSNs )
+ {
+ lstDSNs.Items.Add( dsn.ToString( ) );
+ }
+ }
+ }
+ catch ( Exception ex )
+ {
+ MessageBox.Show( ex.Message, "Unexpected Error Loading DSN List", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverDialog.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverDialog.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverDialog.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverPrompt.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverPrompt.csproj
new file mode 100644
index 00000000..6c73a56c
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverPrompt.csproj
@@ -0,0 +1,182 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {F25132D9-07AA-4B41-90AD-828E54704692}
+ Debug
+ AnyCPU
+
+
+
+
+ ODBCDriverPrompt
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ Library
+ ODBCDriverPrompt
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ System
+
+
+ System.Data
+
+
+ System.Drawing
+
+
+ System.Windows.Forms
+
+
+ System.XML
+
+
+
+
+
+ Form
+
+
+ Code
+
+
+ Code
+
+
+ Form
+
+
+ ODBCDriverDialog.cs
+ Designer
+
+
+ PasswordDialog.cs
+ Designer
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverUI.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverUI.cs
new file mode 100644
index 00000000..8ef8257d
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCDriverUI.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace ODBCDriverPrompt
+{
+ public class ODBCDriverUI
+ {
+ public ODBCDriverUI( ) { }
+
+ public string GetDSN( )
+ {
+ ODBCDriverDialog frmObj = new ODBCDriverDialog( );
+
+ if ( frmObj.ShowDialog( ) == System.Windows.Forms.DialogResult.OK )
+ return frmObj.ConnectionString;
+ else
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCHelper.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCHelper.cs
new file mode 100644
index 00000000..460f48b4
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/ODBCHelper.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections;
+
+using Microsoft.Win32;
+
+namespace ODBCDriverPrompt
+{
+ public class ODBCHelper
+ {
+ public ODBCHelper( ) { }
+
+ private const string ODBC_LOC_IN_REGISTRY = "SOFTWARE\\ODBC\\";
+ private const string ODBC_INI_LOC_IN_REGISTRY = ODBC_LOC_IN_REGISTRY + "ODBC.INI\\";
+ private const string DSN_LOC_IN_REGISTRY = ODBC_INI_LOC_IN_REGISTRY + "ODBC Data Sources\\";
+ private const string ODBCINST_INI_LOC_IN_REGISTRY = ODBC_LOC_IN_REGISTRY + "ODBCINST.INI\\";
+ private const string ODBC_DRIVERS_LOC_IN_REGISTRY = ODBCINST_INI_LOC_IN_REGISTRY + "ODBC Drivers\\";
+
+ public ArrayList GetDSNList( )
+ {
+ //'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ //'DESCRIPTION : Returns an array of strings each containing
+ //' a DSN name found in the registry.
+ //'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ //RegistryKey userBaseKey; //= new RegistryKey();
+ //RegistryKey localMacineBaseKey; //= RegistryKey();
+ ArrayList lstDSN = new ArrayList( );
+ RegistryKey keyDsnNames;
+ string[ ] dsnNames = null;
+ ArrayList regKeys = new ArrayList( );
+
+ regKeys.Add( Registry.CurrentUser );
+ regKeys.Add( Registry.LocalMachine );
+
+ //userBaseKey = ;
+ //localMacineBaseKey = Registry.LocalMachine;
+
+ // '#1 Get a list of all DSN entries defined in DSN_LOC_IN_REGISTRY for each basekey
+
+ foreach ( RegistryKey regKey in regKeys )
+ {
+ keyDsnNames = OpenComplexSubKey( regKey, DSN_LOC_IN_REGISTRY, false );
+
+ if ( keyDsnNames != null )
+ {
+ dsnNames = keyDsnNames.GetValueNames( );
+ }
+
+ if ( dsnNames != null )
+ {
+ // 'Foreach DSN entry in the DSN_LOC_IN_REGISTRY, goto the
+ //'add the dsn name to the array
+ foreach ( string dsnName in dsnNames )
+ {
+ if ( dsnName != null )
+ {
+ lstDSN.Add( dsnName );
+ }
+ }
+ }
+
+ //FIXED BY RODOLFO
+ if ( keyDsnNames != null )
+ keyDsnNames.Close( );
+ }
+
+ return lstDSN;
+
+ }
+
+ private RegistryKey OpenComplexSubKey( RegistryKey baseKey, string strComplexKey, bool writable )
+ {
+ //'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ //'DESCRIPTION : Returns the registry key given the key string
+ //' and base location
+ //'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ int iPrevLoc = 0;
+ int iCurrLoc = 0;
+ string strSubKey = strComplexKey;
+ RegistryKey keyFinal = baseKey;
+
+ if ( baseKey == null )
+ return null;
+
+ if ( strComplexKey == null )
+ return keyFinal;
+
+ //'and get all the characters upto "\\" from the start of search
+ //'point (iPrevLoc) as the keyString. Open a key out of string
+ //'keyString.
+
+ while ( iCurrLoc != -1 )
+ {
+ iCurrLoc = strComplexKey.IndexOf( "\\\\", iPrevLoc );
+
+ if ( iCurrLoc != -1 )
+ {
+ strSubKey = strComplexKey.Substring( iPrevLoc, ( iCurrLoc - iPrevLoc ) );
+ iPrevLoc = iCurrLoc + 2;
+ }
+ else
+ {
+ strSubKey = strComplexKey.Substring( iPrevLoc );
+ }
+
+ if ( !strSubKey.Equals( String.Empty ) )
+ {
+ keyFinal = keyFinal.OpenSubKey( strSubKey, writable );
+ }
+ }
+
+ return keyFinal;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/PasswordDialog.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/PasswordDialog.cs
new file mode 100644
index 00000000..5b13a385
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/PasswordDialog.cs
@@ -0,0 +1,185 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+namespace ODBCDriverPrompt
+{
+ public class PasswordDialog : System.Windows.Forms.Form
+ {
+ internal System.Windows.Forms.Label Label3;
+ internal System.Windows.Forms.Label Label2;
+ internal System.Windows.Forms.Label Label1;
+ internal System.Windows.Forms.Button cmdCancel;
+ internal System.Windows.Forms.TextBox txtUserID;
+ internal System.Windows.Forms.TextBox txtConfirmPwd;
+ internal System.Windows.Forms.Button cmdOK;
+ internal System.Windows.Forms.TextBox txtPassword;
+
+ private System.ComponentModel.Container components = null;
+
+ public string UserID = "";
+ public string Password = "";
+
+ public PasswordDialog( )
+ {
+ Application.EnableVisualStyles( );
+
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.Label3 = new System.Windows.Forms.Label( );
+ this.Label2 = new System.Windows.Forms.Label( );
+ this.Label1 = new System.Windows.Forms.Label( );
+ this.cmdCancel = new System.Windows.Forms.Button( );
+ this.txtUserID = new System.Windows.Forms.TextBox( );
+ this.txtConfirmPwd = new System.Windows.Forms.TextBox( );
+ this.cmdOK = new System.Windows.Forms.Button( );
+ this.txtPassword = new System.Windows.Forms.TextBox( );
+ this.SuspendLayout( );
+ //
+ // Label3
+ //
+ this.Label3.Location = new System.Drawing.Point( 8, 8 );
+ this.Label3.Name = "Label3";
+ this.Label3.Size = new System.Drawing.Size( 168, 16 );
+ this.Label3.TabIndex = 0;
+ this.Label3.Text = "User ID";
+ //
+ // Label2
+ //
+ this.Label2.Location = new System.Drawing.Point( 8, 104 );
+ this.Label2.Name = "Label2";
+ this.Label2.Size = new System.Drawing.Size( 144, 16 );
+ this.Label2.TabIndex = 4;
+ this.Label2.Text = "Confirm Password";
+ //
+ // Label1
+ //
+ this.Label1.Location = new System.Drawing.Point( 8, 56 );
+ this.Label1.Name = "Label1";
+ this.Label1.Size = new System.Drawing.Size( 152, 16 );
+ this.Label1.TabIndex = 2;
+ this.Label1.Text = "Password";
+ //
+ // cmdCancel
+ //
+ this.cmdCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.cmdCancel.Location = new System.Drawing.Point( 232, 56 );
+ this.cmdCancel.Name = "cmdCancel";
+ this.cmdCancel.Size = new System.Drawing.Size( 80, 24 );
+ this.cmdCancel.TabIndex = 7;
+ this.cmdCancel.Text = "Cancel";
+ this.cmdCancel.Click += new System.EventHandler( this.cmdCancel_Click );
+ //
+ // txtUserID
+ //
+ this.txtUserID.Location = new System.Drawing.Point( 8, 24 );
+ this.txtUserID.Name = "txtUserID";
+ this.txtUserID.Size = new System.Drawing.Size( 208, 21 );
+ this.txtUserID.TabIndex = 1;
+ //
+ // txtConfirmPwd
+ //
+ this.txtConfirmPwd.Location = new System.Drawing.Point( 8, 120 );
+ this.txtConfirmPwd.Name = "txtConfirmPwd";
+ this.txtConfirmPwd.PasswordChar = '*';
+ this.txtConfirmPwd.Size = new System.Drawing.Size( 208, 21 );
+ this.txtConfirmPwd.TabIndex = 5;
+ //
+ // cmdOK
+ //
+ this.cmdOK.DialogResult = System.Windows.Forms.DialogResult.OK;
+ this.cmdOK.Location = new System.Drawing.Point( 232, 24 );
+ this.cmdOK.Name = "cmdOK";
+ this.cmdOK.Size = new System.Drawing.Size( 80, 23 );
+ this.cmdOK.TabIndex = 6;
+ this.cmdOK.Text = "OK";
+ this.cmdOK.Click += new System.EventHandler( this.cmdOK_Click );
+ //
+ // txtPassword
+ //
+ this.txtPassword.Location = new System.Drawing.Point( 8, 72 );
+ this.txtPassword.Name = "txtPassword";
+ this.txtPassword.PasswordChar = '*';
+ this.txtPassword.Size = new System.Drawing.Size( 208, 21 );
+ this.txtPassword.TabIndex = 3;
+ //
+ // PasswordDialog
+ //
+ this.AcceptButton = this.cmdOK;
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 14 );
+ this.CancelButton = this.cmdCancel;
+ this.ClientSize = new System.Drawing.Size( 324, 153 );
+ this.ControlBox = false;
+ this.Controls.Add( this.Label3 );
+ this.Controls.Add( this.Label2 );
+ this.Controls.Add( this.Label1 );
+ this.Controls.Add( this.cmdCancel );
+ this.Controls.Add( this.txtUserID );
+ this.Controls.Add( this.txtConfirmPwd );
+ this.Controls.Add( this.txtPassword );
+ this.Controls.Add( this.cmdOK );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "PasswordDialog";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Password Dialog";
+ this.ResumeLayout( false );
+ this.PerformLayout( );
+
+ }
+ #endregion
+
+ private void cmdOK_Click( object sender, System.EventArgs e )
+ {
+ if ( txtPassword.Text == txtConfirmPwd.Text )
+ {
+ this.Password = txtPassword.Text.ToString( );
+ this.UserID = txtUserID.Text;
+
+ txtPassword.Text = "";
+ txtConfirmPwd.Text = "";
+ this.DialogResult = System.Windows.Forms.DialogResult.OK;
+ this.Close( );
+ }
+ else
+ {
+ MessageBox.Show( "Passwords do not match please try again" );
+ }
+ }
+
+ private void cmdCancel_Click( object sender, System.EventArgs e )
+ {
+ this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.Close( );
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/PasswordDialog.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/PasswordDialog.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCDriverPrompt/PasswordDialog.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/AssemblyInfo.cs
new file mode 100644
index 00000000..3ee1df2f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/AssemblyInfo.cs
@@ -0,0 +1,16 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyTitle( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyDescription( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyConfiguration( "" )]
+[assembly: AssemblyCompany( "Microsoft Corporation" )]
+[assembly: AssemblyProduct( "Microsoft BizTalk Server 2006" )]
+[assembly: AssemblyCopyright( "Copyright (C) 2006 Microsoft Corporation. All rights reserved." )]
+[assembly: AssemblyTrademark( "" )]
+[assembly: AssemblyCulture( "" )]
+
+[assembly: AssemblyVersion( "1.2.0.0" )]
+
+[assembly: AssemblyDelaySign( false )]
+[assembly: AssemblyKeyName( "" )]
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/BTSODBCQueryEngine.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/BTSODBCQueryEngine.cs
new file mode 100644
index 00000000..8684be52
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/BTSODBCQueryEngine.cs
@@ -0,0 +1,684 @@
+//---------------------------------------------------------------------
+// File: BTSODBCQueryEngine.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Data.Odbc;
+using System.Xml;
+using System.Xml.Schema;
+using System.IO;
+using System.Data;
+using System.Text;
+using System.Diagnostics;
+using System.Configuration.Install;
+
+using Microsoft.Samples.BizTalk.Adapters.BaseAdapter;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ public class BTSODBCQueryEngine
+ {
+ public bool ODBCTransaction = false;
+ private string _strNamespace = "";
+
+ private string _strDocumentRootNode = "";
+ private OdbcConnection _OdbcConnection = new OdbcConnection();
+ private OdbcTransaction _OdbcTransaction;
+ private bool _OutParametersExist = false;
+
+ //Performance Counters
+ //private PerformanceCounter _MessageCounter = new PerformanceCounter( );
+ //private PerformanceCounter _ErrorCounter = new PerformanceCounter( );
+ //private PerformanceCounter _ConnectionCounter = new PerformanceCounter( );
+ //private PerformanceCounter _MessagesPerSecond = new PerformanceCounter( );
+
+ public bool RequestResponseProcess = false; // Need to know if we should send a response message as part of a send port
+ public bool ReceivePort = false; // Need to know if we are a receive port if so we don't want to send message if nothing is returned
+
+ public string ConnectionString
+ {
+ set
+ {
+ _OdbcConnection.ConnectionString = value;
+ }
+ }
+
+ public string Namespace
+ {
+ set
+ {
+ _strNamespace = value;
+ }
+ }
+
+ public string RootNode
+ {
+ get
+ {
+ return _strDocumentRootNode;
+ }
+ set
+ {
+ _strDocumentRootNode = value;
+ }
+ }
+
+ public void BeginTransaction( System.Data.IsolationLevel IsolationLevel )
+ {
+ System.Diagnostics.Trace.WriteLine("BizTalk ODBC Adapter::BTSODBCQueryEngine::BeginTransaction()");
+ _OdbcConnection.Open( );
+ _OdbcTransaction = _OdbcConnection.BeginTransaction( IsolationLevel );
+ }
+
+ public void Commit( )
+ {
+ _OdbcTransaction.Commit( );
+ }
+
+ public void Close( )
+ {
+ _OdbcConnection.Close( );
+ }
+
+ public void Rollback( )
+ {
+ _OdbcTransaction.Rollback( );
+ }
+
+ public BTSODBCQueryEngine( )
+ {
+ //Create PerfCounters if they don't already exist
+ //initialize our perf counters
+ //_MessageCounter.CategoryName = "BtsOdbcQueryEngine";
+ //_MessageCounter.CounterName = "MessageCount";
+ //_MessageCounter.ReadOnly = false;
+
+ //_MessagesPerSecond.CategoryName = "BtsOdbcQueryEngine";
+ //_MessagesPerSecond.CounterName = "MessagesPerSecond";
+ //_MessagesPerSecond.ReadOnly = false;
+
+ //_ConnectionCounter.CategoryName = "BtsOdbcQueryEngine";
+ //_ConnectionCounter.CounterName = "DbConnectionCount";
+ //_ConnectionCounter.ReadOnly = false;
+
+ //_ErrorCounter.CategoryName = "BtsOdbcQueryEngine";
+ //_ErrorCounter.CounterName = "ErrorCount";
+ //_ErrorCounter.ReadOnly = false;
+
+ //Create an event handler for the _OdbcConnection object
+ _OdbcConnection.StateChange += new StateChangeEventHandler( _OdbcConnection_StateChange );
+ }
+
+ private OdbcCommand CreateODBCCommandFromSchema( string QuerySchema )
+ {
+ System.Diagnostics.Trace.WriteLine("BizTalk ODBC Adapter::BTSODBCQueryEngine::CreateODBCCommandFromSchema()");
+ StringReader sr = new StringReader( QuerySchema );
+ OdbcCommand odbcCmd = new OdbcCommand( );
+ XmlSchema xsdQueryConfiguration = XmlSchema.Read( sr, null );
+
+ foreach ( object item in xsdQueryConfiguration.Items )
+ {
+ if ( item is XmlSchemaAnnotation ) // Then we are at the section of the schema containing
+ { // the odbc query spec
+ XmlSchemaAnnotation xsAnnotation = ( XmlSchemaAnnotation )item;
+ XmlSchemaAppInfo xsAppInfo = ( XmlSchemaAppInfo )xsAnnotation.Items[ 0 ];
+ XmlNode[ ] xmlNodesQueryInfo = xsAppInfo.Markup;
+
+ // Create our new command object for query processing
+ odbcCmd.CommandText = xmlNodesQueryInfo[ 1 ].InnerText;
+
+ //Get the root node name for the response document from the schema
+ _strDocumentRootNode = xmlNodesQueryInfo[ 2 ].InnerText;
+
+ // pull the output documents namespace from the schema.
+ _strNamespace = xmlNodesQueryInfo[ 3 ].InnerText + "/" + _strDocumentRootNode;
+ }
+ if ( item is XmlSchemaElement ) // Root Section of the schema
+ {
+ try
+ {
+ XmlSchemaComplexType xsComplex = ( XmlSchemaComplexType )( ( XmlSchemaElement )item ).SchemaType;
+ XmlSchemaSequence xsSeq = ( XmlSchemaSequence )xsComplex.Particle;
+
+ // Now we're down to the parameters section of the schema!
+ XmlSchemaElement xsParamsElement = ( XmlSchemaElement )xsSeq.Items[ 0 ];
+ XmlSchemaComplexType xsCT = ( XmlSchemaComplexType )xsParamsElement.SchemaType;
+
+ // IMPORTANT NOTE: If for some reason they change the order of the params in the
+ // schmema and/or the document being processes then the results will be wrong
+ // as there is no way to map the data to the correct element of the query
+ // remember our SQL looks like SELECT * FROM CUSTOMER WHERE CUSTOMERID = ?
+
+ //NOTE: if statement added to account for possiblity that we have not have command parameters
+ if ( !( xsCT == null ) )
+ {
+ foreach ( XmlSchemaAttribute xsAttParams in xsCT.Attributes )
+ {
+ OdbcParameter queryParam = new OdbcParameter( );
+
+ queryParam.ParameterName = "@" + xsAttParams.Name;
+
+ //Now get all of the meta data from the parameter
+ XmlSchemaAppInfo xsParamInfo = ( XmlSchemaAppInfo )xsAttParams.Annotation.Items[ 0 ];
+ XmlNode[ ] xmlParamInfo = xsParamInfo.Markup;
+
+ queryParam.OdbcType = ConvertStringDataTypeToODBC( xmlParamInfo[ 0 ].InnerText );
+ queryParam.Direction = ConverStrToParamDir( xmlParamInfo[ 1 ].InnerText );
+
+ if ( System.Convert.ToInt32( xmlParamInfo[ 2 ].InnerText ) > 0 )
+ queryParam.Size = System.Convert.ToInt32( xmlParamInfo[ 2 ].InnerText );
+
+ odbcCmd.Parameters.Add( queryParam );
+ //Add CommandTimeout
+ odbcCmd.CommandTimeout = 60;
+ System.Diagnostics.Trace.WriteLine(string.Format("BizTalk ODBC Adapter::BTSODBCQueryEngine::CreateODBCCommandFromSchema()::QueryParam-->{0}", queryParam.ParameterName.ToString()));
+ }
+ }
+ }
+ catch { }
+ }
+ }
+
+ return odbcCmd;
+ }
+
+ public VirtualStream BTSExecuteODBCCallFromSQL( string SQL )
+ {
+ try
+ {
+ System.Diagnostics.Trace.WriteLine("BizTalk ODBC Adapter::BTSODBCQueryEngine::BTSExecuteODBCCallFromSQL()");
+ //_MessagesPerSecond.Increment( );
+ //_MessageCounter.Increment( );
+
+ OdbcCommand odbcCmd = new OdbcCommand( );
+ odbcCmd.Connection = _OdbcConnection;
+ odbcCmd.CommandText = SQL;
+ odbcCmd.CommandType = CommandType.Text;
+ //Add CommandTimeout
+ odbcCmd.CommandTimeout = 60;
+
+
+ return ODBCCommandProcessing( odbcCmd, null );
+ }
+ catch ( Exception ex )
+ {
+ //_ErrorCounter.Increment( );
+ throw ex;
+ }
+ }
+
+ public VirtualStream BTSExecuteODBCCallFromSchema( XmlTextReader xStreamPayload, string QuerySchema )
+ {
+ try
+ {
+ //_MessagesPerSecond.Increment( );
+ //_MessageCounter.Increment( );
+
+ OdbcCommand odbcCmd = CreateODBCCommandFromSchema( QuerySchema );
+ return ODBCCommandProcessing( odbcCmd, xStreamPayload );
+ }
+ catch ( Exception ex )
+ {
+ //_ErrorCounter.Increment( );
+ throw ex;
+ }
+ }
+
+ //implements the same function as ExecuteDataSetCommand except uses a DataReader and XmlTextWriter to generate output
+ private bool ExecuteDataReaderCommand( ref XmlTextWriter resultXml, OdbcCommand odbcCmd )
+ {
+ System.Diagnostics.Trace.WriteLine("BizTalk ODBC Adapter::BTSODBCQueryEngine::ExecuteDataReaderCommand()");
+ OdbcDataReader dr;
+ bool bHasResults = false;
+
+ resultXml.Formatting = System.Xml.Formatting.Indented;
+
+ try
+ {
+ //Open the connection and get the data reader
+ odbcCmd.Connection = _OdbcConnection;
+
+ if (_OdbcConnection.State != ConnectionState.Open)
+ odbcCmd.Connection.Open();
+
+ if (_OdbcTransaction != null)
+ odbcCmd.Transaction = _OdbcTransaction;
+ //Add CommandTimeout
+ odbcCmd.CommandTimeout = 60;
+
+ //Trace out command
+ string cmdSQL = odbcCmd.CommandText;
+ System.Diagnostics.Trace.WriteLine(string.Format("BizTalk ODBC Adapter::BTSODBCQueryEngine::ExecuteDataReaderCommand()::Command to be executed-->{0}", cmdSQL));
+
+
+ dr = odbcCmd.ExecuteReader();
+
+ int tableCount = 0;
+ do
+ {
+ while (dr.Read())
+ {
+ bHasResults = true;
+ //Write Record Element
+ if (tableCount == 0)
+ resultXml.WriteStartElement("Table");
+ else
+ resultXml.WriteStartElement("Table" + tableCount);
+
+ //Fill RowData
+ for (int i = 0; i <= dr.FieldCount - 1; i++)
+ {
+ resultXml.WriteStartElement(XmlConvert.EncodeName(dr.GetName(i)));
+
+ //handle BLOB fields. We want to stream BLOB data 64K at a time to
+ //avoid pounding the server
+ if (dr.GetValue(i).GetType() == System.Type.GetType("System.Byte[]"))
+ {
+ byte[] buff = new byte[65536];
+ int bufferSize = 65536;
+ long retval = 0;
+
+ int startIndex = 0;
+
+ retval = dr.GetBytes(i, startIndex, buff, 0, bufferSize);
+
+ // Continue reading and writing while there are bytes beyond the size of the buffer.
+ while (retval == bufferSize)
+ {
+ resultXml.WriteBase64(buff, 0, bufferSize);
+ resultXml.Flush();
+
+ // Reposition the start index to the end of the last buffer and fill the buffer.
+ startIndex += bufferSize;
+ retval = dr.GetBytes(i, startIndex, buff, 0, bufferSize);
+ }
+
+ // Write the remaining buffer.
+ resultXml.WriteBase64(buff, 0, (int)retval - 1);
+ resultXml.Flush();
+ }
+ else //Non-BLOB data types
+ {
+ resultXml.WriteString(System.Convert.ToString(dr.GetValue(i)));
+ }
+ resultXml.WriteEndElement();
+ resultXml.Flush();
+ }
+
+ //Close the Record Element
+ resultXml.WriteEndElement();
+ resultXml.Flush();
+ }
+
+ tableCount += 1;
+ }
+ while (dr.NextResult());
+
+ dr.Close();
+
+ //Now add the out parameters
+ if (_OutParametersExist)
+ AddSPParameters(odbcCmd, ref resultXml);
+ return bHasResults;
+ }
+ //catch (Exception ex)
+ //{
+ // System.Diagnostics.Trace.WriteLine(string.Format("BizTalk ODBC Adapter::BTSODBCQueryEngine::ExecuteDataReaderCommand()::Exception Caught-->{0}", ex.Message.ToString()));
+ // return false;
+ // //throw ex;
+ //}
+ finally
+ {
+ if (odbcCmd.Connection.State != ConnectionState.Closed)
+ {
+ odbcCmd.Connection.Close();
+ }
+ }
+ }
+
+ private VirtualStream ODBCCommandProcessing( OdbcCommand odbcCmd, XmlTextReader xtrReader )
+ {
+ System.Diagnostics.Trace.WriteLine("BizTalk ODBC Adapter::BTSODBCQueryEngine::ODBCCommandProcessing()");
+ VirtualStream Output = null;
+ VirtualStream WorkingStream = new VirtualStream( );
+
+ XmlTextWriter resultXml = new XmlTextWriter( WorkingStream, null );
+
+ bool CmdComplete = false;
+ bool isInputProcessed = false;
+ bool hasInputParams = false;
+
+ //Determine if there are input parameters
+ for ( int i = 0; i < odbcCmd.Parameters.Count; i++ )
+ {
+ ParameterDirection dir = odbcCmd.Parameters[ i ].Direction;
+
+ if ( dir == ParameterDirection.Input ||
+ dir == ParameterDirection.InputOutput )
+ hasInputParams = true;
+ }
+
+ //Generate the root element
+ resultXml.WriteStartElement( "ns0", _strDocumentRootNode, _strNamespace );
+
+ UnicodeEncoding Unicode = new UnicodeEncoding( );
+
+ // Handle the situation where we don't have parameters but still want to process the query
+ if ( xtrReader != null && odbcCmd.Parameters.Count > 0 )
+ {
+ while ( xtrReader.Read( ) )
+ {
+ //we're only interested in those elements that have attributes...
+ if ( xtrReader.NodeType == XmlNodeType.Element && xtrReader.HasAttributes )
+ {
+ #region Build Command from XML Attributes
+ //iterate through the attributes--check if the names match any of our parameters
+ for ( int attCnt = 0; attCnt < xtrReader.AttributeCount; attCnt++ )
+ {
+ xtrReader.MoveToAttribute( attCnt );
+
+ for ( int cnt = 0; cnt < odbcCmd.Parameters.Count; cnt++ )
+ {
+ #region ODBC Parameters
+ if ( xtrReader.Name == odbcCmd.Parameters[ cnt ].ParameterName.Replace( "@", "" ) )
+ {
+ if ( odbcCmd.Parameters[ cnt ].Direction != ParameterDirection.Input )
+ {
+ //we need to add output parameters to our response
+ _OutParametersExist = true;
+ }
+
+ //Pass in values for input parameters
+ if ( odbcCmd.Parameters[ cnt ].Direction != ParameterDirection.ReturnValue &&
+ odbcCmd.Parameters[ cnt ].Direction != ParameterDirection.Output )
+ {
+ #region ODBC Type Converstion
+ //Convert input parameter to the correct data type
+ switch ( odbcCmd.Parameters[ cnt ].OdbcType.ToString( ) )
+ {
+ case "BigInt":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToInt64( xtrReader.Value );
+ break;
+ case "Binary": //Expects that we are receiving the data in the form of a Base64 string
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.FromBase64String( xtrReader.Value );
+ break;
+ case "Bit":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToBoolean( xtrReader.Value );
+ break;
+ case "Text":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToString( xtrReader.Value );
+ break;
+ case "DateTime":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDateTime( xtrReader.Value );
+ break;
+ case "Numeric":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDecimal( xtrReader.Value );
+ break;
+ case "Double":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDouble( xtrReader.Value );
+ break;
+ case "Int":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToInt32( xtrReader.Value );
+ break;
+ case "Real":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDouble( xtrReader.Value );
+ break;
+ case "SmallInt":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToInt16( xtrReader.Value );
+ break;
+ case "TinyInt":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToByte( xtrReader.Value );
+ break;
+ case "UniqueIdentiflier":
+ System.Guid unqId = new Guid( xtrReader.Value );
+ odbcCmd.Parameters[ cnt ].Value = unqId;
+ break;
+ case "Char": //FIX THIS NEEDS TO SUPPORT ARRAYS
+ odbcCmd.Parameters[ cnt ].Value = xtrReader.Value;
+ break;
+ case "Date": // THIS IS A BEST GUESS
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDateTime( xtrReader.Value );
+ break;
+ case "Decimal":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDecimal( xtrReader.Value );
+ break;
+ case "Image": //TODO: Is this a Base64 encoding too?
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.FromBase64String( xtrReader.Value );
+ break;
+ case "NChar":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToString( xtrReader.Value );
+ break;
+ case "NText":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToString( xtrReader.Value );
+ break;
+ case "NVarChar":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToString( xtrReader.Value );
+ break;
+ case "SmallDateTime": // BEST GUESS
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDateTime( xtrReader.Value );
+ break;
+ case "Time": // BEST GUESS
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDateTime( xtrReader.Value );
+ break;
+ case "Timestamp":
+ odbcCmd.Parameters[ cnt ].Value = Unicode.GetBytes( xtrReader.Value );
+ break;
+ case "VarBinary": //Assumes data comes in as a Base64 string
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.FromBase64String( xtrReader.Value );
+ break;
+ case "VarChar":
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToString( xtrReader.Value );
+ break;
+ default:
+ odbcCmd.Parameters[ cnt ].Value = System.Convert.ToDateTime( xtrReader.Value );
+ break;
+ }
+ #endregion
+
+ isInputProcessed = true;
+ }
+ }
+ #endregion
+ }
+
+ }
+ #endregion
+
+ // Now that the Command object has been populated execute the query and get the results
+ try
+ {
+ //determine if input parameters have been processed.
+ CmdComplete = ( !hasInputParams || ( hasInputParams && isInputProcessed ) );
+
+ //Call to the DataReader-based implementation
+ if ( CmdComplete )
+ {
+ ExecuteDataReaderCommand( ref resultXml, odbcCmd );
+ Output = WorkingStream;
+ CmdComplete = false;
+ }
+ }
+ catch ( Exception e )
+ {
+ throw e;
+ }
+ //Ensure that the reader returns to the parent element once it's finished processing all of the attributes
+ xtrReader.MoveToElement( );
+ }
+ }
+ }
+ else // This is a query from a receive port OR We're dealing with
+ // a no input values send port. These DO NOT have a input document
+ {
+ try
+ {
+ //Did the query return any results. If it did not we don't want
+ //to send back an empty document
+ if ( ExecuteDataReaderCommand( ref resultXml, odbcCmd ) )
+ {
+ Output = WorkingStream;
+ }
+ else
+ {
+ Output = null;
+ }
+ CmdComplete = true;
+ }
+ catch ( Exception e )
+ {
+ throw new Exception( "Receive Port query processing failed: " + e.Message + " " + e.InnerException );
+ }
+ }
+
+ //close the root element
+ resultXml.WriteEndElement( );
+ resultXml.Flush( );
+
+ return Output;
+ }
+
+ // This function exists to remove the
+ // from the input documents. It appears that in some cases this creates a problem
+ // for the XMLDOM
+ private string CleanDocument( string msgIn )
+ {
+ if ( msgIn.StartsWith( "" ) )
+ {
+ msgIn = msgIn.Substring( msgIn.IndexOf( "?>", 1 ) + 2 );
+ }
+ return msgIn;
+ }
+
+ //overloaded to accomodate XmlTextWriter input in lieu of dataset data.
+ private void AddSPParameters( OdbcCommand odbcCmd, ref XmlTextWriter xtw )
+ {
+ xtw.WriteStartElement( "OutParameters" );
+ for ( int i = 0; i < odbcCmd.Parameters.Count; i++ )
+ {
+ if ( odbcCmd.Parameters[ i ].Direction != ParameterDirection.Input )
+ {
+ xtw.WriteStartAttribute( odbcCmd.Parameters[ i ].ParameterName.Replace( "@", "" ), "" );
+ if ( odbcCmd.Parameters[ i ].OdbcType == OdbcType.Binary ||
+ odbcCmd.Parameters[ i ].OdbcType == OdbcType.Image ||
+ odbcCmd.Parameters[ i ].OdbcType == OdbcType.VarBinary )
+ {
+ byte[ ] buffer = ( byte[ ] )odbcCmd.Parameters[ i ].Value; //Cast it as a byte array
+ xtw.WriteBase64( buffer, 0, buffer.Length );
+ }
+ else
+ {
+ xtw.WriteString( odbcCmd.Parameters[ i ].Value.ToString( ) );
+ }
+ xtw.WriteEndAttribute( );
+ xtw.Flush( );
+ }
+ }
+ xtw.WriteEndElement( );
+ xtw.Flush( );
+ }
+
+ private ParameterDirection ConverStrToParamDir( string sParamDir )
+ {
+ switch ( sParamDir )
+ {
+ case "Input":
+ return ParameterDirection.Input;
+ case "Output":
+ return ParameterDirection.Output;
+ case "InputOutput":
+ return ParameterDirection.InputOutput;
+ case "ReturnValue":
+ return ParameterDirection.ReturnValue;
+ default:
+ return ParameterDirection.Input;
+ }
+ }
+
+ private OdbcType ConvertStringDataTypeToODBC( string sType )
+ {
+ switch ( sType )
+ {
+ case "BigInt":
+ return OdbcType.BigInt;
+ case "Binary": // Also could be IMAGE
+ return OdbcType.Binary;
+ case "Bit":
+ return OdbcType.Bit;
+ case "Text": // Could also be NCHAR, NTEXT, NVARCHAR
+ return OdbcType.Text;
+ case "DateTime":
+ return OdbcType.DateTime;
+ case "Numeric": // Could also be DECIMAL,
+ return OdbcType.Numeric;
+ case "Double":
+ return OdbcType.Double;
+ case "Int":
+ return OdbcType.Int;
+ case "Real":
+ return OdbcType.Real;
+ case "SmallInt":
+ return OdbcType.SmallInt;
+ case "TinyInt":
+ return OdbcType.TinyInt;
+ case "UniqueIdentifier":
+ return OdbcType.UniqueIdentifier;
+ case "Char":
+ return OdbcType.Char;
+ case "Date":
+ return OdbcType.Date;
+ case "Decimal":
+ return OdbcType.Decimal;
+ case "Image":
+ return OdbcType.Image;
+ case "NChar":
+ return OdbcType.NChar;
+ case "NText":
+ return OdbcType.NText;
+ case "NVarChar":
+ return OdbcType.NVarChar;
+ case "SmallDateTime":
+ return OdbcType.SmallDateTime;
+ case "Time":
+ return OdbcType.Time;
+ case "Timestamp":
+ return OdbcType.Timestamp;
+ case "VarBinary":
+ return OdbcType.VarBinary;
+ case "VarChar":
+ return OdbcType.VarChar;
+ default:
+ return OdbcType.Text;
+ }
+ }
+
+ private void _OdbcConnection_StateChange( object sender, StateChangeEventArgs e )
+ {
+ if ( e.CurrentState == ConnectionState.Open )
+ {
+ //_ConnectionCounter.Increment( );
+ }
+ else if ( e.CurrentState == ConnectionState.Closed )
+ {
+ //_ConnectionCounter.Decrement( );
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCPerformanceCounterInstaller.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCPerformanceCounterInstaller.cs
new file mode 100644
index 00000000..8774d9d8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCPerformanceCounterInstaller.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Configuration.Install;
+using System.Diagnostics;
+using System.ComponentModel;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ [RunInstaller(true)]
+ public class ODBCPerformanceCounterInstaller : Installer
+ {
+ public override void Install(System.Collections.IDictionary stateSaver)
+ {
+ base.Install(stateSaver);
+ InstallODBCPerformanceCounters();
+ InstallODBCEventSource();
+ }
+
+ public override void Uninstall(System.Collections.IDictionary savedState)
+ {
+ base.Uninstall(savedState);
+ UnInstallODBCPerformanceCounters();
+ UnInstallODBCEventSource();
+ }
+
+ private void InstallODBCPerformanceCounters()
+ {
+
+ UnInstallODBCPerformanceCounters(); //Remove any leftover artifacts, just in case.
+
+ CounterCreationDataCollection perfCounters = new CounterCreationDataCollection();
+ CounterCreationData messageCount = new CounterCreationData();
+ messageCount.CounterName = "MessageCount";
+ messageCount.CounterHelp = "Tracks the number of data messages sent to the BTS ODBC Query Engine";
+ messageCount.CounterType = PerformanceCounterType.NumberOfItems32;
+
+ CounterCreationData messagesPerSecond = new CounterCreationData();
+ messagesPerSecond.CounterName = "MessagesPerSecond";
+ messagesPerSecond.CounterHelp = "Tracks the number of messages sent per second";
+ messagesPerSecond.CounterType = PerformanceCounterType.RateOfCountsPerSecond32;
+
+ CounterCreationData dbConnectionCount = new CounterCreationData();
+ dbConnectionCount.CounterName = "DbConnectionCount";
+ dbConnectionCount.CounterHelp = "Tracks the current number of database connections";
+ dbConnectionCount.CounterType = PerformanceCounterType.NumberOfItems32;
+
+ CounterCreationData errorCount = new CounterCreationData();
+ errorCount.CounterName = "ErrorCount";
+ errorCount.CounterHelp = "Tracks the number of errors generated by the BTS ODBC Query Engine";
+
+ perfCounters.Add(messageCount);
+ perfCounters.Add(messagesPerSecond);
+ perfCounters.Add(dbConnectionCount);
+ perfCounters.Add(errorCount);
+
+ PerformanceCounterCategory category = PerformanceCounterCategory.Create("BtsOdbcQueryEngine", "BizTalk Server ODBC Query Engine", PerformanceCounterCategoryType.Unknown, perfCounters);
+
+ }
+
+ private void UnInstallODBCPerformanceCounters()
+ {
+ if (PerformanceCounterCategory.Exists("BtsOdbcQueryEngine"))
+ {
+ PerformanceCounterCategory.Delete("BtsOdbcQueryEngine");
+ }
+ }
+
+ private void InstallODBCEventSource()
+ {
+ UnInstallODBCEventSource();
+ EventLog.CreateEventSource("ODBCAdapter", "Application");
+ }
+
+ private void UnInstallODBCEventSource()
+ {
+ if (EventLog.SourceExists("ODBCAdapter"))
+ { EventLog.DeleteEventSource("ODBCAdapter"); }
+ }
+
+ private void InitializeComponent()
+ {
+
+ }
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCPerformanceCounterInstaller.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCPerformanceCounterInstaller.resx
new file mode 100644
index 00000000..52a9ad3e
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCPerformanceCounterInstaller.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCQueryProcessor.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCQueryProcessor.csproj
new file mode 100644
index 00000000..5a39ac69
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCQueryProcessor/ODBCQueryProcessor.csproj
@@ -0,0 +1,177 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {516F27B0-23E4-4704-9A86-A5064769522A}
+ Debug
+ AnyCPU
+
+
+
+
+ ODBCQueryProcessor
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ Library
+ Microsoft.BizTalk.Adapters.ODBC
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ System
+
+
+
+ System.Data
+
+
+ System.XML
+
+
+
+
+ Code
+
+
+ Code
+
+
+ Component
+
+
+
+
+
+
+
+ Designer
+ ODBCPerformanceCounterInstaller.cs
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}
+ ODBCBaseAdapter
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ADOCommandOverride.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ADOCommandOverride.cs
new file mode 100644
index 00000000..a1e5b09b
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ADOCommandOverride.cs
@@ -0,0 +1,514 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class ADOCommandOverride : System.Windows.Forms.Form
+ {
+ private ListViewItem _lvSelectedItem;
+ private System.Windows.Forms.Button cmdClose;
+ private System.Windows.Forms.Button cmdTest;
+ private System.Windows.Forms.Button cmdApplyADO;
+
+ //Vars used to communicate with the parent class ODBCSchemaHelper
+ public System.Data.Odbc.OdbcCommand ADOCommand;
+ public ODBCSchemaHelper ParentClass = null;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.TextBox txtSampleData;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Button cmdApply;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.ComboBox cboDirection;
+ private System.Windows.Forms.ComboBox cboDataType;
+ private System.Windows.Forms.TextBox txtParamName;
+ private System.Windows.Forms.ListView lvQueryParameters;
+ private System.Windows.Forms.ColumnHeader Parameter;
+ public System.Windows.Forms.ColumnHeader DataType;
+ private System.Windows.Forms.ColumnHeader Direction;
+ private System.Windows.Forms.ColumnHeader SampleData;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.TextBox txtReqSchema;
+ private System.Windows.Forms.TextBox txtRespSchema;
+ private System.Windows.Forms.TextBox txtQueryResults;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.ColumnHeader SizeCol;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.TextBox txtSize;
+
+ private System.ComponentModel.Container components = null;
+
+ public ADOCommandOverride( )
+ {
+ Application.EnableVisualStyles( );
+
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.cmdClose = new System.Windows.Forms.Button( );
+ this.cmdTest = new System.Windows.Forms.Button( );
+ this.cmdApplyADO = new System.Windows.Forms.Button( );
+ this.groupBox1 = new System.Windows.Forms.GroupBox( );
+ this.txtSize = new System.Windows.Forms.TextBox( );
+ this.label8 = new System.Windows.Forms.Label( );
+ this.txtSampleData = new System.Windows.Forms.TextBox( );
+ this.label4 = new System.Windows.Forms.Label( );
+ this.cmdApply = new System.Windows.Forms.Button( );
+ this.label3 = new System.Windows.Forms.Label( );
+ this.label2 = new System.Windows.Forms.Label( );
+ this.label1 = new System.Windows.Forms.Label( );
+ this.cboDirection = new System.Windows.Forms.ComboBox( );
+ this.cboDataType = new System.Windows.Forms.ComboBox( );
+ this.txtParamName = new System.Windows.Forms.TextBox( );
+ this.lvQueryParameters = new System.Windows.Forms.ListView( );
+ this.Parameter = new System.Windows.Forms.ColumnHeader( );
+ this.DataType = new System.Windows.Forms.ColumnHeader( );
+ this.SizeCol = new System.Windows.Forms.ColumnHeader( );
+ this.Direction = new System.Windows.Forms.ColumnHeader( );
+ this.SampleData = new System.Windows.Forms.ColumnHeader( );
+ this.groupBox2 = new System.Windows.Forms.GroupBox( );
+ this.label7 = new System.Windows.Forms.Label( );
+ this.label6 = new System.Windows.Forms.Label( );
+ this.label5 = new System.Windows.Forms.Label( );
+ this.txtQueryResults = new System.Windows.Forms.TextBox( );
+ this.txtRespSchema = new System.Windows.Forms.TextBox( );
+ this.txtReqSchema = new System.Windows.Forms.TextBox( );
+ this.groupBox1.SuspendLayout( );
+ this.groupBox2.SuspendLayout( );
+ this.SuspendLayout( );
+ //
+ // cmdClose
+ //
+ this.cmdClose.Location = new System.Drawing.Point( 502, 76 );
+ this.cmdClose.Name = "cmdClose";
+ this.cmdClose.Size = new System.Drawing.Size( 104, 24 );
+ this.cmdClose.TabIndex = 10;
+ this.cmdClose.Text = "Close";
+ this.cmdClose.Click += new System.EventHandler( this.cmdClose_Click );
+ //
+ // cmdTest
+ //
+ this.cmdTest.Location = new System.Drawing.Point( 502, 12 );
+ this.cmdTest.Name = "cmdTest";
+ this.cmdTest.Size = new System.Drawing.Size( 104, 24 );
+ this.cmdTest.TabIndex = 11;
+ this.cmdTest.Text = "Test Query";
+ this.cmdTest.Click += new System.EventHandler( this.cmdTest_Click );
+ //
+ // cmdApplyADO
+ //
+ this.cmdApplyADO.AccessibleName = "";
+ this.cmdApplyADO.Location = new System.Drawing.Point( 502, 44 );
+ this.cmdApplyADO.Name = "cmdApplyADO";
+ this.cmdApplyADO.Size = new System.Drawing.Size( 104, 24 );
+ this.cmdApplyADO.TabIndex = 12;
+ this.cmdApplyADO.Text = "Update Command";
+ this.cmdApplyADO.Click += new System.EventHandler( this.cmdApplyADO_Click );
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add( this.txtSize );
+ this.groupBox1.Controls.Add( this.label8 );
+ this.groupBox1.Controls.Add( this.txtSampleData );
+ this.groupBox1.Controls.Add( this.label4 );
+ this.groupBox1.Controls.Add( this.cmdApply );
+ this.groupBox1.Controls.Add( this.label3 );
+ this.groupBox1.Controls.Add( this.label2 );
+ this.groupBox1.Controls.Add( this.label1 );
+ this.groupBox1.Controls.Add( this.cboDirection );
+ this.groupBox1.Controls.Add( this.cboDataType );
+ this.groupBox1.Controls.Add( this.txtParamName );
+ this.groupBox1.Controls.Add( this.lvQueryParameters );
+ this.groupBox1.Location = new System.Drawing.Point( 8, 10 );
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size( 488, 224 );
+ this.groupBox1.TabIndex = 13;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "ADO.NET Command Parameters";
+ //
+ // txtSize
+ //
+ this.txtSize.Location = new System.Drawing.Point( 160, 192 );
+ this.txtSize.Name = "txtSize";
+ this.txtSize.Size = new System.Drawing.Size( 56, 21 );
+ this.txtSize.TabIndex = 21;
+ //
+ // label8
+ //
+ this.label8.Location = new System.Drawing.Point( 160, 176 );
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size( 48, 16 );
+ this.label8.TabIndex = 20;
+ this.label8.Text = "Size";
+ //
+ // txtSampleData
+ //
+ this.txtSampleData.Location = new System.Drawing.Point( 176, 144 );
+ this.txtSampleData.Name = "txtSampleData";
+ this.txtSampleData.Size = new System.Drawing.Size( 200, 21 );
+ this.txtSampleData.TabIndex = 19;
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point( 176, 128 );
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size( 104, 16 );
+ this.label4.TabIndex = 18;
+ this.label4.Text = "Sample Data";
+ //
+ // cmdApply
+ //
+ this.cmdApply.Location = new System.Drawing.Point( 392, 144 );
+ this.cmdApply.Name = "cmdApply";
+ this.cmdApply.Size = new System.Drawing.Size( 80, 24 );
+ this.cmdApply.TabIndex = 17;
+ this.cmdApply.Text = "Apply";
+ this.cmdApply.Click += new System.EventHandler( this.cmdApply_Click );
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point( 264, 176 );
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size( 104, 16 );
+ this.label3.TabIndex = 16;
+ this.label3.Text = "Direction";
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point( 4, 174 );
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size( 104, 16 );
+ this.label2.TabIndex = 15;
+ this.label2.Text = "Data Type:";
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point( 4, 126 );
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size( 128, 16 );
+ this.label1.TabIndex = 14;
+ this.label1.Text = "Parameter Name:";
+ //
+ // cboDirection
+ //
+ this.cboDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboDirection.Items.AddRange( new object[ ] {
+ "ReturnValue",
+ "Input",
+ "Output",
+ "InputOutput"} );
+ this.cboDirection.Location = new System.Drawing.Point( 264, 192 );
+ this.cboDirection.Name = "cboDirection";
+ this.cboDirection.Size = new System.Drawing.Size( 112, 21 );
+ this.cboDirection.TabIndex = 13;
+ //
+ // cboDataType
+ //
+ this.cboDataType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboDataType.Items.AddRange( new object[ ] {
+ "BigInt",
+ "Binary",
+ "Bit",
+ "Text",
+ "DateTime",
+ "Numeric",
+ "Double",
+ "Int",
+ "Real",
+ "SmallInt",
+ "TinyInt",
+ "UniqueIdentifier",
+ "Char",
+ "Date",
+ "Decimal",
+ "Image",
+ "NChar",
+ "NText",
+ "NVarChar",
+ "SmallDateTime",
+ "Time",
+ "Timestamp",
+ "VarBinary",
+ "VarChar"} );
+ this.cboDataType.Location = new System.Drawing.Point( 4, 192 );
+ this.cboDataType.Name = "cboDataType";
+ this.cboDataType.Size = new System.Drawing.Size( 132, 21 );
+ this.cboDataType.TabIndex = 12;
+ //
+ // txtParamName
+ //
+ this.txtParamName.Location = new System.Drawing.Point( 4, 144 );
+ this.txtParamName.Name = "txtParamName";
+ this.txtParamName.Size = new System.Drawing.Size( 160, 21 );
+ this.txtParamName.TabIndex = 11;
+ //
+ // lvQueryParameters
+ //
+ this.lvQueryParameters.Columns.AddRange( new System.Windows.Forms.ColumnHeader[ ] {
+ this.Parameter,
+ this.DataType,
+ this.SizeCol,
+ this.Direction,
+ this.SampleData} );
+ this.lvQueryParameters.FullRowSelect = true;
+ this.lvQueryParameters.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.lvQueryParameters.LabelEdit = true;
+ this.lvQueryParameters.Location = new System.Drawing.Point( 4, 22 );
+ this.lvQueryParameters.MultiSelect = false;
+ this.lvQueryParameters.Name = "lvQueryParameters";
+ this.lvQueryParameters.Size = new System.Drawing.Size( 476, 88 );
+ this.lvQueryParameters.TabIndex = 10;
+ this.lvQueryParameters.UseCompatibleStateImageBehavior = false;
+ this.lvQueryParameters.View = System.Windows.Forms.View.Details;
+ this.lvQueryParameters.SelectedIndexChanged += new System.EventHandler( this.lvQueryParameters_SelectedIndexChanged );
+ //
+ // Parameter
+ //
+ this.Parameter.Text = "Parameter";
+ this.Parameter.Width = 150;
+ //
+ // DataType
+ //
+ this.DataType.Text = "Data Type";
+ this.DataType.Width = 80;
+ //
+ // SizeCol
+ //
+ this.SizeCol.Text = "Size";
+ this.SizeCol.Width = 40;
+ //
+ // Direction
+ //
+ this.Direction.Text = "Direction";
+ this.Direction.Width = 80;
+ //
+ // SampleData
+ //
+ this.SampleData.Text = "Sample Data";
+ this.SampleData.Width = 120;
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add( this.label7 );
+ this.groupBox2.Controls.Add( this.label6 );
+ this.groupBox2.Controls.Add( this.label5 );
+ this.groupBox2.Controls.Add( this.txtQueryResults );
+ this.groupBox2.Controls.Add( this.txtRespSchema );
+ this.groupBox2.Controls.Add( this.txtReqSchema );
+ this.groupBox2.Location = new System.Drawing.Point( 8, 240 );
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size( 568, 240 );
+ this.groupBox2.TabIndex = 14;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Test Results";
+ //
+ // label7
+ //
+ this.label7.Location = new System.Drawing.Point( 384, 16 );
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size( 112, 16 );
+ this.label7.TabIndex = 5;
+ this.label7.Text = "Query Results";
+ //
+ // label6
+ //
+ this.label6.Location = new System.Drawing.Point( 192, 16 );
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size( 112, 16 );
+ this.label6.TabIndex = 4;
+ this.label6.Text = "Output Schema";
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point( 8, 16 );
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size( 128, 16 );
+ this.label5.TabIndex = 3;
+ this.label5.Text = "Input Schema";
+ //
+ // txtQueryResults
+ //
+ this.txtQueryResults.Location = new System.Drawing.Point( 376, 32 );
+ this.txtQueryResults.Multiline = true;
+ this.txtQueryResults.Name = "txtQueryResults";
+ this.txtQueryResults.ReadOnly = true;
+ this.txtQueryResults.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.txtQueryResults.Size = new System.Drawing.Size( 184, 200 );
+ this.txtQueryResults.TabIndex = 2;
+ //
+ // txtRespSchema
+ //
+ this.txtRespSchema.Location = new System.Drawing.Point( 192, 32 );
+ this.txtRespSchema.Multiline = true;
+ this.txtRespSchema.Name = "txtRespSchema";
+ this.txtRespSchema.ReadOnly = true;
+ this.txtRespSchema.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.txtRespSchema.Size = new System.Drawing.Size( 184, 200 );
+ this.txtRespSchema.TabIndex = 1;
+ //
+ // txtReqSchema
+ //
+ this.txtReqSchema.Location = new System.Drawing.Point( 8, 32 );
+ this.txtReqSchema.Multiline = true;
+ this.txtReqSchema.Name = "txtReqSchema";
+ this.txtReqSchema.ReadOnly = true;
+ this.txtReqSchema.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.txtReqSchema.Size = new System.Drawing.Size( 184, 200 );
+ this.txtReqSchema.TabIndex = 0;
+ //
+ // ADOCommandOverride
+ //
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 14 );
+ this.ClientSize = new System.Drawing.Size( 613, 485 );
+ this.ControlBox = false;
+ this.Controls.Add( this.groupBox2 );
+ this.Controls.Add( this.groupBox1 );
+ this.Controls.Add( this.cmdApplyADO );
+ this.Controls.Add( this.cmdTest );
+ this.Controls.Add( this.cmdClose );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "ADOCommandOverride";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "BizTalk ODBC Adapter Query Processor Override";
+ this.Load += new System.EventHandler( this.ADOCommandOverride_Load );
+ this.groupBox1.ResumeLayout( false );
+ this.groupBox1.PerformLayout( );
+ this.groupBox2.ResumeLayout( false );
+ this.groupBox2.PerformLayout( );
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main( )
+ {
+ Application.Run( new ADOCommandOverride( ) );
+ }
+
+ private void ADOCommandOverride_Load( object sender, System.EventArgs e )
+ {
+ foreach ( System.Data.Odbc.OdbcParameter param in ADOCommand.Parameters )
+ {
+ ListViewItem lvItem = lvQueryParameters.Items.Add( param.ParameterName );
+ lvItem.SubItems.Add( param.OdbcType.ToString( ) );
+ lvItem.SubItems.Add( param.Size.ToString( ) );
+ lvItem.SubItems.Add( param.Direction.ToString( ) );
+ lvItem.SubItems.Add( "" );
+ }
+ }
+
+ private void cmdTest_Click( object sender, System.EventArgs e )
+ {
+ try
+ {
+ txtReqSchema.Text = ParentClass.ExtractODBCParametersSchema( ADOCommand );
+ txtRespSchema.Text = ParentClass.GenerateOutputSchema( ADOCommand );
+
+ // Add any output param values to the query results dialog
+ txtQueryResults.Text = "";
+ foreach ( System.Data.Odbc.OdbcParameter param in ADOCommand.Parameters )
+ {
+ if ( param.Direction != System.Data.ParameterDirection.Input )
+ {
+ txtQueryResults.Text += param.ParameterName + ": " + param.Value.ToString( ) + "\r\n";
+ }
+ }
+ txtQueryResults.Text += ParentClass.QueryOutput;
+ }
+ catch ( Exception ex )
+ {
+ txtQueryResults.Text = ex.Message + " " + ex.InnerException;
+ }
+ }
+
+ private void cmdClose_Click( object sender, System.EventArgs e )
+ {
+ this.ParentClass = null;
+ this.Hide( );
+ }
+
+ private void lvQueryParameters_SelectedIndexChanged( object sender, System.EventArgs e )
+ {
+ if ( lvQueryParameters.SelectedItems.Count > 0 )
+ {
+ _lvSelectedItem = lvQueryParameters.SelectedItems[ 0 ];// Items[lvQueryParameters.SelectedIndices[0]];
+ txtParamName.Text = _lvSelectedItem.Text;
+ cboDataType.SelectedIndex = cboDataType.FindString( _lvSelectedItem.SubItems[ 1 ].Text );
+ cboDirection.SelectedIndex = cboDirection.FindString( _lvSelectedItem.SubItems[ 3 ].Text );//_lvSelectedItem.SubItems[2].Text;
+ txtSize.Text = _lvSelectedItem.SubItems[ 2 ].Text;
+ txtSampleData.Text = _lvSelectedItem.SubItems[ 4 ].Text;
+ }
+ }
+
+ private void cmdApply_Click( object sender, System.EventArgs e )
+ {
+ _lvSelectedItem.Text = txtParamName.Text;
+ _lvSelectedItem.SubItems[ 1 ].Text = cboDataType.SelectedItem.ToString( );
+ _lvSelectedItem.SubItems[ 3 ].Text = cboDirection.SelectedItem.ToString( );
+ _lvSelectedItem.SubItems[ 2 ].Text = txtSize.Text;
+ _lvSelectedItem.SubItems[ 4 ].Text = txtSampleData.Text;
+ }
+
+ private void cmdApplyADO_Click( object sender, System.EventArgs e )
+ {
+ int lvcount = 0;
+ foreach ( System.Data.Odbc.OdbcParameter param in ADOCommand.Parameters )
+ {
+ ListViewItem lvItem = lvQueryParameters.Items[ lvcount ];
+ param.ParameterName = lvItem.Text;
+
+ param.OdbcType = ( System.Data.Odbc.OdbcType )Enum.Parse( typeof( System.Data.Odbc.OdbcType ), lvItem.SubItems[ 1 ].Text, true );
+ param.Direction = ( System.Data.ParameterDirection )Enum.Parse( typeof( System.Data.ParameterDirection ), lvItem.SubItems[ 3 ].Text, true );
+ param.Value = lvItem.SubItems[ 4 ].Text;
+
+ //Only modify size only if theres a value present. //WE DO NOT WANT
+ //to set the value to 0 as this will really mess with the command processing
+ if ( lvItem.SubItems[ 2 ].Text != "0" )
+ {
+ param.Size = Convert.ToInt16( lvItem.SubItems[ 2 ].Text );
+ }
+
+ lvcount++;
+ //lvItem.SubItems.Add(param.OdbcType.ToString() );
+ //lvItem.SubItems.Add(param.Direction.ToString());
+ //lvItem.SubItems.Add("");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ADOCommandOverride.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ADOCommandOverride.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ADOCommandOverride.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/AssemblyInfo.cs
new file mode 100644
index 00000000..3ee1df2f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/AssemblyInfo.cs
@@ -0,0 +1,16 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyTitle( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyDescription( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyConfiguration( "" )]
+[assembly: AssemblyCompany( "Microsoft Corporation" )]
+[assembly: AssemblyProduct( "Microsoft BizTalk Server 2006" )]
+[assembly: AssemblyCopyright( "Copyright (C) 2006 Microsoft Corporation. All rights reserved." )]
+[assembly: AssemblyTrademark( "" )]
+[assembly: AssemblyCulture( "" )]
+
+[assembly: AssemblyVersion( "1.2.0.0" )]
+
+[assembly: AssemblyDelaySign( false )]
+[assembly: AssemblyKeyName( "" )]
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/BTSODBCQueryEngine.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/BTSODBCQueryEngine.cs
new file mode 100644
index 00000000..e93d57e9
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/BTSODBCQueryEngine.cs
@@ -0,0 +1,358 @@
+using System;
+using System.Data.Odbc;
+using System.Xml;
+using System.Xml.Schema;
+using System.IO;
+using System.Data;
+using System.Text;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ ///
+ /// Summary description for BTSODBCQueryEngine.
+ ///
+ public class BTSODBCQueryEngine
+ {
+ public string ODBCConnectionString = "";
+ public bool ODBCTransaction = false;
+
+ public string DocumentRootNode ="";
+ public string Namespace = "";
+
+#if(DEBUG)
+ public string DebugOutLocation = "";
+#endif
+
+ public BTSODBCQueryEngine()
+ {
+ //
+ // TODO: Add constructor logic here
+ //
+ }
+
+ private OdbcCommand CreateODBCCommandFromSchema(string QuerySchema)
+ {
+ StringReader sr = new StringReader(QuerySchema);
+ OdbcCommand odbcCmd = new OdbcCommand();
+ XmlSchema xsdQueryConfiguration = XmlSchema.Read(sr,null);
+
+ foreach(object item in xsdQueryConfiguration.Items)
+ {
+ if(item is XmlSchemaAnnotation) // Then we are at the section of the schema containing
+ { // the odbc query spec
+ XmlSchemaAnnotation xsAnnotation = (XmlSchemaAnnotation)item;
+ XmlSchemaAppInfo xsAppInfo = (XmlSchemaAppInfo)xsAnnotation.Items[0];
+ XmlNode[] xmlNodesQueryInfo = xsAppInfo.Markup;
+
+ // Create our new command object for query processing
+ odbcCmd.CommandText = xmlNodesQueryInfo[1].InnerText;
+
+ //HACK TO ADDRESS OUT PARAMETERS FOR SP FIX THIS
+// OdbcParameter outParam = new OdbcParameter();
+// outParam.Direction= ParameterDirection.ReturnValue;
+// outParam.Size = 10; // THIS DOES MATTER FIX THIS:
+// odbcCmd.Parameters.Add(outParam);
+
+ }
+ if(item is XmlSchemaElement) // Query Parameters Section of the schema
+ {
+ XmlSchemaElement xsParamsElement = (XmlSchemaElement)item;
+ XmlSchemaComplexType xsCT = (XmlSchemaComplexType)xsParamsElement.SchemaType;
+ // IMPORTANT NOTE: If for some reason they change the order of the params in the
+ // schmema and/or the document being processes then the results will be wrong
+ // as there is no way to map the data to the correct element of the query
+ // remember our SQL looks like SELECT * FROM CUSTOMER WHERE CUSTOMERID = ?
+ foreach(XmlSchemaAttribute xsAttParams in xsCT.Attributes)
+ {
+ OdbcParameter queryParam = new OdbcParameter();
+
+ queryParam.ParameterName = "@" + xsAttParams.Name;
+
+ //Now get all of the meta data from the parameter
+ XmlSchemaAppInfo xsParamInfo = (XmlSchemaAppInfo)xsAttParams.Annotation.Items[0];
+ XmlNode[] xmlParamInfo = xsParamInfo.Markup;
+
+ queryParam.OdbcType = ConvertStringDataTypeToODBC(xmlParamInfo[0].InnerText);
+ queryParam.Direction = ConverStrToParamDir(xmlParamInfo[1].InnerText);
+
+ if(System.Convert.ToInt32(xmlParamInfo[2].InnerText) > 0)
+ queryParam.Size = System.Convert.ToInt32(xmlParamInfo[2].InnerText);
+
+ odbcCmd.Parameters.Add(queryParam);
+ }
+ }
+
+ }
+
+ return odbcCmd;
+ }
+ /*
+ * SIMULATES BTS CODE EXECUTION FOR MESSGAE PROCESSING
+ */
+ public string BTSExecuteODBCCall(string BTSDocument, string QuerySchema)
+ {
+ OdbcCommand odbcCmd = CreateODBCCommandFromSchema(QuerySchema);
+ odbcCmd.Connection = new OdbcConnection(ODBCConnectionString);
+ string Output = "";
+ bool bOutputParametersInQuery = false;
+ OdbcTransaction localDBTransaction = null;
+
+ XmlDocument xmlDoc = new XmlDocument();
+
+ XmlNamespaceManager xmlNSM = new XmlNamespaceManager(xmlDoc.NameTable);
+
+ // WARNING: Should be converted to stream code I would suggest.
+ xmlDoc.LoadXml(BTSDocument);
+
+ // Need to lookup the NS prefix for the payload section of the schema.
+ // Concerned that the root node will not always know what the NS is for our playload
+ // section of the document
+ // WARNING: Possible issue below
+ XmlNode root = xmlDoc.FirstChild;
+
+ string sNSPrefix = root.GetPrefixOfNamespace(Namespace);
+ xmlNSM.AddNamespace(sNSPrefix, Namespace);
+
+ // Now lets get the payload section of the document and process the queries
+ XmlNodeList xmlNL = xmlDoc.SelectNodes("/" + sNSPrefix + ":" + DocumentRootNode, xmlNSM);
+
+ UnicodeEncoding Unicode = new UnicodeEncoding();
+
+ foreach(XmlNode xmlN in xmlNL)
+ {
+ int xmlInboudMsgAttribCnt = 0;
+ //WE NEED TO SKIP THIS FIRST ELEMENT WHICH IS THE ReturnValue
+ for(int cnt = 0; cnt < odbcCmd.Parameters.Count; cnt++)
+ {
+ if(odbcCmd.Parameters[cnt].Direction == ParameterDirection.ReturnValue
+ || odbcCmd.Parameters[cnt].Direction == ParameterDirection.Output
+ ||odbcCmd.Parameters[cnt].Direction == ParameterDirection.InputOutput)
+ {
+ // Add a flag so we know that we need to add out parameters to our ouput xml document
+ bOutputParametersInQuery = true;
+ }
+
+ //WE also need to check if this is an input or output value
+ if(odbcCmd.Parameters[cnt].Direction != ParameterDirection.ReturnValue && odbcCmd.Parameters[cnt].Direction != ParameterDirection.Output)
+ {
+
+ // Even though the command object has some capabilities to perform
+ // data type conversions, we still need to manually convert many of them.
+ // So insted of picking and choosing we are just going to convert them all!
+ switch(odbcCmd.Parameters[cnt].OdbcType.ToString())
+ {
+ case "BigInt":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToInt64(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Binary":
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Bit":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToBoolean(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Text":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "DateTime":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Numeric":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDecimal(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Double":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDouble(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Int":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToInt32(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Real":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDouble(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "SmallInt":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToInt16(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "TinyInt":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToByte(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "UniqueIdentifier": //FIX THIS: Need to do something else!
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Char" : //FIX THIS NEEDS TO SUPPORT ARRAYS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);//.ToCharArray();
+ break;
+ case "Date": // THIS IS A BEST GUESS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Decimal":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDecimal(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Image":
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "NChar":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "NText":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "NVarChar":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "SmallDateTime": // BEST GUESS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Time": // BEST GUESS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Timestamp":
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "VarBinary": //FIX THIS
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "VarChar":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ default:
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+
+ }
+ xmlInboudMsgAttribCnt ++;
+ }
+ }
+
+ try
+ {
+ // HERE we actually execute the query against the target database
+ // We're leveraging ADO.NET to do alot of the heave lifting so it can deal with
+ // generateing the XML output for us
+ OdbcDataAdapter odbcAdapter = new OdbcDataAdapter();
+
+ //================================ BEGIN TRANSACTION ===================================
+ if(ODBCTransaction) // Do we need to enlist the operation in a transaction
+ localDBTransaction = odbcCmd.Connection.BeginTransaction ();
+
+ odbcAdapter.SelectCommand = odbcCmd;
+
+ DataSet ds = new DataSet();
+ odbcAdapter.Fill(ds);
+ Output = ds.GetXml();
+#if(DEBUG)// write output to a specified file
+ if(DebugOutLocation != null)
+ {
+ ds.WriteXml("C:\\TEMP\\ADAPTEROUT.XML");
+ }
+#endif
+ // =============================== END TRANSACTION =======================================
+ if(ODBCTransaction) // Do we need to complete a transcation
+ localDBTransaction.Commit();
+ }
+ catch(Exception e)
+ {
+ try
+ {
+ if(ODBCTransaction)
+ {
+ // ======================= ROLLBACK TRANSACTION ==================================
+ localDBTransaction.Rollback();
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+
+ }
+
+
+ //Once we have the return data set and its corrisponding XML we need to add any outparameter
+ //values to the end of that XML document
+
+
+
+
+ }
+
+
+ return Output;
+ }
+ private ParameterDirection ConverStrToParamDir(string sParamDir)
+ {
+ switch(sParamDir)
+ {
+ case "Input":
+ return ParameterDirection.Input;
+ case "Output":
+ return ParameterDirection.Output;
+ case "InputOutput":
+ return ParameterDirection.InputOutput;
+ case "ReturnValue":
+ return ParameterDirection.ReturnValue;
+ default:
+ return ParameterDirection.Input;
+
+ }
+
+
+ }
+ private OdbcType ConvertStringDataTypeToODBC(string sType)
+ {
+ switch(sType)
+ {
+ case "BigInt":
+ return OdbcType.BigInt;
+ case "Binary": // Also could be IMAGE
+ return OdbcType.Binary;
+ case "Bit":
+ return OdbcType.Bit;
+ case "Text": // Could also be NCHAR, NTEXT, NVARCHAR
+ return OdbcType.Text;
+ case "DateTime":
+ return OdbcType.DateTime;
+ case "Numeric": // Could also be DECIMAL,
+ return OdbcType.Numeric;
+ case "Double":
+ return OdbcType.Double;
+ case "Int":
+ return OdbcType.Int;
+ case "Real":
+ return OdbcType.Real;
+ case "SmallInt":
+ return OdbcType.SmallInt;
+ case "TinyInt":
+ return OdbcType.TinyInt;
+ case "UniqueIdentifier":
+ return OdbcType.UniqueIdentifier;
+ case "Char" :
+ return OdbcType.Char;
+ case "Date":
+ return OdbcType.Date;
+ case "Decimal":
+ return OdbcType.Decimal;
+ case "Image":
+ return OdbcType.Image;
+ case "NChar":
+ return OdbcType.NChar;
+ case "NText":
+ return OdbcType.NText;
+ case "NVarChar":
+ return OdbcType.NVarChar;
+ case "SmallDateTime":
+ return OdbcType.SmallDateTime;
+ case "Time":
+ return OdbcType.Time;
+ case "Timestamp":
+ return OdbcType.Timestamp;
+ case "VarBinary":
+ return OdbcType.VarBinary;
+ case "VarChar":
+ return OdbcType.VarChar;
+ default:
+ return OdbcType.Text;
+ }
+
+ }
+
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Form1.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Form1.cs
new file mode 100644
index 00000000..d8e760bf
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Form1.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapter.ODBC.SchemaWizard
+{
+ ///
+ /// Summary description for Form1.
+ ///
+ public class Form1 : System.Windows.Forms.Form
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public Form1()
+ {
+ //
+ // Required for Windows Form Designer support
+ //
+ InitializeComponent();
+
+ //
+ // TODO: Add any constructor code after InitializeComponent call
+ //
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if( disposing )
+ {
+ if(components != null)
+ {
+ components.Dispose();
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.components = new System.ComponentModel.Container();
+ this.Size = new System.Drawing.Size(300,300);
+ this.Text = "Form1";
+ }
+ #endregion
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Form1.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Form1.resx
new file mode 100644
index 00000000..3f337e08
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Form1.resx
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.0.0.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCSchemaHelper.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCSchemaHelper.cs
new file mode 100644
index 00000000..8c947a30
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCSchemaHelper.cs
@@ -0,0 +1,901 @@
+//---------------------------------------------------------------------
+// File: ODBCSchemaHelp.cs
+//
+// Summary: ADO.NET ODBC Provider based BizTalk adapter.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Data;
+using System.Data.Odbc;
+using System.Collections;
+using System.Xml;
+using System.Xml.Schema;
+using System.IO;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class ODBCSchemaHelper
+ {
+ public ODBCSchemaHelper( ) { }
+
+ public string InputSchema = ""; // FIX THIS: SHould be read only
+ public string OutputSchema = "";// FIX THIS: SHould be read only
+ public AdapterCommandType QueryCommandType = AdapterCommandType.SQL;
+ private bool _HasInputParameters = false;
+ private string _QueryProcessingOutPut = string.Empty; //
+
+ public string QueryOutput
+ {
+ get
+ {
+ return _QueryProcessingOutPut;
+ }
+ }
+
+ public enum AdapterCommandType
+ {
+ SQL,
+ StoredProcedure
+ }
+
+ public enum PortType
+ {
+ Receive = 1,
+ Send = 2
+ }
+
+ public enum AdapterStatementType
+ {
+ Input,
+ InputOutput
+ }
+
+ private string _strDBConnection = string.Empty;
+ private string _strScript = string.Empty;
+ private string _strTableName = string.Empty;
+ private AdapterCommandType _updateType;//FIX THIS
+ private PortType _portType;
+ private string _strInputRoot = string.Empty;
+ private string _strOutputRoot = string.Empty;
+ private string _strSPName = string.Empty;
+ private string _strTargetNamespace = string.Empty;
+ private string _strGeneratedScript = string.Empty;
+ private string _strWSDL = string.Empty;
+ private bool _ModifyCommand = false;
+
+ private AdapterStatementType _StatementType = AdapterStatementType.InputOutput;
+
+ #region Properties
+
+ public AdapterStatementType StatementType
+ {
+ get
+ {
+ return _StatementType;
+ }
+ set
+ {
+ _StatementType = value;
+ }
+ }
+
+ public bool OverrideQueryProcessing
+ {
+ set
+ {
+ _ModifyCommand = value;
+ }
+ }
+
+ public string strDBConnection
+ {
+ get
+ {
+ return _strDBConnection;
+ }
+ set
+ {
+ _strDBConnection = value;
+ }
+ }
+
+ public bool InputParameter
+ {
+ get
+ {
+ return _HasInputParameters;
+ }
+ }
+
+ public string strScript
+ {
+ get
+ {
+ return _strScript;
+ }
+ set
+ {
+ _strScript = value;
+ // This will init all of the schemas and other things!
+ this.CreateBizTalkSchema( );
+ }
+ }
+
+ public bool ModifyCommand
+ {
+ get
+ {
+ return _ModifyCommand;
+ }
+ set
+ {
+ _ModifyCommand = value;
+ }
+
+ }
+
+ public string strTableName
+ {
+ get
+ {
+ return _strTableName;
+ }
+ set
+ {
+ _strTableName = value;
+ }
+ }
+
+ public AdapterCommandType UpdategramType // FIX THIS:
+ {
+ get
+ {
+ return _updateType;
+ }
+ set
+ {
+ _updateType = value;
+ }
+ }
+
+ public PortType portType
+ {
+ get
+ {
+ return _portType;
+ }
+ set
+ {
+ _portType = value;
+ }
+ }
+
+ public string strInputRoot
+ {
+ get
+ {
+ return _strInputRoot;
+ }
+ set
+ {
+ _strInputRoot = value;
+ }
+ }
+
+ public string strOutputRoot
+ {
+ get
+ {
+ return _strOutputRoot;
+ }
+ set
+ {
+ _strOutputRoot = value;
+ }
+ }
+
+ public string strSPName
+ {
+ get
+ {
+ return _strSPName;
+ }
+ set
+ {
+ _strSPName = value;
+ }
+ }
+
+ public string strTargetNamespace
+ {
+ get
+ {
+ return _strTargetNamespace;
+ }
+ set
+ {
+ _strTargetNamespace = value;
+ }
+ }
+
+ public string strGeneratedScript
+ {
+ get
+ {
+ return _strGeneratedScript;
+ }
+ set
+ {
+ _strGeneratedScript = value;
+ }
+ }
+
+ public string strWSDL
+ {
+ get
+ {
+ return _strWSDL;
+ }
+ set
+ {
+ _strWSDL = value;
+ }
+ }
+
+ #endregion
+
+ private XmlSchemaAnnotation AdapterHeaderAnnotationSection( string ProcessedCommandScript )
+ {
+ //====================== SCHEMA ANNOTATION ================================
+ // Create the Schema object necessary to contain the annotation info
+ // this section will contain the SQL statements that the adapter processes
+ //
+ //
+ // SELECT * FROM DEMO WHERE DEI = @DEI
+ // SELECT * FROM DEMO WHERE DEI = ?
+ // ResponseDocRootName
+ // http://ResponseNS
+ //
+ //
+
+ XmlSchemaAnnotation xsAnnotation = new XmlSchemaAnnotation( );
+ XmlSchemaAppInfo xsAppInfo = new XmlSchemaAppInfo( );
+
+ // AppInfo class uses an array of nodes to contain config data
+ // so we need to use the XMLDOM to create these nodes
+ XmlDocument xmlWorkingDoc = new XmlDocument( );
+
+ XmlNode[ ] xmlNodeAdapterConfig = new XmlNode[ 4 ];
+
+ // Save out the query with parameter information
+ xmlNodeAdapterConfig[ 0 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsodbc", "SQLCMD", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 0 ].InnerText = _strScript;
+
+ // Save out generic query with ODBC escape sequence
+ xmlNodeAdapterConfig[ 1 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsodbc", "ODBCCMD", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 1 ].InnerText = ProcessedCommandScript;
+
+ // Save out root node name for the response document generated by this query
+ xmlNodeAdapterConfig[ 2 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsodbc", "ResponseRootName", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 2 ].InnerText = _strOutputRoot;
+
+ // Save out root node name for the response document generated by this query
+ xmlNodeAdapterConfig[ 3 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsodbc", "ResponseNS", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 3 ].InnerText = _strTargetNamespace;
+
+ xsAppInfo.Markup = xmlNodeAdapterConfig;
+ xsAnnotation.Items.Add( xsAppInfo );
+
+ return xsAnnotation;
+ }
+
+ public string ExtractODBCParametersSchema( OdbcCommand odbcCmd )
+ {
+ //First check to see if there are any input parameters
+ //if not we may only need to genterate a response schema!
+ _HasInputParameters = false;
+
+ // if(odbcCmd.Parameters.Count == 0)
+ // {
+ // return null;
+ // }
+ // else
+ // {
+ XmlSchema xsBTSInboundMsg = new XmlSchema( );
+ XmlSchemaAnnotation xsAnnotation;
+ XmlSchemaAppInfo xsAppInfo;
+ // AppInfo class uses an array of nodes to contain config data
+ // so we need to use the XMLDOM to create these nodes
+ XmlDocument xmlWorkingDoc = new XmlDocument( );
+ XmlNode[ ] xmlNodeAdapterConfig;
+
+ xsBTSInboundMsg.AttributeFormDefault = XmlSchemaForm.Unqualified;
+ xsBTSInboundMsg.ElementFormDefault = XmlSchemaForm.Qualified;
+
+ xsBTSInboundMsg.TargetNamespace = _strTargetNamespace + "/" + _strInputRoot; //"http://ODBCADAPTERTEST.com"; //FIX THIS: needs to be a parameter
+ xsBTSInboundMsg.Namespaces.Add( "msbtsodbc", "http://schemas.microsoft.com/BizTalk/2003" );
+
+ // Write the configuration to the schema
+ xsBTSInboundMsg.Items.Add( AdapterHeaderAnnotationSection( odbcCmd.CommandText ) );
+
+ //==================== QUERY PARAMETERS SCHEMA SECTION ====================
+ XmlSchemaElement xsQueryRoot = new XmlSchemaElement( );
+ //Setup document root
+ xsQueryRoot.Name = _strInputRoot;
+
+ xsBTSInboundMsg.Items.Add( xsQueryRoot );
+
+ if ( odbcCmd.Parameters.Count > 0 )
+ {
+ //
+ XmlSchemaComplexType xsRepeatingComplexType = new XmlSchemaComplexType( );
+
+ xsQueryRoot.SchemaType = xsRepeatingComplexType; //
+
+ XmlSchemaElement xsElementParameters = new XmlSchemaElement( );
+
+ XmlSchemaSequence xsSeq = new XmlSchemaSequence( );
+ xsSeq.Items.Add( xsElementParameters );
+
+ //Setup the repeating section of the query
+ xsElementParameters.Name = "QueryParameters";
+ xsElementParameters.MaxOccursString = "unbounded";
+ xsElementParameters.MinOccursString = "1";
+
+ XmlSchemaComplexType xsComplexType = new XmlSchemaComplexType( );
+
+ xsRepeatingComplexType.Particle = ( XmlSchemaParticle )xsSeq; //
+
+ xsElementParameters.SchemaType = xsComplexType; //
+
+ // Loop through the parameter section of the command object and create a
+ // schema attribute for each
+ //Loop throught the ODBC Command object looking for in parameters
+ foreach ( OdbcParameter odbcParam in odbcCmd.Parameters )
+ {
+ XmlSchemaAttribute xsAttribute = new XmlSchemaAttribute( );
+ xsAttribute.Name = odbcParam.ParameterName.Replace( "@", "" );
+ xsAttribute.SchemaTypeName = ConvertODBCDataTypeToXMLDataType( odbcParam.OdbcType.ToString( ) );
+
+ // SAVE Out the meta data for this parameter in an appinfo section of the schema
+ // this is done to deal with the name space problems we run into etx with special
+ // attributes
+ xsAnnotation = new XmlSchemaAnnotation( ); // These vars were already define earlier
+ xsAppInfo = new XmlSchemaAppInfo( );
+
+ // AppInfo class uses an array of nodes to contain config data
+ // so we need to use the XMLDOM to create these nodes
+ xmlWorkingDoc = new XmlDocument( );
+
+ xmlNodeAdapterConfig = new XmlNode[ 3 ];
+
+ // Save out ODBC data type for parameter
+ xmlNodeAdapterConfig[ 0 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsdbc", "ParamType", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 0 ].InnerText = odbcParam.OdbcType.ToString( );
+
+ // Save out the parameter direction
+ xmlNodeAdapterConfig[ 1 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsodbc", "ParamDir", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 1 ].InnerText = odbcParam.Direction.ToString( );
+
+ // Save out the parameters data lenght
+ xmlNodeAdapterConfig[ 2 ] = xmlWorkingDoc.CreateNode( XmlNodeType.Element, "msbtsodbc", "ParamSize", "http://schemas.microsoft.com/BizTalk/2003" );
+ xmlNodeAdapterConfig[ 2 ].InnerText = odbcParam.Size.ToString( );
+
+ // Write the configuration to the schema
+ xsAttribute.Annotation = xsAnnotation;
+ xsAnnotation.Items.Add( xsAppInfo );
+ xsAppInfo.Markup = xmlNodeAdapterConfig;
+
+ xsComplexType.Attributes.Add( xsAttribute ); //
+
+ if ( odbcParam.Direction == ParameterDirection.Input || odbcParam.Direction == ParameterDirection.InputOutput )
+ _HasInputParameters = true;
+
+ //
+ // etc...
+ }
+ }
+ // Get the schema string
+ StringBuilder sb = new StringBuilder( );
+ StringWriter sw = new StringWriter( sb );
+ xsBTSInboundMsg.Write( sw );
+
+ string sReturnSchema = sb.ToString( );
+
+ return sReturnSchema;
+ //}
+ }
+
+ /*
+ * This function exists as the ODBC provider in .NET does not like
+ * named parameters as part of database calls. So we will convert
+ * the command parameters collection and command text into a generic SQL
+ * statement.
+ */
+ public string BuildSQLSPCommandString( OdbcCommand odbcCmd )
+ {
+ //bool bReturnVal = false; // Need to know this as some SP's do not return these
+ string sSQLCommand = ""; //{ @RC = CALL StoredProc(@Param1, @Param2)}
+ // This will be used to mapping to the XML
+ // durning transmission
+
+ string sGenericSPEscapeSequence = ""; //{ ? = CALL StoredProc(?, ?)}
+ // This will be the actual call made by the
+ // ODBC command object for the transmission
+
+ // The first parameter in the parameters collection normally
+ // maintains the return value
+
+ sSQLCommand = "{";
+ sGenericSPEscapeSequence = "{";
+
+ if ( odbcCmd.Parameters.Count > 0 && odbcCmd.Parameters[ 0 ].Direction == System.Data.ParameterDirection.ReturnValue )
+ {
+ sSQLCommand += odbcCmd.Parameters[ 0 ].ParameterName + " = ";
+ sGenericSPEscapeSequence += "? =";
+ //bReturnVal = true;
+ }
+
+ //Embed the sp execute statement
+ sSQLCommand += "CALL " + odbcCmd.CommandText;
+ sGenericSPEscapeSequence += "CALL " + odbcCmd.CommandText;
+
+ //Now we loop thru the remaining parameters and build the SP statement
+ for ( int cnt = 0; cnt < odbcCmd.Parameters.Count; cnt++ )
+ {
+ if ( cnt == 0 )
+ {
+ //Set up for input parameters section of SP
+ sSQLCommand += "(";
+ sGenericSPEscapeSequence += "(";
+ }
+
+ if ( odbcCmd.Parameters[ cnt ].Direction != ParameterDirection.ReturnValue )
+ {
+ sSQLCommand += odbcCmd.Parameters[ cnt ].ParameterName;
+ sGenericSPEscapeSequence += "?";
+ }
+
+ // Do we have another parameter after this parameter? If so we need to build an additional parameters
+ if ( ( cnt + 1 ) < odbcCmd.Parameters.Count &&
+ odbcCmd.Parameters[ cnt ].Direction != ParameterDirection.ReturnValue )
+ {
+ sSQLCommand += ",";
+ sGenericSPEscapeSequence += ",";
+ }
+
+ //Finish up the formating for the parameters if this is the last param
+ if ( ( cnt + 1 ) == odbcCmd.Parameters.Count )
+ {
+ //Set up for input parameters section of SP
+ sSQLCommand += ")";
+ sGenericSPEscapeSequence += ")";
+ }
+ }
+
+ //Complete the statement syntax
+ sSQLCommand += "}";
+ sGenericSPEscapeSequence += "}";
+
+ //FIXED BY RODOLFO
+ sGenericSPEscapeSequence = sGenericSPEscapeSequence.Replace( "()", "" );
+
+ _strGeneratedScript = sGenericSPEscapeSequence;
+
+ return sGenericSPEscapeSequence;
+ }
+
+ public OdbcCommand GenerateODBCCommandFromSP( string sql )
+ {
+ //To resove the parameters for a given SP we need a live connection
+ OdbcConnection odbcCon = new OdbcConnection( _strDBConnection );
+ OdbcCommand odbcCmd = new OdbcCommand( sql, odbcCon );
+ UnicodeEncoding Unicode = new UnicodeEncoding( );
+
+ odbcCmd.CommandType = CommandType.StoredProcedure;
+
+ odbcCon.Open( );
+
+ //Have the ODBC Namespace resolve the parameters
+ OdbcCommandBuilder.DeriveParameters( odbcCmd );
+
+ odbcCon.Close( );
+
+ //Now we'll loop thur the parameters set some bogus test data
+ foreach ( OdbcParameter odbcParam in odbcCmd.Parameters )
+ {
+ switch ( odbcParam.OdbcType.ToString( ) )
+ {
+ case "BigInt":
+ odbcParam.Value = System.Convert.ToInt64( "1" );
+ break;
+ case "Binary":
+ odbcParam.Value = Unicode.GetBytes( "1" );
+ break;
+ case "Bit":
+ odbcParam.Value = System.Convert.ToBoolean( "true" );
+ break;
+ case "Text":
+ odbcParam.Value = System.Convert.ToString( "1" );
+ break;
+ case "DateTime":
+ odbcParam.Value = System.Convert.ToDateTime( "1/1/2000" );
+ break;
+ case "Numeric":
+ odbcParam.Value = System.Convert.ToDecimal( "1" );
+ break;
+ case "Double":
+ odbcParam.Value = System.Convert.ToDouble( "1" );
+ break;
+ case "Int":
+ odbcParam.Value = System.Convert.ToInt32( "1" );
+ break;
+ case "Real":
+ odbcParam.Value = System.Convert.ToDouble( "1" );
+ break;
+ case "SmallInt":
+ odbcParam.Value = System.Convert.ToInt16( "1" );
+ break;
+ case "TinyInt":
+ odbcParam.Value = System.Convert.ToByte( "1" );
+ break;
+ case "UniqueIdentifier": //FIX THIS: Need to do something else!
+ odbcParam.Value = Guid.NewGuid( );// System.Convert.ToString("1");
+ break;
+ case "Char": //FIX THIS NEEDS TO SUPPORT ARRAYS
+ odbcParam.Value = System.Convert.ToString( "1" );//.ToCharArray();
+ break;
+ case "Date": // THIS IS A BEST GUESS
+ odbcParam.Value = System.Convert.ToDateTime( "1/1/2000" );
+ break;
+ case "Decimal":
+ odbcParam.Value = System.Convert.ToDecimal( "1" );
+ break;
+ case "Image":
+ odbcParam.Value = Unicode.GetBytes( "1" );
+ break;
+ case "NChar":
+ odbcParam.Value = System.Convert.ToString( "1" );
+ break;
+ case "NText":
+ odbcParam.Value = System.Convert.ToString( "1" );
+ break;
+ case "NVarChar":
+ odbcParam.Value = System.Convert.ToString( "1" );
+ break;
+ case "SmallDateTime": // BEST GUESS
+ odbcParam.Value = System.Convert.ToDateTime( "1/1/2000" );
+ break;
+ case "Time": // BEST GUESS
+ odbcParam.Value = System.Convert.ToDateTime( "1/1/2000" );
+ break;
+ case "Timestamp":
+ odbcParam.Value = Unicode.GetBytes( "1" );
+ break;
+ case "VarBinary": //FIX THIS
+ odbcParam.Value = Unicode.GetBytes( "1" );
+ break;
+ case "VarChar":
+ odbcParam.Value = System.Convert.ToString( "1" );
+ break;
+ default:
+ odbcParam.Value = System.Convert.ToDateTime( "1" );
+ break;
+
+ }
+ }
+
+ // Now we need to process the command and generate a generic escape sequence for the SQL
+ // the ODBC provider does NOT like named parameters
+ odbcCmd.CommandText = BuildSQLSPCommandString( odbcCmd );
+
+ return odbcCmd;
+ }
+
+ public OdbcCommand GenerateODBCCommandFromSQL( string sql )
+ {
+ int iParamStartIndex = 0;
+ int iParamEndIndex = 1;
+ int iParamSize = 0;
+ string sParameterName = "";
+
+ // We need to conver the SQL sytax that the user provided to something
+ // that the ODBC namespace can handle:
+ // FROM:
+ // SELECT * FROM CUSTOMERS WHERER CUSTOMERID = @CUSTOMERID
+ // TO:
+ // SELECT * FROM CUSTOMERS WHERE CUSTOMERID = ?
+ // Thats what will be contained in the sODBCSQLEscapeSequence
+ string sODBCSQLEscapeSequence = sql;
+
+ //Get rid of the \r\n stuff and convert is to normal whitespace
+ //or we will end up with missing text
+ sql = sql.Replace( "\r\n", " " );
+
+ OdbcConnection odbcCon = new OdbcConnection( _strDBConnection );
+ OdbcCommand dbCmdODBC = new OdbcCommand( );
+ dbCmdODBC.Connection = odbcCon;
+ dbCmdODBC.CommandType = CommandType.Text;
+
+ // Prep the command to deal with no spaces between commands etc
+ // (@VALUE1,@VALUE2)
+ sql = sql.Replace( ",", " ," );
+ sql = sql.Replace( "(", " (" );
+ sql = sql.Replace( ")", " )" );
+
+ do
+ {
+ //Now we need to shread the SQL the user provided us with to pull out
+ //the parameters. These will be used to build in the input schema
+ // V
+ // SELECT * FROM CUSTOMERS WHERE CUSTOMERID = @CUSTOMERID AND.....
+ iParamStartIndex = sql.IndexOf( "@", iParamEndIndex );
+
+ //If we run out of parameters get out of the loop
+ if ( iParamStartIndex == -1 )
+ break;
+ //++++++ NEED TO ADD A SECTION OF TYPE OF QUERY UPDATE, SQL SP etc
+ // V
+ // SELECT * FROM CUSTOMERS WHERE CUSTOMERID = @CUSTOMERID AND.....
+ iParamEndIndex = sql.IndexOf( " ", iParamStartIndex );
+
+ //We could be at the end of the string so we need to check
+ if ( iParamEndIndex == -1 )
+ iParamEndIndex = sql.Length;
+
+ //Figure out how big the parameter term is so we only extract it from the string
+ iParamSize = iParamEndIndex - iParamStartIndex;
+ sParameterName = sql.Substring( iParamStartIndex, iParamSize );
+
+ // ========================= Process Parameters =======================
+ //Add a new parameter to our command object
+ OdbcParameter odbcParam = new OdbcParameter( );
+
+ odbcParam.ParameterName = sParameterName;
+ odbcParam.Value = "1";
+ odbcParam.Direction = ParameterDirection.Input;
+ //odbcParam.DbType = CANT DETERMINE THIS!!!
+
+ dbCmdODBC.Parameters.Add( odbcParam );
+
+ //====================== Setup Generic Command SQL ====================
+ sODBCSQLEscapeSequence = sODBCSQLEscapeSequence.Replace( sParameterName, "?" );
+ }
+ while ( iParamEndIndex != sql.Length );
+
+ //Now set the command objects command text to our generic SQL
+ dbCmdODBC.CommandText = sODBCSQLEscapeSequence;
+
+ //Publish it up to the class level as a property
+ _strGeneratedScript = sODBCSQLEscapeSequence;
+
+ return dbCmdODBC;
+ }
+
+ public string GenerateOutputSchema( OdbcCommand odbcCmd )
+ {
+ bool bOutParamsFound = false;
+ try
+ {
+ // Call the command to get the output schema
+ OdbcDataAdapter OdbcAdapter = new OdbcDataAdapter( );
+
+ // Need to call a transaction to prevent writes during the generation
+ // of an output schema.
+ // We want to wrap this call in a transaction that we don't commit
+ odbcCmd.Connection.Open( );
+ OdbcTransaction odbcTrans = odbcCmd.Connection.BeginTransaction( );
+
+ odbcCmd.Transaction = odbcTrans;
+
+ OdbcAdapter.SelectCommand = odbcCmd;
+
+ DataSet custDS = new DataSet( _strOutputRoot );
+
+ //Load the data set to get the output schema
+ OdbcAdapter.Fill( custDS );
+
+ // Throw away any junk we may have written
+
+ //odbcTrans.Rollback(); //WARNING: These have been commited out as during testing some of the
+ // open source DBs fail to implement transaction correctly. Most commercial DBS
+ // will roll these transaction back if we fail to call Commit. So in most cases
+ // we should be golden
+ //odbcCmd.Transaction.Rollback();
+
+ // Save the query Output for testing purposed
+ _QueryProcessingOutPut = custDS.GetXml( );
+
+ odbcCmd.Connection.Close( );
+
+ string xsResultsSchema = custDS.GetXmlSchema( );
+
+ //Now we need to extend the schema
+ StringReader sr = new StringReader( xsResultsSchema );
+ //Load the data set schema into the XML Schema Objects
+ XmlSchema xsdQueryConfiguration = XmlSchema.Read( sr, null );
+
+ //Add target namespace
+ //.DOC added to the name to prevent a collision between the ns ID and the root note name generated
+ // by the dataset.
+ xsdQueryConfiguration.TargetNamespace = _strTargetNamespace + "/" + _strOutputRoot;
+ xsdQueryConfiguration.Id = _strOutputRoot + "Schema";
+
+ //Now we need to disect the XSD from the data set so we can add our SP
+ //Parameters. The first element in the schema is an elemement
+ // xsd:element
+ XmlSchemaElement xsParentElement = ( XmlSchemaElement )xsdQueryConfiguration.Items[ 0 ];
+
+ //Next get the complex type
+ //xsd:ComplexType
+ XmlSchemaComplexType xsParentComplexType = ( XmlSchemaComplexType )xsParentElement.SchemaType;
+
+ //Next get the choice
+ //xsd:Choice
+ XmlSchemaChoice xsParentChoice = ( XmlSchemaChoice )xsParentComplexType.Particle;
+
+ //Now we can insert the new SP parameters section into the
+ //choice selection
+
+ //include any output parameters that are include
+ //Now we add a section for the return value and out parameters
+ //==================== QUERY PARAMETERS SCHEMA SECTION ====================
+
+ XmlSchemaElement xsElementParameters = new XmlSchemaElement( );
+ xsElementParameters.Name = "OutParameters";
+
+ XmlSchemaComplexType xsComplexType = new XmlSchemaComplexType( );
+
+ xsElementParameters.SchemaType = xsComplexType; //
+
+ // Loop through the parameter section of the command object and create a
+ // schema attribute for each
+ //Loop throught the ODBC Command object looking for in parameters
+ foreach ( OdbcParameter odbcParam in odbcCmd.Parameters )
+ {
+ // We only want to create elements for out bound parameters since this is the
+ // adapters output schema
+ if ( odbcParam.Direction != ParameterDirection.Input )
+ {
+ bOutParamsFound = true;
+ XmlSchemaAttribute xsAttribute = new XmlSchemaAttribute( );
+ xsAttribute.Name = odbcParam.ParameterName.Replace( "@", "" );
+ xsAttribute.SchemaTypeName = ConvertODBCDataTypeToXMLDataType( odbcParam.OdbcType.ToString( ) );
+ xsComplexType.Attributes.Add( xsAttribute ); //
+ }
+ }
+
+ // See if we need to add the out parameters section to the schema
+ if ( bOutParamsFound )
+ {
+ xsParentChoice.Items.Add( xsElementParameters ); //
+ }
+
+ //Check to see if this is a receive port. If it is we need to add the adapter meta data to the header
+ //of the schema.
+ if ( _portType == PortType.Receive )
+ {
+ XmlSchemaObject objTmp = xsdQueryConfiguration.Items[ 0 ];
+ //Hack to force the header infor to be at the top of the schema
+ xsdQueryConfiguration.Items.RemoveAt( 0 );
+ xsdQueryConfiguration.Items.Add( AdapterHeaderAnnotationSection( odbcCmd.CommandText ) );
+ xsdQueryConfiguration.Items.Add( objTmp );
+ }
+
+ // Get the schema string
+ StringBuilder sb = new StringBuilder( );
+ StringWriter sw = new StringWriter( sb );
+ xsdQueryConfiguration.Write( sw );
+
+ string sReturnSchema = sb.ToString( );
+
+ return sReturnSchema;
+ }
+ catch ( Exception e )
+ {
+ if ( odbcCmd.Connection.State == ConnectionState.Open )
+ odbcCmd.Connection.Close( );
+
+ throw new Exception( "Error Occured while attempting to generate the output schema for the query: " + e.Message );
+ }
+ }
+
+ private XmlQualifiedName ConvertODBCDataTypeToXMLDataType( string ODBCDataType )
+ {
+ switch ( ODBCDataType )
+ {
+ case "BigInt":
+ return new XmlQualifiedName( "long", "http://www.w3.org/2001/XMLSchema" );
+ case "Binary":
+ return new XmlQualifiedName( "base64Binary", "http://www.w3.org/2001/XMLSchema" );
+ case "Bit":
+ return new XmlQualifiedName( "boolean", "http://www.w3.org/2001/XMLSchema" );
+ case "Char":
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ case "DateTime":
+ return new XmlQualifiedName( "dateTime", "http://www.w3.org/2001/XMLSchema" );
+ case "Decimal":
+ return new XmlQualifiedName( "decimal", "http://www.w3.org/2001/XMLSchema" );
+ case "Double":
+ return new XmlQualifiedName( "double", "http://www.w3.org/2001/XMLSchema" );
+ case "Image":
+ return new XmlQualifiedName( "base64Binary", "http://www.w3.org/2001/XMLSchema" );
+ case "Int":
+ return new XmlQualifiedName( "int", "http://www.w3.org/2001/XMLSchema" );
+ case "NChar":
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ case "NText":
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ case "Numeric":
+ return new XmlQualifiedName( "decimal", "http://www.w3.org/2001/XMLSchema" );
+ case "NVarChar":
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ case "Real":
+ return new XmlQualifiedName( "float", "http://www.w3.org/2001/XMLSchema" );
+ case "SmallInt":
+ return new XmlQualifiedName( "short", "http://www.w3.org/2001/XMLSchema" );
+ case "Text":
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ case "TinyInt":
+ return new XmlQualifiedName( "unsignedByte", "http://www.w3.org/2001/XMLSchema" );
+ case "UniqueIdentifier"://FIX THIS
+ return new XmlQualifiedName( "long", "http://www.w3.org/2001/XMLSchema" );
+ case "VarBinary":
+ return new XmlQualifiedName( "base64Binary", "http://www.w3.org/2001/XMLSchema" );
+ case "VarChar":
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ default:
+ return new XmlQualifiedName( "string", "http://www.w3.org/2001/XMLSchema" );
+ }
+ }
+
+ public bool CreateBizTalkSchema( )
+ {
+ OdbcCommand OdbcCmd;
+ OdbcConnection OdbcCon = new OdbcConnection( _strDBConnection );
+
+ if ( QueryCommandType == AdapterCommandType.SQL )
+ {
+ OdbcCmd = this.GenerateODBCCommandFromSQL( _strScript );
+ //If they want to modify the command then we present the user with a dialog
+ //that will allow them to override out default command settings. This is done
+ //to help addess data type and testing issues with different databases
+ if ( _ModifyCommand )
+ {
+ ADOCommandOverride test = new ADOCommandOverride( );
+ test.ADOCommand = OdbcCmd;
+ test.ParentClass = this;
+ test.ShowDialog( );
+ }
+ }
+ else
+ {
+ OdbcCmd = this.GenerateODBCCommandFromSP( _strScript );
+ }
+
+ InputSchema = ExtractODBCParametersSchema( OdbcCmd );
+
+ //Only call the output schema functions if we need an output schema
+ if ( this._StatementType != AdapterStatementType.Input )
+ {
+ OutputSchema = GenerateOutputSchema( OdbcCmd );
+ }
+
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCSchemaWizard.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCSchemaWizard.csproj
new file mode 100644
index 00000000..417e3d9f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/ODBCSchemaWizard.csproj
@@ -0,0 +1,243 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}
+ Debug
+ AnyCPU
+
+
+
+
+ ODBCSchemaWizard
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ Library
+ Microsoft.BizTalk.Adapter.ODBC.SchemaWizard
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ System
+
+
+ System.Data
+
+
+ System.Drawing
+
+
+ System.Windows.Forms
+
+
+ System.XML
+
+
+
+
+ Form
+
+
+ Code
+
+
+ Code
+
+
+ UserControl
+
+
+ Code
+
+
+ UserControl
+
+
+ UserControl
+
+
+ Form
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ Form
+
+
+ UserControl
+
+
+ ADOCommandOverride.cs
+ Designer
+
+
+ ADOParameters.cs
+
+
+ DBConnection.cs
+
+
+ FinishDisplay.cs
+
+
+ ODBCAdapterWizardForm.cs
+ Designer
+
+
+ QueryEditor.cs
+ Designer
+
+
+ QueryType.cs
+
+
+ SchemaMetaData.cs
+
+
+ WizardForm.cs
+ Designer
+
+
+ WizardUserControl.cs
+ Designer
+
+
+
+
+
+
+ {F25132D9-07AA-4B41-90AD-828E54704692}
+ ODBCDriverPrompt
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+ CALL "%25VS100COMNTOOLS%25vsvars32.bat"
+gacutil.exe /i "$(TargetPath)"
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/TestCases.xls b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/TestCases.xls
new file mode 100644
index 00000000..c86fa9f8
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/TestCases.xls differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Validator.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Validator.cs
new file mode 100644
index 00000000..ee0aba51
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/Validator.cs
@@ -0,0 +1,179 @@
+//---------------------------------------------------------------------
+// File: Validator.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Runtime.Serialization;
+using System.Diagnostics;
+using System.Xml.Schema;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ ///
+ /// Validator class handles validation for connection string, root element name and target namespace
+ ///
+ public class Validator
+ {
+ public static void ValidateXlangKeyword( string input )
+ {
+ #region Reserved Xlang Keywords
+
+ string[ ] reservedXlangKeywords = { "activate",
+ "atomic",
+ "body",
+ "call",
+ "catch",
+ "checked",
+ "compensate",
+ "compensation",
+ "construct",
+ "correlation",
+ "correlationtype",
+ "delay",
+ "dynamic",
+ "else",
+ "exceptions",
+ "exec",
+ "exists",
+ "false",
+ "if",
+ "implements",
+ "initialize",
+ "internal",
+ "link",
+ "listen",
+ "longrunning",
+ "message",
+ "messagetype",
+ "method",
+ "module",
+ "new",
+ "null",
+ "oneway",
+ "out",
+ "parallel",
+ "port",
+ "porttype",
+ "private",
+ "public",
+ "receive",
+ "ref",
+ "request",
+ "requestresponse",
+ "response",
+ "scope",
+ "send",
+ "service",
+ "servicelink",
+ "servicelinktype",
+ "source",
+ "succeeded",
+ "suppressfailure",
+ "suspend",
+ "target",
+ "task",
+ "terminate",
+ "throw",
+ "timeout",
+ "transaction",
+ "transform",
+ "true",
+ "unchecked",
+ "until",
+ "uses",
+ "using",
+ "while",
+ "xpath",
+ };
+
+ #endregion
+
+ for ( int i = 0; i < reservedXlangKeywords.Length; i++ )
+ if ( input == reservedXlangKeywords[ i ] )
+ throw new SqlValidationException( "You are using a BizTalk reserver word as part of you naming convention" );
+ }
+
+ public static void ValidateRootElementName( string input )
+ {
+ char[ ] invalidChars = { '>', '<', '\'', '\"', '&', ':' };
+ if ( input.IndexOfAny( invalidChars ) >= 0 )
+ throw new SqlValidationException( "You are using invalid characters in your root element name" );
+ ValidateXlangKeyword( input );
+ }
+
+ public static void ValidateTargetNamespace( string input )
+ {
+ XmlSchema xs = new XmlSchema( );
+ xs.TargetNamespace = input;
+
+ XmlSchemaSet xsSet = new XmlSchemaSet( );
+ xsSet.ValidationEventHandler += new ValidationEventHandler( ValidationHandler );
+ xsSet.Add( xs );
+ xsSet.Compile( );
+
+ ValidateXlangKeyword( input );
+ }
+
+ public static void ValidationHandler( object sender, ValidationEventArgs args )
+ {
+ throw new SqlValidationException( "Validation Error: " + "\n" + args.Message );
+ }
+
+ public static void ValidateConnectionString( string input )
+ {
+ if ( input.Length == 0 )
+ throw new SqlValidationException( "Connection string validation error" );
+
+ /*
+ OleDbConnection myConnection = null;
+ try
+ {
+ myConnection = new OleDbConnection(input);
+ myConnection.Open();
+ myConnection.Close();
+ }
+ catch(Exception e)
+ {
+ throw new SqlValidationException(ODBCResourceHandler.GetResourceString("ValidationConnectionError")+" "+e.Message);
+ }
+ finally
+ {
+ if (myConnection != null)
+ myConnection.Close();
+ }
+ */
+ }
+ }
+
+ [Serializable( )]
+ public class SqlValidationException : Exception
+ {
+ public SqlValidationException( ) { }
+
+ public SqlValidationException( string s, Exception e ) : base( s, e ) { }
+
+ protected SqlValidationException( SerializationInfo si, StreamingContext sc ) : base( si, sc ) { }
+
+ public SqlValidationException( string errorMsg ) : base( errorMsg )
+ {
+ this.Source = "ODBC Adapter Admin";
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardLogo.JPG b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardLogo.JPG
new file mode 100644
index 00000000..e568f6c1
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardLogo.JPG differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ADOParameters.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ADOParameters.cs
new file mode 100644
index 00000000..087c0f59
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ADOParameters.cs
@@ -0,0 +1,273 @@
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapter.ODBC.SchemaWizard.WizardUI
+{
+ public class ADOParameters : Microsoft.BizTalk.Adapters.ODBC.SchemaWizard.WizardUserControl
+ {
+ private System.Windows.Forms.TextBox txtSize;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.TextBox txtSampleData;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Button cmdApply;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.ComboBox cboDirection;
+ private System.Windows.Forms.ComboBox cboDataType;
+ private System.Windows.Forms.TextBox txtParamName;
+ private System.Windows.Forms.ListView lvQueryParameters;
+ private System.Windows.Forms.ColumnHeader Parameter;
+ public System.Windows.Forms.ColumnHeader DataType;
+ private System.Windows.Forms.ColumnHeader SizeCol;
+ private System.Windows.Forms.ColumnHeader Direction;
+ private System.Windows.Forms.ColumnHeader SampleData;
+ private System.Windows.Forms.Label label5;
+ private System.ComponentModel.IContainer components = null;
+
+ public ADOParameters( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.txtSize = new System.Windows.Forms.TextBox( );
+ this.label8 = new System.Windows.Forms.Label( );
+ this.txtSampleData = new System.Windows.Forms.TextBox( );
+ this.label4 = new System.Windows.Forms.Label( );
+ this.cmdApply = new System.Windows.Forms.Button( );
+ this.label3 = new System.Windows.Forms.Label( );
+ this.label2 = new System.Windows.Forms.Label( );
+ this.label1 = new System.Windows.Forms.Label( );
+ this.cboDirection = new System.Windows.Forms.ComboBox( );
+ this.cboDataType = new System.Windows.Forms.ComboBox( );
+ this.txtParamName = new System.Windows.Forms.TextBox( );
+ this.lvQueryParameters = new System.Windows.Forms.ListView( );
+ this.Parameter = new System.Windows.Forms.ColumnHeader( );
+ this.DataType = new System.Windows.Forms.ColumnHeader( );
+ this.SizeCol = new System.Windows.Forms.ColumnHeader( );
+ this.Direction = new System.Windows.Forms.ColumnHeader( );
+ this.SampleData = new System.Windows.Forms.ColumnHeader( );
+ this.label5 = new System.Windows.Forms.Label( );
+ this.SuspendLayout( );
+ //
+ // txtSize
+ //
+ this.txtSize.Location = new System.Drawing.Point( 160, 208 );
+ this.txtSize.Name = "txtSize";
+ this.txtSize.Size = new System.Drawing.Size( 56, 21 );
+ this.txtSize.TabIndex = 33;
+ //
+ // label8
+ //
+ this.label8.Location = new System.Drawing.Point( 160, 192 );
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size( 48, 16 );
+ this.label8.TabIndex = 32;
+ this.label8.Text = "Size";
+ //
+ // txtSampleData
+ //
+ this.txtSampleData.Location = new System.Drawing.Point( 176, 160 );
+ this.txtSampleData.Name = "txtSampleData";
+ this.txtSampleData.Size = new System.Drawing.Size( 200, 21 );
+ this.txtSampleData.TabIndex = 31;
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point( 176, 144 );
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size( 104, 16 );
+ this.label4.TabIndex = 30;
+ this.label4.Text = "Sample Data";
+ //
+ // cmdApply
+ //
+ this.cmdApply.Location = new System.Drawing.Point( 392, 160 );
+ this.cmdApply.Name = "cmdApply";
+ this.cmdApply.Size = new System.Drawing.Size( 80, 24 );
+ this.cmdApply.TabIndex = 29;
+ this.cmdApply.Text = "Apply";
+ this.cmdApply.Click += new System.EventHandler( this.cmdApply_Click );
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point( 264, 192 );
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size( 104, 16 );
+ this.label3.TabIndex = 28;
+ this.label3.Text = "Direction";
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point( 8, 192 );
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size( 104, 16 );
+ this.label2.TabIndex = 27;
+ this.label2.Text = "Data Type:";
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point( 8, 144 );
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size( 128, 16 );
+ this.label1.TabIndex = 26;
+ this.label1.Text = "Parameter Name:";
+ //
+ // cboDirection
+ //
+ this.cboDirection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboDirection.Items.AddRange( new object[ ] {
+ "ReturnValue",
+ "Input",
+ "Output",
+ "InputOutput"} );
+ this.cboDirection.Location = new System.Drawing.Point( 264, 208 );
+ this.cboDirection.Name = "cboDirection";
+ this.cboDirection.Size = new System.Drawing.Size( 112, 21 );
+ this.cboDirection.TabIndex = 25;
+ //
+ // cboDataType
+ //
+ this.cboDataType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cboDataType.Items.AddRange( new object[ ] {
+ "BigInt",
+ "Binary",
+ "Bit",
+ "Text",
+ "DateTime",
+ "Numeric",
+ "Double",
+ "Int",
+ "Real",
+ "SmallInt",
+ "TinyInt",
+ "UniqueIdentifier",
+ "Char",
+ "Date",
+ "Decimal",
+ "Image",
+ "NChar",
+ "NText",
+ "NVarChar",
+ "SmallDateTime",
+ "Time",
+ "Timestamp",
+ "VarBinary",
+ "VarChar"} );
+ this.cboDataType.Location = new System.Drawing.Point( 8, 208 );
+ this.cboDataType.Name = "cboDataType";
+ this.cboDataType.Size = new System.Drawing.Size( 132, 21 );
+ this.cboDataType.TabIndex = 24;
+ //
+ // txtParamName
+ //
+ this.txtParamName.Location = new System.Drawing.Point( 8, 160 );
+ this.txtParamName.Name = "txtParamName";
+ this.txtParamName.Size = new System.Drawing.Size( 160, 21 );
+ this.txtParamName.TabIndex = 23;
+ //
+ // lvQueryParameters
+ //
+ this.lvQueryParameters.Columns.AddRange( new System.Windows.Forms.ColumnHeader[ ] {
+ this.Parameter,
+ this.DataType,
+ this.SizeCol,
+ this.Direction,
+ this.SampleData} );
+ this.lvQueryParameters.FullRowSelect = true;
+ this.lvQueryParameters.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+ this.lvQueryParameters.LabelEdit = true;
+ this.lvQueryParameters.Location = new System.Drawing.Point( 8, 40 );
+ this.lvQueryParameters.MultiSelect = false;
+ this.lvQueryParameters.Name = "lvQueryParameters";
+ this.lvQueryParameters.Size = new System.Drawing.Size( 476, 88 );
+ this.lvQueryParameters.TabIndex = 22;
+ this.lvQueryParameters.UseCompatibleStateImageBehavior = false;
+ this.lvQueryParameters.View = System.Windows.Forms.View.Details;
+ //
+ // Parameter
+ //
+ this.Parameter.Text = "Parameter";
+ this.Parameter.Width = 150;
+ //
+ // DataType
+ //
+ this.DataType.Text = "Data Type";
+ this.DataType.Width = 80;
+ //
+ // SizeCol
+ //
+ this.SizeCol.Text = "Size";
+ this.SizeCol.Width = 40;
+ //
+ // Direction
+ //
+ this.Direction.Text = "Direction";
+ this.Direction.Width = 80;
+ //
+ // SampleData
+ //
+ this.SampleData.Text = "Sample Data";
+ this.SampleData.Width = 120;
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point( 8, 16 );
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size( 216, 16 );
+ this.label5.TabIndex = 34;
+ this.label5.Text = "Over ride ADO.NET faults and Test Query";
+ //
+ // ADOParameters
+ //
+ this.Controls.Add( this.label5 );
+ this.Controls.Add( this.txtSize );
+ this.Controls.Add( this.label8 );
+ this.Controls.Add( this.txtSampleData );
+ this.Controls.Add( this.label4 );
+ this.Controls.Add( this.cmdApply );
+ this.Controls.Add( this.label3 );
+ this.Controls.Add( this.label2 );
+ this.Controls.Add( this.label1 );
+ this.Controls.Add( this.cboDirection );
+ this.Controls.Add( this.cboDataType );
+ this.Controls.Add( this.txtParamName );
+ this.Controls.Add( this.lvQueryParameters );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "ADOParameters";
+ this.ResumeLayout( false );
+ this.PerformLayout( );
+
+ }
+ #endregion
+
+ private void cmdApply_Click( object sender, System.EventArgs e )
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ADOParameters.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ADOParameters.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ADOParameters.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/DBConnection.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/DBConnection.cs
new file mode 100644
index 00000000..e07e4ddd
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/DBConnection.cs
@@ -0,0 +1,211 @@
+//---------------------------------------------------------------------
+// File: DBConnection.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+using System.Data.Odbc;
+
+using ODBCDriverPrompt;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class DBConnectionUserControl : WizardUserControl
+ {
+ private System.Windows.Forms.Button cmdSet;
+ private System.Windows.Forms.Label lblConnectionStringPrompt;
+ private System.Windows.Forms.Label lblConnectionString;
+ private System.Windows.Forms.TextBox txtDBConnectionString;
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+ private string _sConnection = string.Empty;
+
+ public DBConnectionUserControl( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.txtDBConnectionString = new System.Windows.Forms.TextBox( );
+ this.cmdSet = new System.Windows.Forms.Button( );
+ this.lblConnectionStringPrompt = new System.Windows.Forms.Label( );
+ this.lblConnectionString = new System.Windows.Forms.Label( );
+ this.SuspendLayout( );
+ //
+ // txtDBConnectionString
+ //
+ this.txtDBConnectionString.Location = new System.Drawing.Point( 8, 88 );
+ this.txtDBConnectionString.Multiline = true;
+ this.txtDBConnectionString.Name = "txtDBConnectionString";
+ this.txtDBConnectionString.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtDBConnectionString.Size = new System.Drawing.Size( 480, 216 );
+ this.txtDBConnectionString.TabIndex = 0;
+ //
+ // cmdSet
+ //
+ this.cmdSet.Location = new System.Drawing.Point( 392, 56 );
+ this.cmdSet.Name = "cmdSet";
+ this.cmdSet.Size = new System.Drawing.Size( 96, 24 );
+ this.cmdSet.TabIndex = 1;
+ this.cmdSet.Text = "Set";
+ this.cmdSet.Click += new System.EventHandler( this.button1_Click );
+ //
+ // lblConnectionStringPrompt
+ //
+ this.lblConnectionStringPrompt.Location = new System.Drawing.Point( 8, 16 );
+ this.lblConnectionStringPrompt.Name = "lblConnectionStringPrompt";
+ this.lblConnectionStringPrompt.Size = new System.Drawing.Size( 480, 16 );
+ this.lblConnectionStringPrompt.TabIndex = 2;
+ this.lblConnectionStringPrompt.Text = "To set the connection string, click set";
+ //
+ // lblConnectionString
+ //
+ this.lblConnectionString.Location = new System.Drawing.Point( 8, 64 );
+ this.lblConnectionString.Name = "lblConnectionString";
+ this.lblConnectionString.Size = new System.Drawing.Size( 256, 16 );
+ this.lblConnectionString.TabIndex = 3;
+ this.lblConnectionString.Text = "Connection string";
+ //
+ // DBConnectionUserControl
+ //
+ this.BackColor = System.Drawing.SystemColors.Control;
+ this.Controls.Add( this.lblConnectionString );
+ this.Controls.Add( this.lblConnectionStringPrompt );
+ this.Controls.Add( this.cmdSet );
+ this.Controls.Add( this.txtDBConnectionString );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "DBConnectionUserControl";
+ this.Load += new System.EventHandler( this.DBConnectionUserControl_Load );
+ this.ResumeLayout( false );
+ this.PerformLayout( );
+
+ }
+ #endregion
+
+ private void DBConnectionUserControl_Load( object sender, System.EventArgs e )
+ {
+ }
+
+ public override bool SavePageInfo( )
+ {
+ OdbcConnection myConnection = null;
+ // _sConnection = txtDBConnectionString.Text;
+ try
+ {
+ myConnection = new OdbcConnection( _sConnection );
+ myConnection.Open( );
+ // Commented out as it seems some ODBC drives do not support these parameters
+ // if ( myConnection.Database == null || myConnection.Database.Length == 0)
+ // {
+ // myConnection.Close();
+ // MessageBox.Show("Connection String failed validation","Connection Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ // return false;
+ // }
+ myConnection.Close( );
+ }
+ catch ( System.Data.Odbc.OdbcException e )
+ {
+ MessageBox.Show( "The database connection is invalid \n" + e.Message, "Connection Vaidation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ finally
+ {
+ if ( myConnection != null )
+ myConnection.Close( );
+ }
+
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strDBConnection = _sConnection;
+
+ return true;
+ }
+
+ public override void ProcessLoad( )
+ {
+ // Connection string may have been initialized by selecting a port before launching the wizard.
+ _sConnection = ( ( ODBCAdapterWizardForm )WizardParentForm ).strDBConnection;
+ txtDBConnectionString.Text = SecurePassword( _sConnection );
+
+ if ( _sConnection.Length > 0 )
+ {
+ WizardParentForm.NextButtonEnabled = true;
+ }
+ }
+
+ private void button1_Click( object sender, System.EventArgs e )
+ {
+ ODBCDriverUI DriverDialog = new ODBCDriverUI( );
+ _sConnection = DriverDialog.GetDSN( );
+ txtDBConnectionString.Text = SecurePassword( _sConnection );
+ WizardParentForm.NextButtonEnabled = true;
+ }
+
+ private string SecurePassword( string ConnectionString )
+ {
+ if ( ConnectionString != "" )
+ {
+ int iPasswordIndex = ConnectionString.IndexOf( "PWD=", 1 );
+
+ if ( iPasswordIndex > 0 )
+ {
+ int iEndOfPassword = ConnectionString.IndexOf( ";", iPasswordIndex );
+
+ //Deal with the fact that we may not have a ; at the end of our statement
+ if ( iEndOfPassword < 0 )
+ iEndOfPassword = ConnectionString.Length;
+
+ string password = ConnectionString.Substring( iPasswordIndex + 4, iEndOfPassword - ( iPasswordIndex + 4 ) );
+
+ return ConnectionString.Replace( password, "*********" );
+ }
+ else
+ return ConnectionString;
+ }
+ else
+ return "";
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/DBConnection.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/DBConnection.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/DBConnection.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/FinishDisplay.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/FinishDisplay.cs
new file mode 100644
index 00000000..bb168b99
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/FinishDisplay.cs
@@ -0,0 +1,76 @@
+//---------------------------------------------------------------------
+// File: FinishDisplay.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class FinishDisplayUserControl : WizardUserControl
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public FinishDisplayUserControl( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.SuspendLayout( );
+ //
+ // FinishDisplayUserControl
+ //
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "FinishDisplayUserControl";
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/FinishDisplay.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/FinishDisplay.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/FinishDisplay.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ODBCAdapterWizardForm.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ODBCAdapterWizardForm.cs
new file mode 100644
index 00000000..d3c99282
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ODBCAdapterWizardForm.cs
@@ -0,0 +1,474 @@
+//---------------------------------------------------------------------
+// File: ODBCAdapterWizardForm.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+using Microsoft.BizTalk.Adapters.ODBC.SchemaWizard;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class ODBCAdapterWizardForm : Microsoft.BizTalk.Adapters.ODBC.SchemaWizard.WizardForm
+ {
+ private System.ComponentModel.Container components = null;
+
+ internal ODBCSchemaHelper _clsODBCCmdWizard = null;
+
+ #region Properties
+
+ public ODBCAdapterWizardForm( ) : base( )
+ {
+ Application.EnableVisualStyles( );
+
+ _clsODBCCmdWizard = new ODBCSchemaHelper( );
+ }
+
+ public ODBCSchemaHelper.AdapterCommandType CommandType
+ {
+ get
+ {
+ return _clsODBCCmdWizard.QueryCommandType;
+ }
+ set
+ {
+ _clsODBCCmdWizard.QueryCommandType = value;
+ }
+ }
+
+ public string strDBConnection
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strDBConnection;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strDBConnection = value;
+ }
+ }
+
+ public string strInputSchema
+ {
+ get
+ {
+ return _clsODBCCmdWizard.InputSchema;
+ }
+ }
+
+ public string strOutputSchema
+ {
+ get
+ {
+ return _clsODBCCmdWizard.OutputSchema;
+ }
+ }
+ public bool QueryHasInputParameters
+ {
+ get
+ {
+ return _clsODBCCmdWizard.InputParameter;
+ }
+ }
+
+ public bool OverrideDefaultQueryProcessing
+ {
+ set
+ {
+ _clsODBCCmdWizard.OverrideQueryProcessing = value;
+ }
+ }
+
+ public string strScript
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strScript;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strScript = value;
+ }
+ }
+
+ public ODBCSchemaHelper.PortType portType
+ {
+ get
+ {
+ return _clsODBCCmdWizard.portType;
+ }
+ set
+ {
+ _clsODBCCmdWizard.portType = value;
+ }
+ }
+
+ public string strInputRoot
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strInputRoot;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strInputRoot = value;
+ }
+ }
+
+ public string strOutputRoot
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strOutputRoot;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strOutputRoot = value;
+ }
+ }
+
+ public string strSPName
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strSPName;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strSPName = value;
+ }
+ }
+
+ public string strTargetNamespace
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strTargetNamespace;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strTargetNamespace = value;
+ }
+ }
+
+ public string strGeneratedScript
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strGeneratedScript;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strGeneratedScript = value;
+ }
+ }
+
+ public string strWSDL
+ {
+ get
+ {
+ return _clsODBCCmdWizard.strWSDL;
+ }
+ set
+ {
+ _clsODBCCmdWizard.strWSDL = value;
+ }
+ }
+
+ public ODBCSchemaHelper.AdapterStatementType StatementType
+ {
+ get
+ {
+ return _clsODBCCmdWizard.StatementType;
+ }
+ set
+ {
+ _clsODBCCmdWizard.StatementType = value;
+ }
+ }
+
+ #endregion
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+
+ #endregion
+
+ protected virtual void CreateDatabasePage( )
+ {
+ buttonBack.Enabled = false;
+
+ DBConnectionUserControl databaseControl = null;
+ foreach ( UserControl userControl in panelWizard.Controls )
+ {
+ if ( userControl is DBConnectionUserControl )
+ databaseControl = ( DBConnectionUserControl )userControl;
+ }
+ if ( null == databaseControl )
+ databaseControl = new DBConnectionUserControl( );
+
+ lblTitle.Text = "Database Information";
+ lblScript.Text = "Select the ODBC driver and connection string to be used to generate the BizTalk Schema";
+
+ SetNewPageProperties( ( WizardUserControl )databaseControl );
+ }
+
+ protected virtual void CreateRootPage( )
+ {
+ buttonBack.Enabled = true;
+
+ SchemaMetaDataUserControl rootControl = null;
+ foreach ( UserControl userControl in panelWizard.Controls )
+ {
+ if ( userControl is SchemaMetaDataUserControl )
+ rootControl = ( SchemaMetaDataUserControl )userControl;
+ }
+ if ( null == rootControl )
+ rootControl = new SchemaMetaDataUserControl( );
+
+ lblTitle.Text = "Schema Information";
+ lblScript.Text = "Specify the root name(s) and port type for the schema";
+
+ SetNewPageProperties( ( WizardUserControl )rootControl );
+ }
+
+ protected virtual void CreateStatementPage( )
+ {
+ buttonNext.Enabled = false;
+
+ QueryEditorUserControl statementControl = null;
+ foreach ( UserControl userControl in panelWizard.Controls )
+ {
+ if ( userControl is QueryEditorUserControl )
+ statementControl = ( QueryEditorUserControl )userControl;
+ }
+ if ( null == statementControl )
+ statementControl = new QueryEditorUserControl( );
+
+ lblTitle.Text = "Statement Information";
+ lblScript.Text = "Enter the statement to be executed by the ODBC transport";
+
+ SetNewPageProperties( ( WizardUserControl )statementControl );
+ }
+
+ protected virtual void CreateQueryTypePage( )
+ {
+ buttonNext.Text = "Next >";
+
+ QueryTypeUserControl QueryTypeControl = null;
+ foreach ( UserControl userControl in panelWizard.Controls )
+ {
+ if ( userControl is QueryTypeUserControl )
+ QueryTypeControl = ( QueryTypeUserControl )userControl;
+ }
+ if ( null == QueryTypeControl )
+ QueryTypeControl = new QueryTypeUserControl( );
+
+ lblTitle.Text = "Statement Type Information";
+ lblScript.Text = "Select the type of statement to be excuted by the ODBC transport";
+
+ SetNewPageProperties( ( WizardUserControl )QueryTypeControl );
+ }
+
+ protected virtual void CreateFinishPage( )
+ {
+ buttonNext.Text = "Finish";
+
+ FinishDisplayUserControl finishControl = null;
+ foreach ( UserControl userControl in panelWizard.Controls )
+ {
+ if ( userControl is FinishDisplayUserControl )
+ finishControl = ( FinishDisplayUserControl )userControl;
+ }
+ if ( null == finishControl )
+ finishControl = new FinishDisplayUserControl( );
+
+ SetNewPageProperties( ( WizardUserControl )finishControl );
+ }
+
+ protected override void OnNext( object sender, System.EventArgs e )
+ {
+ if ( _userControl == null )
+ return;
+
+ if ( _userControl.SavePageInfo( ) == false )
+ {
+ _userControl.Select( );
+ return;
+ }
+
+ if ( _userControl is DBConnectionUserControl )
+ {
+ CreateRootPage( );
+ }
+ else if ( _userControl is SchemaMetaDataUserControl )
+ {
+ CreateQueryTypePage( );
+ }
+ else if ( _userControl is QueryTypeUserControl )
+ {
+ CreateStatementPage( );
+ }
+ else if ( _userControl is QueryEditorUserControl )
+ {
+ CreateFinishPage( );
+ }
+ else if ( _userControl is FinishDisplayUserControl )
+ {
+ this.DialogResult = DialogResult.OK;
+ this.Close( );
+ }
+
+ _userControl.ProcessLoad( );
+ _userControl.Show( );
+ _userControl.SetSelect( );
+ _userControl.Select( );
+
+ panelWizard.Invalidate( );
+ panelWizard.Update( );
+
+ this.buttonBack.Enabled = true;
+ if ( buttonNext.Enabled )
+ buttonNext.Focus( );
+
+ panelWizard.Invalidate( );
+ panelWizard.Update( );
+ }
+
+ protected override void OnBack( object sender, System.EventArgs e )
+ {
+ if ( _userControl == null )
+ return;
+
+ if ( _userControl.SavePageInfoWithoutValidation( ) == false )
+ {
+ _userControl.Select( );
+ return;
+ }
+
+ if ( _userControl is SchemaMetaDataUserControl )
+ {
+ CreateDatabasePage( );
+ }
+ else if ( _userControl is QueryEditorUserControl )
+ {
+ CreateQueryTypePage( );
+ }
+ else if ( _userControl is QueryTypeUserControl )
+ {
+ CreateRootPage( );
+ }
+ else if ( _userControl is FinishDisplayUserControl )
+ {
+ CreateStatementPage( );
+ }
+
+ _userControl.ProcessLoad( );
+ _userControl.Show( );
+ _userControl.SetSelect( );
+ _userControl.Select( );
+
+ panelWizard.Invalidate( );
+ panelWizard.Update( );
+
+ if ( buttonNext.Enabled )
+ buttonNext.Focus( );
+ this.buttonNext.Enabled = true;
+
+ panelWizard.Invalidate( );
+ panelWizard.Update( );
+ }
+
+ public void Start( )
+ {
+ CreateDatabasePage( );
+ _userControl.ProcessLoad( );
+ this.buttonBack.Text = "< Back";
+ this.buttonCancel.Text = "Cancel";
+ this.buttonNext.Text = "Next >";
+ }
+
+ private void InitializeComponent( )
+ {
+ ( ( System.ComponentModel.ISupportInitialize )( this.picGraphic ) ).BeginInit( );
+ this.SuspendLayout( );
+ //
+ // panelWizard
+ //
+ this.panelWizard.Location = new System.Drawing.Point( 0, 0 );
+ this.panelWizard.Size = new System.Drawing.Size( 484, 312 );
+ //
+ // buttonHelp
+ //
+ this.buttonHelp.Location = new System.Drawing.Point( 16, 336 );
+ this.buttonHelp.Size = new System.Drawing.Size( 80, 23 );
+ this.buttonHelp.Visible = true;
+ //
+ // buttonBack
+ //
+ this.buttonBack.Location = new System.Drawing.Point( 216, 336 );
+ this.buttonBack.Size = new System.Drawing.Size( 80, 23 );
+ //
+ // buttonNext
+ //
+ this.buttonNext.DialogResult = System.Windows.Forms.DialogResult.OK;
+ this.buttonNext.Location = new System.Drawing.Point( 296, 328 );
+ this.buttonNext.Size = new System.Drawing.Size( 80, 33 );
+ //
+ // buttonCancel
+ //
+ this.buttonCancel.Location = new System.Drawing.Point( 384, 336 );
+ this.buttonCancel.Size = new System.Drawing.Size( 80, 23 );
+ //
+ // ODBCAdapterWizardForm
+ //
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 14 );
+ this.BackButtonEnabled = true;
+ this.ClientSize = new System.Drawing.Size( 478, 366 );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "ODBCAdapterWizardForm";
+ this.NextButtonEnabled = true;
+ ( ( System.ComponentModel.ISupportInitialize )( this.picGraphic ) ).EndInit( );
+ this.ResumeLayout( false );
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ODBCAdapterWizardForm.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ODBCAdapterWizardForm.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/ODBCAdapterWizardForm.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryEditor.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryEditor.cs
new file mode 100644
index 00000000..07721539
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryEditor.cs
@@ -0,0 +1,261 @@
+//---------------------------------------------------------------------
+// File: QueryEditor.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class QueryEditorUserControl : WizardUserControl
+ {
+ private System.Windows.Forms.TextBox txtRawSQL;
+ private System.Windows.Forms.Button cmdValidate;
+ private System.Windows.Forms.TextBox txtODBCCommand;
+ private System.Windows.Forms.Label lblQueryPrompt;
+ private System.Windows.Forms.Label lblCommandPrompt;
+ private System.Windows.Forms.RadioButton rdoNoResponse;
+ private System.Windows.Forms.RadioButton rdoResponse;
+ private System.Windows.Forms.Label lblQueryType;
+ private System.Windows.Forms.CheckBox chkOverRide;
+
+ private System.ComponentModel.Container components = null;
+
+ public QueryEditorUserControl( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.txtRawSQL = new System.Windows.Forms.TextBox( );
+ this.cmdValidate = new System.Windows.Forms.Button( );
+ this.txtODBCCommand = new System.Windows.Forms.TextBox( );
+ this.lblQueryPrompt = new System.Windows.Forms.Label( );
+ this.lblCommandPrompt = new System.Windows.Forms.Label( );
+ this.rdoNoResponse = new System.Windows.Forms.RadioButton( );
+ this.rdoResponse = new System.Windows.Forms.RadioButton( );
+ this.lblQueryType = new System.Windows.Forms.Label( );
+ this.chkOverRide = new System.Windows.Forms.CheckBox( );
+ this.SuspendLayout( );
+ //
+ // txtRawSQL
+ //
+ this.txtRawSQL.Location = new System.Drawing.Point( 10, 113 );
+ this.txtRawSQL.Multiline = true;
+ this.txtRawSQL.Name = "txtRawSQL";
+ this.txtRawSQL.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+ this.txtRawSQL.Size = new System.Drawing.Size( 480, 128 );
+ this.txtRawSQL.TabIndex = 4;
+ //
+ // cmdValidate
+ //
+ this.cmdValidate.Location = new System.Drawing.Point( 360, 30 );
+ this.cmdValidate.Name = "cmdValidate";
+ this.cmdValidate.Size = new System.Drawing.Size( 128, 32 );
+ this.cmdValidate.TabIndex = 5;
+ this.cmdValidate.Text = "Generate";
+ this.cmdValidate.Click += new System.EventHandler( this.cmdValidate_Click );
+ //
+ // txtODBCCommand
+ //
+ this.txtODBCCommand.Location = new System.Drawing.Point( 12, 267 );
+ this.txtODBCCommand.Multiline = true;
+ this.txtODBCCommand.Name = "txtODBCCommand";
+ this.txtODBCCommand.ReadOnly = true;
+ this.txtODBCCommand.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtODBCCommand.Size = new System.Drawing.Size( 480, 34 );
+ this.txtODBCCommand.TabIndex = 6;
+ //
+ // lblQueryPrompt
+ //
+ this.lblQueryPrompt.Location = new System.Drawing.Point( 10, 97 );
+ this.lblQueryPrompt.Name = "lblQueryPrompt";
+ this.lblQueryPrompt.Size = new System.Drawing.Size( 88, 14 );
+ this.lblQueryPrompt.TabIndex = 7;
+ this.lblQueryPrompt.Text = "Query";
+ //
+ // lblCommandPrompt
+ //
+ this.lblCommandPrompt.Location = new System.Drawing.Point( 9, 247 );
+ this.lblCommandPrompt.Name = "lblCommandPrompt";
+ this.lblCommandPrompt.Size = new System.Drawing.Size( 144, 16 );
+ this.lblCommandPrompt.TabIndex = 8;
+ this.lblCommandPrompt.Text = "Processed Command";
+ //
+ // rdoNoResponse
+ //
+ this.rdoNoResponse.Location = new System.Drawing.Point( 43, 68 );
+ this.rdoNoResponse.Name = "rdoNoResponse";
+ this.rdoNoResponse.Size = new System.Drawing.Size( 296, 17 );
+ this.rdoNoResponse.TabIndex = 9;
+ this.rdoNoResponse.Text = "INSERT, UPDATE, DELETE (No response expected)";
+ //
+ // rdoResponse
+ //
+ this.rdoResponse.Checked = true;
+ this.rdoResponse.Location = new System.Drawing.Point( 43, 45 );
+ this.rdoResponse.Name = "rdoResponse";
+ this.rdoResponse.Size = new System.Drawing.Size( 296, 17 );
+ this.rdoResponse.TabIndex = 10;
+ this.rdoResponse.TabStop = true;
+ this.rdoResponse.Text = "SELECT or Compound (Response expected)";
+ //
+ // lblQueryType
+ //
+ this.lblQueryType.Location = new System.Drawing.Point( 8, 16 );
+ this.lblQueryType.Name = "lblQueryType";
+ this.lblQueryType.Size = new System.Drawing.Size( 104, 17 );
+ this.lblQueryType.TabIndex = 11;
+ this.lblQueryType.Text = "Query Type";
+ //
+ // chkOverRide
+ //
+ this.chkOverRide.Location = new System.Drawing.Point( 292, 247 );
+ this.chkOverRide.Name = "chkOverRide";
+ this.chkOverRide.Size = new System.Drawing.Size( 196, 16 );
+ this.chkOverRide.TabIndex = 12;
+ this.chkOverRide.Text = "Override default query processing";
+ //
+ // QueryEditorUserControl
+ //
+ this.Controls.Add( this.chkOverRide );
+ this.Controls.Add( this.lblQueryType );
+ this.Controls.Add( this.rdoResponse );
+ this.Controls.Add( this.rdoNoResponse );
+ this.Controls.Add( this.lblCommandPrompt );
+ this.Controls.Add( this.lblQueryPrompt );
+ this.Controls.Add( this.txtODBCCommand );
+ this.Controls.Add( this.cmdValidate );
+ this.Controls.Add( this.txtRawSQL );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "QueryEditorUserControl";
+ this.ResumeLayout( false );
+ this.PerformLayout( );
+
+ }
+
+ #endregion
+
+ private void cmdValidate_Click( object sender, System.EventArgs e )
+ {
+ if ( txtRawSQL.Text.Length > 0 )
+ {
+ this.Cursor = Cursors.WaitCursor;
+
+ try
+ {
+ //Only check this if the user is entering in raw SQL
+ if ( ( ( ODBCAdapterWizardForm )WizardParentForm ).CommandType == ODBCSchemaHelper.AdapterCommandType.SQL )
+ {
+ //Make sure the adapter knows whether to generate a response shcema. If this is only
+ //Inserts, deletes and updates then we don't need a response document
+ if ( rdoResponse.Checked )
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).StatementType = ODBCSchemaHelper.AdapterStatementType.InputOutput;
+ else
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).StatementType = ODBCSchemaHelper.AdapterStatementType.Input;
+ }
+
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).OverrideDefaultQueryProcessing = chkOverRide.Checked;
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strScript = txtRawSQL.Text;
+ txtODBCCommand.Text = ( ( ODBCAdapterWizardForm )WizardParentForm ).strGeneratedScript;
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).NextButtonEnabled = true;
+
+ // Now we need to validate that the user has not entered a query that will require input parameters
+ // for a receive port type. There is no way in this version of the code for the users to enter the
+ // input values for a receive port
+ if ( ( ( ODBCAdapterWizardForm )WizardParentForm ).QueryHasInputParameters && ( ( ODBCAdapterWizardForm )WizardParentForm ).portType == ODBCSchemaHelper.PortType.Receive )
+ {
+ MessageBox.Show( "You cannot use a database query where input parameters would need to be generated in conjunction with a receive port type", "ODBC Schema Generation Wizard Validation Error" );
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).NextButtonEnabled = false;
+ }
+
+ //((ODBCAdapterWizardForm)WizardParentForm)._clsODBCCmdWizard.CreateBizTalkSchema();
+
+ this.Cursor = Cursors.Default;
+ }
+ catch ( Exception ex )
+ {
+ this.Cursor = Cursors.Default;
+
+ MessageBox.Show( "An error occured processing the specified query: " + ex.Message, "Validation Error", MessageBoxButtons.OK );
+ }
+ }
+ else
+ {
+ MessageBox.Show( "You must enter a query to be validated", "Validation Error", MessageBoxButtons.OK );
+ }
+ }
+
+ public override bool SavePageInfoWithoutValidation( )
+ {
+ return base.SavePageInfoWithoutValidation( );
+ }
+
+ public override bool SavePageInfo( )
+ {
+ return true;
+ }
+
+ protected override void LoadPageInfo( )
+ {
+ //Setup for display based on the type of query we are processing
+ if ( ( ( ODBCAdapterWizardForm )WizardParentForm ).CommandType == ODBCSchemaHelper.AdapterCommandType.SQL && ( ( ODBCAdapterWizardForm )WizardParentForm ).portType != ODBCSchemaHelper.PortType.Receive )
+ {
+ rdoResponse.Visible = true;
+ rdoNoResponse.Visible = true;
+ lblQueryType.Visible = true;
+ chkOverRide.Visible = true;
+ }
+ else
+ {
+ rdoResponse.Visible = false;
+ rdoNoResponse.Visible = false;
+ lblQueryType.Visible = false;
+ chkOverRide.Visible = false;
+ }
+ base.LoadPageInfo( );
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryEditor.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryEditor.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryEditor.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryType.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryType.cs
new file mode 100644
index 00000000..ca380b9d
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryType.cs
@@ -0,0 +1,126 @@
+//---------------------------------------------------------------------
+// File: QueryType.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class QueryTypeUserControl : WizardUserControl
+ {
+ private System.Windows.Forms.Label lblStatementType;
+ private System.Windows.Forms.RadioButton rdoSQL;
+ private System.Windows.Forms.RadioButton rdoStoredProc;
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public QueryTypeUserControl( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.lblStatementType = new System.Windows.Forms.Label( );
+ this.rdoSQL = new System.Windows.Forms.RadioButton( );
+ this.rdoStoredProc = new System.Windows.Forms.RadioButton( );
+ this.SuspendLayout( );
+ //
+ // lblStatementType
+ //
+ this.lblStatementType.Location = new System.Drawing.Point( 16, 24 );
+ this.lblStatementType.Name = "lblStatementType";
+ this.lblStatementType.Size = new System.Drawing.Size( 448, 16 );
+ this.lblStatementType.TabIndex = 0;
+ this.lblStatementType.Text = "Select type of statement";
+ //
+ // rdoSQL
+ //
+ this.rdoSQL.Location = new System.Drawing.Point( 48, 99 );
+ this.rdoSQL.Name = "rdoSQL";
+ this.rdoSQL.Size = new System.Drawing.Size( 127, 27 );
+ this.rdoSQL.TabIndex = 1;
+ this.rdoSQL.Text = "SQL Script";
+ //
+ // rdoStoredProc
+ //
+ this.rdoStoredProc.Checked = true;
+ this.rdoStoredProc.Location = new System.Drawing.Point( 48, 61 );
+ this.rdoStoredProc.Name = "rdoStoredProc";
+ this.rdoStoredProc.Size = new System.Drawing.Size( 127, 22 );
+ this.rdoStoredProc.TabIndex = 2;
+ this.rdoStoredProc.TabStop = true;
+ this.rdoStoredProc.Text = "Stored Procedure";
+ //
+ // QueryTypeUserControl
+ //
+ this.Controls.Add( this.rdoStoredProc );
+ this.Controls.Add( this.rdoSQL );
+ this.Controls.Add( this.lblStatementType );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "QueryTypeUserControl";
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+
+ public override bool SavePageInfoWithoutValidation( )
+ {
+ return base.SavePageInfoWithoutValidation( );
+ }
+
+ public override bool SavePageInfo( )
+ {
+ if ( rdoStoredProc.Checked )
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).CommandType = ODBCSchemaHelper.AdapterCommandType.StoredProcedure;
+ else
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).CommandType = ODBCSchemaHelper.AdapterCommandType.SQL;
+
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryType.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryType.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/QueryType.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/SchemaMetaData.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/SchemaMetaData.cs
new file mode 100644
index 00000000..12453176
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/SchemaMetaData.cs
@@ -0,0 +1,279 @@
+//---------------------------------------------------------------------
+// File: SchemaMetaData.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class SchemaMetaDataUserControl : WizardUserControl
+ {
+ private System.Windows.Forms.TextBox txtTargetNS;
+ private System.Windows.Forms.Label lblPortType;
+ private System.Windows.Forms.RadioButton rdoSendPort;
+ private System.Windows.Forms.RadioButton rdoReceivePort;
+ private System.Windows.Forms.Label lblTargetNSPrompt;
+ private System.Windows.Forms.Label lblRequestRootPrompt;
+ private System.Windows.Forms.TextBox txtRequestRootName;
+ private System.Windows.Forms.Label lblResponseRootName;
+ private System.Windows.Forms.TextBox txtResponseRootName;
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public override bool SavePageInfoWithoutValidation( )
+ {
+ return base.SavePageInfoWithoutValidation( );
+ }
+
+ public override bool SavePageInfo( )
+ {
+ if ( txtTargetNS.Text.Length == 0 )
+ {
+ MessageBox.Show( "You must enter a targetname space", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ try
+ {
+ Validator.ValidateTargetNamespace( txtTargetNS.Text );
+ }
+ catch ( SqlValidationException ex )
+ {
+ MessageBox.Show( "An error occured while validating the name specified for the namespace \n" + ex.Message, "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+
+ if ( rdoReceivePort.Checked )
+ {
+ if ( txtRequestRootName.Text.Length == 0 )
+ {
+ MessageBox.Show( "You must enter a valid root element name for the response message.", "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ try
+ {
+ Validator.ValidateRootElementName( txtRequestRootName.Text );
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strInputRoot = "ODBCQUERY";
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strOutputRoot = txtRequestRootName.Text;
+ }
+ catch ( SqlValidationException ex )
+ {
+ MessageBox.Show( ex.Message, "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ }
+ else if ( rdoSendPort.Checked )
+ {
+ if ( rdoSendPort.Checked && ( txtRequestRootName.Text.Length == 0 || txtResponseRootName.Text.Length == 0 ) )
+ {
+ MessageBox.Show( "You must enter a root node name for both the request and response messages.", "Schema data validation error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ if ( txtRequestRootName.Text == txtResponseRootName.Text )
+ {
+ MessageBox.Show( "The root node names for both elements must be different", "Schema data validation error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ try
+ {
+ Validator.ValidateRootElementName( txtRequestRootName.Text );
+ Validator.ValidateRootElementName( txtResponseRootName.Text );
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strInputRoot = txtRequestRootName.Text;
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strOutputRoot = txtResponseRootName.Text;
+ }
+ catch ( SqlValidationException ex )
+ {
+ MessageBox.Show( ex.Message, "Schema data validation error", MessageBoxButtons.OK, MessageBoxIcon.Error );
+ return false;
+ }
+ }
+
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).strTargetNamespace = txtTargetNS.Text;
+
+ if ( rdoReceivePort.Checked )
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).portType = ODBCSchemaHelper.PortType.Receive;
+ else if ( rdoSendPort.Checked )
+ ( ( ODBCAdapterWizardForm )WizardParentForm ).portType = ODBCSchemaHelper.PortType.Send;
+ rdoReceivePort_CheckedChanged( null, null );
+
+ return true;
+ }
+
+ public SchemaMetaDataUserControl( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.txtTargetNS = new System.Windows.Forms.TextBox( );
+ this.lblPortType = new System.Windows.Forms.Label( );
+ this.rdoSendPort = new System.Windows.Forms.RadioButton( );
+ this.rdoReceivePort = new System.Windows.Forms.RadioButton( );
+ this.lblTargetNSPrompt = new System.Windows.Forms.Label( );
+ this.lblRequestRootPrompt = new System.Windows.Forms.Label( );
+ this.txtRequestRootName = new System.Windows.Forms.TextBox( );
+ this.lblResponseRootName = new System.Windows.Forms.Label( );
+ this.txtResponseRootName = new System.Windows.Forms.TextBox( );
+ this.SuspendLayout( );
+ //
+ // txtTargetNS
+ //
+ this.txtTargetNS.Location = new System.Drawing.Point( 16, 40 );
+ this.txtTargetNS.Name = "txtTargetNS";
+ this.txtTargetNS.Size = new System.Drawing.Size( 464, 21 );
+ this.txtTargetNS.TabIndex = 0;
+ //
+ // lblPortType
+ //
+ this.lblPortType.Location = new System.Drawing.Point( 24, 72 );
+ this.lblPortType.Name = "lblPortType";
+ this.lblPortType.Size = new System.Drawing.Size( 448, 16 );
+ this.lblPortType.TabIndex = 1;
+ this.lblPortType.Text = "Select the port type:";
+ //
+ // rdoSendPort
+ //
+ this.rdoSendPort.Location = new System.Drawing.Point( 48, 128 );
+ this.rdoSendPort.Name = "rdoSendPort";
+ this.rdoSendPort.Size = new System.Drawing.Size( 392, 16 );
+ this.rdoSendPort.TabIndex = 2;
+ this.rdoSendPort.Text = "Send Port";
+ //
+ // rdoReceivePort
+ //
+ this.rdoReceivePort.Checked = true;
+ this.rdoReceivePort.Location = new System.Drawing.Point( 48, 96 );
+ this.rdoReceivePort.Name = "rdoReceivePort";
+ this.rdoReceivePort.Size = new System.Drawing.Size( 392, 16 );
+ this.rdoReceivePort.TabIndex = 3;
+ this.rdoReceivePort.TabStop = true;
+ this.rdoReceivePort.Text = "Receive Port";
+ this.rdoReceivePort.CheckedChanged += new System.EventHandler( this.rdoReceivePort_CheckedChanged );
+ //
+ // lblTargetNSPrompt
+ //
+ this.lblTargetNSPrompt.Location = new System.Drawing.Point( 16, 16 );
+ this.lblTargetNSPrompt.Name = "lblTargetNSPrompt";
+ this.lblTargetNSPrompt.Size = new System.Drawing.Size( 464, 16 );
+ this.lblTargetNSPrompt.TabIndex = 4;
+ this.lblTargetNSPrompt.Text = "Target namespace (Example: http://DBReceiveProject)";
+ //
+ // lblRequestRootPrompt
+ //
+ this.lblRequestRootPrompt.Location = new System.Drawing.Point( 16, 168 );
+ this.lblRequestRootPrompt.Name = "lblRequestRootPrompt";
+ this.lblRequestRootPrompt.Size = new System.Drawing.Size( 464, 16 );
+ this.lblRequestRootPrompt.TabIndex = 6;
+ this.lblRequestRootPrompt.Text = "Response root element name";
+ //
+ // txtRequestRootName
+ //
+ this.txtRequestRootName.Location = new System.Drawing.Point( 16, 192 );
+ this.txtRequestRootName.Name = "txtRequestRootName";
+ this.txtRequestRootName.Size = new System.Drawing.Size( 464, 21 );
+ this.txtRequestRootName.TabIndex = 5;
+ //
+ // lblResponseRootName
+ //
+ this.lblResponseRootName.Location = new System.Drawing.Point( 16, 240 );
+ this.lblResponseRootName.Name = "lblResponseRootName";
+ this.lblResponseRootName.Size = new System.Drawing.Size( 464, 16 );
+ this.lblResponseRootName.TabIndex = 8;
+ this.lblResponseRootName.Text = "Response root element name";
+ this.lblResponseRootName.Visible = false;
+ //
+ // txtResponseRootName
+ //
+ this.txtResponseRootName.Location = new System.Drawing.Point( 16, 264 );
+ this.txtResponseRootName.Name = "txtResponseRootName";
+ this.txtResponseRootName.Size = new System.Drawing.Size( 464, 21 );
+ this.txtResponseRootName.TabIndex = 7;
+ this.txtResponseRootName.Visible = false;
+ //
+ // SchemaMetaDataUserControl
+ //
+ this.Controls.Add( this.lblResponseRootName );
+ this.Controls.Add( this.txtResponseRootName );
+ this.Controls.Add( this.lblRequestRootPrompt );
+ this.Controls.Add( this.txtRequestRootName );
+ this.Controls.Add( this.lblTargetNSPrompt );
+ this.Controls.Add( this.rdoReceivePort );
+ this.Controls.Add( this.rdoSendPort );
+ this.Controls.Add( this.lblPortType );
+ this.Controls.Add( this.txtTargetNS );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "SchemaMetaDataUserControl";
+ this.Load += new System.EventHandler( this.SchemaMetaDataUserControl_Load );
+ this.ResumeLayout( false );
+ this.PerformLayout( );
+
+ }
+ #endregion
+
+ private void rdoReceivePort_CheckedChanged( object sender, System.EventArgs e )
+ {
+ if ( rdoReceivePort.Checked )
+ {
+ lblResponseRootName.Hide( );
+ txtResponseRootName.Hide( );
+ lblRequestRootPrompt.Text = "Response element root name";
+ }
+ else
+ {
+ //this.labelInput.Text = ODBCResourceHandler.GetResourceString("RootInputLabelSend");
+ //this.labelOutput.Text = ODBCResourceHandler.GetResourceString("RootOutputLabelSend");
+ lblResponseRootName.Show( );
+ txtResponseRootName.Show( );
+ lblRequestRootPrompt.Text = "Request element root name";
+ }
+ }
+
+ private void SchemaMetaDataUserControl_Load( object sender, System.EventArgs e )
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/SchemaMetaData.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/SchemaMetaData.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/SchemaMetaData.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardForm.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardForm.cs
new file mode 100644
index 00000000..63621d98
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardForm.cs
@@ -0,0 +1,330 @@
+//----------------------------------------------------------------------
+//
+// WizardForm.cs
+//
+// Microsoft BizTalk Server
+// Copyright (c) 1999-2002 Microsoft Corporation. All rights reserved.
+//
+// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
+// WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
+// THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE
+// AND INFORMATION REMAINS WITH THE USER.
+//
+//----------------------------------------------------------------------
+
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class WizardForm : System.Windows.Forms.Form
+ {
+ protected System.Windows.Forms.Panel panelWizard;
+ private System.Windows.Forms.GroupBox groupBoxFooter;
+ protected WizardUserControl _userControl = null;
+ private System.Windows.Forms.Panel panelFooter;
+ protected System.Windows.Forms.Button buttonHelp;
+ protected System.Windows.Forms.Button buttonBack;
+ protected System.Windows.Forms.Button buttonNext;
+ protected System.Windows.Forms.Button buttonCancel;
+ private System.Windows.Forms.Panel panel1;
+ protected System.Windows.Forms.PictureBox picGraphic;
+ protected System.Windows.Forms.Label lblTitle;
+ protected System.Windows.Forms.Label lblScript;
+ private System.Windows.Forms.GroupBox groupBox1;
+
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public WizardForm( )
+ {
+ Application.EnableVisualStyles( );
+
+ InitializeComponent( );
+
+ //this.buttonHelp.Text = ODBCResourceHandler.GetResourceString("FormHelpButton");
+ //this.buttonBack.Text = ODBCResourceHandler.GetResourceString("FormBackButton");
+ //this.buttonNext.Text = ODBCResourceHandler.GetResourceString("FormNextButton");
+ //this.buttonCancel.Text = ODBCResourceHandler.GetResourceString("FormCancelButton");
+ //this.Text = ODBCResourceHandler.GetResourceString("FormTitle");
+ }
+
+ public bool BackButtonEnabled
+ {
+ get
+ {
+ return this.buttonBack.Enabled;
+ }
+ set
+ {
+ this.buttonBack.Enabled = value;
+ }
+ }
+
+ public bool CancelButtonEnabled
+ {
+ get
+ {
+ return this.buttonCancel.Enabled;
+ }
+ set
+ {
+ this.buttonCancel.Enabled = value;
+ }
+ }
+
+ public bool NextButtonEnabled
+ {
+ get
+ {
+ return this.buttonNext.Enabled;
+ }
+ set
+ {
+ this.buttonNext.Enabled = value;
+ }
+ }
+
+ public string NextButtonText
+ {
+ get
+ {
+ return this.buttonNext.Text;
+ }
+ set
+ {
+ this.buttonNext.Text = value;
+ }
+ }
+
+ public void PerformNextClick( )
+ {
+ this.buttonNext.PerformClick( );
+ }
+
+ protected virtual void SetNewPageProperties( WizardUserControl newUserControl )
+ {
+ SuspendLayout( );
+ _userControl = newUserControl;
+
+ newUserControl.Visible = true;
+ newUserControl.Anchor = AnchorStyles.Left;
+ newUserControl.Dock = DockStyle.Fill;
+
+ //Force the UserControl to resize -- some of the user controls don't resize correctly.
+ float scaleRatioX = ( ( float )panelWizard.Width ) / ( ( float )newUserControl.Width );
+ float scaleRatioY = ( ( float )panelWizard.Height ) / ( ( float )newUserControl.Height );
+ SizeF factor = new SizeF( scaleRatioX, scaleRatioY );
+ newUserControl.Scale( factor );
+
+ if ( !panelWizard.Controls.Contains( newUserControl ) )
+ panelWizard.Controls.Add( ( UserControl )newUserControl );
+
+ foreach ( UserControl ctrl in panelWizard.Controls )
+ {
+ if ( ctrl == newUserControl )
+ ctrl.Visible = true;
+ else
+ ctrl.Visible = false;
+ }
+
+ ResumeLayout( false );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager( typeof( WizardForm ) );
+ this.panelWizard = new System.Windows.Forms.Panel( );
+ this.buttonHelp = new System.Windows.Forms.Button( );
+ this.buttonBack = new System.Windows.Forms.Button( );
+ this.buttonNext = new System.Windows.Forms.Button( );
+ this.buttonCancel = new System.Windows.Forms.Button( );
+ this.panelFooter = new System.Windows.Forms.Panel( );
+ this.groupBoxFooter = new System.Windows.Forms.GroupBox( );
+ this.panel1 = new System.Windows.Forms.Panel( );
+ this.lblScript = new System.Windows.Forms.Label( );
+ this.lblTitle = new System.Windows.Forms.Label( );
+ this.picGraphic = new System.Windows.Forms.PictureBox( );
+ this.groupBox1 = new System.Windows.Forms.GroupBox( );
+ this.panelFooter.SuspendLayout( );
+ this.panel1.SuspendLayout( );
+ ( ( System.ComponentModel.ISupportInitialize )( this.picGraphic ) ).BeginInit( );
+ this.SuspendLayout( );
+ //
+ // panelWizard
+ //
+ this.panelWizard.Location = new System.Drawing.Point( 0, 56 );
+ this.panelWizard.Name = "panelWizard";
+ this.panelWizard.Size = new System.Drawing.Size( 587, 345 );
+ this.panelWizard.TabIndex = 0;
+ //
+ // buttonHelp
+ //
+ this.buttonHelp.Location = new System.Drawing.Point( 8, 8 );
+ this.buttonHelp.Name = "buttonHelp";
+ this.buttonHelp.Size = new System.Drawing.Size( 96, 24 );
+ this.buttonHelp.TabIndex = 3;
+ this.buttonHelp.Visible = false;
+ //
+ // buttonBack
+ //
+ this.buttonBack.Enabled = false;
+ this.buttonBack.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.buttonBack.Location = new System.Drawing.Point( 273, 8 );
+ this.buttonBack.Name = "buttonBack";
+ this.buttonBack.Size = new System.Drawing.Size( 96, 24 );
+ this.buttonBack.TabIndex = 4;
+ this.buttonBack.Click += new System.EventHandler( this.OnBack );
+ //
+ // buttonNext
+ //
+ this.buttonNext.Enabled = false;
+ this.buttonNext.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.buttonNext.Location = new System.Drawing.Point( 377, 8 );
+ this.buttonNext.Name = "buttonNext";
+ this.buttonNext.Size = new System.Drawing.Size( 96, 24 );
+ this.buttonNext.TabIndex = 5;
+ this.buttonNext.Click += new System.EventHandler( this.OnNext );
+ //
+ // buttonCancel
+ //
+ this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+ this.buttonCancel.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+ this.buttonCancel.Location = new System.Drawing.Point( 481, 8 );
+ this.buttonCancel.Name = "buttonCancel";
+ this.buttonCancel.Size = new System.Drawing.Size( 96, 24 );
+ this.buttonCancel.TabIndex = 6;
+ this.buttonCancel.Click += new System.EventHandler( this.OnCancel );
+ //
+ // panelFooter
+ //
+ this.panelFooter.Controls.Add( this.buttonHelp );
+ this.panelFooter.Controls.Add( this.buttonBack );
+ this.panelFooter.Controls.Add( this.buttonNext );
+ this.panelFooter.Controls.Add( this.buttonCancel );
+ this.panelFooter.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.panelFooter.Location = new System.Drawing.Point( 0, 401 );
+ this.panelFooter.Name = "panelFooter";
+ this.panelFooter.Size = new System.Drawing.Size( 585, 40 );
+ this.panelFooter.TabIndex = 2;
+ //
+ // groupBoxFooter
+ //
+ this.groupBoxFooter.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.groupBoxFooter.Location = new System.Drawing.Point( 0, 399 );
+ this.groupBoxFooter.Name = "groupBoxFooter";
+ this.groupBoxFooter.Size = new System.Drawing.Size( 585, 2 );
+ this.groupBoxFooter.TabIndex = 1;
+ this.groupBoxFooter.TabStop = false;
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.Color.White;
+ this.panel1.Controls.Add( this.lblScript );
+ this.panel1.Controls.Add( this.lblTitle );
+ this.panel1.Controls.Add( this.picGraphic );
+ this.panel1.Location = new System.Drawing.Point( 0, 0 );
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size( 587, 59 );
+ this.panel1.TabIndex = 5;
+ //
+ // lblScript
+ //
+ this.lblScript.Location = new System.Drawing.Point( 16, 24 );
+ this.lblScript.Name = "lblScript";
+ this.lblScript.Size = new System.Drawing.Size( 400, 32 );
+ this.lblScript.TabIndex = 2;
+ this.lblScript.Text = "lblScript";
+ //
+ // lblTitle
+ //
+ this.lblTitle.Font = new System.Drawing.Font( "Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.lblTitle.Location = new System.Drawing.Point( 8, 8 );
+ this.lblTitle.Name = "lblTitle";
+ this.lblTitle.Size = new System.Drawing.Size( 408, 16 );
+ this.lblTitle.TabIndex = 1;
+ //
+ // picGraphic
+ //
+ this.picGraphic.Image = ( ( System.Drawing.Image )( resources.GetObject( "picGraphic.Image" ) ) );
+ this.picGraphic.Location = new System.Drawing.Point( 528, 6 );
+ this.picGraphic.Name = "picGraphic";
+ this.picGraphic.Size = new System.Drawing.Size( 56, 47 );
+ this.picGraphic.TabIndex = 0;
+ this.picGraphic.TabStop = false;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Location = new System.Drawing.Point( 0, 56 );
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size( 587, 3 );
+ this.groupBox1.TabIndex = 6;
+ this.groupBox1.TabStop = false;
+ //
+ // WizardForm
+ //
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 14 );
+ this.ClientSize = new System.Drawing.Size( 585, 441 );
+ this.Controls.Add( this.groupBox1 );
+ this.Controls.Add( this.panelWizard );
+ this.Controls.Add( this.groupBoxFooter );
+ this.Controls.Add( this.panelFooter );
+ this.Controls.Add( this.panel1 );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "WizardForm";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "ODBC Transport Schema Generation";
+ this.panelFooter.ResumeLayout( false );
+ this.panel1.ResumeLayout( false );
+ ( ( System.ComponentModel.ISupportInitialize )( this.picGraphic ) ).EndInit( );
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+
+ protected virtual void OnCancel( object sender, System.EventArgs e )
+ {
+ //((WizardUserControl)userControl).CleanUpOnCancel();
+
+ this.DialogResult = DialogResult.Cancel;
+ this.Close( );
+ return;
+ }
+
+ protected virtual void OnNext( object sender, System.EventArgs e ) { }
+
+ protected virtual void OnBack( object sender, System.EventArgs e ) { }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardForm.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardForm.resx
new file mode 100644
index 00000000..da363a81
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardForm.resx
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ True
+
+
+
+
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwg
+ JC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIy
+ MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAA0ADYDASIAAhEBAxEB/8QA
+ HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIh
+ MUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW
+ V1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
+ x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQF
+ BgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAV
+ YnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq
+ 8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD34sB1NN8xf7w/MVi+IPEun6BJAl7NIjTKxRUiaQkDGfunjqOt
+ c2/jOPWbqDTNIunhmuWKG4njeMRDBJIy3J444xmonNQjzM3o4apWklFed+llu/kd1JOirneo/wCBD/Gv
+ PvEHieS41S3t7HU7uytwJVeeNU2SuCmArMxBAy2cY6jrV3X9I1awtLaztdcnktry4S2P2glnXdn+IEZU
+ 45FaUGpQ6ZZx6Xrulx2VuFEayIvmWr/j/D/wL865KtSc7w+Hz/4K2O6lhqcI86fO3eyW66Xs1q/Kz7nK
+ l9Ubn/hKNS/CSH/GgPqg6eJ9T/GSE/1rP1XVtNsvESwaI9wtipIlVHZ0Zv8AYUHOPoatDXbdug1A/S1n
+ /wDiq8z2lVtpSbt2bOLGYTH4eUeWPMpK69xX+as7P5nVeDLy+mv9StrvUZr1IooHQzbMqWMoP3P90daK
+ i8ESNcapqtx5VysZgt0Vp4XjyQ0pON5OfvD86K9nCuTorm3/AOCRWUlJcys7K+ltbLoUviBJs13Sv3mz
+ /Rp/49v8Uf8Atr/n17ReDre01K/1G2vFiuY3gj+SRg/8TdPnb+ddH4m8OprdxbTG+u7SS3R1U27KMhiC
+ c7j/ALI6VzMngImdJv7d1IyR/ccmHcv0O4EV3TrJ4Z0bNu9+lvz/AEIpUV9ZjXc0ly263Tu3fRW/E6OX
+ wtcR3NkLTUpPsNvcpOba4/ebdueEbqOvQ5roLxVaynVlDAxtkEZHSuYttR1fRrqytr2dNQtbiZYFmfak
+ qMemQrEMOOvFdYyh1KsMqRgiuOmo6pKx1YmVRuLnJNdGuv5O/rqeH+DdG1S91FNQsbYSR2jbmLyGMMf7
+ qsO/+Sa9OsNWtbqcWsz3Fpe97a5Z0Y/7uXww+lOg0W+0KMJokySWgJP2G56DJydjjkfjmuR8deLRNanS
+ DpjwXXBlNyqkx+hQgn/vquGCWCpNt/5P0/r5HtVpPOMSlFadGnql5p7/AC9LnpcKFAckn6kn+ZNFV9JY
+ vo9kSxJNvGSScn7oor007q583OPLJx7FsjNN2e5/M/40+imSc94pDRW+n3OyR4ra+iml2AsVQZycfjWp
+ FqNrf6dJdWNzHMmwkPG2cHH6VZlOFPOPx/8ArivNPGB/s3XLOfT5xZSzxzGWSFlHmYKY3AyYP3j1/Xtz
+ VpOknU3R6ODpRxco4faWtn076/dv+BR0P4m6jZBY9VT7bDn/AFigLIPy4P6Vk+LNT0/W/FX2yK4dbOWO
+ MNJ5TFlwOflHeorWOG0UiOddx6sJVUn/AL5nFWPtAzn7T1/6eP8A7orw5Vqs4clR3R9pDD4ajXdajHlb
+ VtNtfKz/AK6Hp/hTXtN1e1e3064kl+xpGjeZEyEAggdev3T0orA+HL+ZqWsHfv8A3NsM793ebvvb+f4U
+ V72GqOpSUmfEZlQhQxUqcL20331SfZdz0CiiitzhEIz6/nWbqXh/TdWkikvI5neIMEZLmSMgNjI+Vh12
+ j8qKKTSkrMunUnTlzQdn3RS/4QvQ/wDnlef+DC4/+Lo/4QvQ/wDnlef+DC4/+LooqPY0/wCVfcb/AF7F
+ f8/Jfey/pehafo7zPZRSK8wUSNJPJKSFzgfOxxjcenrRRRVpKKsjCpUnUlzTd33Z/9k=
+
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardUserControl.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardUserControl.cs
new file mode 100644
index 00000000..9187f340
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardUserControl.cs
@@ -0,0 +1,123 @@
+//----------------------------------------------------------------------
+//
+// WizardUserControl.cs
+//
+// Microsoft BizTalk Server
+// Copyright (c) 1999-2002 Microsoft Corporation. All rights reserved.
+//
+// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
+// WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
+// THE ENTIRE RISK OF USE OR RESULTS IN CONNECTION WITH THE USE OF THIS CODE
+// AND INFORMATION REMAINS WITH THE USER.
+//
+//----------------------------------------------------------------------
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC.SchemaWizard
+{
+ public class WizardUserControl : System.Windows.Forms.UserControl
+ {
+ private WizardForm parentForm = null;
+
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public WizardUserControl( )
+ {
+ InitializeComponent( );
+ }
+
+ protected WizardForm WizardParentForm
+ {
+ get
+ {
+ if ( parentForm == null )
+ parentForm = ( WizardForm )this.FindForm( );
+ return parentForm;
+ }
+ }
+
+ public virtual void ProcessLoad( )
+ {
+ LoadPageInfo( );
+ UpdateNextBackButton( );
+ }
+
+ public virtual bool SavePageInfo( )
+ {
+ if ( !ValidatePageInput( ) )
+ return false;
+
+ return SavePageInfoWithoutValidation( );
+ }
+
+ public virtual bool SavePageInfoWithoutValidation( )
+ {
+ return true;
+ }
+
+ public virtual void CleanUpOnCancel( )
+ {
+ }
+
+ protected virtual bool ValidatePageInput( )
+ {
+ return true;
+ }
+
+ protected virtual void LoadPageInfo( )
+ {
+ }
+
+ protected virtual void UpdateNextBackButton( )
+ {
+ }
+
+ public virtual void SetSelect( )
+ {
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.SuspendLayout( );
+ //
+ // WizardUserControl
+ //
+ this.BackColor = System.Drawing.SystemColors.Control;
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.Name = "WizardUserControl";
+ this.Size = new System.Drawing.Size( 497, 318 );
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardUserControl.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardUserControl.resx
new file mode 100644
index 00000000..19dc0dd8
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/ODBCSchemaWizard/WizardUI/WizardUserControl.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/BizTalk ODBC Adapter.doc b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/BizTalk ODBC Adapter.doc
new file mode 100644
index 00000000..77bb0687
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/BizTalk ODBC Adapter.doc differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/BizTalk ODBC Adapter.vsd b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/BizTalk ODBC Adapter.vsd
new file mode 100644
index 00000000..6f8a4168
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/BizTalk ODBC Adapter.vsd differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/NorthhWindsMods.sql b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/NorthhWindsMods.sql
new file mode 100644
index 00000000..b3f78f52
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/NorthhWindsMods.sql differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter.reg b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter.reg
new file mode 100644
index 00000000..83ca81a0
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter.reg
@@ -0,0 +1,37 @@
+Windows Registry Editor Version 5.00
+[HKEY_CLASSES_ROOT\CLSID\{8d285509-9e4a-4702-a8df-821e0f937d2b}]
+@="ODBC Adapter"
+"AppID"="{ea74dc63-3c08-40a1-8737-d68ccaa0130f}"
+
+[HKEY_CLASSES_ROOT\CLSID\{8d285509-9e4a-4702-a8df-821e0f937d2b}\BizTalk]
+@="BizTalk"
+"TransPortType"="ODBC"
+"Constraints"=dword:0003d8b
+
+"OutboundProtocol_PageProv"="{2DE93EE6-CB01-4007-93E9-C3D71689A283}"
+"TransmitLocation_PageProv"="{2DE93EE6-CB01-4007-93E9-C3D71689A282}"
+"InboundProtocol_PageProv"="{2DE93EE6-CB01-4007-93E9-C3D71689A281}"
+"ReceiveLocation_PageProv"="{2DE93EE6-CB01-4007-93E9-C3D71689A280}"
+
+"OutboundEngineCLSID"="{884c48a8-0856-409a-bafa-344257874914}"
+"OutboundTypeName"="Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCTransmitAdapter.ODBCTransmitter"
+"OutboundAssemblyPath"="C:\\Program Files\\Microsoft BizTalk Server 2006\\SDK\\Samples\\AdaptersDevelopment\\ODBC\\Bin\\ODBCTransmitAdapter.dll"
+
+"InboundEngineCLSID"="{4b7d3786-5519-45e5-93e1-7ecfcd918c85}"
+"InboundTypeName"="Microsoft.BizTalk.Adapters.ODBC.RunTime.ODBCReceiveAdapter.ODBCReceiver"
+"InboundAssemblyPath"="C:\\Program Files\\Microsoft BizTalk Server 2006\\SDK\\Samples\\AdaptersDevelopment\\ODBC\\Bin\\ODBCReceiveAdapter.dll"
+
+"AdapterMgmtTypeName"="Microsoft.BizTalk.Adapters.ODBC.ODBCDesignTime.AdapterManagement"
+"AdapterMgmtAssemblyPath"="C:\\Program Files\\Microsoft BizTalk Server 2006\\SDK\\Samples\\AdaptersDevelopment\\ODBC\\Bin\\ODBCAdapterManagement.dll"
+
+"AliasesXML"="ODBC://"
+"PropertyNameSpace"="http://schemas.microsoft.com/ODBC"
+
+"ReceiveHandlerPropertiesXML"=""
+"ReceiveLocationPropertiesXML"=""
+"SendHandlerPropertiesXML"=""
+"SendLocationPropertiesXML"=""
+
+[HKEY_CLASSES_ROOT\CLSID\{8d285509-9e4a-4702-a8df-821e0f937d2b}\Implemented Categories]
+
+[HKEY_CLASSES_ROOT\CLSID\{8d285509-9e4a-4702-a8df-821e0f937d2b}\Implemented Categories\{7F46FC3E-3C2C-405B-A47F-8D17942BA8F9}]
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter_Local.reg b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter_Local.reg
new file mode 100644
index 00000000..7f577c8a
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCAdapter_Local.reg differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCTYPESMatch.XSD b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCTYPESMatch.XSD
new file mode 100644
index 00000000..7c8cb9cc
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/ODBCTYPESMatch.XSD
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/RosettaStoneTypeMappings.xls b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/RosettaStoneTypeMappings.xls
new file mode 100644
index 00000000..affb85d0
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/Resources/RosettaStoneTypeMappings.xls differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/AssemblyInfo.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/AssemblyInfo.cs
new file mode 100644
index 00000000..3ee1df2f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/AssemblyInfo.cs
@@ -0,0 +1,16 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly: AssemblyTitle( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyDescription( "BizTalk Server 2006 ODBC Adapter" )]
+[assembly: AssemblyConfiguration( "" )]
+[assembly: AssemblyCompany( "Microsoft Corporation" )]
+[assembly: AssemblyProduct( "Microsoft BizTalk Server 2006" )]
+[assembly: AssemblyCopyright( "Copyright (C) 2006 Microsoft Corporation. All rights reserved." )]
+[assembly: AssemblyTrademark( "" )]
+[assembly: AssemblyCulture( "" )]
+
+[assembly: AssemblyVersion( "1.2.0.0" )]
+
+[assembly: AssemblyDelaySign( false )]
+[assembly: AssemblyKeyName( "" )]
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/BTSODBCQueryEngine.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/BTSODBCQueryEngine.cs
new file mode 100644
index 00000000..6235793f
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/BTSODBCQueryEngine.cs
@@ -0,0 +1,358 @@
+using System;
+using System.Data.Odbc;
+using System.Xml;
+using System.Xml.Schema;
+using System.IO;
+using System.Data;
+using System.Text;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ ///
+ /// Summary description for BTSODBCQueryEngine.
+ ///
+ public class BTSODBCQueryEngine
+ {
+ public string ODBCConnectionString = "";
+ public bool ODBCTransaction = false;
+
+ public string DocumentRootNode ="";
+ public string Namespace = "";
+
+#if(DEBUG)
+ public string DebugOutLocation = "";
+#endif
+
+ public BTSODBCQueryEngine()
+ {
+ //
+ // TODO: Add constructor logic here
+ //
+ }
+
+ private OdbcCommand CreateODBCCommandFromSchema(string QuerySchema)
+ {
+ StringReader sr = new StringReader(QuerySchema);
+ OdbcCommand odbcCmd = new OdbcCommand();
+ XmlSchema xsdQueryConfiguration = XmlSchema.Read(sr,null);
+
+ foreach(object item in xsdQueryConfiguration.Items)
+ {
+ if(item is XmlSchemaAnnotation) // Then we are at the section of the schema containing
+ { // the odbc query spec
+ XmlSchemaAnnotation xsAnnotation = (XmlSchemaAnnotation)item;
+ XmlSchemaAppInfo xsAppInfo = (XmlSchemaAppInfo)xsAnnotation.Items[0];
+ XmlNode[] xmlNodesQueryInfo = xsAppInfo.Markup;
+
+ // Create our new command object for query processing
+ odbcCmd.CommandText = xmlNodesQueryInfo[1].InnerText;
+
+ //HACK TO ADDRESS OUT PARAMETERS FOR SP FIX THIS
+// OdbcParameter outParam = new OdbcParameter();
+// outParam.Direction= ParameterDirection.ReturnValue;
+// outParam.Size = 10; // THIS DOES MATTER FIX THIS:
+// odbcCmd.Parameters.Add(outParam);
+
+ }
+ if(item is XmlSchemaElement) // Query Parameters Section of the schema
+ {
+ XmlSchemaElement xsParamsElement = (XmlSchemaElement)item;
+ XmlSchemaComplexType xsCT = (XmlSchemaComplexType)xsParamsElement.SchemaType;
+ // IMPORTANT NOTE: If for some reason they change the order of the params in the
+ // schmema and/or the document being processes then the results will be wrong
+ // as there is no way to map the data to the correct element of the query
+ // remember our SQL looks like SELECT * FROM CUSTOMER WHERE CUSTOMERID = ?
+ foreach(XmlSchemaAttribute xsAttParams in xsCT.Attributes)
+ {
+ OdbcParameter queryParam = new OdbcParameter();
+
+ queryParam.ParameterName = "@" + xsAttParams.Name;
+
+ //Now get all of the meta data from the parameter
+ XmlSchemaAppInfo xsParamInfo = (XmlSchemaAppInfo)xsAttParams.Annotation.Items[0];
+ XmlNode[] xmlParamInfo = xsParamInfo.Markup;
+
+ queryParam.OdbcType = ConvertStringDataTypeToODBC(xmlParamInfo[0].InnerText);
+ queryParam.Direction = ConverStrToParamDir(xmlParamInfo[1].InnerText);
+
+ if(System.Convert.ToInt32(xmlParamInfo[2].InnerText) > 0)
+ queryParam.Size = System.Convert.ToInt32(xmlParamInfo[2].InnerText);
+
+ odbcCmd.Parameters.Add(queryParam);
+ }
+ }
+
+ }
+
+ return odbcCmd;
+ }
+ /*
+ * SIMULATES BTS CODE EXECUTION FOR MESSGAE PROCESSING
+ */
+ public string BTSExecuteODBCCall(string BTSDocument, string QuerySchema)
+ {
+ OdbcCommand odbcCmd = CreateODBCCommandFromSchema(QuerySchema);
+ odbcCmd.Connection = new OdbcConnection(ODBCConnectionString);
+ string Output = "";
+ bool bOutputParametersInQuery = false;
+ OdbcTransaction localDBTransaction = null;
+
+ XmlDocument xmlDoc = new XmlDocument();
+
+ XmlNamespaceManager xmlNSM = new XmlNamespaceManager(xmlDoc.NameTable);
+
+ // WARNING: Should be converted to stream code I would suggest.
+ xmlDoc.LoadXml(BTSDocument);
+
+ // Need to lookup the NS prefix for the payload section of the schema.
+ // Concerned that the root node will not always know what the NS is for our playload
+ // section of the document
+ // WARNING: Possible issue below
+ XmlNode root = xmlDoc.FirstChild;
+
+ string sNSPrefix = root.GetPrefixOfNamespace(Namespace);
+ xmlNSM.AddNamespace(sNSPrefix, Namespace);
+
+ // Now lets get the payload section of the document and process the queries
+ XmlNodeList xmlNL = xmlDoc.SelectNodes("/" + sNSPrefix + ":" + DocumentRootNode, xmlNSM);
+
+ UnicodeEncoding Unicode = new UnicodeEncoding();
+
+ foreach(XmlNode xmlN in xmlNL)
+ {
+ int xmlInboudMsgAttribCnt = 0;
+ //WE NEED TO SKIP THIS FIRST ELEMENT WHICH IS THE ReturnValue
+ for(int cnt = 0; cnt < odbcCmd.Parameters.Count; cnt++)
+ {
+ if(odbcCmd.Parameters[cnt].Direction == ParameterDirection.ReturnValue
+ || odbcCmd.Parameters[cnt].Direction == ParameterDirection.Output
+ ||odbcCmd.Parameters[cnt].Direction == ParameterDirection.InputOutput)
+ {
+ // Add a flag so we know that we need to add out parameters to our ouput xml document
+ bOutputParametersInQuery = true;
+ }
+
+ //WE also need to check if this is an input or output value
+ if(odbcCmd.Parameters[cnt].Direction != ParameterDirection.ReturnValue && odbcCmd.Parameters[cnt].Direction != ParameterDirection.Output)
+ {
+
+ // Even though the command object has some capabilities to perform
+ // data type conversions, we still need to manually convert many of them.
+ // So insted of picking and choosing we are just going to convert them all!
+ switch(odbcCmd.Parameters[cnt].OdbcType.ToString())
+ {
+ case "BigInt":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToInt64(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Binary":
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Bit":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToBoolean(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Text":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "DateTime":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Numeric":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDecimal(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Double":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDouble(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Int":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToInt32(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Real":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDouble(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "SmallInt":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToInt16(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "TinyInt":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToByte(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "UniqueIdentifier": //FIX THIS: Need to do something else!
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Char" : //FIX THIS NEEDS TO SUPPORT ARRAYS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);//.ToCharArray();
+ break;
+ case "Date": // THIS IS A BEST GUESS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Decimal":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDecimal(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Image":
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "NChar":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "NText":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "NVarChar":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "SmallDateTime": // BEST GUESS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Time": // BEST GUESS
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "Timestamp":
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "VarBinary": //FIX THIS
+ odbcCmd.Parameters[cnt].Value = Unicode.GetBytes(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ case "VarChar":
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToString(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+ default:
+ odbcCmd.Parameters[cnt].Value = System.Convert.ToDateTime(xmlN.Attributes[xmlInboudMsgAttribCnt].Value);
+ break;
+
+ }
+ xmlInboudMsgAttribCnt ++;
+ }
+ }
+
+ try
+ {
+ // HERE we actually execute the query against the target database
+ // We're leveraging ADO.NET to do alot of the heave lifting so it can deal with
+ // generateing the XML output for us
+ OdbcDataAdapter odbcAdapter = new OdbcDataAdapter();
+
+ //================================ BEGIN TRANSACTION ===================================
+ if(ODBCTransaction) // Do we need to enlist the operation in a transaction
+ localDBTransaction = odbcCmd.Connection.BeginTransaction ();
+
+ odbcAdapter.SelectCommand = odbcCmd;
+
+ DataSet ds = new DataSet();
+ odbcAdapter.Fill(ds);
+ Output = ds.GetXml();
+#if(DEBUG)// write output to a specified file
+ if(DebugOutLocation != null)
+ {
+ ds.WriteXml("C:\\TEMP\\ADAPTEROUT.XML");
+ }
+#endif
+ // =============================== END TRANSACTION =======================================
+ if(ODBCTransaction) // Do we need to complete a transcation
+ localDBTransaction.Commit();
+ }
+ catch(Exception e)
+ {
+ try
+ {
+ if(ODBCTransaction)
+ {
+ // ======================= ROLLBACK TRANSACTION ==================================
+ localDBTransaction.Rollback();
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+
+ }
+
+
+ //Once we have the return data set and its corrisponding XML we need to add any outparameter
+ //values to the end of that XML document
+
+
+
+
+ }
+
+
+ return Output;
+ }
+ private ParameterDirection ConverStrToParamDir(string sParamDir)
+ {
+ switch(sParamDir)
+ {
+ case "Input":
+ return ParameterDirection.Input;
+ case "Output":
+ return ParameterDirection.Output;
+ case "InputOutput":
+ return ParameterDirection.InputOutput;
+ case "ReturnValue":
+ return ParameterDirection.ReturnValue;
+ default:
+ return ParameterDirection.Input;
+
+ }
+
+
+ }
+ private OdbcType ConvertStringDataTypeToODBC(string sType)
+ {
+ switch(sType)
+ {
+ case "BigInt":
+ return OdbcType.BigInt;
+ case "Binary": // Also could be IMAGE
+ return OdbcType.Binary;
+ case "Bit":
+ return OdbcType.Bit;
+ case "Text": // Could also be NCHAR, NTEXT, NVARCHAR
+ return OdbcType.Text;
+ case "DateTime":
+ return OdbcType.DateTime;
+ case "Numeric": // Could also be DECIMAL,
+ return OdbcType.Numeric;
+ case "Double":
+ return OdbcType.Double;
+ case "Int":
+ return OdbcType.Int;
+ case "Real":
+ return OdbcType.Real;
+ case "SmallInt":
+ return OdbcType.SmallInt;
+ case "TinyInt":
+ return OdbcType.TinyInt;
+ case "UniqueIdentifier":
+ return OdbcType.UniqueIdentifier;
+ case "Char" :
+ return OdbcType.Char;
+ case "Date":
+ return OdbcType.Date;
+ case "Decimal":
+ return OdbcType.Decimal;
+ case "Image":
+ return OdbcType.Image;
+ case "NChar":
+ return OdbcType.NChar;
+ case "NText":
+ return OdbcType.NText;
+ case "NVarChar":
+ return OdbcType.NVarChar;
+ case "SmallDateTime":
+ return OdbcType.SmallDateTime;
+ case "Time":
+ return OdbcType.Time;
+ case "Timestamp":
+ return OdbcType.Timestamp;
+ case "VarBinary":
+ return OdbcType.VarBinary;
+ case "VarChar":
+ return OdbcType.VarChar;
+ default:
+ return OdbcType.Text;
+ }
+
+ }
+
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ConnectionString.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ConnectionString.cs
new file mode 100644
index 00000000..6c37803a
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ConnectionString.cs
@@ -0,0 +1,141 @@
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ ///
+ /// Summary description for QueryType.
+ ///
+ public class ConnectionString : System.Windows.Forms.UserControl
+ {
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button1;
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public ConnectionString()
+ {
+ // This call is required by the Windows.Forms Form Designer.
+ InitializeComponent();
+
+ // TODO: Add any initialization after the InitializeComponent call
+
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if( disposing )
+ {
+ if(components != null)
+ {
+ components.Dispose();
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.label2 = new System.Windows.Forms.Label();
+ this.label1 = new System.Windows.Forms.Label();
+ this.button4 = new System.Windows.Forms.Button();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point(36, 44);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(152, 16);
+ this.label2.TabIndex = 13;
+ this.label2.Text = "Connection string:";
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point(36, 12);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(248, 16);
+ this.label1.TabIndex = 12;
+ this.label1.Text = "To set connection string, click set";
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(396, 28);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(80, 24);
+ this.button4.TabIndex = 11;
+ this.button4.Text = "&Set";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(36, 68);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.ReadOnly = true;
+ this.textBox1.Size = new System.Drawing.Size(448, 168);
+ this.textBox1.TabIndex = 10;
+ this.textBox1.Text = "";
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(396, 260);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(88, 24);
+ this.button3.TabIndex = 9;
+ this.button3.Text = "Finish";
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(300, 260);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(88, 24);
+ this.button2.TabIndex = 8;
+ this.button2.Text = "Next >";
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(204, 260);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(88, 24);
+ this.button1.TabIndex = 7;
+ this.button1.Text = "< Bac&k";
+ //
+ // ConnectionString
+ //
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.button4);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button1);
+ this.Name = "ConnectionString";
+ this.Size = new System.Drawing.Size(520, 296);
+ this.ResumeLayout(false);
+
+ }
+ #endregion
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ConnectionString.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ConnectionString.resx
new file mode 100644
index 00000000..24776c7e
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ConnectionString.resx
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ False
+
+
+ True
+
+
+ True
+
+
+ ConnectionString
+
+
+ 80
+
+
+ (Default)
+
+
+ False
+
+
+ Private
+
+
+ 8, 8
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/MetaData.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/MetaData.cs
new file mode 100644
index 00000000..ab769d24
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/MetaData.cs
@@ -0,0 +1,174 @@
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Windows.Forms;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ ///
+ /// Summary description for MetaData.
+ ///
+ public class MetaData : System.Windows.Forms.UserControl
+ {
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.RadioButton radioButton1;
+ private System.Windows.Forms.RadioButton radioButton2;
+ private System.Windows.Forms.Label label4;
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.Container components = null;
+
+ public MetaData()
+ {
+ // This call is required by the Windows.Forms Form Designer.
+ InitializeComponent();
+
+ // TODO: Add any initialization after the InitializeComponent call
+
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if( disposing )
+ {
+ if(components != null)
+ {
+ components.Dispose();
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Component Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.label2 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.radioButton1 = new System.Windows.Forms.RadioButton();
+ this.radioButton2 = new System.Windows.Forms.RadioButton();
+ this.label4 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point(28, 40);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(152, 16);
+ this.label2.TabIndex = 20;
+ this.label2.Text = "Target Namespace:";
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(32, 56);
+ this.textBox1.Multiline = true;
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(448, 24);
+ this.textBox1.TabIndex = 17;
+ this.textBox1.Text = "";
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(388, 256);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(88, 24);
+ this.button3.TabIndex = 16;
+ this.button3.Text = "Finish";
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(292, 256);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(88, 24);
+ this.button2.TabIndex = 15;
+ this.button2.Text = "Next >";
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(196, 256);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(88, 24);
+ this.button1.TabIndex = 14;
+ this.button1.Text = "< Bac&k";
+ //
+ // textBox2
+ //
+ this.textBox2.Location = new System.Drawing.Point(32, 200);
+ this.textBox2.Multiline = true;
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(448, 24);
+ this.textBox2.TabIndex = 21;
+ this.textBox2.Text = "";
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point(32, 184);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(168, 16);
+ this.label3.TabIndex = 22;
+ this.label3.Text = "Document root element name:";
+ //
+ // radioButton1
+ //
+ this.radioButton1.Location = new System.Drawing.Point(56, 112);
+ this.radioButton1.Name = "radioButton1";
+ this.radioButton1.Size = new System.Drawing.Size(128, 24);
+ this.radioButton1.TabIndex = 23;
+ this.radioButton1.Text = "Receive";
+ //
+ // radioButton2
+ //
+ this.radioButton2.Location = new System.Drawing.Point(56, 136);
+ this.radioButton2.Name = "radioButton2";
+ this.radioButton2.Size = new System.Drawing.Size(112, 24);
+ this.radioButton2.TabIndex = 24;
+ this.radioButton2.Text = "Send";
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point(32, 96);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(152, 16);
+ this.label4.TabIndex = 25;
+ this.label4.Text = "Select port type:";
+ //
+ // MetaData
+ //
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.radioButton2);
+ this.Controls.Add(this.radioButton1);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.textBox2);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button1);
+ this.Name = "MetaData";
+ this.Size = new System.Drawing.Size(504, 288);
+ this.ResumeLayout(false);
+
+ }
+ #endregion
+ }
+}
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/MetaData.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/MetaData.resx
new file mode 100644
index 00000000..1982b393
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/MetaData.resx
@@ -0,0 +1,220 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 1.3
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ Private
+
+
+ Private
+
+
+ False
+
+
+ False
+
+
+ True
+
+
+ True
+
+
+ 80
+
+
+ (Default)
+
+
+ False
+
+
+ Private
+
+
+ MetaData
+
+
+ 8, 8
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ODBCAdapter.snk b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ODBCAdapter.snk
new file mode 100644
index 00000000..0d564ea3
Binary files /dev/null and b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/ODBCAdapter.snk differ
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestForm.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestForm.cs
new file mode 100644
index 00000000..c9c30b78
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestForm.cs
@@ -0,0 +1,681 @@
+//---------------------------------------------------------------------
+// File: TestForm.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Drawing;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Data;
+using System.Data.OleDb;
+using System.Data.Odbc;
+using System.Xml;
+using System.Xml.Schema;
+using System.Xml.Serialization;
+using System.IO;
+using System.Text;
+using System.Reflection;
+
+using Microsoft.BizTalk.Adapters.ODBC.SchemaWizard;
+using Microsoft.BizTalk.Adapters.ODBC;
+
+using ODBCDriverPrompt;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ public class TestForm : System.Windows.Forms.Form
+ {
+ private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
+ private System.Windows.Forms.OpenFileDialog digOpenFile;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tpQueryEngine;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.TextBox txtInputSchemaLocation;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.TextBox txtInputInstanceName;
+ private System.Windows.Forms.Button btnSchemaName;
+ private System.Windows.Forms.Button btnInputInst;
+ private System.Windows.Forms.Button btnExecuteQuery;
+ private System.Windows.Forms.TextBox txtQueryResults;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.TextBox txtConnectionString;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Button btnConnection;
+ private System.Windows.Forms.RadioButton rdoReceive;
+ private System.Windows.Forms.RadioButton rdoSend;
+ private System.Windows.Forms.Label lblSchemaName;
+ private System.Windows.Forms.TextBox txtIterations;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.TabPage tpSchemaWizard;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.TextBox txtOutputSchema;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox txtInputSchema;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txtSQLStatement;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label label12;
+
+ private System.ComponentModel.Container components = null;
+
+ public TestForm( )
+ {
+ InitializeComponent( );
+ }
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ protected override void Dispose( bool disposing )
+ {
+ if ( disposing )
+ {
+ if ( components != null )
+ {
+ components.Dispose( );
+ }
+ }
+ base.Dispose( disposing );
+ }
+
+ #region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent( )
+ {
+ this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog( );
+ this.digOpenFile = new System.Windows.Forms.OpenFileDialog( );
+ this.tabControl1 = new System.Windows.Forms.TabControl( );
+ this.tpSchemaWizard = new System.Windows.Forms.TabPage( );
+ this.label12 = new System.Windows.Forms.Label( );
+ this.label11 = new System.Windows.Forms.Label( );
+ this.label7 = new System.Windows.Forms.Label( );
+ this.button1 = new System.Windows.Forms.Button( );
+ this.txtOutputSchema = new System.Windows.Forms.TextBox( );
+ this.label3 = new System.Windows.Forms.Label( );
+ this.txtInputSchema = new System.Windows.Forms.TextBox( );
+ this.label2 = new System.Windows.Forms.Label( );
+ this.txtSQLStatement = new System.Windows.Forms.TextBox( );
+ this.label4 = new System.Windows.Forms.Label( );
+ this.label1 = new System.Windows.Forms.Label( );
+ this.tpQueryEngine = new System.Windows.Forms.TabPage( );
+ this.label8 = new System.Windows.Forms.Label( );
+ this.txtQueryResults = new System.Windows.Forms.TextBox( );
+ this.groupBox2 = new System.Windows.Forms.GroupBox( );
+ this.label10 = new System.Windows.Forms.Label( );
+ this.label5 = new System.Windows.Forms.Label( );
+ this.txtIterations = new System.Windows.Forms.TextBox( );
+ this.rdoSend = new System.Windows.Forms.RadioButton( );
+ this.rdoReceive = new System.Windows.Forms.RadioButton( );
+ this.btnConnection = new System.Windows.Forms.Button( );
+ this.label9 = new System.Windows.Forms.Label( );
+ this.txtConnectionString = new System.Windows.Forms.TextBox( );
+ this.btnExecuteQuery = new System.Windows.Forms.Button( );
+ this.btnInputInst = new System.Windows.Forms.Button( );
+ this.btnSchemaName = new System.Windows.Forms.Button( );
+ this.label6 = new System.Windows.Forms.Label( );
+ this.txtInputInstanceName = new System.Windows.Forms.TextBox( );
+ this.lblSchemaName = new System.Windows.Forms.Label( );
+ this.txtInputSchemaLocation = new System.Windows.Forms.TextBox( );
+ this.tabControl1.SuspendLayout( );
+ this.tpSchemaWizard.SuspendLayout( );
+ this.tpQueryEngine.SuspendLayout( );
+ this.groupBox2.SuspendLayout( );
+ this.SuspendLayout( );
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add( this.tpSchemaWizard );
+ this.tabControl1.Controls.Add( this.tpQueryEngine );
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point( 0, 0 );
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size( 744, 589 );
+ this.tabControl1.TabIndex = 15;
+ //
+ // tpSchemaWizard
+ //
+ this.tpSchemaWizard.Controls.Add( this.label12 );
+ this.tpSchemaWizard.Controls.Add( this.label11 );
+ this.tpSchemaWizard.Controls.Add( this.label7 );
+ this.tpSchemaWizard.Controls.Add( this.button1 );
+ this.tpSchemaWizard.Controls.Add( this.txtOutputSchema );
+ this.tpSchemaWizard.Controls.Add( this.label3 );
+ this.tpSchemaWizard.Controls.Add( this.txtInputSchema );
+ this.tpSchemaWizard.Controls.Add( this.label2 );
+ this.tpSchemaWizard.Controls.Add( this.txtSQLStatement );
+ this.tpSchemaWizard.Controls.Add( this.label4 );
+ this.tpSchemaWizard.Controls.Add( this.label1 );
+ this.tpSchemaWizard.Location = new System.Drawing.Point( 4, 22 );
+ this.tpSchemaWizard.Name = "tpSchemaWizard";
+ this.tpSchemaWizard.Size = new System.Drawing.Size( 736, 563 );
+ this.tpSchemaWizard.TabIndex = 0;
+ this.tpSchemaWizard.Text = "Schema Wizard Test";
+ //
+ // label12
+ //
+ this.label12.Location = new System.Drawing.Point( 378, 116 );
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size( 167, 12 );
+ this.label12.TabIndex = 27;
+ this.label12.Text = "Output Schema";
+ //
+ // label11
+ //
+ this.label11.Location = new System.Drawing.Point( 2, 114 );
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size( 256, 14 );
+ this.label11.TabIndex = 26;
+ this.label11.Text = "Input Schema";
+ //
+ // label7
+ //
+ this.label7.Location = new System.Drawing.Point( 1, 37 );
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size( 151, 15 );
+ this.label7.TabIndex = 25;
+ this.label7.Text = "ADO.NET Escape Sequence";
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point( 584, 8 );
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size( 144, 32 );
+ this.button1.TabIndex = 24;
+ this.button1.Text = "Test ODBC Wizard";
+ this.button1.Click += new System.EventHandler( this.button1_Click );
+ //
+ // txtOutputSchema
+ //
+ this.txtOutputSchema.Location = new System.Drawing.Point( 376, 130 );
+ this.txtOutputSchema.Multiline = true;
+ this.txtOutputSchema.Name = "txtOutputSchema";
+ this.txtOutputSchema.ReadOnly = true;
+ this.txtOutputSchema.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtOutputSchema.Size = new System.Drawing.Size( 360, 430 );
+ this.txtOutputSchema.TabIndex = 22;
+ //
+ // label3
+ //
+ this.label3.Location = new System.Drawing.Point( 368, 232 );
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size( 136, 16 );
+ this.label3.TabIndex = 23;
+ //
+ // txtInputSchema
+ //
+ this.txtInputSchema.AcceptsReturn = true;
+ this.txtInputSchema.AcceptsTab = true;
+ this.txtInputSchema.Location = new System.Drawing.Point( 0, 129 );
+ this.txtInputSchema.Multiline = true;
+ this.txtInputSchema.Name = "txtInputSchema";
+ this.txtInputSchema.ReadOnly = true;
+ this.txtInputSchema.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtInputSchema.Size = new System.Drawing.Size( 367, 431 );
+ this.txtInputSchema.TabIndex = 20;
+ //
+ // label2
+ //
+ this.label2.Location = new System.Drawing.Point( 0, 232 );
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size( 160, 16 );
+ this.label2.TabIndex = 21;
+ //
+ // txtSQLStatement
+ //
+ this.txtSQLStatement.Location = new System.Drawing.Point( 1, 54 );
+ this.txtSQLStatement.Multiline = true;
+ this.txtSQLStatement.Name = "txtSQLStatement";
+ this.txtSQLStatement.ReadOnly = true;
+ this.txtSQLStatement.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtSQLStatement.Size = new System.Drawing.Size( 734, 53 );
+ this.txtSQLStatement.TabIndex = 19;
+ //
+ // label4
+ //
+ this.label4.Location = new System.Drawing.Point( 0, 152 );
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size( 168, 16 );
+ this.label4.TabIndex = 18;
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point( 2, 42 );
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size( 160, 16 );
+ this.label1.TabIndex = 17;
+ //
+ // tpQueryEngine
+ //
+ this.tpQueryEngine.Controls.Add( this.label8 );
+ this.tpQueryEngine.Controls.Add( this.txtQueryResults );
+ this.tpQueryEngine.Controls.Add( this.groupBox2 );
+ this.tpQueryEngine.Location = new System.Drawing.Point( 4, 22 );
+ this.tpQueryEngine.Name = "tpQueryEngine";
+ this.tpQueryEngine.Size = new System.Drawing.Size( 736, 563 );
+ this.tpQueryEngine.TabIndex = 2;
+ this.tpQueryEngine.Text = "Query Engine Test";
+ //
+ // label8
+ //
+ this.label8.Location = new System.Drawing.Point( 0, 184 );
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size( 184, 16 );
+ this.label8.TabIndex = 24;
+ this.label8.Text = "Query Results:";
+ //
+ // txtQueryResults
+ //
+ this.txtQueryResults.Location = new System.Drawing.Point( 0, 200 );
+ this.txtQueryResults.Multiline = true;
+ this.txtQueryResults.Name = "txtQueryResults";
+ this.txtQueryResults.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtQueryResults.Size = new System.Drawing.Size( 736, 360 );
+ this.txtQueryResults.TabIndex = 23;
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add( this.label10 );
+ this.groupBox2.Controls.Add( this.label5 );
+ this.groupBox2.Controls.Add( this.txtIterations );
+ this.groupBox2.Controls.Add( this.rdoSend );
+ this.groupBox2.Controls.Add( this.rdoReceive );
+ this.groupBox2.Controls.Add( this.btnConnection );
+ this.groupBox2.Controls.Add( this.label9 );
+ this.groupBox2.Controls.Add( this.txtConnectionString );
+ this.groupBox2.Controls.Add( this.btnExecuteQuery );
+ this.groupBox2.Controls.Add( this.btnInputInst );
+ this.groupBox2.Controls.Add( this.btnSchemaName );
+ this.groupBox2.Controls.Add( this.label6 );
+ this.groupBox2.Controls.Add( this.txtInputInstanceName );
+ this.groupBox2.Controls.Add( this.lblSchemaName );
+ this.groupBox2.Controls.Add( this.txtInputSchemaLocation );
+ this.groupBox2.Location = new System.Drawing.Point( 8, 8 );
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size( 720, 160 );
+ this.groupBox2.TabIndex = 22;
+ this.groupBox2.TabStop = false;
+ //
+ // label10
+ //
+ this.label10.Location = new System.Drawing.Point( 567, 85 );
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size( 56, 16 );
+ this.label10.TabIndex = 34;
+ this.label10.Text = "Iterations:";
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point( 16, 16 );
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size( 96, 16 );
+ this.label5.TabIndex = 33;
+ this.label5.Text = "Query Direction";
+ //
+ // txtIterations
+ //
+ this.txtIterations.Location = new System.Drawing.Point( 624, 80 );
+ this.txtIterations.MaxLength = 4;
+ this.txtIterations.Name = "txtIterations";
+ this.txtIterations.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
+ this.txtIterations.Size = new System.Drawing.Size( 32, 21 );
+ this.txtIterations.TabIndex = 32;
+ this.txtIterations.Text = "1";
+ //
+ // rdoSend
+ //
+ this.rdoSend.Checked = true;
+ this.rdoSend.Location = new System.Drawing.Point( 24, 40 );
+ this.rdoSend.Name = "rdoSend";
+ this.rdoSend.Size = new System.Drawing.Size( 136, 16 );
+ this.rdoSend.TabIndex = 31;
+ this.rdoSend.TabStop = true;
+ this.rdoSend.Text = "Send Query";
+ this.rdoSend.CheckedChanged += new System.EventHandler( this.rdoSend_CheckedChanged );
+ //
+ // rdoReceive
+ //
+ this.rdoReceive.Location = new System.Drawing.Point( 24, 64 );
+ this.rdoReceive.Name = "rdoReceive";
+ this.rdoReceive.Size = new System.Drawing.Size( 144, 16 );
+ this.rdoReceive.TabIndex = 30;
+ this.rdoReceive.Text = "Receive Query";
+ this.rdoReceive.CheckedChanged += new System.EventHandler( this.rdoReceive_CheckedChanged );
+ //
+ // btnConnection
+ //
+ this.btnConnection.Location = new System.Drawing.Point( 504, 128 );
+ this.btnConnection.Name = "btnConnection";
+ this.btnConnection.Size = new System.Drawing.Size( 32, 24 );
+ this.btnConnection.TabIndex = 29;
+ this.btnConnection.Text = "...";
+ this.btnConnection.Click += new System.EventHandler( this.btnConnection_Click );
+ //
+ // label9
+ //
+ this.label9.Location = new System.Drawing.Point( 200, 112 );
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size( 200, 16 );
+ this.label9.TabIndex = 28;
+ this.label9.Text = "Connection String:";
+ //
+ // txtConnectionString
+ //
+ this.txtConnectionString.Location = new System.Drawing.Point( 200, 128 );
+ this.txtConnectionString.Name = "txtConnectionString";
+ this.txtConnectionString.Size = new System.Drawing.Size( 304, 21 );
+ this.txtConnectionString.TabIndex = 27;
+ //
+ // btnExecuteQuery
+ //
+ this.btnExecuteQuery.Location = new System.Drawing.Point( 568, 24 );
+ this.btnExecuteQuery.Name = "btnExecuteQuery";
+ this.btnExecuteQuery.Size = new System.Drawing.Size( 136, 32 );
+ this.btnExecuteQuery.TabIndex = 26;
+ this.btnExecuteQuery.Text = "Run Query";
+ this.btnExecuteQuery.Click += new System.EventHandler( this.btnExecuteQuery_Click );
+ //
+ // btnInputInst
+ //
+ this.btnInputInst.Location = new System.Drawing.Point( 504, 80 );
+ this.btnInputInst.Name = "btnInputInst";
+ this.btnInputInst.Size = new System.Drawing.Size( 32, 24 );
+ this.btnInputInst.TabIndex = 25;
+ this.btnInputInst.Text = "...";
+ this.btnInputInst.Click += new System.EventHandler( this.btnInputInst_Click );
+ //
+ // btnSchemaName
+ //
+ this.btnSchemaName.Location = new System.Drawing.Point( 504, 32 );
+ this.btnSchemaName.Name = "btnSchemaName";
+ this.btnSchemaName.Size = new System.Drawing.Size( 32, 24 );
+ this.btnSchemaName.TabIndex = 24;
+ this.btnSchemaName.Text = "...";
+ this.btnSchemaName.Click += new System.EventHandler( this.btnSchemaName_Click );
+ //
+ // label6
+ //
+ this.label6.Location = new System.Drawing.Point( 200, 64 );
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size( 178, 16 );
+ this.label6.TabIndex = 23;
+ this.label6.Text = "Input Instance Name:";
+ //
+ // txtInputInstanceName
+ //
+ this.txtInputInstanceName.Location = new System.Drawing.Point( 200, 80 );
+ this.txtInputInstanceName.Name = "txtInputInstanceName";
+ this.txtInputInstanceName.Size = new System.Drawing.Size( 304, 21 );
+ this.txtInputInstanceName.TabIndex = 22;
+ //
+ // lblSchemaName
+ //
+ this.lblSchemaName.Location = new System.Drawing.Point( 200, 16 );
+ this.lblSchemaName.Name = "lblSchemaName";
+ this.lblSchemaName.Size = new System.Drawing.Size( 151, 16 );
+ this.lblSchemaName.TabIndex = 21;
+ this.lblSchemaName.Text = "Input Schema Name:";
+ //
+ // txtInputSchemaLocation
+ //
+ this.txtInputSchemaLocation.Location = new System.Drawing.Point( 200, 32 );
+ this.txtInputSchemaLocation.Name = "txtInputSchemaLocation";
+ this.txtInputSchemaLocation.Size = new System.Drawing.Size( 304, 21 );
+ this.txtInputSchemaLocation.TabIndex = 20;
+ //
+ // TestForm
+ //
+ this.AutoScaleBaseSize = new System.Drawing.Size( 5, 14 );
+ this.ClientSize = new System.Drawing.Size( 744, 589 );
+ this.Controls.Add( this.tabControl1 );
+ this.Font = new System.Drawing.Font( "Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ( ( byte )( 0 ) ) );
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.MaximizeBox = false;
+ this.Name = "TestForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "BizTalk ODBC Adapter Test Harness";
+ this.tabControl1.ResumeLayout( false );
+ this.tpSchemaWizard.ResumeLayout( false );
+ this.tpSchemaWizard.PerformLayout( );
+ this.tpQueryEngine.ResumeLayout( false );
+ this.tpQueryEngine.PerformLayout( );
+ this.groupBox2.ResumeLayout( false );
+ this.groupBox2.PerformLayout( );
+ this.ResumeLayout( false );
+
+ }
+ #endregion
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main( )
+ {
+ Application.Run( new TestForm( ) );
+ }
+
+ private void button2_Click( object sender, System.EventArgs e )
+ {
+ ODBCAdapterWizardForm x = new ODBCAdapterWizardForm( );
+ x.Start( );
+ x.ShowDialog( this );
+ txtInputSchema.Text = x.strInputSchema;
+ txtOutputSchema.Text = x.strOutputSchema;
+ txtSQLStatement.Text = x.strGeneratedScript;
+
+ BTSODBCQueryEngine queryEngine = new BTSODBCQueryEngine( );
+ queryEngine.ConnectionString = x.strDBConnection;
+
+ queryEngine.RootNode = x.strOutputRoot;
+ queryEngine.BeginTransaction( System.Data.IsolationLevel.ReadUncommitted );
+
+ queryEngine.BTSExecuteODBCCallFromSQL( x.strGeneratedScript );
+
+ queryEngine.Commit( );
+ }
+
+ private void btnSchemaName_Click( object sender, System.EventArgs e )
+ {
+ digOpenFile.CheckFileExists = true;
+ digOpenFile.Filter = "Schema file (*.xsd)|*.xsd";
+ DialogResult result = digOpenFile.ShowDialog( this );
+
+ if ( result == DialogResult.OK )
+ {
+ txtInputSchemaLocation.Text = digOpenFile.FileName;
+ }
+ }
+
+ private void btnExecuteQuery_Click( object sender, System.EventArgs e )
+ {
+ //Validate a few things
+ if ( txtInputSchemaLocation.Text == "" )
+ {
+ MessageBox.Show( "You must select a schema!", "ODBC Adapter Test Harness" );
+ return;
+ }
+ else if ( txtConnectionString.Text == "" )
+ {
+ MessageBox.Show( "You must select or enter and ODBC connection string!", "ODBC Adapter Test Harness" );
+ return;
+ }
+
+ if ( rdoSend.Checked )
+ {
+ if ( txtInputInstanceName.Text == "" )
+ {
+ MessageBox.Show( "You must select a XML input document that matches your selected schema", "ODBC Adapter Test Harness" );
+ return;
+ }
+ }
+
+ try
+ {
+ BTSODBCQueryEngine QueryEngine = new BTSODBCQueryEngine( );
+ QueryEngine.ConnectionString = txtConnectionString.Text;
+
+ XmlDocument xmlSchema = new XmlDocument( );
+ xmlSchema.Load( txtInputSchemaLocation.Text );
+
+ int iterations = System.Convert.ToInt32( txtIterations.Text );
+
+ if ( rdoReceive.Checked )
+ {
+ StringReader sr = new StringReader( xmlSchema.OuterXml );
+ XmlSchema xsdQueryConfiguration = XmlSchema.Read( sr, null );
+
+ for ( int cnt = 0; cnt < iterations; cnt++ )
+ {
+ QueryEngine.RootNode = GetFirstStatement( xsdQueryConfiguration, "ResponseRootName" );
+ QueryEngine.Namespace = GetFirstStatement( xsdQueryConfiguration, "ResponseNS" ) + QueryEngine.RootNode;
+
+ XmlTextReader xtr = new XmlTextReader( sr );
+
+ Stream str = ( Stream )QueryEngine.BTSExecuteODBCCallFromSQL( GetFirstStatement( xsdQueryConfiguration, "ODBCCMD" ) );
+ str.Seek( 0, SeekOrigin.Begin );
+
+ StreamReader stReader = new StreamReader( str );
+ txtQueryResults.Text = stReader.ReadToEnd( );
+ }
+ }
+ else
+ {
+ StreamReader sr = new StreamReader( txtInputInstanceName.Text );
+
+ for ( int cnt = 0; cnt < iterations; cnt++ )
+ {
+
+ XmlTextReader xtr = new XmlTextReader( sr );
+
+
+ Stream str = ( Stream )QueryEngine.BTSExecuteODBCCallFromSchema( xtr, xmlSchema.OuterXml );
+ str.Seek( 0, SeekOrigin.Begin );
+
+ StreamReader stReader = new StreamReader( str );
+ txtQueryResults.Text = stReader.ReadToEnd( );
+
+ }
+
+ sr.Close( );
+ }
+
+ if ( txtQueryResults.Text == "" )
+ txtQueryResults.Text = "No Results were Returned";
+ else
+ MessageBox.Show( "Query Processing Complete!" );
+
+ }
+ catch ( Exception testex )
+ {
+ MessageBox.Show( "Your tested failed: " + testex.Message + " " + testex.InnerException, "ODBC Adapter Test Harness" );
+ }
+ }
+
+ private void btnInputInst_Click( object sender, System.EventArgs e )
+ {
+ digOpenFile.CheckFileExists = true;
+ digOpenFile.Filter = "Schema file (*.xml)|*.xml";
+ DialogResult result = digOpenFile.ShowDialog( this );
+
+ if ( result == DialogResult.OK )
+ {
+ txtInputInstanceName.Text = digOpenFile.FileName;
+ }
+ }
+
+ private void btnConnection_Click( object sender, System.EventArgs e )
+ {
+ ODBCDriverUI diODBCConnection = new ODBCDriverUI( );
+ txtConnectionString.Text = diODBCConnection.GetDSN( );
+ }
+
+ private void rdoReceive_CheckedChanged( object sender, System.EventArgs e )
+ {
+ lblSchemaName.Text = "Receive Schema Name";
+ txtInputInstanceName.Enabled = false;
+ btnInputInst.Enabled = false;
+ }
+
+ private void rdoSend_CheckedChanged( object sender, System.EventArgs e )
+ {
+ lblSchemaName.Text = "Input Schema Name:";
+ txtInputInstanceName.Enabled = true;
+ btnInputInst.Enabled = true;
+ }
+
+ private string GetFirstStatement( XmlSchemaObject parent, string LocalName )
+ {
+ if ( parent is XmlSchemaAppInfo )
+ {
+ foreach ( XmlNode child in ( ( XmlSchemaAppInfo )parent ).Markup )
+ {
+ if ( child.LocalName == LocalName )
+ {
+ XmlAttribute att = child.Attributes[ "value" ];
+ if ( null != child.InnerText )
+ return child.InnerText;
+ }
+ }
+ return null;
+ }
+ else if ( parent is XmlSchema )
+ foreach ( XmlSchemaObject child in ( ( XmlSchema )parent ).Items )
+ {
+ string result = GetFirstStatement( child, LocalName );
+ if ( result != null )
+ return result;
+ }
+ else if ( parent is XmlSchemaAnnotation )
+ foreach ( XmlSchemaObject child in ( ( XmlSchemaAnnotation )parent ).Items )
+ {
+ string result = GetFirstStatement( child, LocalName );
+ if ( result != null )
+ return result;
+ }
+ return null;
+ }
+
+ private void button1_Click( object sender, System.EventArgs e )
+ {
+ try
+ {
+ ODBCAdapterWizardForm x = new ODBCAdapterWizardForm( );
+ x.Start( );
+ x.ShowDialog( this );
+ txtInputSchema.Text = x.strInputSchema;
+ txtOutputSchema.Text = x.strOutputSchema;
+ txtSQLStatement.Text = x.strGeneratedScript;
+ }
+ catch ( Exception x )
+ {
+ MessageBox.Show( x.Message );
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestForm.resx b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestForm.resx
new file mode 100644
index 00000000..581f5319
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestForm.resx
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+ 175, 17
+
+
+ 119
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestHarness.csproj b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestHarness.csproj
new file mode 100644
index 00000000..575c2340
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/TestHarness.csproj
@@ -0,0 +1,195 @@
+
+
+
+ Local
+ 9.0.30729
+ 2.0
+ {21B99320-0A35-4B38-B876-C090D198795E}
+ Debug
+ AnyCPU
+
+
+
+
+ Microsoft.BizTalk.Adapters.ODBC.TestHarness
+ ODBCAdapter.snk
+ JScript
+ Grid
+ IE50
+ false
+ WinExe
+ Microsoft.BizTalk.Adapters.ODBC
+ OnBuildSuccess
+
+
+
+
+
+
+ true
+ 3.5
+
+
+
+
+
+
+
+
+ false
+ v4.0
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ true
+
+
+
+ bin\Debug\
+ false
+ 285212672
+ false
+
+
+ DEBUG;TRACE
+
+
+ true
+ 4096
+ false
+
+
+ false
+ false
+ false
+ false
+ 4
+ full
+ prompt
+ AllRules.ruleset
+
+
+ bin\Release\
+ false
+ 285212672
+ false
+
+
+ TRACE
+
+
+ false
+ 4096
+ false
+
+
+ true
+ false
+ false
+ false
+ 4
+ none
+ prompt
+ AllRules.ruleset
+
+
+
+ System
+
+
+
+ System.Data
+
+
+ System.Drawing
+
+
+
+ System.Windows.Forms
+
+
+ System.XML
+
+
+ {6EF6BB4C-9417-4CAE-990D-49F1F368284B}
+ ODBCBaseAdapter
+
+
+ {F25132D9-07AA-4B41-90AD-828E54704692}
+ ODBCDriverPrompt
+
+
+ ODBCQueryProcessor
+ {516F27B0-23E4-4704-9A86-A5064769522A}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ ODBCSchemaWizard
+ {3BCB956F-E5FB-4D40-9090-8E44E92C5353}
+ {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+
+
+ Code
+
+
+ Form
+
+
+ Code
+
+
+ TestForm.cs
+ Designer
+
+
+
+
+
+
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 2.0 %28x86%29
+ true
+
+
+ False
+ .NET Framework 3.0 %28x86%29
+ false
+
+
+ False
+ .NET Framework 3.5
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/Validator.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/Validator.cs
new file mode 100644
index 00000000..86558392
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/Validator.cs
@@ -0,0 +1,178 @@
+//---------------------------------------------------------------------
+// File: Validator.cs
+//
+// Summary: Implementation of an adapter framework sample adapter using the ODBC provider for ADO.NET.
+//
+// Sample: Adapter framework runtime adapter.
+//
+//---------------------------------------------------------------------
+// This file is part of the Microsoft BizTalk Server 2004 SDK
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+// This source code is intended only as a supplement to Microsoft BizTalk
+// Server 2004 release and/or on-line documentation. See these other
+// materials for detailed information regarding Microsoft code samples.
+//
+// THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
+// KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
+// PURPOSE.
+//---------------------------------------------------------------------
+using System;
+using System.Runtime.Serialization;
+using System.Diagnostics;
+using System.Xml.Schema;
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ ///
+ /// Validator class handles validation for connection string, root element name and target namespace
+ ///
+ public class Validator
+ {
+ public static void ValidateXlangKeyword( string input )
+ {
+ #region Reserved Xlang Keywords
+
+ string[ ] reservedXlangKeywords = { "activate",
+ "atomic",
+ "body",
+ "call",
+ "catch",
+ "checked",
+ "compensate",
+ "compensation",
+ "construct",
+ "correlation",
+ "correlationtype",
+ "delay",
+ "dynamic",
+ "else",
+ "exceptions",
+ "exec",
+ "exists",
+ "false",
+ "if",
+ "implements",
+ "initialize",
+ "internal",
+ "link",
+ "listen",
+ "longrunning",
+ "message",
+ "messagetype",
+ "method",
+ "module",
+ "new",
+ "null",
+ "oneway",
+ "out",
+ "parallel",
+ "port",
+ "porttype",
+ "private",
+ "public",
+ "receive",
+ "ref",
+ "request",
+ "requestresponse",
+ "response",
+ "scope",
+ "send",
+ "service",
+ "servicelink",
+ "servicelinktype",
+ "source",
+ "succeeded",
+ "suppressfailure",
+ "suspend",
+ "target",
+ "task",
+ "terminate",
+ "throw",
+ "timeout",
+ "transaction",
+ "transform",
+ "true",
+ "unchecked",
+ "until",
+ "uses",
+ "using",
+ "while",
+ "xpath",
+ };
+
+ #endregion
+
+ for ( int i = 0; i < reservedXlangKeywords.Length; i++ )
+ if ( input == reservedXlangKeywords[ i ] )
+ throw new SqlValidationException( "You are using a BizTalk reserver word as part of you naming convention" );
+ }
+
+ public static void ValidateRootElementName( string input )
+ {
+ char[ ] invalidChars = { '>', '<', '\'', '\"', '&', ':' };
+ if ( input.IndexOfAny( invalidChars ) >= 0 )
+ throw new SqlValidationException( "You are using invalid characters in your root element name" );
+ ValidateXlangKeyword( input );
+ }
+
+ public static void ValidateTargetNamespace( string input )
+ {
+ XmlSchema xs = new XmlSchema( );
+ xs.TargetNamespace = input;
+
+ XmlSchemaSet xsSet = new XmlSchemaSet( );
+ xsSet.ValidationEventHandler += new ValidationEventHandler( ValidationHandler );
+ xsSet.Add( xs );
+ xsSet.Compile( );
+
+ ValidateXlangKeyword( input );
+ }
+
+ public static void ValidationHandler( object sender, ValidationEventArgs args )
+ {
+ throw new SqlValidationException( "Validation Error: " + "\n" + args.Message );
+ }
+
+ public static void ValidateConnectionString( string input )
+ {
+ if ( input.Length == 0 )
+ throw new SqlValidationException( "Connection string validation error" );
+
+ /* OleDbConnection myConnection = null;
+ try
+ {
+ myConnection = new OleDbConnection(input);
+ myConnection.Open();
+ myConnection.Close();
+ }
+ catch(Exception e)
+ {
+ throw new SqlValidationException(ODBCResourceHandler.GetResourceString("ValidationConnectionError")+" "+e.Message);
+ }
+ finally
+ {
+ if (myConnection != null)
+ myConnection.Close();
+ }
+ */
+ }
+ }
+
+ [Serializable( )]
+ public class SqlValidationException : Exception
+ {
+ public SqlValidationException( ) { }
+
+ public SqlValidationException( string s, Exception e ) : base( s, e ) { }
+
+ protected SqlValidationException( SerializationInfo si, StreamingContext sc ) : base( si, sc ) { }
+
+ public SqlValidationException( string errorMsg ) : base( errorMsg )
+ {
+ this.Source = "ODBC Adapter Admin";
+ }
+ }
+}
\ No newline at end of file
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/app.config b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/app.config
new file mode 100644
index 00000000..e3656033
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/app.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/odbcCommandHelper.cs b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/odbcCommandHelper.cs
new file mode 100644
index 00000000..1d790670
--- /dev/null
+++ b/BizTalk Server/Adapters/Community Adapter for ODBC/Source Code/TestHarness/odbcCommandHelper.cs
@@ -0,0 +1,636 @@
+using System;
+using System.Data;
+using System.Data.Odbc;
+using System.Collections;
+using System.Xml;
+using System.Xml.Schema;
+using System.IO;
+using System.Text;
+
+
+namespace Microsoft.BizTalk.Adapters.ODBC
+{
+ ///
+ /// Summary description for odbcCommandHelper.
+ ///
+ public class odbcCommandHelper
+ {
+ public odbcCommandHelper()
+ {
+ //
+ // TODO: Add constructor logic here
+ //
+ }
+
+ public string InputSchema = ""; // FIX THIS: SHould be read only
+ public string OutputSchema = "";// FIX THIS: SHould be read only
+ public AdapterCommandType QueryCommandType = AdapterCommandType.SQL;
+ public AdapterStatementType QueryStatementType = AdapterStatementType.SELECT;
+
+ public enum AdapterCommandType
+ {
+ SQL,
+ StoredProcedure
+ }
+
+ public enum PortType
+ {
+ Receive,
+ Send
+ }
+
+ public enum AdapterStatementType
+ {
+ INSERT,
+ UPDATE,
+ DELETE,
+ SELECT
+ }
+
+ private string m_strDBConnection = string.Empty;
+ private string m_strScript = string.Empty;
+ private string m_strTableName = string.Empty;
+ private AdapterStatementType m_statementType = AdapterStatementType.SELECT;
+ private AdapterCommandType m_updateType;//FIX THIS
+ private PortType m_portType;
+ private string m_strInputRoot = string.Empty;
+ private string m_strOutputRoot = string.Empty;
+ private string m_strSPName = string.Empty;
+ private string m_strTargetNamespace = string.Empty;
+ private string m_strGeneratedScript = string.Empty;
+ private string m_strWSDL = string.Empty;
+ #region properties
+
+ public string strDBConnection
+ {
+ get { return m_strDBConnection ; }
+ set { m_strDBConnection = value; }
+ }
+
+ public string strScript
+ {
+ get { return m_strScript ; }
+ set { m_strScript = value; }
+ }
+
+ public string strTableName
+ {
+ get { return m_strTableName ; }
+ set { m_strTableName = value; }
+ }
+
+ public AdapterStatementType SQLScriptType
+ {
+ get { return m_statementType ; }
+ set { m_statementType = value; }
+ }
+
+ public AdapterCommandType UpdategramType // FIX THIS:
+ {
+ get { return m_updateType ; }
+ set { m_updateType = value; }
+ }
+
+ public PortType portType
+ {
+ get { return m_portType ; }
+ set { m_portType = value; }
+ }
+
+ public string strInputRoot
+ {
+ get { return m_strInputRoot ; }
+ set { m_strInputRoot = value; }
+ }
+
+ public string strOutputRoot
+ {
+ get { return m_strOutputRoot ; }
+ set { m_strOutputRoot = value; }
+ }
+
+ public string strSPName
+ {
+ get { return m_strSPName ; }
+ set { m_strSPName = value; }
+ }
+
+ public string strTargetNamespace
+ {
+ get { return m_strTargetNamespace ; }
+ set { m_strTargetNamespace = value; }
+ }
+
+ public string strGeneratedScript
+ {
+ get { return m_strGeneratedScript ; }
+ set { m_strGeneratedScript = value; }
+ }
+
+ public string strWSDL
+ {
+ get { return m_strWSDL; }
+ set { m_strWSDL = value; }
+ }
+# endregion
+
+
+ public DataSet ExtractODBCParametersSchema(OdbcCommand odbcCmd, string SchemaElementName)
+ {
+ DataSet dsCommand = new DataSet("Command");
+ DataTable dtParameters = new DataTable(SchemaElementName);
+
+ //Loop throught the ODBC Command object looking for in parameters
+ foreach(OdbcParameter odbcParam in odbcCmd.Parameters)
+ {
+
+ //Build a Data Set based on the parameters so we can let ADO.NET
+ //Take care of the type conversion between Database and XML
+
+ //We are buiding the inbound schema so we don't want out parameters
+ if(odbcParam.Direction == ParameterDirection.Input || odbcParam.Direction == ParameterDirection.InputOutput)
+ {
+ DataColumn dcParameter = new DataColumn(odbcParam.ParameterName.Replace("@",""),Type.GetType("System.String"),"",MappingType.Attribute);
+ dtParameters.Columns.Add(dcParameter);
+ }
+
+ }
+
+ dsCommand.Tables.Add(dtParameters);
+
+ //Get the parameters schema out of the data set
+ return dsCommand;
+ }
+ public string ExtractODBCParametersSchema(OdbcCommand odbcCmd)
+ {
+ XmlSchema xsBTSInboundMsg = new XmlSchema();
+
+ //Create a stringwriter for output
+ //FileStream file = new FileStream (FileName, FileMode.Create, FileAccess.ReadWrite);
+ //XmlTextWriter myXmlWriter = new XmlTextWriter (file, new UTF8Encoding());
+
+ // Setup schema formatting
+ //myXmlWriter.Formatting = Formatting.Indented;
+ //myXmlWriter.Indentation = 2;
+
+ xsBTSInboundMsg.AttributeFormDefault = XmlSchemaForm.Unqualified;
+ xsBTSInboundMsg.ElementFormDefault = XmlSchemaForm.Qualified;
+
+ xsBTSInboundMsg.TargetNamespace = m_strTargetNamespace; //"http://ODBCADAPTERTEST.com"; //FIX THIS: needs to be a parameter
+ xsBTSInboundMsg.Namespaces.Add("msbtsodbc", "http://schemas.microsoft.com/BizTalk/2003");
+ //====================== SCHEMA ANNOTATION ================================
+ // Create the Schema object necessary to contain the annotation info
+ // this section will contain the SQL statements that the adapter processes
+
+ //
+ //
+ // SELECT * FROM DEMO WHERE DEI = @DEI
+ // SELECT * FROM DEMO WHERE DEI = ?
+ //
+ //
+
+ XmlSchemaAnnotation xsAnnotation = new XmlSchemaAnnotation();
+ XmlSchemaAppInfo xsAppInfo = new XmlSchemaAppInfo();
+
+ // AppInfo class uses an array of nodes to contain config data
+ // so we need to use the XMLDOM to create these nodes
+ XmlDocument xmlWorkingDoc = new XmlDocument();
+
+ XmlNode[] xmlNodeAdapterConfig = new XmlNode[2];
+
+ // Save out the query with parameter information
+ xmlNodeAdapterConfig[0] = xmlWorkingDoc.CreateNode(XmlNodeType.Element ,"msbtsodbc","SQLCMD","http://schemas.microsoft.com/BizTalk/2003");
+ xmlNodeAdapterConfig[0].InnerText = m_strScript;
+
+ // Save out generic query with ODBC escape sequence
+ xmlNodeAdapterConfig[1] = xmlWorkingDoc.CreateNode(XmlNodeType.Element ,"msbtsodbc","ODBCCMD","http://schemas.microsoft.com/BizTalk/2003");
+ xmlNodeAdapterConfig[1].InnerText = odbcCmd.CommandText;
+
+ // Write the configuration to the schema
+ xsBTSInboundMsg.Items.Add(xsAnnotation);
+ xsAnnotation.Items.Add(xsAppInfo);
+ xsAppInfo.Markup = xmlNodeAdapterConfig;
+
+ //==================== QUERY PARAMETERS SCHEMA SECTION ====================
+
+ XmlSchemaElement xsElementParameters = new XmlSchemaElement();
+ xsElementParameters.Name = m_strInputRoot;
+
+ XmlSchemaComplexType xsComplexType = new XmlSchemaComplexType();
+
+ xsBTSInboundMsg.Items.Add(xsElementParameters); //
+
+ xsElementParameters.SchemaType = xsComplexType; //
+
+ // Loop through the parameter section of the command object and create a
+ // schema attribute for each
+ //Loop throught the ODBC Command object looking for in parameters
+ foreach(OdbcParameter odbcParam in odbcCmd.Parameters)
+ {
+
+ XmlSchemaAttribute xsAttribute = new XmlSchemaAttribute();
+ xsAttribute.Name = odbcParam.ParameterName.Replace("@","");
+ xsAttribute.SchemaTypeName = ConvertODBCDataTypeToXMLDataType(odbcParam.OdbcType.ToString());
+
+ // SAVE Out the meta data for this parameter in an appinfo section of the schema
+ // this is done to deal with the name space problems we run into etx with special
+ // attributes
+ xsAnnotation = new XmlSchemaAnnotation(); // These vars were already define earlier
+ xsAppInfo = new XmlSchemaAppInfo();
+
+ // AppInfo class uses an array of nodes to contain config data
+ // so we need to use the XMLDOM to create these nodes
+ xmlWorkingDoc = new XmlDocument();
+
+ xmlNodeAdapterConfig = new XmlNode[3];
+
+ // Save out ODBC data type for parameter
+ xmlNodeAdapterConfig[0] = xmlWorkingDoc.CreateNode(XmlNodeType.Element ,"msbtsdbc","ParamType","http://schemas.microsoft.com/BizTalk/2003");
+ xmlNodeAdapterConfig[0].InnerText = odbcParam.OdbcType.ToString();
+
+ // Save out the parameter direction
+ xmlNodeAdapterConfig[1] = xmlWorkingDoc.CreateNode(XmlNodeType.Element ,"msbtsodbc","ParamDir","http://schemas.microsoft.com/BizTalk/2003");
+ xmlNodeAdapterConfig[1].InnerText = odbcParam.Direction.ToString();
+
+ // Save out the parameters data lenght
+ xmlNodeAdapterConfig[2] = xmlWorkingDoc.CreateNode(XmlNodeType.Element ,"msbtsodbc","ParamSize","http://schemas.microsoft.com/BizTalk/2003");
+ xmlNodeAdapterConfig[2].InnerText = odbcParam.Size.ToString();
+
+ // Write the configuration to the schema
+ xsAttribute.Annotation = xsAnnotation;
+ xsAnnotation.Items.Add(xsAppInfo);
+ xsAppInfo.Markup = xmlNodeAdapterConfig;
+
+ xsComplexType.Attributes.Add(xsAttribute); //
+
+ //
+ // etc...
+
+
+ }
+
+ // Save the schema to the provided file
+ //xsBTSInboundMsg.Write(myXmlWriter);
+ //file.Flush();
+ //file.Close();
+
+ // Get the schema string
+ StringBuilder sb = new StringBuilder();
+ StringWriter sw = new StringWriter(sb);
+ xsBTSInboundMsg.Write(sw);
+
+ string sReturnSchema = sb.ToString();
+
+ return sReturnSchema;
+ }
+
+ /*
+ * This function exists as the ODBC provider in .NET does not like
+ * named parameters as part of database calls. So we will convert
+ * the command parameters collection and command text into a generic SQL
+ * statement.
+ */
+ public string BuildSQLSPCommandString(OdbcCommand odbcCmd)
+ {
+ string sSQLCommand = ""; //{ @RC = CALL StoredProc(@Param1, @Param2)}
+ // This will be used to mapping to the XML
+ // durning transmission
+
+ string sGenericSPEscapeSequence = ""; //{ ? = CALL StoredProc(?, ?)}
+ // This will be the actual call made by the
+ // ODBC command object for the transmission
+
+ // The first parameter in the parameters collection normally
+ // maintains the return value
+ sSQLCommand = "{" + odbcCmd.Parameters[0].ParameterName + " = ";
+
+ sGenericSPEscapeSequence = "{? =";
+
+ //Embed the sp execute statement
+ sSQLCommand += "CALL " + odbcCmd.CommandText;
+ sGenericSPEscapeSequence += "CALL " + odbcCmd.CommandText;
+
+ //Set up for input parameters section of SP
+ sSQLCommand += "(";
+ sGenericSPEscapeSequence += "(";
+
+ //Now we loop thru the remaining parameters and build the SP statement
+ for(int cnt = 1;cnt < odbcCmd.Parameters.Count; cnt++ )
+ {
+ sSQLCommand += odbcCmd.Parameters[cnt].ParameterName;
+ sGenericSPEscapeSequence += "?";
+
+ if(cnt+1 < odbcCmd.Parameters.Count)
+ {
+ sSQLCommand += ",";
+ sGenericSPEscapeSequence += ",";
+ }
+ }
+
+ //Complete the statement syntax
+ sSQLCommand += ")}";
+ sGenericSPEscapeSequence += ")}";
+
+ m_strGeneratedScript = sGenericSPEscapeSequence;
+ return sGenericSPEscapeSequence;
+ }
+
+ public OdbcCommand GenerateODBCCommandFromSP(string sql)
+ {
+ //To resove the parameters for a given SP we need a live connection
+ OdbcConnection odbcCon = new OdbcConnection(m_strDBConnection);
+ OdbcCommand odbcCmd = new OdbcCommand(sql, odbcCon);
+
+ odbcCmd.CommandType = CommandType.StoredProcedure;
+
+ odbcCon.Open();
+
+ // Have the ODBC Namespace resolve the parameters
+ OdbcCommandBuilder.DeriveParameters(odbcCmd);
+
+ odbcCon.Close();
+
+ //Now we'll loop thur the parameters set some bogus test data
+ foreach(OdbcParameter odbcParam in odbcCmd.Parameters)
+ {
+ if(odbcParam.Direction == ParameterDirection.Input)
+ {
+ switch(odbcParam.OdbcType)
+ {
+ case OdbcType.DateTime:
+ odbcParam.Value = "'1/1/2001'";
+ break;
+ case OdbcType.Int:
+ odbcParam.Value ="1";
+ break;
+ case OdbcType.Text:
+ odbcParam.Value ="T";
+ break;
+ default:
+ odbcParam.Value = "1"; // This is just a guess on a value type that seems
+ break; // to work generically
+ }
+ }
+
+ }
+
+ // Now we need to process the command and generate a generic escape sequence for the SQL
+ // the ODBC provider does NOT like named parameters
+
+ odbcCmd.CommandText = BuildSQLSPCommandString(odbcCmd);
+
+ return odbcCmd;
+
+
+ }
+ public OdbcCommand GenerateODBCCommandFromSQL(string sql)
+ {
+ int iParamStartIndex = 0;
+ int iParamEndIndex = 1;
+ int iParamSize = 0;
+ string sParameterName = "";
+
+ // We need to conver the SQL sytax that the user provided to something
+ // that the ODBC namespace can handle:
+ // FROM:
+ // SELECT * FROM CUSTOMERS WHERER CUSTOMERID = @CUSTOMERID
+ // TO:
+ // SELECT * FROM CUSTOMERS WHERE CUSTOMERID = ?
+ // Thats what will be contained in the sODBCSQLEscapeSequence
+ string sODBCSQLEscapeSequence = sql;
+
+ //Get rid of the \r\n stuff and convert is to normal whitespace
+ //or we will end up with missing text
+ sql = sql.Replace("\r\n"," ");
+
+ OdbcConnection odbcCon = new OdbcConnection(m_strDBConnection);
+ OdbcCommand dbCmdODBC = new OdbcCommand();
+ dbCmdODBC.Connection = odbcCon;
+ dbCmdODBC.CommandType = CommandType.Text;
+
+ // Prep the command to deal with no spaces between commands etc
+ // (@VALUE1,@VALUE2)
+
+ sql = sql.Replace(","," ,");
+ sql = sql.Replace("("," (");
+ sql = sql.Replace(")"," )");
+
+ do
+ {
+ //Now we need to shread the SQL the user provided us with to pull out
+ //the parameters. These will be used to build in the input schema
+
+ // V
+ // SELECT * FROM CUSTOMERS WHERE CUSTOMERID = @CUSTOMERID AND.....
+ iParamStartIndex = sql.IndexOf("@",iParamEndIndex);
+
+ //If we run out of parameters get out of the loop
+ if(iParamStartIndex == -1)
+ break;
+//++++++ NEED TO ADD A SECTION OF TYPE OF QUERY UPDATE, SQL SP etc
+ // V
+ // SELECT * FROM CUSTOMERS WHERE CUSTOMERID = @CUSTOMERID AND.....
+ iParamEndIndex = sql.IndexOf(" ",iParamStartIndex);
+
+
+
+ //We could be at the end of the string so we need to check
+ if(iParamEndIndex == -1)
+ iParamEndIndex = sql.Length;
+
+ //Figure out how big the parameter term is so we only extract it from the string
+ iParamSize = iParamEndIndex - iParamStartIndex;
+ sParameterName = sql.Substring(iParamStartIndex,iParamSize);
+
+ // ========================= Process Parameters =======================
+ //Add a new parameter to our command object
+ OdbcParameter odbcParam = new OdbcParameter();
+
+ odbcParam.ParameterName = sParameterName;
+ odbcParam.Value = "1";
+ odbcParam.Direction = ParameterDirection.Input;
+ //odbcParam.DbType = CANT DETERMINE THIS!!!
+
+ dbCmdODBC.Parameters.Add(odbcParam);
+
+ //====================== Setup Generic Command SQL ====================
+ sODBCSQLEscapeSequence = sODBCSQLEscapeSequence.Replace(sParameterName,"?");
+ }
+ while(iParamEndIndex != sql.Length);
+
+ //Now set the command objects command text to our generic SQL
+ dbCmdODBC.CommandText = sODBCSQLEscapeSequence;
+
+ //Publish it up to the class level as a property
+ m_strGeneratedScript = sODBCSQLEscapeSequence;
+
+ return dbCmdODBC;
+ }
+ public string GenerateOutputSchema(OdbcCommand odbcCmd)
+ {
+ bool bOutParamsFound = false;
+
+ // Call the command to get the output schema
+ OdbcDataAdapter OdbcAdapter = new OdbcDataAdapter();
+
+ // Need to call a transaction to prevent writes during the generation
+ // of an output schema.
+ // We want to wrap this call in a transaction that we don't commit
+ odbcCmd.Connection.Open();
+ OdbcTransaction odbcTrans = odbcCmd.Connection.BeginTransaction();
+
+ odbcCmd.Transaction = odbcTrans;
+
+ OdbcAdapter.SelectCommand = odbcCmd;
+ DataSet custDS = new DataSet(m_strOutputRoot);
+
+ //Load the data set to get the output schema
+ OdbcAdapter.Fill(custDS);
+
+ // Throw away any junk we may have written
+ odbcTrans.Rollback();
+ odbcCmd.Connection.Close();
+
+ string xsResultsSchema = custDS.GetXmlSchema();
+
+ //Now we need to extend the schema to include any output parameters that are included
+ StringReader sr = new StringReader(xsResultsSchema);
+ //Load the data set schema into the XML Schema Objects
+ XmlSchema xsdQueryConfiguration = XmlSchema.Read(sr,null);
+
+
+ //Now we add a section for the return value and out parameters
+ //==================== QUERY PARAMETERS SCHEMA SECTION ====================
+
+ XmlSchemaElement xsElementParameters = new XmlSchemaElement();
+ xsElementParameters.Name = "OutParameters";
+
+ XmlSchemaComplexType xsComplexType = new XmlSchemaComplexType();
+
+ xsElementParameters.SchemaType = xsComplexType; //
+
+ // Loop through the parameter section of the command object and create a
+ // schema attribute for each
+ //Loop throught the ODBC Command object looking for in parameters
+ foreach(OdbcParameter odbcParam in odbcCmd.Parameters)
+ {
+ // We only want to create elements for out bound parameters since this is the
+ // adapters output schema
+ if(odbcParam.Direction != ParameterDirection.Input)
+ {
+ bOutParamsFound = true;
+ XmlSchemaAttribute xsAttribute = new XmlSchemaAttribute();
+ xsAttribute.Name = odbcParam.ParameterName.Replace("@","");
+ xsAttribute.SchemaTypeName = ConvertODBCDataTypeToXMLDataType(odbcParam.OdbcType.ToString());
+ xsComplexType.Attributes.Add(xsAttribute); //
+ }
+ }
+
+ // See if we need to add the out parameters section to the schema
+ if(bOutParamsFound)
+ {
+ xsdQueryConfiguration.Items.Add(xsElementParameters); //
+ }
+
+ // Get the schema string
+ StringBuilder sb = new StringBuilder();
+ StringWriter sw = new StringWriter(sb);
+ xsdQueryConfiguration.Write(sw);
+
+ string sReturnSchema = sb.ToString();
+
+ return sReturnSchema;
+
+ }
+ private XmlQualifiedName ConvertODBCDataTypeToXMLDataType(string ODBCDataType)
+ {
+ switch(ODBCDataType)
+ {
+ case "BigInt":
+ return new XmlQualifiedName("long","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Binary":
+ return new XmlQualifiedName("base64Binary","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Bit":
+ return new XmlQualifiedName("boolean","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Char":
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "DateTime":
+ return new XmlQualifiedName("dateTime","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Decimal":
+ return new XmlQualifiedName("decimal","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Double":
+ return new XmlQualifiedName("double","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Image":
+ return new XmlQualifiedName("base64Binary","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Int":
+ return new XmlQualifiedName("int","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "NChar":
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "NText":
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Numeric":
+ return new XmlQualifiedName("decimal","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "NVarChar":
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Real":
+ return new XmlQualifiedName("float","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "SmallInt":
+ return new XmlQualifiedName("short","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "Text":
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "TinyInt":
+ return new XmlQualifiedName("unsignedByte","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "UniqueIdentifier"://FIX THIS
+ return new XmlQualifiedName("long","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "VarBinary":
+ return new XmlQualifiedName("base64Binary","http://www.w3.org/2001/XMLSchema");
+ break;
+ case "VarChar":
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+ break;
+ default:
+ return new XmlQualifiedName("string","http://www.w3.org/2001/XMLSchema");
+
+
+ }
+ }
+ public bool CreateBizTalkSchema()
+ {
+ OdbcCommand OdbcCmd;
+ OdbcConnection OdbcCon = new OdbcConnection(m_strDBConnection);
+
+ if(QueryCommandType == AdapterCommandType.SQL)
+ {
+ OdbcCmd = this.GenerateODBCCommandFromSQL(m_strScript);
+ }
+ else
+ {
+ OdbcCmd = this.GenerateODBCCommandFromSP(m_strScript);
+ }
+
+ InputSchema = ExtractODBCParametersSchema(OdbcCmd);
+ OutputSchema = GenerateOutputSchema(OdbcCmd);
+
+
+ return true;
+ }
+ }
+}