Become a Columnist Microsoft Exchange Site Microsoft Support SiteMSDN Exchange Site

   

Subscribe to OutlookExchange
Anderson Patricio
Ann Mc Donough
Bob Spurzem
Brian Veal
Catherine Creary
Cherry Beado
Colin Janssen
Collins Timothy Mutesaria
Drew Nicholson
Fred Volking
Glen Scales
Goran Husman
Guy Thomas
Henrik Walther
Jason Sherry
Jayme Bowers
John Young
Joyce Tang
Justin Braun
Konstantin Zheludev
Kristina Waters
Kuang Zhang
Mahmoud Magdy
Martin Tuip
Michael Dong
Michele Deo
Mitch Tulloch
Nicolas Blank
Pavel Nagaev
Ragnar Harper
Ricardo Silva
Richard Wakeman
Russ Iuliano
Santhosh Hanumanthappa
Steve Bryant
Steve Craig
Todd Walker
Tracey J. Rosenblath
 
 

MIIS Deployment for Exchange 5.5

Configure Attribute Flow

This step will likely take the most time and you should pay close attention to the detail. As we map fields from Exchange to the metaverse and visa-versa we have to pay close attention to the flow direction as well as any advanced rules we need to apply. As you will find out, standard mapping rules will allow us to meet our objectives. From the Configure Attribute Flow screen, you can see that we are configuring flow for all three object types we wish to synchronize.

To make things simple for this installation, we are importing each of the Exchange settings into a single object type called Metaverse_contact. Moreover, we are only exporting objects into the Exchange environment as Remote-Address (custom recipients) and only into a specific, pre-determined container. When specifying attribute flow, you choose the source, the target and the fields you wish to map. In addition, you can specify any advanced mapping type you wish to use. When using the advanced features, we can select more than one object type as a source and the source code we wish to use to handle the business logic. Let’s go over an example. You should notice that the mail field highlighted in the picture shows an Advanced mapping rule is in place. If we click Edit, we can see which rule is being identified.

From the advanced flow options window, we can see that a specific flow rule named “mail” is identified. This tells MIIS that when performing an import on this object, it should reference the extension DLL identified in this MA (we will get to that later in the document) and that the logic in that code should be applied to this flow.

 

 

Inside our extension DLL, we have a sub called:

  Public Sub MapAttributesForImport(ByVal FlowRuleName As String, ByVal csentry As Microsoft.MetadirectoryServices.CSEntry, ByVal mventry As Microsoft.MetadirectoryServices.MVEntry) Implements Microsoft.MetadirectoryServices.IMASynchronization.MapAttributesForImport

Within this sub, there are several import rules defined. This is the one named mail:

