]]> _ _ Public Class ScriptMain Inherits UserComponent ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Overrides Sub Input_ProcessInputRow(ByVal Row As InputBuffer) Try Dim teamId As Guid = New Guid(Row.Buffer(m_tiIndex).ToString()) Dim memberId As Guid = New Guid(Row.Buffer(m_miIndex).ToString()) If Not m_service2011 Is Nothing Then ' CRM 2011 Dim req As New CRM2011.OrganizationRequest req.RequestName = m_requestName req("TeamId") = teamId req("MemberIds") = New Guid() {memberId} ' Execute action. Call m_service2011.Execute(req) ElseIf Not m_service4 Is Nothing Then ' CRM 4.0 ' Execute action. Select Case Me.Action Case ActionTypes.Add Dim addReq As New CRM4.AddMembersTeamRequest addReq.TeamId = teamId addReq.MemberIds = New Guid() {memberId} Call m_service4.Execute(addReq) Case ActionTypes.Remove Dim removeReq As New CRM4.RemoveMembersTeamRequest removeReq.TeamId = teamId removeReq.MemberIds = New Guid() {memberId} Call m_service4.Execute(removeReq) Case Else Throw New ApplicationException("Unhandled action type.") End Select Else ' CRM 3.0 ' Execute action. Select Case Me.Action Case ActionTypes.Add Dim addReq As New CRM3.AddMembersTeamRequest addReq.TeamId = teamId addReq.MemberIds = New Guid() {memberId} Call m_service3.Execute(addReq) Case ActionTypes.Remove Dim removeReq As New CRM3.RemoveMembersTeamRequest removeReq.TeamId = teamId removeReq.MemberIds = New Guid() {memberId} Call m_service3.Execute(removeReq) Case Else Throw New ApplicationException("Unhandled action type.") End Select End If Catch ex As SoapException Call FireError_(ex.Detail.InnerXml) Catch ex As Exception Call FireError_(ex.Message) End Try End Sub ' Input_ProcessInputRow ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Overrides Sub PreExecute() Call MyBase.PreExecute() ' Setup CRM service. m_connection = CType( _ Me.Connections.CrmConnection.AcquireConnection(Nothing), _ ICrmConnection) Call m_connection.Connect() Dim service As Object = m_connection.GetService(0) ' 0 - CRM Service m_service2011 = TryCast(service, CRM2011.OrganizationServiceClient) If m_service2011 Is Nothing Then m_service4 = TryCast(service, CRM4.CrmService) If m_service4 Is Nothing Then m_service3 = TryCast(service, CRM3.CrmService) If m_service3 Is Nothing Then Throw New Exception("Unhandled service object.") End If End If End If ' Setup request for CRM 2011. Select Case Me.Action Case ActionTypes.Add m_requestName = "AddMembersTeam" Case ActionTypes.Remove m_requestName = "RemoveMembersTeam" Case Else Throw New ApplicationException("Unhandled action type.") End Select Dim input As IDTSInput90 = MyBase.ComponentMetaData.InputCollection(0) Dim inputCol As IDTSInputColumn90 ' Get input column indexes. inputCol = GetInputColumn_("TeamId") m_tiIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _ input.Buffer, _ inputCol.LineageID) inputCol = GetInputColumn_("MemberId") m_miIndex = Me.HostComponent.BufferManager.FindColumnByLineageID( _ input.Buffer, _ inputCol.LineageID) End Sub ' PreExecute ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Overrides Sub PostExecute() Call MyBase.PostExecute() Call m_connection.Close() m_tiIndex = -1 m_miIndex = -1 End Sub ' PostExecute ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Function Validate(ByRef errMessage As String) As Boolean Dim result As Boolean Try If String.IsNullOrEmpty(Me.CrmConnection) Then Throw New Exception("Select Dynamics CRM Connection.") End If Dim input As IDTSInput90 = Me.ComponentMetaData.InputCollection(0) If input.IsAttached AndAlso input.InputColumnCollection.Count < 2 Then Throw New Exception("Map input columns.") End If ' Store connection information in the runtime connection collection, too. ' Cannot directly use RuntimeConnectionCollection in the property get/set ' because of issues with multi-threading. Me.ComponentMetaData.RuntimeConnectionCollection("CrmConnection").ConnectionManagerID = Me.CrmConnection result = True Catch ex As Exception result = False errMessage = ex.Message End Try Validate = result End Function 'Validate ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Overrides Sub ReinitializeMetaData() Call MyBase.ReinitializeMetaData() If MyBase.ComponentMetaData.InputCollection.Count = 0 Then ' At least one input must exist. Throw New Exception("No inputs.") End If Dim input As IDTSInput90 = MyBase.ComponentMetaData.InputCollection(0) ' Cleanup. input.ExternalMetadataColumnCollection.IsUsed = True Call input.InputColumnCollection.RemoveAll() Call input.ExternalMetadataColumnCollection.RemoveAll() Dim column As IDTSExternalMetadataColumn90 ' Setup team id column. column = input.ExternalMetadataColumnCollection.[New]() column.Name = "TeamId" column.DataType = DataType.DT_GUID ' Setup member id column. column = input.ExternalMetadataColumnCollection.[New]() column.Name = "MemberId" column.DataType = DataType.DT_GUID End Sub ' ReinitializeMetaData #Region "Properties" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' _ _ Public Property CrmConnection() As String Get CrmConnection = m_crmConnection End Get Set(ByVal value As String) m_crmConnection = value End Set End Property ' CrmConnection ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' _ _ Public Property Action() As ActionTypes Get Action = m_action End Get Set(ByVal value As ActionTypes) m_action = value End Set End Property ' Action #End Region ' Properties #Region "Internals" ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private ReadOnly Property CrmConnectionType() As String() Get CrmConnectionType = New String() {"DYNAMICS-CRM"} End Get End Property ' CrmConnectionType ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub FireError_(ByVal message As String) Dim cancel As Boolean = False Call MyBase.ComponentMetaData.FireError( _ 0, _ "Dynamics CRM Team Members", _ message, _ String.Empty, _ 0, _ cancel) End Sub ' FireError_ ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function GetInputColumn_(ByVal externalName As String) As IDTSInputColumn90 Dim result As IDTSInputColumn90 = Nothing Dim input As IDTSInput90 = MyBase.ComponentMetaData.InputCollection(0) Dim extColumn As IDTSExternalMetadataColumn90 = input.ExternalMetadataColumnCollection(externalName) ' Find input column for specified external column. For Each inputCol As IDTSInputColumn90 In input.InputColumnCollection If inputCol.ExternalMetadataColumnID = extColumn.ID Then ' Found input column. result = inputCol Exit For End If Next If result Is Nothing Then Throw New Exception("Input column not found.") End If GetInputColumn_ = result End Function ' GetInputColumn_ #End Region ' Internals #Region "Attributes" Enum ActionTypes Add Remove End Enum ' ActionTypes Private m_crmConnection As String Private m_action As ActionTypes Private m_connection As ICrmConnection Private m_service2011 As CRM2011.OrganizationServiceClient Private m_service4 As CRM4.CrmService Private m_service3 As CRM3.CrmService Private m_requestName As String Private m_tiIndex As Integer Private m_miIndex As Integer #End Region ' Attributes End Class ' ScriptMain ]]> ScriptComponent_05a6c496c45c42c9963913db0b6084b4 true CozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea