用友u8 v12 插件(用友u8api)_币百科_智行理财网

用友u8 v12 插件(用友u8api)

小智 0

欧易okx交易所下载

欧易交易所又称欧易OKX,是世界领先的数字资产交易所,主要面向全球用户提供比特币、莱特币、以太币等数字资产的现货和衍生品交易服务,通过使用区块链技术为全球交易者提供高级金融服务。

APP下载   官网注册


单据控件在 RowColChange、点击参照、数据校验等关键事件支持单据插件。举例说明

假如单据控件内部是这样的

Private sub ABC()

Call voucherPluginProxy.ABC(…..,bCancel)

If bCancel=false then

RaiseEvent ABC()

End if

End sub

而 VoucherPluginProxy 的 ABC 方法是这样的

Public sub ABC(…….,bCancel)

On error resume next

For each plugin in plugins

Plugin.ABC(……,bCancel)

next

End sub

单据插件管理(VoucherPluginPorxy 会在单据初始化时去初始化,找出这个单据有多少

个插件,然后放到一个集合中)。

当单据控件去执行 ABC 方法时,单据控件先去调用插件的 ABC 接口,执行完插件的 ABC

接口之后,根据返回的 bCancel 值来确定是不是需要再去 RaiseEvent ABC 接口给业务组。

单据控件

ctlVoucher

单据插件管理

[VoucherPluginPr

oxy]

销售订单插件

采购订单插件

采购入库单插件


数据

单据控件初始化时会去本地 U8soft\VoucherPlugin.config 文件去读取数据,这个 config

文件是一个 xml,结构如下:

<VoucherPlugins>

<plugin subid='pu' cardnum='25' classname='EFHC_vouchinterface.voucherinterface'

iorder='1000' />

……

</VoucherPlugins>

之所以设计成从本地 config 中读取数据是基于效率考虑的,这样不用每次读取数据库。


需要特别注意的 subid 和 cardnum 如果有英文字符需要小写,因为插件管理器

(VoucherPluginProxy 里面是通过 Dom 的 SelectNodes 来查找的,查找时做了小写处理。


在单据控件调用 VoucherPluginProxy(插件管理器)初始化时会把当前单据的 subid 和

cardnum 传过去。插件管理器(VoucherPluginProxy 会讲 subid 和 cardnum 作为关键字来查找

dom,找到的就放到一个集合中。并对这个集合中的组件做初始化。会有如下的类似代码(一

下代码仅做说明问题用,不是真正的代码):

Dim oNodes as object

Set oNodes= objDoc.selectNodes("//plugin[@subid='" & LCase(m_sSubID) & "' and

@cardnum='" & LCase(m_sCardNum) & "']")

For i = 0 To oNodes.Length-1

Set oNode = oNodelist(i)

sClassName = getAttribute(oNode, "classname")

Set m_oPlugin = CreateObject(sClassName)

If m_oPlugin Is Nothing Then

OutputDebugString "插件 " & sClassName & "创建失败"

Else

m_bCreatePlugin = True

If m_colPlugins Is Nothing Then

Set m_colPlugins = New Collection

End If

m_colPlugins.Add m_oPlugin

m_nPluginCount = m_nPluginCount + 1

End If

Next


这样我们就能够得到一个插件的集合,这个集合在单据控件执行方法 ABC 时就会被调

用 ABC 接口。


本地的 config 文件是从数据库 Data 库的 VoucherPlugins 表缓存来的。用户在登录门户时


后,门户会去异步读取这个表和本地的 config 文件对比,如果发现有新数据就会重新生成该

config。

年度 data 库 select * from dbo.VoucherPlugins


单据二次开发插件信息表(VoucherPlugins)(UFData 库)

字段名 字段类型 说明

ID uniqueidentifier GUID,唯一标示

subid Nvarchar(100) 产品 ID,例如 PU,SA,ST

cardnum Nvarchar(100) 单据 CardNumber,例如采购订单是 88,销售订单是 17

classname Nvarchar(400) 插件组件入口

ufts timestamp 时间戳(预制时无需关注,会自动生成

iOrder int 插件加载顺序


插件接口

单据插件支持以下接口函数

示例


'''从这里开始为二次开发的接口函数

Public Function Init(ByVal oLogin As Object) As Boolean

'入口点,提供单据当前的Login对象

'Set m_oLogin = oLogin

'Init = m_bCreatePlugin

End Function


'表头字段点击参照按钮弹出参照时会触发

Public Sub headBrowUser(ByRef Voucher As Object, ByVal Index As

Variant, sRet As Variant, ByRef referPara As ReferParameter, ByRef

bCancel As Boolean)

On Error Resume Next

'参数设置见单据控件的事件描述

End Sub


'表体字段点击参照按钮弹出参照时会触发

Public Sub bodyBrowUser(ByRef Voucher As Object, ByVal Row As Long,

ByVal Col As Long, sRet As Variant, ByRef referPara As

ReferParameter, ByRef bCancel As Boolean)

On Error Resume Next

'参数设置见单据控件的事件描述

End Sub


'表体字段参照完带回值或者手动输入后校验数据时会触发

Public Sub bodyCellCheck(ByRef Voucher As Object, RetValue As

Variant, bChanged As Long, ByVal r As Long, ByVal c As Long, ByRef

referPara As ReferParameter, ByRef bCancel As Boolean)

On Error Resume Next

'参数设置见单据控件的事件描述

'如何区分用户是手动输入还是参照带回值?(通过ReferPara参数的RstGrid,

该属性是个RecordSet,有值说明是参照带回的,否则是手动输入)

End Sub


'表头字段参照完带回值或者手动输入后校验数据时会触发

Public Sub headCellCheck(ByRef Voucher As Object, Index As Variant,

RetValue As String, bChanged As CheckRet, ByRef referPara As

ReferParameter, ByRef bCancel As Boolean)

On Error Resume Next

'参数设置见单据控件的事件描述

End Sub


'单据表体上单击操作时会触发

Public Sub Click(ByRef Voucher As Object, section As

SectionsConstants, ByVal Index As Long, ByRef bCancel As Boolean)


通过上面的说明,我们知道我们的插件入口 classname 需要实现上述接口才能被系统执行。


请将以上接口代码复制到 VB 的一个 Class Module 里面,将该 VB 工程设置为 ActiveX Dll 类型

的,将该 Class Module 的 Instancing 设置成 5 MultiUse 类型的才会被调用到。


On Error Resume Next

'参数设置见单据控件的事件描述

End Sub


'单据表体上双击操作时会触发

Public Sub DblClick(ByRef Voucher As Object, section As

SectionsConstants, ByVal Index As Long, ByRef bCancel As Boolean)

On Error Resume Next


End Sub


'单据表体上切换行或者切换列时会触发

Public Sub RowColChange(ByRef Voucher As Object)

On Error Resume Next

'参数设置见单据控件的事件描述

End Sub


'修改单据字段的权限信息时会触发

Public Sub ModifyAuthString(ByRef Voucher As Object, ByRef

sAuthString As String)

On Error Resume Next

'参数设置见单据控件的事件描述

End Sub


'单据表体点击参照完成(关闭参照框)时会触发(V12.0)

Public sub BodyReferAfterBrowse( ByRef Voucher As Object , ByVal

r As Long, ByVal c As Long ,byval RstClass as object,byval RstGrid

as object,byval sXML as string,byref bCancel as boolean)


End sub

相关内容

用友u8 v12 插件(用友u8api)文档下载: PDF DOC TXT