Microsoft Dynamics CRM4.0 创建单据的时候,自动生成单据编号的通用方法
Posted on 2013-10-31 23:27 Hamilton Tan 阅读(700) 评论(0) 编辑 收藏 举报一、新建两个实体,具体如下:
单据流水号(new_maxbillcode) | |||||||
显示名称 | 名称 | 类型 | 格式 | 最大长度 | 需求级别 | IME模式 | 备注 |
名称 | new_name | nvarchar | 文本 | 100 | 业务必需的 | 自动 | 系统自带 |
标记 | new_billmark | nvarchar | 文本 | 100 | 无约束 | 自动 | |
实体 | new_entity | nvarchar | 文本 | 100 | 无约束 | 自动 | |
年 | new_year | nvarchar | 文本 | 100 | 无约束 | 自动 | |
月 | new_month | nvarchar | 文本 | 100 | 无约束 | 自动 | |
日 | new_day | nvarchar | 文本 | 100 | 无约束 | 自动 | |
位数 | new_places | int | 无 | ||||
流水号 | new_maxcode | int | 无 |
测试(new_test) | |||||||
显示名称 | 名称 | 类型 | 格式 | 最大长度 | 需求级别 | IME模式 | 备注 |
名称 | new_name | nvarchar | 文本 | 100 | 业务必需的 | 自动 | 系统自带 |
二、在单据流水号实体上添加配置规则,具体如下图:
三、创建存储过程 [dbo].[UP_GetMaxBillCode]
1 /*-------------------------------------------------------------------------------------------------------- 2 Memo 获取单据最大号 3 4 DECLARE @BillMark VARCHAR(20) 5 DECLARE @BillCode VARCHAR(50) 6 SET @BillMark='NEW' 7 EXEC UP_GetMaxBillCode @BillMark,@BillCode OUTPUT 8 SELECT BillMark=@BillMark,BillCode=@BillCode 9 10 SELECT * FROM NEW_MaxBillCodeExtensionBase 11 --------------------------------------------------------------------------------------------------------*/ 12 CREATE PROC [dbo].[UP_GetMaxBillCode] 13 @Entity VARCHAR(50), 14 @BillCode VARCHAR(50) OUTPUT 15 AS 16 SET NOCOUNT ON 17 DECLARE @MaxCode VARCHAR(20) 18 DECLARE @Version ROWVERSION 19 DECLARE @Times INT 20 21 SELECT @MaxCode=NEW_MaxCode+1,@Version=[Version] 22 FROM NEW_MaxBillCodeExtensionBase 23 WHERE NEW_Entity=@Entity 24 25 UPDATE NEW_MaxBillCodeExtensionBase SET NEW_MaxCode=NEW_MaxCode+1 26 WHERE NEW_Entity=@Entity 27 AND [Version]=@Version 28 29 WHILE @@ROWCOUNT=0 30 BEGIN 31 SET @Times=@Times+1 32 IF(@Times%100=0) 33 BEGIN 34 WAITFOR DELAY '00:00:01' 35 IF(@Times>500) 36 BEGIN 37 RETURN NULL 38 END 39 END 40 41 SELECT @MaxCode=NEW_MaxCode+1,@Version=[Version] 42 FROM NEW_MaxBillCodeExtensionBase 43 WHERE NEW_Entity=@Entity 44 45 UPDATE NEW_MaxBillCodeExtensionBase SET NEW_MaxCode=NEW_MaxCode+1 46 WHERE NEW_Entity=@Entity 47 AND [Version]=@Version 48 END 49 50 SELECT @BillCode=ISNULL(NEW_BillMark,'')+ISNULL(NEW_Year,'')+ISNULL(NEW_Month,'')+ISNULL(NEW_Day,'')+RIGHT(CONVERT(VARCHAR,@MaxCode),NEW_places) 51 FROM NEW_MaxBillCodeExtensionBase 52 WHERE NEW_Entity=@Entity
四、创建测试实体的触发器
1 --创建测试实体的触发器 2 CREATE Trigger [dbo].[Company_Insert_new_test] 3 ON [dbo].[new_testExtensionBase] 4 AFTER INSERT 5 AS 6 BEGIN 7 SET NOCOUNT ON 8 IF EXISTS(SELECT * FROM INSERTED WHERE new_name IS NULL) 9 BEGIN 10 DECLARE @BillCode VARCHAR(50) 11 EXEC UP_GetMaxBillCode 'new_test',@BillCode OUTPUT 12 UPDATE new_testExtensionBase SET new_name=@BillCode 13 WHERE new_testid IN (SELECT new_testid FROM INSERTED) 14 END 15 END
五、新建一个测试实体记录,发现new_name自动生成如下: