Microsoft Identity Integration Server 2003 Developer Reference |
You can duplicate the hierarchy of one connected data source in
another connected data source during the provisioning phase of
synchronization. The following example shows how this can be
accomplished. This example requires that the DN is flowed into the
objectDN
attribute in the metaverse during import
attribute flow.
Dim AFGALContainer As String Public Sub Provision(ByVal mventry As MVEntry) _ Implements IMVSynchronization.Provision Try Dim containerInfo As String Dim dn, finalValue As ReferenceValue Dim myConnector, csentry As CSEntry Dim numADConnectors As Integer Dim JDPMA As ConnectedMA = mventry.ConnectedMAs("AD-AMC") Dim dnValue As ReferenceValue = JDPMA.CreateDN(mventry("objectDN").Value) Dim depth As Integer = dnValue.Depth ' If there is no connector present, add a new AD connector ' and call a subroutine to set the initial values on the CS Object. numADConnectors = JDPMA.Connectors.Count If 0 = numADConnectors Then Dim adObjectType As String Select Case mventry.ObjectType.ToLower Case "person" adObjectType = "contact" finalValue = dnValue.Subcomponents(1, depth - 1) containerInfo = finalValue.ToString containerInfo = containerInfo.ToUpper containerInfo = containerInfo.Replace("CN=", "OU=") dn = JDPMA.CreateDN("CN=" + mventry("cn").Value + "," + containerInfo + "," + AFGALContainer) Case "container" adObjectType = "organizationalUnit" finalValue = dnValue.Subcomponents(0, depth - 1) containerInfo = finalValue.ToString containerInfo = containerInfo.ToUpper containerInfo = containerInfo.Replace("CN=", "OU=") dn = JDPMA.CreateDN(containerInfo + "," + AFGALContainer) Case "organizationalunit" adObjectType = "organizationalUnit" finalValue = dnValue.Subcomponents(0, depth - 1) containerInfo = finalValue.ToString containerInfo = containerInfo.ToUpper dn = JDPMA.CreateDN(containerInfo + "," + AFGALContainer) End Select csentry = JDPMA.Connectors.StartNewConnector(adObjectType) csentry.DN = dn csentry.CommitNewConnector() ElseIf 1 = numADConnectors Then ' Check if the connector has a different DN and rename if necessary. ' First get the connector. myConnector = JDPMA.Connectors.ByIndex(0) ' MMS will rename or move if different. myConnector.DN = dn Else Throw New UnexpectedDataException("multiple AD connectors:" + numADConnectors.ToString) End If Finally ' Add cleanup code End Try End Sub
string AFGALContainer = ""; void IMVSynchronization.Provision (MVEntry mventry) { try { string containerInfo; ReferenceValue dn = null, finalValue; CSEntry myConnector, csentry; int numADConnectors; ConnectedMA JDPMA = mventry.ConnectedMAs["AD-AMC"]; ReferenceValue dnValue = JDPMA.CreateDN(mventry["objectDN"].Value); int depth = dnValue.Depth; // If there is no connector present, add a new AD connector // and call a subroutine to set the initial values on the CS Object. numADConnectors = JDPMA.Connectors.Count; if(numADConnectors == 0) { string adObjectType = ""; switch(mventry.ObjectType.ToLower()) { case "person": adObjectType = "contact"; finalValue = dnValue.Subcomponents(1, depth - 1); containerInfo = finalValue.ToString(); containerInfo = containerInfo.ToUpper(); containerInfo = containerInfo.Replace("CN=", "OU="); dn = JDPMA.CreateDN("CN=" + mventry["cn"].Value + "," + containerInfo + "," + AFGALContainer); break; case "container": adObjectType = "organizationalUnit"; finalValue = dnValue.Subcomponents(0, depth - 1); containerInfo = finalValue.ToString(); containerInfo = containerInfo.ToUpper(); containerInfo = containerInfo.Replace("CN=", "OU="); dn = JDPMA.CreateDN(containerInfo + "," + AFGALContainer); break; case "organizationalunit": adObjectType = "organizationalUnit"; finalValue = dnValue.Subcomponents(0, depth - 1); containerInfo = finalValue.ToString(); containerInfo = containerInfo.ToUpper(); dn = JDPMA.CreateDN(containerInfo + "," + AFGALContainer); break; } csentry = JDPMA.Connectors.StartNewConnector(adObjectType); csentry.DN = dn; csentry.CommitNewConnector(); } else if(numADConnectors == 1) { // Check if the connector has a different DN and rename if necessary. // First get the connector. myConnector = JDPMA.Connectors.ByIndex[0]; // MIIS will rename or move if different. myConnector.DN = dn; } else { throw new UnexpectedDataException("multiple AD connectors:" + numADConnectors.ToString()); } } finally { // Add cleanup code } }