泛微Ecology8明细表对主表赋值

1.需求及效果

1.1 需求

在明细表中的项目经理,可以将值赋值给主表中的项目经理来作为审批人员
在这里插入图片描述

1.2 效果

在申请人保存或者提交后将明细表中的人名赋值给主表中对应的值

2.思路与实现

在通过js测试后,不能够百分百的赋值成功,只能在数据库中写触发器来确保每次都能够赋值成功。
注意点:1.明细表中的项目经理可能是多个不同的人,所以需要将值都取出来,写到同一行,并用逗号隔开,确保与主表中的多人力资源在数据库中存储的格式相同。
2.我这里的项目经理是汉字,并不是存储的人力资源字段对应的数字,所以还需要从HRmresource表中获取人名对应的id

/*
此触发器用来使用明细表中的项目经理赋值给主表中的项目经理及申请人带出人力资源部考勤工时
1.明细表中的项目经理可能存在多个,所以需要多对一
2.主表中的项目经理是int类型,需要用HrmResource转化
3.申请人带出人力资源部导入的考勤工时
*/
CREATE TRIGGER trg_yyhc_xxgs
ON dbo.formtable_main_201 
AFTER INSERT,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;  --不返回结果行数

    -- 声明变量
    DECLARE @requestID INT,  --请求id
			@sqr INT,		 --申请人
			@name NVARCHAR(100), --项目工时中的name
			@gs DECIMAL(10,4),   --工时
			@xmjl NVARCHAR(100),    --项目经理(项目负责人)
			@id INT;  --主表id
    -- 查询插入的数据
    SELECT @requestID = i.requestId, @sqr = i.sqr,@id=i.id FROM inserted i;

    -- 获取姓名
    SELECT @name = hr.lastname FROM dbo.HrmResource hr WHERE hr.id = @sqr;

    -- 获取工时值
    SELECT @gs = yy.gs FROM dbo.yyhc_yybgg yy WHERE yy.name = @name;

	--根据id获取明细表中的项目经理
	SELECT @xmjl = STUFF((SELECT DISTINCT ',' + CAST(hr.id AS NVARCHAR)
                      FROM formtable_main_201_dt1 dt
                      JOIN HrmResource hr ON dt.xmjl = hr.lastname
                      WHERE dt.mainid = @id
                      FOR XML PATH('')), 1, 1, '')
	
    -- 更新数据
	--0709日更改,不是项目成员无法更新数据,没有项目经理即不能提交
	IF EXISTS (SELECT 1 FROM yyhc_xmcylb WHERE name=@name)
	BEGIN
    UPDATE m SET m.rlzybtggs = @gs,m.xmfzr=@xmjl FROM dbo.formtable_main_201 m WHERE m.requestId = @requestID;
	END 
END;

3.结语

可以通过触发器来完成明细表中的值赋值给对应的主表的值,当然还可以建一些表通过匹配给他们赋值,也会大大减少填写的内容。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值