最近要在NopCommerce上二次开发。

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

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

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

 USE [NopCommerce]
GO
/****** Object: Trigger [dbo].[InsertAffiliate] Script Date: 2014/7/22 11:10:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO -- =============================================
-- Author: 崔大鹏
-- Create date: 2014.7.21
-- Description: <Description,,> 需要去affiate 的外键关联
-- =============================================
ALTER TRIGGER [dbo].[InsertAffiliate]
ON [dbo].[Customer]
AFTER INSERT,UPDATE
AS BEGIN declare @CustomUserName nvarchar(1000)
select @CustomUserName=inserted.Username from inserted
If (@CustomUserName is not null)
begin
-- print('用户名不为空(实注册用户,临时用户不进)
Declare @CustomId int
declare @errno int
DECLARE @AddressId int
DECLARE @AffiliateId int DECLARE @User_FirstName nvarchar(100)
DECLARE @User_LastName nvarchar(100)
DECLARE @Company nvarchar(100) select @CustomId=inserted.Id from inserted -- print('不存在关联AFF)
if not exists(select 1 from P_CustomId_AffiliateId P WHERE P.Id=@CustomId)
BEGIN Begin TransAction select @AddressId from CustomerAddresses as Ca WHERE CA.Customer_Id=@CustomId
-- print('关联CustomerAddresses 表 查出addressge表的ID -- print('如果没查到,插入一条。ADDRESS 并插入一条关联。
if(@AddressId is null)
begin --with sr as( select * from GenericAttribute with nolock
-- where EntityId=@CustomId and KeyGroup='Customer'
-- )
--select @User_FirstName=Value from sr
--where sr.[Key]='FirstName' --select @User_LastName=Value from sr 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'
FROM [NopCommerce].[dbo].[GenericAttribute]
where [EntityId]=@CustomId) select @User_FirstName=STUFF((SELECT ',' + FirstName
FROM sr AS G2 FOR XML PATH('')), 1, 1, '') ,@User_LastName=STUFF((SELECT ',' + LastName
FROM sr AS G2 FOR XML PATH('')), 1, 1, ''),@Company= STUFF((SELECT ',' + Company
FROM sr AS G2 FOR XML PATH('')), 1, 1, '') INSERT INTO [dbo].[Address]
([FirstName]
,[LastName]
,[Email]
,[Company]
,[CountryId]
,[StateProvinceId]
,[City]
,[Address1]
,[Address2]
,[ZipPostalCode]
,[PhoneNumber]
,[FaxNumber]
,[CreatedOnUtc])
VALUES
(@User_FirstName
,@User_LastName
,@CustomUserName
,@Company
,NULL
,NULL
,''
,''
,''
,''
,''
,''
,GETDATE())
SELECT @AddressId=@@IDENTITY set @errno=@errno+@@error INSERT INTO [dbo].[CustomerAddresses]
([Customer_Id]
,[Address_Id])
VALUES
(@CustomId
,@AddressId)
set @errno=@errno+@@error
end -- print('插入Affiliate 以上对ADDRESS表的处理,因为,AFF表有外键关联,ADDRESS无数据,不能INSERT
insert into Affiliate ([AddressId]
,[Deleted]
,[Active])
values(@AddressId,0,1)
SELECT @AffiliateId=@@IDENTITY set @errno=@errno+@@error
-- print('插入P_CustomId_AffiliateId
insert into P_CustomId_AffiliateId
values(@CustomId,@AffiliateId) set @errno=@errno+@@error
If @errno>0
begin
-- print('事务处理失败,回滚事务!')
rollback TransAction
end
Else
Begin
-- print('事务处理成功,提交事务!')
Commit TransAction
End -- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here end END END

NopCommerce上二次开发 触发器记录的更多相关文章

  1. E8.Net 工作流二次开发架构平台

    一.          产品简介 E8.Net工作流开发架构是基于微软.Net技术架构的工作流中间件产品,是国内商业流程管理(BPM)领域在.Net平台上的领先产品,是快速搭建流程管理解决方案的二次开 ...

  2. jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...

  3. Dokuwiki 二次开发记录

    Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...

  4. 踏上Revit二次开发之路 0 序

    0 序 近来,由于工作上的需要,开始自学Revit二次开发. Revit由欧特克公司专为BIM构建,是建筑业体系中使用最广泛的软件之一.借助欧特克公司在我国市场占有率方面的绝对优势,甚至给不少人带来& ...

  5. OBS-Studio二次开发记录

    OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...

  6. Nopcommerce 二次开发0

    Nopcommerce  是国外的一个高质量的开源b2c网站系统,基于EntityFramework6.0和MVC5.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的 ...

  7. ArcEngine二次开发,TOCControl控件上使用contextMenuStrip

    右键菜单,在二次开发中很实用,以前没用过,最近通过一本书了解到,一直想找这么一个控件来用. 一般的控件,将contextMenuStrip控件拖到所依托的控件上,然后输入自己想要的几个功能.  在所依 ...

  8. [PC]PHPCMS二次开发指南(上)

    ------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...

  9. 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

    QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...

随机推荐

  1. TF分布式问题

    碰到一个没解决的问题. 用tensorflow 分布式异步更新模式训练模型, 模型中带正则项, 每个batch的损失函数为 \[\lambda \|W\|_1 + \frac 1 {N_j} \sum ...

  2. PAT Advanced 1051 Pop Sequence (25) [栈模拟]

    题目 Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, -, N and ...

  3. @Component, @Repository, @Service,@Controller的区别

    @Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 @Componen ...

  4. linux服务器开放防火墙和端口,以及查询状态

    自己搞一个自己网站时候,购买的阿里云服务器,发现部署项目访问不到,首先需要确认入站规则是否配置. 一.安全组列表添加 1.打开安全组列表 2.添加入站规则 3.添加安全组规则 二.通过防火墙,开启端口 ...

  5. 埃拉托色尼(Eratosthenes)筛法

     用筛选法求1—100之内的素数(此法难度的话,方法可以不界定:能完成求1—100之内的素数即可).   在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后 ...

  6. 关于laravel的一些操作

    1.创建控制器 eg: php artisan make:controller  controllerName 如果是带命名空间需要创建控制器 则不需要加前面的  App/Http/Controlle ...

  7. Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之列表类型(list)

    Python中序列是最基本的数据结构.序列中的每个元素都分配一个数字(他的位置或者索引),第一个索引是0,第二个索引是1,依次类推.Python的列表数据类型类似于C语言中的数组,但是不同之处在于列表 ...

  8. Java8必知必会

    Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包. 流(stream)就如同迭代器(iterator),但附 ...

  9. java常用工具类(一)

    一.String工具类 package com.mkyong.common; import java.util.ArrayList; import java.util.List; /** * * St ...

  10. React Native 开发

    摘自:<React Native 开发之 IDE 选型和配置> 一个在不断更新的有关React Native讲解:<江清清的技术专栏> ES5和ES6的区别:<React ...