]]> _
_
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_05a6c496c45c42c9963913db0b6084b4trueCozyRoc.SqlServer.SSIS.ScriptComponentHostPlus, CozyRoc.SSISPlus, Version=1.0.0.0, Culture=neutral, PublicKeyToken=16cf490bb80c34ea