Microsoft Identity Integration Server 2003 Developer Reference

Example: Moving Objects for Metaverse Object Changes

The following example shows how to move an object within a hierarchy because of a change in a metaverse object. The example moves the object according to the value of the department attribute.

[Visual Basic .NET]
Public Sub Provision(ByVal mventry As MVEntry) _
   Implements IMVSynchronization.Provision

	Dim Container As String
	Dim ManagementAgent As ConnectedMA
	Dim RDN As String
	Dim DN As ReferenceValue
	Dim Connectors As Integer
	Dim csentry As CSEntry

	If mventry("EmployeeStatus").IsPresent Then
		If mventry("EmployeeStatus").Value.Equals("active") Then

			' Create the container string based on the value of
			' the department attribute.
			Select Case mventry("department").Value
				Case "Sales"
				Container = "ou=Sales,dc=fabrikam,dc=com"

				Case "Marketing"
				Container = "ou=Marketing,dc=fabrikam,dc=com"

				Case "Development"
				Container = "ou=Development,dc=fabrikam,dc=com"

				Case Else
				Container = "ou=Pending,dc=fabrikam,dc=com"

			End Select

		End If

		' Get the management agent connectors
		ManagementAgent = mventry.ConnectedMAs("Fabrikam AD MA")
		Connectors = ManagementAgent.Connectors.Count

		' Construct the distinguished name.
		RDN = "CN=" & mventry("cn").Value
		DN = ManagementAgent.EscapeDNComponent(RDN).Concat(Container)

		Connectors = ManagementAgent.Connectors.Count

		' If there are no connectors, start creating the new connector.
		' Set the distinguished name attribute and then finish
		' creating the new connector.
		If 0 = Connectors Then
			csentry = ManagementAgent.Connectors.StartNewConnector("user")
			csentry.DN = DN
			csentry.CommitNewConnector()

		' If a connector exists, get the existing connector and assign the new
		' distinguished name value.
		ElseIf 1 = Connectors Then
			' Get the first connector and assign a new DN.
			csentry = ManagementAgent.Connectors.ByIndex(0)
			csentry.DN = DN

		' Throw an exception if more than one connector exists
		Else
			Dim ExceptionMessage As String
			ExceptionMessage = "Multiple Connectors on Management Agent"
			Throw New UnexpectedDataException(ExceptionMessage)

		End If

	End If

End Sub
[C#]
void IMVSynchronization.Provision (MVEntry mventry)
{
   ConnectedMA ManagementAgent;  // Management agent object
   int Connectors = 0; 	 // Management agent connectors
   ReferenceValue DN; 		// Distinguished name attribute
   string Container; 		 // Container name
   string RDN ; 			// Relative distinguished name strings
   CSEntry csentry; 		// Connector space entry object

   // Determine the state of the metaverse object.   
   if(mventry["EmployeeStatus"].IsPresent)
   {
	if(mventry["EmployeeStatus"].Value.Equals("active"))
	{
		 // Create the container string based on the value of
		 // the department attribute
		 switch(mventry["department"].Value)
		 {
			case "Sales":
			 Container = "ou=Sales,dc=fabrikam,dc=com";
			 break;
		
			case "Marketing":
			 Container = "ou=Marketing,dc=fabrikam,dc=com";
			 break;
			 
			case "Development":
			 Container = "ou=Development,dc=fabrikam,dc=com";
			 break;
			 
			default:
			 Container = "ou=Pending,dc=fabrikam,dc=com";
			 break;  
		
		 }
		 
		 // Get the management agent connectors.
		 ManagementAgent = mventry.ConnectedMAs["Fabrikam AD MA"];
		 Connectors = ManagementAgent.Connectors.Count;
		 
		 // Construct the distinguished name.
		 RDN = "CN=" + mventry["cn"].Value;
		 DN = ManagementAgent.EscapeDNComponent(RDN).Concat(Container);

		 // If there are no connectors, start creating the new connector
		 // Set the distinguished name attribute and then finish 
		 // creating the new connector. 
		 if(0 == Connectors)
		 {
			csentry = ManagementAgent.Connectors.StartNewConnector("user");
			csentry.DN = DN;
			csentry.CommitNewConnector();
		 }

		 // If a connector exists, get the existing connector and assign the new 
		 // distinguished name value.
		 
		 if(1 == Connectors)
		 {
			csentry = ManagementAgent.Connectors.ByIndex[0];
			csentry.DN = DN;
		 }

			// Throw an exception if more than one connector exists.
		 else
		 {
			string ExceptionMessage; 
			ExceptionMessage = "Multiple Connectors on Management Agent";
			throw new UnexpectedDataException(ExceptionMessage);
		 }
}
   }
}

See Also

Moving Objects