根据AD中传回的上级manager信息更新系统需要的上级
2016-03-26 20:18
1266 查看
已知:
1、AD中同步的上级字段字符串为
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自带函数即可
step2:写2个函数分别去获取 上级字符串中的 姓名对应的 id 和 manager
step3:在人力资源表中的textfield4上写触发程序,当发生insert或者update时做相应的处理
需要注意的是
A 按照下面的处理逻辑,人员上级树中的顶点即CEO节点如果维护了上级是他自己,就不要写在触发更新范围里
B 同步时,最好对同步的人员数据 按照人员级别 从上往下顺序同步,若没有做顺序处理,第一次同步则需要多同步1-2次,依据层级而定若是最底层的树到根节点只有2个距离,共同步3次即可保证所有manager,managerstr字符串的正确性
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
相关文章推荐
- 分治法-最大字段和
- Java格式化快捷键Eclipse
- Range minimum query
- StringBuilder、StringBuffer和String三者的联系和区别
- 做高通平台安卓驱动感言
- 课堂所讲整理:HTML--8Window.document对象
- zjut1633——好简单的动态规划
- iOS Couldn't update the Keychain Item问题
- The Python Challenge
- 2016年3月23日作业
- CodeForces-626D-Jerry's Protest
- Tinyxml解析xml文件
- Tomcat热部署
- 剑指offer面试题10—二进制中1的个数
- IOS平台ASI框架 和 AFN框架 之Https通讯
- Unity3D热更新<一> 学习Lua
- 第四周上机实践项目 项目5--用递归方法求解(2)
- 深入线程:生产者与消费者问题
- gzoi2016酱油记
- URI数据存储初解