NopCommerce上二次开发 触发器记录
最近要在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上二次开发 触发器记录的更多相关文章
- E8.Net 工作流二次开发架构平台
一. 产品简介 E8.Net工作流开发架构是基于微软.Net技术架构的工作流中间件产品,是国内商业流程管理(BPM)领域在.Net平台上的领先产品,是快速搭建流程管理解决方案的二次开 ...
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/76912307 本文出自[我是干勾鱼的博客] 之前在文章<基于Java的门户 ...
- Dokuwiki 二次开发记录
Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...
- 踏上Revit二次开发之路 0 序
0 序 近来,由于工作上的需要,开始自学Revit二次开发. Revit由欧特克公司专为BIM构建,是建筑业体系中使用最广泛的软件之一.借助欧特克公司在我国市场占有率方面的绝对优势,甚至给不少人带来& ...
- OBS-Studio二次开发记录
OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...
- Nopcommerce 二次开发0
Nopcommerce 是国外的一个高质量的开源b2c网站系统,基于EntityFramework6.0和MVC5.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的 ...
- ArcEngine二次开发,TOCControl控件上使用contextMenuStrip
右键菜单,在二次开发中很实用,以前没用过,最近通过一本书了解到,一直想找这么一个控件来用. 一般的控件,将contextMenuStrip控件拖到所依托的控件上,然后输入自己想要的几个功能. 在所依 ...
- [PC]PHPCMS二次开发指南(上)
------------------------------------------------------------------------------------- PHPCMS本身功能已经很完 ...
- 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)
QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...
随机推荐
- UML-类图定义
1.之前,学习过领域模型(概念模型),与类图的区别: 1).属于OOA 2).没有方法,只有属性和关联 类图属于OOD,属于静态对象建模 2.例子 3.类元包含哪些? 1).类(抽象类) 2).接口
- python编程:从入门到实践----第四章>操作列表
一.遍历整个列表 1-1.假设有一个魔术师名单,需要将其中每个魔术师的名字都打印出来. # 用for循环来打印魔术师名单中的名字 magicians=['alice','david','carolin ...
- python-变量及其数据类型-01
目录 python-变量及其数据类型-01 1. 第一个python程序 2. 注释 3. 变量 4. 关键字 5. 变量的类型 python-变量及其数据类型-01 1. 第一个python程序 p ...
- 题解 P6004 【[USACO20JAN]Wormhole Sort S】
这题真的是非常标准的模板题啊 看到连最少的边,第一时间会想到 \(kruskal\) .这道题的难点其实就一个:你要注意到连边权最大的边使整个图联通 为什么:题意是第i个点想走到 \(pos[i]\) ...
- MySQL--存储引擎的特性
常用存储引擎的对比 特点 MyISAM InnoDB MEMORY MERGE NDB 存储限制 有 64TB 有 没有 有 事务安全 支持 锁机制 表锁 行锁 表锁 表锁 行锁 B树 ...
- 关于Weblogic的知识点
一.解决Weblogic域创建.启动.进入控制台慢问题 搭建Weblogic 11g和12c环境时发现,安装正常,以默认组件安装,但是创建域的时候特别慢,一般需要几分钟至10分钟,卡在“创建域安全信息 ...
- Linux-进程关系
(1).无关系 (2).父子进程关系 (3).进程组(group):由若干个进程构成一个进程组 (4).会话(session):由若干个进程组构成一个会话
- 进程同步multiprocess.Lock
进程同步multiprocess.Lock 我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制.尽管并发编程让我们能更加充分的利用IO ...
- Python笔记_第二篇_面向过程_第二部分_2.路径、栈和队列、内存修改
这一部分分三个主题进行讲解,主要为后面的模块.包.第三方库的概念补充一些相关的内容. 1. 路径(Path): 相对路径和绝对路径. 举例1:我们先导入一个os库(模块)来观察一下路径 import ...
- lr cc安装后提示“内部出现错误,无法创建文件夹”的解决办法
好多人在使用lr过程中提示“内部出现错误,无法创建文件夹”,今天MacW小编给大家带来了解决的方法,一起来看看吧! 1.此问题主要是用户权限的问题. 下载这个shell 脚本,此 shell 脚本可自 ...