玩转C科技.NET

从学会做人开始认识这个世界!http://volnet.github.io

导航

统计

[FIM]如何从A导入数据,同步到B,在A系统中删除数据,在B系统中保留数据并修改状态

在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设计界面。

image

如图所示红色部分,就是“当被勾选的任何一个MA中的数据disconnect的时候,删除对应Metaverse对象”。

image

完成该设置后,当数据在MA中删除后(IMPORT),做一次SYNC,对应Metaverse就会被删除。

当Metaverse被删除后对应的MA会如何做呢?打开对应应用系统(需要修改状态值的)MA的配置界面,如下图所示:

image

值得一提的是,选项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

posted on 2012-02-02 14:47 volnet(可以叫我大V) 阅读(...) 评论(...) 编辑 收藏

使用Live Messenger联系我
关闭