NopCommerce上二次开发 触发器记录

最近要在NopCommerce上二次开发。

开发也就算了,该项目的架构设计很好,但性能不可谓不低。

扯远了,为了保持项目以后升级顺利,开次开发不允许在原项目基础上大改,只能以插件形式开发……

 

因一个功能,不好改代码,所以在数据层用触发器实现。代码记录在此

  1 USE [NopCommerce]
  2 GO
  3 /****** Object:  Trigger [dbo].[InsertAffiliate]    Script Date: 2014/7/22 11:10:03 ******/
  4 SET ANSI_NULLS ON
  5 GO
  6 SET QUOTED_IDENTIFIER ON
  7 GO
  8 
  9 
 10 -- =============================================
 11 -- Author:        崔大鹏
 12 -- Create date: 2014.7.21
 13 -- Description:    <Description,,> 需要去affiate 的外键关联
 14 -- =============================================
 15 ALTER TRIGGER [dbo].[InsertAffiliate]
 16    ON  [dbo].[Customer]
 17    AFTER INSERT,UPDATE
 18 AS 
 19 
 20 BEGIN
 21 
 22 
 23 declare @CustomUserName nvarchar(1000)
 24 select @CustomUserName=inserted.Username from inserted
 25  If (@CustomUserName is not null) 
 26   begin 
 27    -- print('用户名不为空(实注册用户,临时用户不进)
 28 Declare @CustomId int
 29 declare @errno int 
 30 DECLARE @AddressId  int
 31 DECLARE @AffiliateId  int
 32 
 33 DECLARE @User_FirstName  nvarchar(100)
 34 DECLARE @User_LastName  nvarchar(100)
 35 DECLARE @Company  nvarchar(100)
 36 
 37 select @CustomId=inserted.Id from inserted 
 38 
 39 
 40  -- print('不存在关联AFF)
 41    if not exists(select 1 from   P_CustomId_AffiliateId P WHERE P.Id=@CustomId)
 42    BEGIN
 43 
 44    Begin TransAction  
 45 
 46    select @AddressId from  CustomerAddresses as Ca WHERE CA.Customer_Id=@CustomId
 47  -- print('关联CustomerAddresses 表 查出addressge表的ID
 48 
 49  -- print('如果没查到,插入一条。ADDRESS 并插入一条关联。
 50 if(@AddressId is null)
 51 begin
 52 
 53 --with sr as( select * from GenericAttribute with nolock
 54 --                        where EntityId=@CustomId and KeyGroup='Customer'
 55 --                        )
 56 --select @User_FirstName=Value from sr
 57 --where sr.[Key]='FirstName'
 58 
 59 --select @User_LastName=Value from sr 
 60 
 61 with sr as(select  case [Key] when 'FirstName' THEN VALUE   END  AS 'FirstName',case [Key] when 'LastName' THEN VALUE   END  AS 'LastName',  case [Key] when 'Company' THEN VALUE   END  AS 'Company'
 62    FROM [NopCommerce].[dbo].[GenericAttribute]
 63   where [EntityId]=@CustomId)
 64 
 65   select @User_FirstName=STUFF((SELECT ',' + FirstName  
 66          FROM sr AS G2 FOR XML PATH('')), 1, 1, '') ,@User_LastName=STUFF((SELECT ',' + LastName  
 67          FROM sr AS G2 FOR XML PATH('')), 1, 1, ''),@Company= STUFF((SELECT ',' + Company  
 68          FROM sr AS G2 FOR XML PATH('')), 1, 1, '')
 69 
 70 INSERT INTO [dbo].[Address]
 71            ([FirstName]
 72            ,[LastName]
 73            ,[Email]
 74            ,[Company]
 75            ,[CountryId]
 76            ,[StateProvinceId]
 77            ,[City]
 78            ,[Address1]
 79            ,[Address2]
 80            ,[ZipPostalCode]
 81            ,[PhoneNumber]
 82            ,[FaxNumber]
 83            ,[CreatedOnUtc])
 84      VALUES
 85            (@User_FirstName
 86            ,@User_LastName
 87            ,@CustomUserName
 88            ,@Company
 89            ,NULL
 90            ,NULL
 91            ,''
 92            ,''
 93            ,''
 94            ,''
 95            ,''
 96            ,''
 97            ,GETDATE())
 98 SELECT @AddressId=@@IDENTITY 
 99 
100 set @errno=@errno+@@error
101 
102 INSERT INTO [dbo].[CustomerAddresses]
103            ([Customer_Id]
104            ,[Address_Id])
105      VALUES
106            (@CustomId
107            ,@AddressId)
108 set @errno=@errno+@@error
109 end
110 
111  -- print('插入Affiliate 以上对ADDRESS表的处理,因为,AFF表有外键关联,ADDRESS无数据,不能INSERT
112 insert into Affiliate  ([AddressId]
113            ,[Deleted]
114            ,[Active])
115            values(@AddressId,0,1)
116 SELECT @AffiliateId=@@IDENTITY 
117 
118 set @errno=@errno+@@error
119 -- print('插入P_CustomId_AffiliateId
120 insert into P_CustomId_AffiliateId
121            values(@CustomId,@AffiliateId)
122 
123 set @errno=@errno+@@error
124  If @errno>0 
125   begin 
126    -- print('事务处理失败,回滚事务!')
127    rollback TransAction 
128   end 
129  Else
130   Begin 
131    -- print('事务处理成功,提交事务!')
132    Commit TransAction
133   End 
134 
135     -- SET NOCOUNT ON added to prevent extra result sets from
136     -- interfering with SELECT statements.
137     SET NOCOUNT ON;
138     -- Insert statements for trigger here
139 
140 
141 
142   end 
143 
144    END  
145    
146 
147 
148 END
posted @ 2014-07-22 11:14  cclient  阅读(364)  评论(0编辑  收藏  举报