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

1.单据编号设定实体类
2.单据编号生成函数
Public Function UPDATEBILLCODE(ByVal FBCODE As String, ByVal BO As Object)
Dim BILLCODEPREX As B_BILLCODEPREX = Session.FindObject(Of B_BILLCODEPREX)(New BinaryOperator("TBNAME", BO.GetType.Name))
If BILLCODEPREX IsNot Nothing Then
If BILLCODEPREX.TBNAME IsNot Nothing Then
If BO.GetType.Name = BILLCODEPREX.TBNAME.Trim Then
Dim BB As String = ""
Dim PRE As String = ""
If BILLCODEPREX.INTERVAL Is Nothing Then
BB = ""
Else
BB = BILLCODEPREX.INTERVAL.Trim
End If
If Not BILLCODEPREX.PREX.Trim = Nothing Then
PRE = BILLCODEPREX.PREX.ToUpper.Trim & BB
Else
PRE = ""
End If
Dim CC As String = ""
If Not BILLCODEPREX.DPREX = Nothing Then
Select Case BILLCODEPREX.DPREX
Case B_BILLCODEPREX.EPREX.年
CC = Format(Now.Year, "00").ToString & BB
Case B_BILLCODEPREX.EPREX.年月
CC = Format(Now.Year, "00").ToString & BB & Format(Now.Month, "00").ToString & BB
Case B_BILLCODEPREX.EPREX.年月日
CC = Format(Now.Year, "00").ToString & BB & Format(Now.Month, "00").ToString & BB & Format(Now.Day, "00").ToString & BB
Case B_BILLCODEPREX.EPREX.无
CC = ""
End Select
Else
CC = ""
End If
Dim fLOWlenth As Integer = 4
Dim AA As String = ""
If BILLCODEPREX.LENTH > 0 Then
fLOWlenth = BILLCODEPREX.LENTH
End If
For I = 1 To fLOWlenth Step 1
AA &= "0"
Next
FBCODE = PRE & CC & Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, CC), AA)
Else
FBCODE = Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, "ERP"), "00000000")
End If
Else
FBCODE = Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, "ERP"), "00000000")
End If
Else
FBCODE = Format(DistributedIdGeneratorHelper.Generate(BO.Session.DataLayer, BO.[GetType]().FullName, "ERP"), "00000000")
End If
Return FBCODE
End Function
3.调用方法代码
![]()
1
Public Overloads Overrides 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)> _
10
Public 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
相关产品:eXpressApp Framework