%3CLINGO-SUB%20id%3D%22lingo-sub-973472%22%20slang%3D%22en-US%22%3EChanging%20A%20Value%20Used%20By%20Join%20Logic%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-973472%22%20slang%3D%22en-US%22%3E%0A%20%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3DUTF-8%22%20%2F%26gt%3B%3CSTRONG%3E%20First%20published%20on%20MSDN%20on%20Mar%2023%2C%202015%20%3C%2FSTRONG%3E%20%3CBR%20%2F%3E%3CP%3EToday%20I%E2%80%99d%20like%20to%20take%20a%20few%20moments%20and%20discuss%20something%20that%20I%20think%20is%20a%20common%20misconception%20around%20join%20logic.%20Let%E2%80%99s%20say%20we%20have%20a%20simple%20environment%20with%20a%20FIM%20portal%20and%20Active%20Directory.%20For%20user%20objects%2C%20let%E2%80%99s%20say%20we%E2%80%99re%20joining%20on%20AcountName-%26gt%3BsAMAccountName.%20The%20question%20I%20get%20asked%20quite%20frequently%20is%2C%20%E2%80%9CWhat%20happens%20if%20I%20change%20sAMAccountName%20in%20AD%3F%20Will%20that%20break%20my%20join%3F%E2%80%9D.%20While%20this%20would%20seem%20logical%20(after%20all%2C%20if%20that%20value%20changes%2C%20how%20will%20FIM%20know%20to%20associate%20those%20people%3F)%2C%20the%20answer%20may%20surprise%20you.%20As%20it%20turns%20out%2C%20changing%20the%20join%20attribute%20on%20the%20ADMA%20%3CEM%3E%20will%20not%20%3C%2FEM%3E%20break%20joins.%20Don%E2%80%99t%20believe%20me%3F%20Let%E2%80%99s%20step%20through%20the%20process%E2%80%A6%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EFirst%2C%20let%E2%80%99s%20take%20a%20look%20at%20the%20configured%20join%20logic%20on%20our%20ADMA%3A%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153162i84316262AEDFEE7A%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EHere%20we%20see%20two%20configured%20rules.%20First%2C%20attempt%20a%20join%20on%20%E2%80%9CemployeeNumber-%26gt%3BPoliticianID%E2%80%9D.%20If%20that%20fails%2C%20attempt%20a%20join%20on%20%E2%80%9CsAMAccountName-%26gt%3BaccountName%E2%80%9D.%3C%2FP%3E%3CBR%20%2F%3E%3CP%3ELikewise%2C%20if%20we%20look%20at%20our%20inbound%20user%20synchronization%20rule%2C%20we%20see%20the%20following%20relationship%20mapping%3A%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153163iDEE892D0033E7938%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EAgain%2C%20%E2%80%9CsAMAccountName-%26gt%3BaccountName%E2%80%9D%2C%20as%20well%20as%20a%20static%20attribute%20flow%20of%20the%20same%3A%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153164i26EF7E3179B0203F%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%20If%20we%20pick%20a%20random%20pre-existing%20user%20in%20the%20FIM%20portal%20to%20look%20at%2C%20we%20can%20see%20both%20the%20Account%20Name%20(sAMAccountName)%20%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%20%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153165i0FE41E58B7A614E3%22%20%2F%3E%20%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EAs%20well%20as%20the%20PoliticianID%20(employeeNumber).%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153166iA46DF4971CA13DC6%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CBR%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3ESo%2C%20we%20now%20know%20that%20we%20are%20joining%20(or%20at%20least%20attempting%20to%20join)%20on%20%E2%80%9CsAMAccountName%20-%26gt%3B%20accountName%E2%80%9D%20or%20%E2%80%9CemployeeNumber%20-%26gt%3B%20PoliticianID%E2%80%9D.%20We%20have%20also%20now%20confirmed%20both%20of%20those%20attributes%20on%20our%20%3CEM%3E%20target%20%3C%2FEM%3E%20side%20(in%20this%20case%2C%20the%20FIM%20portal).%20Knowing%20this%2C%20let%E2%80%99s%20go%20change%20one%20(or%20both)%20of%20those%20values%20in%20Active%20Directory.%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EHere%2C%20we%20have%20added%20a%20%E2%80%9Cb%E2%80%9D%20to%20the%20sAMAccountName%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153167i961CD5242275CF1C%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EAnd%20changed%20the%20employeeNumber%20from%20%E2%80%9C0016%E2%80%9D%20to%20%E2%80%9C1616%E2%80%9D.%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153168iF76C369D8F8A4460%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EWith%20both%20attributes%20changed%2C%20when%20we%20do%20an%20import%20of%20the%20ADMA%2C%20we%20should%20see%20one%20update%20(for%20our%20modified%20user).%20Following%20that%20with%20a%20synchronization%2C%20we%20can%20now%20check%20the%20FIMMA%20%E2%80%9Cpending%20exports%E2%80%9D%20and%20should%20see%3A%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153169i47189A50B897A5A0%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EHere%2C%20we%20see%20the%20old%20%3CEM%3E%20and%20%3C%2FEM%3E%20new%20attribute%20values%20for%20both%20AccountName%20(sAMAccountName)%20and%20PoliticianID%20(employeeNumber).%20Both%20are%20anchor%20attributes%20used%20for%20join%20logic%2C%20both%20have%20now%20been%20changed%20in%20the%20data%20source.%3C%2FP%3E%3CBR%20%2F%3E%3CP%3EFollowing%20an%20export%20of%20the%20FIMMA%2C%20we%20can%20now%20get%20into%20the%20portal%20and%20will%20see%3A%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153170iA9305C220FF27334%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CBR%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CIMG%20alt%3D%22%22%20border%3D%220%22%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F153171i56C99D812B6455D2%22%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3ENotice%20both%20%E2%80%9CAccount%20Name%E2%80%9D%20and%20%E2%80%9CPoliticianID%E2%80%9D%20have%20been%20changed.%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CBR%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3ENow%2C%20for%20the%20question%20that%E2%80%99s%20on%20everyone%E2%80%99s%20mind%3A%20%3CSTRONG%3E%20how%20%3C%2FSTRONG%3E%20%3F%20The%20answer%20is%20both%20simple%20and%20complex.%20Simple%20in%20that%20once%20an%20object%20has%20been%20managed%20by%20FIM%20(i.e.%2C%20the%20initial%20join%20has%20occurred%20for%20pre-existing%20objects%2C%20or%20the%20user%20has%20been%20provisioned%20in%20the%20case%20of%20new%20objects)%2C%20FIM%20no%20longer%20associates%20that%20object%20using%20the%20anchor%20attributes.%20Rather%20(and%20here%20comes%20the%20complexity)%2C%20relationships%20between%20the%20connector%20space%20and%20metaverse%20are%20actually%20maintained%20in%20link%20tables%20within%20the%20SQL%20database.%20I%20don%E2%80%99t%20want%20to%20get%20too%20specific%20on%20this%20piece%2C%20but%20the%20main%20thing%20is%20that%20objectID%20is%20the%20value%20in%20use%20(which%20equates%20to%20csObjectID%20in%20the%20connector%20space%20and%20mvObjectID%20in%20the%20metaverse).%20It%20is%20also%20worth%20noting%20that%20join%20and%20projection%20logic%20is%20skipped%20once%20an%20object%20reaches%20the%20state%20of%20%E2%80%9Cconnector%E2%80%9D.%20In%20other%20words%2C%20once%26nbsp%3B%20an%20initial%20association%20(join)%20has%20occurred%2C%20sAMAccountName%20is%2C%20essentially%2C%20no%20longer%20needed%20(because%20the%20object%20is%20now%20considered%20a%20regular%20connector).%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CBR%20%2F%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%20style%3D%22text-align%3A%20center%22%3EQuestions%3F%20Comments%3F%20Love%20FIM%20so%20much%20you%20can't%20%3CEM%3E%20even%20%3C%2FEM%3E%20stand%20it%3F%3C%2FP%3E%3CBR%20%2F%3E%3CP%20style%3D%22text-align%3A%20center%22%3E%3CSTRONG%3E%20%3CA%20href%3D%22mailto%3Aconnectorspace%40microsoft.com%22%20title%3D%22%26gt%3BEMAIL%20US%26lt%3B%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3E%20%26gt%3BWE%20WANT%20TO%20HEAR%20FROM%20YOU!%26lt%3B%20%3C%2FA%3E%20%3C%2FSTRONG%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%20style%3D%22text-align%3A%20center%22%3E%3CBR%20%2F%3E%3C%2FP%3E%0A%20%20%3CP%20style%3D%22text-align%3A%20center%22%3E%23%23%20%3CA%20href%3D%22http%3A%2F%2Fblogs.msdn.com%2Fconnector_space%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%20noopener%20noreferrer%22%3E%20http%3A%2F%2Fblogs.msdn.com%2Fconnector_space%20%3C%2FA%3E%20%23%20%3CEM%3E%20%23%20%3C%2FEM%3E%3C%2FP%3E%0A%20%0A%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-973472%22%20slang%3D%22en-US%22%3EFirst%20published%20on%20MSDN%20on%20Mar%2023%2C%202015%20Today%20I%E2%80%99d%20like%20to%20take%20a%20few%20moments%20and%20discuss%20something%20that%20I%20think%20is%20a%20common%20misconception%20around%20join%20logic.%3C%2FLINGO-TEASER%3E%3CLINGO-LABS%20id%3D%22lingo-labs-973472%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3Eanchor%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ecsobjectid%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Ejoin%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3Emvobjectid%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Microsoft

