Microsoft Identity Integration Server 2003 Developer Reference |
When you import objects from a connected system to the metaverse, the imported objects might have attribute values of a data type that you need to convert to a different data type to be compatible with other objects in the metaverse. You can use a rules extension to convert the type of the attribute when it is imported into the metaverse.
Not all conversions between data types are supported. For example, you cannot convert a Reference data type into a Boolean data type. The following table shows the supported conversions, where -> means "is converted to".
Original attribute type (Attrib.DataType property) | |||||
---|---|---|---|---|---|
Convert to: | Binary | Boolean | Integer | Reference | String |
Binary | Not necessary | If true, -> 1; if false, -> 0. | Supported | Not supported | Supported using Convert.FromBase64. |
Boolean | If all bytes 0, -> false; else -> true. | Not necessary | If 0, -> false; else -> true. | Not supported | If "true" or "1", -> true; if "false" or "0", -> false; else not supported. |
Integer | Throws exception if > 64 bits. | If true, -> 1; if false, -> 0. | Not necessary | Not supported | Supported using Integer.Parse(). |
Reference | Not supported | Not supported | Not supported | Not necessary | Supported using CreateDN(String) |
String | Supported using Convert.ToBase64. | If true, -> "true"; if false, -> "false". | Supported | Supported | Not necessary |
The following example shows how to convert an integer attribute data type to a formatted string before it is imported into the metaverse:
Public Sub MapAttributesForImport( _ ByVal FlowRuleName As String, _ ByVal csentry As CSEntry, _ ByVal mventry As MVEntry) _ Implements IMASynchronization.MapAttributesForImport Select Case FlowRuleName Case "employeeStart" ' employeeStart is an integer representing a date and time. ' The format is YYYYMMDDHHmmSS, where YYYY is the year, ' MM is the month, DD is the day, HH is the hour, mm is ' the minute, and SS is the seconds. If (Not csentry("employeeStart").DataType = AttributeType.Integer) Then throw new MetadirectoryServicesException("employeeStart must be an integer") End If Dim startString, year, month, day, hour, min, sec As String ' Value always returns a string. startString = csentry("employeeStart").Value year = startString.Substring( 0, 4) month = startString.Substring( 4, 2) day = startString.Substring( 6, 2) hour = startString.Substring( 8, 2) min = startString.Substring(10, 2) sec = startString.Substring(12, 2) Dim dt as DateTime dt = Convert.ToDateTime(month + "/" + _ day + "/" + _ year + " " + _ hour + ":" + _ min + ":" + _ sec) ' Renders 20030903113029 as ' 9/3/2003 11:30 AM mventry("employeeStart").Value = dt.ToShortDateString() + dt.ToShortTimeString() Case Else Throw New EntryPointNotImplementedException() End Select End Sub
void IMASynchronization.MapAttributesForImport (string FlowRuleName, CSEntry csentry, MVEntry mventry) { switch(FlowRuleName) { case "employeeStart": // employeeStart is an integer representing a date and time. // The format is YYYYMMDDHHmmSS, where YYYY is the year, // MM is the month, DD is the day, HH is the hour, mm is // the minute, and SS is the seconds. if(csentry["employeeStart"].DataType != AttributeType.Integer) { throw new MetadirectoryServicesException("employeeStart must be an integer"); } // Value always returns a string. string startString = csentry["employeeStart"].Value; string year = startString.Substring( 0, 4); string month = startString.Substring( 4, 2); string day = startString.Substring( 6, 2); string hour = startString.Substring( 8, 2); string min = startString.Substring(10, 2); string sec = startString.Substring(12, 2); DateTime dt = Convert.ToDateTime(month + "/" + day + "/" + year + " " + hour + ":" + min + ":" + sec); // Renders 20030903113029 as // 9/3/2003 11:30 AM mventry["employeeStart"].Value = dt.ToShortDateString() + dt.ToShortTimeString(); break; default: throw new EntryPointNotImplementedException(); } }