在FIM同步中,除了上次提到的,删除A库之后,同步删除B库的需求(点击这里)。还有一种比较常见的需求:
通常在应用系统中,并不会真实删除一条数据库记录,只是做一个标记而已。
操作思路:
1、数据源删除用户->删除对应Metaverse对象(此时应用系统对应的CS object与对应的Metaverse对象disconnected)
2、自定义Extension用于修改状态。
在进行具体设置之前,我们要先了解一下FIM的默认行为:
默认情况下,一个Metaverse对象只有当所有与之关联的CS对象都被删除之后,才会被删除。我们可以通过配置来实现,这个对象一旦在某个指定的CS中被删除后,该mv就被删除,比如某公司的HR系统,员工都离职了,我们自然可以认为与之对应的mv对象本不应存在了。
值得一提的是,无论如何设置,FIM都会保证在最后一个MA中的CS对象与MV失去联系之后,将对应的mv删除。原因很简单,因为任何mv对象都必须要有至少一个的数据源做支撑,既然已没有数据源了,自然它没有存在的可能。
回到本文,进入Metaverse设计界面。
如图所示红色部分,就是“当被勾选的任何一个MA中的数据disconnect的时候,删除对应Metaverse对象”。
完成该设置后,当数据在MA中删除后(IMPORT),做一次SYNC,对应Metaverse就会被删除。
当Metaverse被删除后对应的MA会如何做呢?打开对应应用系统(需要修改状态值的)MA的配置界面,如下图所示:
值得一提的是,选项1和选项2中的disconnectors和explicit disconnector的区别,两者的相同点是,在mv删除后,都会断开,并各自处于Connect = FALSE的状态,但是前者在下次SYNC的时候,还会新建Metaverse对象,但后者则不会再创建了。
在本文,我们应该选择最后一项,通过代码来实现。因为其他三个选项都无法表达我们要设置Status的值,为此我们要在对应的MAExtension中添加相应的代码,如果还没有使用扩展代码的,系统会提示填写一个。
代码如下:
DeprovisionAction IMASynchronization.Deprovision(CSEntry csentry) { csentry["Status"].Value = "Deleted"; return DeprovisionAction.ExplicitDisconnect; }
推荐阅读:
1、Understanding Deprovisioning in FIM
http://social.technet.microsoft.com/wiki/contents/articles/understanding-deprovisioning-in-fim.aspx
2、[FIM]如何从A导入数据,同步到B,在A系统中删除数据,在B系统中删除数据
http://www.cnblogs.com/volnet/archive/2012/01/03/2310786.html
3、Account Deprovisioning Scenarios
http://www.wapshere.com/missmiis/account-deprovisioning-scenarios