First published on MSDN on Mar 23, 2015

Today I’d like to take a few moments and discuss something that I think is a common misconception around join logic. Let’s say we have a simple environment with a FIM portal and Active Directory. For user objects, let’s say we’re joining on AcountName->sAMAccountName. The question I get asked quite frequently is, “What happens if I change sAMAccountName in AD? Will that break my join?”. While this would seem logical (after all, if that value changes, how will FIM know to associate those people?), the answer may surprise you. As it turns out, changing the join attribute on the ADMA will not break joins. Don’t believe me? Let’s step through the process…

 

First, let’s take a look at the configured join logic on our ADMA:

 

 

Here we see two configured rules. First, attempt a join on “employeeNumber->PoliticianID”. If that fails, attempt a join on “sAMAccountName->accountName”.

 

Likewise, if we look at our inbound user synchronization rule, we see the following relationship mapping:

 

 

Again, “sAMAccountName->accountName”, as well as a static attribute flow of the same:

 

 

If we pick a random pre-existing user in the FIM portal to look at, we can see both the Account Name (sAMAccountName)

 

 

As well as the PoliticianID (employeeNumber).

 

 

 

 

So, we now know that we are joining (or at least attempting to join) on “sAMAccountName -> accountName” or “employeeNumber -> PoliticianID”. We have also now confirmed both of those attributes on our target side (in this case, the FIM portal). Knowing this, let’s go change one (or both) of those values in Active Directory.

 

