O R G A N I C / F E R T I L I Z E R: miis - the promised code

May 3, 2005

miis - the promised code

Awhile back, I promised I'd post some sample code once I got the provisioning components working for simple sync for ADAM. I don't understand programming at all. I hack through scripts ... and that's about it. However, this isn't that far off from scripting I suppose. Most of the stuff you have to do is in the “Public Sub“ part. There's a simple select case statement to alter the container that the object is created in. That's really about it. Anyway, here it is:

Imports Microsoft.MetadirectoryServices

Public Class MVExtensionObject Implements IMVSynchronization

Public Sub Initialize() Implements IMvSynchronization.Initialize ' TODO: Add initialization code here End Sub

Public Sub Terminate() Implements IMvSynchronization.Terminate ' TODO: Add termination code here End Sub

Public Sub Provision(ByVal mventry As MVEntry) Implements IMVSynchronization.Provision ' TODO: Remove this throw statement if you implement this method Dim container As String Dim rdn As String Dim FabrikamADMA As ConnectedMA Dim numConnectors As Integer Dim myConnector As CSEntry Dim csentry As CSEntry Dim dn As ReferenceValue

' Ensure that the cn attribute is present. If Not mventry("cn").IsPresent Then Throw New UnexpectedDataException("cn attribute is not present.") End If

' Determine the container and relative distinguished name ' of the new connector space entry.

Select Case mventry.ObjectType.ToLower() Case "person" container = "CN=users,CN=MailObjects,CN=ironadam1,DC=adam" Case "user" container = "CN=users,CN=MailObjects,CN=ironadam1,DC=adam" Case "contact" container = "CN=contacts,CN=MailObjects,CN=ironadam1,DC=adam" Case "publicfolder" container = "CN=publicFolders,CN=MailObjects,CN=ironadam1,DC=adam" Case Else Throw New UnexpectedDataException( _ "Unhandled object type in provision" _ & "called with mventry " & mventry.ToString) End Select

rdn = "CN=" & mventry("cn").Value

FabrikamADMA = mventry.ConnectedMAs("Ironmail ADAM") dn = FabrikamADMA.EscapeDNComponent(rdn).Concat(container)

numConnectors = FabrikamADMA.Connectors.Count

' If there is no connector present, create a new connector. If 0 = numConnectors Then csentry = FabrikamADMA.Connectors.StartNewConnector("user") csentry.DN = dn csentry.CommitNewConnector()

ElseIf 1 = numConnectors Then ' Check if the connector has a different DN and rename if necessary. ' Get the connector. myConnector = FabrikamADMA.Connectors.ByIndex(0)

' Microsoft Identity Integration Server 2003 will rename/move if different, if not, nothing will happen. myConnector.DN = dn Else Throw New UnexpectedDataException("multiple connectors:" + numConnectors.ToString) End If End Sub

Public Function ShouldDeleteFromMV(ByVal csentry As CSEntry, ByVal mventry As MVEntry) As Boolean Implements IMVSynchronization.ShouldDeleteFromMV ' TODO: Add MV deletion code here Throw New EntryPointNotImplementedException End Function End Class