根据AD中传回的上级manager信息更新系统需要的上级

已知:
1、AD中同步的上级字段字符串为

CN=张三,OU=业务发展,OU=find908,OU=Account,DC=fd,DC=com

2、人力资源表中上级managerid 为int型,存储的是人力资源id
3、人力资源表中所有上级managerstr为 str型,存储的是所有上级的id,以”,”号分割
4、人力资源表中有预留的文本字段 textfield1~textfield5

解决问题思路:
1、 将AD中的上级字段字符串同步到textfield4中
2、在人力资源表中的textfield4上写触发程序,当发生insert或者update时做相应的处理
3、对 上级字段字符串做处理,只获取 上级的姓名 如 “张三”
4、写2个函数分别去获取 上级字符串中的 姓名对应的 id 和 manager

step1:
对 上级字段字符串做处理,只获取 上级的姓名 如 “张三”,用sqlserver自带函数即可

Substring(textfield4,4,(Patindex('%,%',textfield4)-4))

step2:写2个函数分别去获取 上级字符串中的 姓名对应的 id 和 manager


GO

/****** Object:  UserDefinedFunction [dbo].[getManagerStr]    Script Date: 03/26/2016 11:27:14 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
/*DROP FUNCTION [dbo].[getManagerStr];*/

GO
 CREATE function [dbo].[getManagerId](@ad_manager_str varchar(500))
 RETURNS INT
 AS 
 BEGIN  Return (select ID  from HrmResource  
 where lastname=Substring(@ad_manager_str,4,(Patindex('%,%',@ad_manager_str)-4)) )
 END;
GO

GO
 CREATE function [dbo].[getManagerStr](@ad_manager_str varchar(500))
 RETURNS VARCHAR(100)
 AS 
 BEGIN  Return (select managerstr  from HrmResource  
 where lastname=Substring(@ad_manager_str,4,(Patindex('%,%',@ad_manager_str)-4)) )
 END;
GO

step3:在人力资源表中的textfield4上写触发程序,当发生insert或者update时做相应的处理
需要注意的是
A 按照下面的处理逻辑,人员上级树中的顶点即CEO节点如果维护了上级是他自己,就不要写在触发更新范围里
B 同步时,最好对同步的人员数据 按照人员级别 从上往下顺序同步,若没有做顺序处理,第一次同步则需要多同步1-2次,依据层级而定若是最底层的树到根节点只有2个距离,共同步3次即可保证所有manager,managerstr字符串的正确性


GO

/****** Object:  Trigger [dbo].[hrmresource_getmanagerId_Str]    Script Date: 03/26/2016 20:07:18 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

 CREATE trigger [dbo].[hrmresource_getmanagerId_Str] ON [dbo].[HrmResource] 
 FOR INSERT,UPDATE 
 AS 
 DECLARE @manager_str varchar(4000) 
 DECLARE @managerid int
 DECLARE @id_1 int 
 begin if (update(textfield4)) 
    begin SELECT @managerid = dbo.getManagerId(textfield4),@manager_str=dbo.getManagerStr(textfield4),@id_1=id FROM  inserted 
    update HrmResource set managerid= @managerid,managerstr=','+Convert(varchar(100),@managerid)+@manager_str where id = @id_1 and lastname not in
    (select c.lastname from HrmRoles a
  left join HrmRoleMembers b on a.id=b.roleid
  left join HrmResource c on c.id=b.resourceid
  where a.rolesmark='CEO')
    end 
 end

GO


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值