Microsoft Dynamics CRM4.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 
View Code

四、创建测试实体的触发器 

 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
View Code

五、新建一个测试实体记录,发现new_name自动生成如下:

原文地址:https://www.cnblogs.com/allenhua/p/3388755.html