Here, we have added a “b” to the sAMAccountName

 

 

And changed the employeeNumber from “0016” to “1616”.

 

 

With both attributes changed, when we do an import of the ADMA, we should see one update (for our modified user). Following that with a synchronization, we can now check the FIMMA “pending exports” and should see:

 

 

Here, we see the old and new attribute values for both AccountName (sAMAccountName) and PoliticianID (employeeNumber). Both are anchor attributes used for join logic, both have now been changed in the data source.

 

Following an export of the FIMMA, we can now get into the portal and will see:

 

 

 

 

 

Notice both “Account Name” and “PoliticianID” have been changed.

 

 

 

Now, for the question that’s on everyone’s mind: how ? The answer is both simple and complex. Simple in that once an object has been managed by FIM (i.e., the initial join has occurred for pre-existing objects, or the user has been provisioned in the case of new objects), FIM no longer associates that object using the anchor attributes. Rather (and here comes the complexity), relationships between the connector space and metaverse are actually maintained in link tables within the SQL database. I don’t want to get too specific on this piece, but the main thing is that objectID is the value in use (which equates to csObjectID in the connector space and mvObjectID in the metaverse). It is also worth noting that join and projection logic is skipped once an object reaches the state of “connector”. In other words, once  an initial association (join) has occurred, sAMAccountName is, essentially, no longer needed (because the object is now considered a regular connector).

 

 

 

Questions? Comments? Love FIM so much you can't even stand it?

 

>WE WANT TO HEAR FROM YOU!<

 

 

## http://blogs.msdn.com/connector_space # #