Case "mail"

                If csentry(FlowRuleName).IsPresent Then

                    Dim work As String = csentry(FlowRuleName).Value

                    work = Replace(work, "/", "")

                    work = Replace(work, "\", "")

                    mventry(FlowRuleName).Value = work

                End If

The purpose of this code is to cleanout illegal characters such as the “/” and “\” from the mail address (SMTP Address). An illegal address of Atlanta/sales@companya.com would be changed to atlantasales@companya.com. While the illegal characters would remain in the Exchange system, they would be clean in the metaverse and then legal to push to AD.

Export Attribute Flow (Send to Exchange from Metaverse)

Here are the current flow settings for the Exchange MA. You can see from this table, that we did not require specialized code to manipulate the data. Instead, we elected to clean the information during the import process so that data in the metaverse is “normalized”.  

Export Attribute Flow

Data Source Attribute

To

Metaverse Attribute

Mapping Type

Allow Nulls

Remote-Address

-

Metaverse_Contact

-

-

cn

<--

cn

Direct

-

givenName

<--

givenName

Direct

Allow

mail

<--

mail

Direct

-

uid

<--

uid

Direct

Allow

MAPI-Recipient

<--

MapiRecipient

Direct

Allow

otherMailbox

<--

proxyAddresses

Direct

-

sn

<--

sn

Direct

Allow

department

<--

department

Direct

Allow

Company

<--

company

Direct

Allow

initials

<--

initials

Direct

Allow

pager

<--

pager

Direct

Allow

title

<--

title

Direct

Allow

st

<--

st

Direct

Allow

postalCode

<--

postalCode

Direct

Allow

postalAddress

<--

streetAddress

Direct

Allow

l

<--

l

Direct

Allow

facsimileTelephoneNumber

<--

facsimileTelephoneNumber

Direct

Allow

mobile

<--

mobile

Direct

Allow

telephoneNumber

<--

telephoneNumber

Direct

Allow

physicalDeliveryOfficeName

<--

physicalDeliveryOfficeName

Direct

Allow

rdn

<--

uid

Direct

-

co

<--

c

Direct

Allow

Target-Address

<--

targetAddress

Direct

Allow

 

 

 

 

 

Import Attribute Flow (Send to Metaverse from Exchange)

Importing Exchange information into the metaverse required much more work in that we needed to reformat, clean and construct new fields based on information collected from other fields. In order to correctly populate the proxyaddresses attribute, we had to contruct the field based on three Exchange 5.5 fields; otherMailbox, rfc822Mailbox and textEncodedORaddress. Custom code was created to combine these strings into a collection in order to populate the multi-value field in the MV. To see the source code for the specific rules extensions, refer to the code section at the end of this document.

Import Attribute Flow

Data Source Attribute

To

Metaverse Attribute

Mapping Type

Precedence Order

organizationalPerson

-

Metaverse_Contact

-

-

cn

-->

cn

Direct

2

groupOfNames

-

Metaverse_Contact

-

-

cn

-->

cn

Direct

3

Remote-Address

-

Metaverse_Contact

-

-

cn

-->

cn

Direct

4

organizationalPerson

-

Metaverse_Contact

-

-

Company

-->

company

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

Company

-->

company

Direct

3

department

-->

department

Direct

2

mail

-->

mail

Rules Extension - mail

1

groupOfNames

-

Metaverse_Contact

-

-

mail

-->

mail

Rules Extension - mail

2

organizationalPerson

-

Metaverse_Contact

-

-

mail

-->

mail

Direct

3

co

-->

co

Direct

2

givenName

-->

givenName

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

givenName

-->

givenName

Direct

3

initials

-->

initials

Direct

2

organizationalPerson

-

Metaverse_Contact

-

-

mobile

-->

mobile

Direct

2

title

-->

title

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

title

-->

title

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

cn

-->

displayName

Direct

3

groupOfNames

-

Metaverse_Contact

-

-

cn

-->

displayName

Direct

4

Remote-Address

-

Metaverse_Contact

-

-

cn

-->

displayName

Direct

6

organizationalPerson

-

Metaverse_Contact

-

-

sn

-->

sn

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

sn

-->

sn

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

facsimileTelephoneNumber

-->

facsimileTelephoneNumber

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

facsimileTelephoneNumber

-->

facsimileTelephoneNumber

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

rdn

-->

mailNickname

Direct

3

Remote-Address

-

Metaverse_Contact

-

-

rdn

-->

mailNickname

Direct

5

groupOfNames

-

Metaverse_Contact

-

-

rdn

-->

mailNickname

Rules Extension - mailNickname

6

organizationalPerson

-

Metaverse_Contact

-

-

pager

-->

pager

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

pager

-->

pager

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

postalCode

-->

postalCode

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

postalCode

-->

postalCode

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

st

-->

st

Direct

2

rfc822Mailbox

-->

targetAddress

Rules Extension - targetAddress

1

groupOfNames

-

Metaverse_Contact

-

-

rfc822Mailbox

-->

targetAddress

Rules Extension - targetAddress

2

Remote-Address

-

Metaverse_Contact

-

-

rfc822Mailbox

-->

targetAddress

Rules Extension - targetAddress

3

organizationalPerson

-

Metaverse_Contact

-

-

Hide-From-Address-Book

-->

msExchHideFromAddressLists

Direct

2

groupOfNames

-

Metaverse_Contact

-

-

Hide-From-Address-Book

-->

msExchHideFromAddressLists

Direct

4

Remote-Address

-

Metaverse_Contact

-

-

Hide-From-Address-Book

-->

msExchHideFromAddressLists

Direct

6

organizationalPerson

-

Metaverse_Contact

-

-

postalAddress

-->

streetAddress

Direct

4

Remote-Address

-

Metaverse_Contact

-

-

postalAddress

-->

streetAddress

Direct

5

organizationalPerson

-

Metaverse_Contact

-

-

telephoneNumber

-->

telephoneNumber

Direct

1

Remote-Address

-

Metaverse_Contact

-

-

telephoneNumber

-->

telephoneNumber

Direct

3

uid

-->

uid

Direct

3

rdn

-->

uid

Direct

4

groupOfNames

-

Metaverse_Contact

-

-

uid

-->

uid

Rules Extension - uid

6

Remote-Address

-

Metaverse_Contact

-

-

otherMailbox,rfc822Mailbox,textEncodedORaddress

-->

proxyAddresses

Rules Extension - proxyaddresses

1

organizationalPerson

-

Metaverse_Contact

-

-

otherMailbox,rfc822Mailbox,textEncodedORaddress

-->

proxyAddresses

Rules Extension - proxyaddresses

2

groupOfNames

-

Metaverse_Contact

-

-

otherMailbox,rfc822Mailbox,textEncodedORaddress

-->

proxyAddresses

Rules Extension - proxyaddresses

3

textEncodedORaddress

-->

textEncodedORAddress

Direct

2

Remote-Address

-

Metaverse_Contact

-

-

textEncodedORaddress

-->

textEncodedORAddress

Direct

5

organizationalPerson

-

Metaverse_Contact

-

-

MAPI-Recipient

-->

MapiRecipient

Direct

1

Remote-Address

-

Metaverse_Contact

-

-

MAPI-Recipient

-->

MapiRecipient

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

l

-->

l

Direct

1

Remote-Address

-

Metaverse_Contact

-

-

l

-->

l

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

physicalDeliveryOfficeName

-->

physicalDeliveryOfficeName

Direct

1

Remote-Address

-

Metaverse_Contact

-

-

physicalDeliveryOfficeName

-->

physicalDeliveryOfficeName

Direct

3

organizationalPerson

-

Metaverse_Contact

-

-

co

-->

c

Direct

3

Remote-Address

-

Metaverse_Contact

-

-

co

-->

c

Direct

4

rfc822Mailbox

-->

Rfc822Mailbox

Rules Extension - Rfc822Mailbox

1

groupOfNames

-

Metaverse_Contact

-

-

rfc822Mailbox

-->

Rfc822Mailbox

Rules Extension - Rfc822Mailbox

2

 

 

 

 

 



MIIS Deployment for Exchange 5.5


Disclaimer: Your use of the information contained in these pages is at your sole risk. All information on these pages is provided "as is", without any warranty, whether express or implied, of its accuracy, completeness, fitness for a particular purpose, title or non-infringement, and none of the third-party products or information mentioned in the work are authored, recommended, supported or guaranteed by Stephen Bryant or Pro Exchange. OutlookExchange.Com, Stephen Bryant and Pro Exchange shall not be liable for any damages you may sustain by using this information, whether direct, indirect, special, incidental or consequential, even if it has been advised of the possibility of such damages.

Copyright Stephen Bryant 2008