[原创]eXpressApp Framework 生成单据编号的解决方案(vb.net)

eXpressApp Framework (以下简称XAF)是Devexpress公司开发的一套基于.net平台的O/R M快速开发应用架构,其特点是可以快速的开发出基于web和winform的数据库应用程序,在XAF的实际应用开发过程中,我们难免要实现单据编号的自动生成和管理,传统的很多应用系统都是利用存储过程来实现这一目的的,我们知道XAF的是用XPO来和数据库存储系统交互的,有没有办法不用存储过程而直接用XPO来生成和管理应用系统的单据编号呢?经过本人的尝试,答案是肯定的,下面我就把这个实现的实体类和相应的实现函数共享出来,给大家参考,由于水平和时间的关系,代码可能没有那么的顺眼,请大家批评指正:

先给个效果图看看吧:

 

 

1.单据编号设定实体类

ContractedBlock.gif ExpandedBlockStart.gif Code
Imports System
Imports System.ComponentModel

Imports DevExpress.Xpo

Imports DevExpress.ExpressApp
Imports DevExpress.Persistent.Base
Imports DevExpress.Persistent.BaseImpl
Imports DevExpress.Persistent.Validation

<DefaultClassOptions()> _
<System.ComponentModel.DisplayName("单据编号设定")> _
Public Class B_BILLCODEPREX
    
Inherits BaseObject
    
Public Sub New(ByVal session As Session)
        
MyBase.New(session)
    
End Sub
    
Private FTBNAME As String
    
<DevExpress.Xpo.DisplayName("")> _
    
<Custom("AllowEdit""False")> _
   
Public Property TBNAME() As String
        
Get
            
Return FTBNAME
        
End Get
        
Set(ByVal value As String)
            SetPropertyValue(
"TBNAME", FTBNAME, value)

        
End Set
    
End Property
    
Private FTBCAPTION As String
    
<DevExpress.Xpo.DisplayName("表名称")> _
    
<Custom("AllowEdit""False")> _
Public Property TBCAPTION() As String
        
Get
            
Return FTBCAPTION
        
End Get
        
Set(ByVal value As String)
            SetPropertyValue(
"TBCAPTION", FTBCAPTION, value)
        
End Set
    
End Property
    
Private FPREX As String
    
<DevExpress.Xpo.DisplayName("单据编号前缀")> _
Public Property PREX() As String
        
Get
            
Return FPREX
        
End Get
        
Set(ByVal value As String)
            SetPropertyValue(
"PREX", FPREX, value)
        
End Set
    
End Property
    
Private FLENTH As Integer = 5
    
<DevExpress.Xpo.DisplayName("流水号位数")> _
Public Property LENTH() As Integer
        
Get
            
Return FLENTH
        
End Get
        
Set(ByVal value As Integer)
            SetPropertyValue(
"LENTH", FLENTH, value)
        
End Set
    
End Property
    
Private FINTERVAL As String = "-"
    
<DevExpress.Xpo.DisplayName("分隔符")> _
Public Property INTERVAL() As String
        
Get
            
Return FINTERVAL
        
End Get
        
Set(ByVal value As String)
            SetPropertyValue(
"INTERVAL", FINTERVAL, value)
        
End Set
    
End Property
    
Public Enum EPREX
        无
        年
        年月
        年月日
    
End Enum
    
Private FDPREX As EPREX
    
<DevExpress.Xpo.DisplayName("日期段")> _
Public Property DPREX() As EPREX
        
Get
            
Return FDPREX
        
End Get
        
Set(ByVal value As EPREX)
            SetPropertyValue(
"DPREX", FDPREX, value)
        
End Set
    
End Property
End Class

2.单据编号生成函数

 

ContractedBlock.gif ExpandedBlockStart.gif 生成单据编号函数
 1ExpandedBlockStart.gifContractedBlock.gif    Public Function UPDATEBILLCODE()Function UPDATEBILLCODE(ByVal FBCODE As StringByVal BO As Object)
 2        Dim BILLCODEPREX As B_BILLCODEPREX = Session.FindObject(Of B_BILLCODEPREX)(New BinaryOperator("TBNAME", BO.GetType.Name))
 3        If BILLCODEPREX IsNot Nothing Then
 4            If BILLCODEPREX.TBNAME IsNot Nothing Then
 5                If BO.GetType.Name = BILLCODEPREX.TBNAME.Trim Then
 6                    Dim BB As String = ""
 7                    Dim PRE As String = ""
 8                    If BILLCODEPREX.INTERVAL Is Nothing Then
 9                        BB = ""
10                    Else
11                        BB = BILLCODEPREX.INTERVAL.Trim
12                    End If
13                    If Not BILLCODEPREX.PREX.Trim = Nothing Then
14                        PRE = BILLCODEPREX.PREX.ToUpper.Trim & BB
15                    Else
16                        PRE = ""
17                    End If
18                    Dim CC As String = ""
19                    If Not BILLCODEPREX.DPREX = Nothing Then
20                        Select Case BILLCODEPREX.DPREX
21                            Case B_BILLCODEPREX.EPREX.年
22                                CC = Format(Now.Year, "00").ToString & BB
23                            Case B_BILLCODEPREX.EPREX.年月
24                                CC = Format(Now.Year, "00").ToString & BB & Format(Now.Month, "00").ToString & BB
25                            Case B_BILLCODEPREX.EPREX.年月日
26                                CC = Format(Now.Year, "00").ToString & BB & Format(Now.Month, "00").ToString & BB & Format(Now.Day, "00").ToString & BB
27                            Case B_BILLCODEPREX.EPREX.无
28                                CC = ""
29                        End Select
30                    Else
31                        CC = ""
32                    End If
33                    Dim fLOWlenth As Integer = 4
34                    Dim AA As String = ""
35                    If BILLCODEPREX.LENTH > 0 Then
36                        fLOWlenth = BILLCODEPREX.LENTH
37                    End If
38                    For I = 1 To fLOWlenth Step 1
39                        AA &= "0"
40                    Next
41                    FBCODE = PRE & CC & Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, CC), AA)
42                Else
43                    FBCODE = Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, "ERP"), "00000000")
44                End If
45            Else
46                FBCODE = Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, "ERP"), "00000000")
47            End If
48        Else
49            FBCODE = Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, "ERP"), "00000000")
50
51        End If
52        Return FBCODE
53    End Function

54

3.调用方法代码

 

ContractedBlock.gif ExpandedBlockStart.gif 调用方法代码
 1ExpandedBlockStart.gifContractedBlock.gif    Public Overloads Overrides Sub AfterConstruction()Sub AfterConstruction()
 2        MyBase.AfterConstruction()
 3        FBILLCODE = UPDATEBILLCODE(FBILLCODE, Me)
 4        BKBILLCODE = FBILLCODE
 5
 6    End Sub

 7   Private FBILLCODE As String
 8    <Indexed(unique:=True), DevExpress.Xpo.DisplayName("单据编号")> _
 9        <VisibleInListView(True)> _
10ExpandedBlockStart.gifContractedBlock.gif    Public Property BILLCODE()Property BILLCODE() As String
11        Get
12            Return FBILLCODE
13        End Get
14        Set(ByVal value As String)
15            SetPropertyValue("BILLCODE", FBILLCODE, value)
16        End Set
17    End Property

 

转载于:https://www.cnblogs.com/alcome/archive/2009/06/16/1504241.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值