电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

中间层插件的问题

来源:金蝶云社区作者:金蝶2024-09-163

中间层插件的问题

由于客户的出入库单据数量太多(上千万条),造成出入库相关的报表速度非常慢,为了解决这个问题,通过中间层插件将出入库表关键字段数据按照单据类型同步到了多个副本表(自定义的)中,然后重新开发对应报表(从自定义表中取数),性能有了质的提升,但是少量副本表和出入库表中数据不一致的问题,表现为部分单据的部分数据,目前有发现:其他入库单、其他出库单、销售出库单、盘亏损毁单,有些是副本表中有的单据出库单表中没有,有些是两方的单据分录数对不上,感觉像是某个时间段中间层插件失效一样,我是通过在中间层插件中拦截关键操作(保存、删除、审核、反审核)同步数据,部分代码如下:

1、保存同步:
Public Function EndSave(ByVal sDsn As String, vctSave As KFO.Vector, sReturnMsg As String) As Boolean
'-----------------------------------------------------------------------
'vctSave 值域 | 含义
'-----------------------------------------------------------------------
'FInterID | 单据的内码
'FTransType | 单据的事务类型
'IsRedBill | 当前单据是否是红单
'BillChecked | 当前单据是否审核
'CurrentUserRight | 当前用户是否有权限
'ActiveCtlValueChanged | 当前单据是否改变
'BeforeCloseStockBill | 当前单据是否启用期前仓存单据(暂估入库,销售出库)
'ICClosed | 当前是否关账
'-----------------------------------------------------------------------

On Error GoTo ConnectionCatch

'------------------------------------
'打开连接
Dim sql As String
Dim conn As ADODB.Connection

InitDataEnv sDsn
Set conn = datasource.Connection

On Error GoTo Catch

'------------------------------------
'操作逻辑
Dim FTranType As Long
FTranType = CLng(vctSave.Item(1)("FTransType"))

'同步数据
sql = GetSaveStockBillCopySql(FTranType, CLng(vctSave.Item(1)("FInterID")), vctSave.Item(1)("IsRedBill"))
conn.Execute sql

'------------------------------------
'操作完成,关闭连接
Set conn = Nothing
GetObjectContext.SetComplete
EndSave = True '如果正常完成,需要返回 True

Exit Function
......

2、审核、反审核、删除同步
Public Function HookInvoke(ByVal eventID As Long, dctParams As KFO.Dictionary) As Long

On Error GoTo ConnectionCatch

'------------------------------------
'验证事件有效性
If (eventID > 300004 And eventID > 200003) Then
HookInvoke = 1
Exit Function
End If

'验证单据有效性
Dim FTranType As Long
FTranType = CLng(dctParams.Value("TranType"))
If (FTranType > 1 And FTranType > 2 And FTranType > 5 And FTranType > 10 And FTranType > 21 And FTranType > 24 And FTranType > 28 And FTranType > 29 And FTranType > 40 And FTranType > 41 And FTranType > 43 And FTranType > 74 And FTranType > 83) Then
HookInvoke = 1
Exit Function
End If

'------------------------------------
'打开连接
Dim sDsn As String
Dim conn As ADODB.Connection
Dim sql As String
Dim i As Integer
Dim sDsnItems() As String
Dim keyValue() As String

sDsn = dctParams.Value("sDsn")
InitDataEnv sDsn
Set conn = datasource.Connection
sql = ""

On Error GoTo Catch

'------------------------------------
'操作逻辑
Select Case eventID
Case 300004 '删除单据后事件
'--------------------------------------------------------
'dctParams 值域 | 含义
'--------------------------------------------------------
'sDsn | 连接字符串 dctParams.Value("sDsn")
'InterID | 单据的内码 CLng(dctParams.Value("InterID"))
'TranType | 单据的事务类型 dctParams.Value("TranType")
'OperateCode | 操作码。固定值。值为 8
'ListID | 序时簿ID
'BaseInfo | 连接信息
'BillClsID | 单据类别ID
'TemplateID | 序时簿模版ID
'ErrInfo | 返回的错误信息
'ErrInfo2 | 返回的错误信息
'Return | 返回的错误代码

中间层插件的问题

由于客户的出入库单据数量太多(上千万条),造成出入库相关的报表速度非常慢,为了解决这个问题,通过中间层插件将出入库表关键字段数据按...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信