Dynamics AX Knowledge

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1,对于表的更新,插入,删除可以定义触发器。通常对于更新/插入/删除,对于某一情况,只能定义一个触发器,也就是说,对于更新可以有一个触发器,插入一个触发器,删除一个触发器,总共最多三个。

2,实际上在修改记录时,以前的内容保存在deleted表中,新的内容保存在inserted表中。

3,更新时,定义如下

 create     trigger tri_bugs_updatestatus on bugs instead of update

as

4,之后就是触发器内容了,如果有变量,先定义:

DECLARE @mybugid int,@myuserid int

5,对于使用if else分支,每个分支需要begin end来表示范围。例如:

if exists(select 1 from inserted where bg_status=7 and [Finished Date] is not null  //inserted表示将更新的值,取出判断
 and 。。。。 )
 begin
 update bugs set   //更新实际表
 bg_short_desc=inserted.bg_short_desc,
。。。。。。
 [Finished Date]=inserted.[Finished Date]
 from inserted
 where bugs.bg_id = inserted.bg_id 
 select @mybugid=myinserted.bg_id,@myuserid=myinserted.bg_last_updated_user from inserted as myinserted //将数据放到变量里
 delete from bugmsg where bugid <> 1 and userid = @myuserid 
 insert into bugmsg(bugid,bugmessage,userid) values(@mybugid,'Issue updated',@myuserid) //将变量插入到另外一个表

end 

6,回滚:ROLLBACK TRANSACTION

 

这个例子:

 

Create                         trigger tri_bugs_updatestatus on bugs instead of update 
as
    DECLARE @mybugid int,@myuserid int
    if  exists(select 1 from deleted where bg_status=7)
 begin
 ROLLBACK TRANSACTION
     select @mybugid=myinserted.bg_id,@myuserid=myinserted.bg_last_updated_user from inserted as myinserted
     delete from bugmsg where bugid <> 1 and userid = @myuserid 
        insert into bugmsg(bugid,bugmessage,userid) values(@mybugid,'Issue not updated because issue locked when its Status is Closed',@myuserid)
 end
    else if exists(select 1 from inserted where bg_status=7 and [Finished Date] is not null
 and ((bg_category in (6,7) and [Application Name] ='Axapta' and Modules != 'None') or
 (bg_category in (6,7) and [Application Name] ='SharePoint' and Modules = 'None') or
 (bg_category in (6,7) and [Application Name] ='MicroSoft Office' and Modules = 'None') or
 (bg_category not in (6,7) and [Application Name] ='None' and Modules = 'None')))
 begin
 update bugs set
 bg_short_desc=inserted.bg_short_desc,
 bg_reported_user=inserted.bg_reported_user,
 bg_reported_date=inserted.bg_reported_date,
 bg_status=inserted.bg_status,
 bg_priority=inserted.bg_priority,
 bg_org=inserted.bg_org,
 bg_category=inserted.bg_category,
 bg_project=inserted.bg_project,
 bg_assigned_to_user=inserted.bg_assigned_to_user,
 bg_last_updated_user=inserted.bg_last_updated_user,
 bg_last_updated_date=inserted.bg_last_updated_date,
 bg_user_defined_attribute=inserted.bg_user_defined_attribute,
 [Application Name]=inserted.[Application Name],
 Weighting=inserted.Weighting,
 Modules=inserted.Modules, 
 [Preferred Engineer]=inserted.[Preferred Engineer],
 Owner=inserted.Owner,
 Detail=inserted.Detail,
 Solution=inserted.Solution,
 [Finished Date]=inserted.[Finished Date]
 from inserted
 where bugs.bg_id = inserted.bg_id
     select @mybugid=myinserted.bg_id,@myuserid=myinserted.bg_last_updated_user from inserted as myinserted
     delete from bugmsg where bugid <> 1 and userid = @myuserid 
 insert into bugmsg(bugid,bugmessage,userid) values(@mybugid,'Issue updated',@myuserid)

 end 

 

posted on 2008-11-06 16:50  Jacky Xu  阅读(339)  评论(0编辑  收藏  举报