位置:丁香财经网 >> 理财

用友u8提示activx出错

日期:2023年04月22日 08:42 浏览量:1


单据控件在 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

推荐阅读

用友帐套年度结转单据时失败(用友软件年度结转错了怎么缓解)
复制的文字有下划线怎么去掉(复制的字有下划线怎么取消)
qqmailplugin是什么文件夹可以删除吗(qqmailplugin什么意思)
looksae插件(look插件安装)
looksae(looksae插件)
淘客助手插件(淘客助手插件如何安装)
metamask钱包[metamask钱包插件]
Usdt泰达货币软件为用户提供专业、安全、高效的加密货币交易
用友nc介绍(用友nc功能介绍)
银行单据填写样本(银行单据填写样本怎么写)
用友u8提示activx出错文档下载: PDF DOC TXT

标签: 单据 插件 byref

文章来源: 丁香财经网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至405936398@qq.com 举报,一经查实,本站将立刻删除。
相关资讯
美元和中国人民币汇率(美元与中国汇率)
美元和中国人民币汇率(美元与中国汇率) 2023-04-22

年度 data 库 select * from dbo.VoucherPlugins单据二次开发插件信息表(Vouche...

社保激费基数包括(社保的激纳基数有什么用)
社保激费基数包括(社保的激纳基数有什么用) 2023-04-22

年度 data 库 select * from dbo.VoucherPlugins单据二次开发插件信息表(Vouche...

四川信托股权拍卖(四川信托股权拍卖公告)
四川信托股权拍卖(四川信托股权拍卖公告) 2023-04-22

年度 data 库 select * from dbo.VoucherPlugins单据二次开发插件信息表(Vouche...

建行信用卡龙卡visa(建行信用卡龙卡为什么有两张)
建行信用卡龙卡visa(建行信用卡龙卡为什么有两张) 2023-04-22

年度 data 库 select * from dbo.VoucherPlugins单据二次开发插件信息表(Vouche...

银行承兑汇票贴现天数怎么算(银行承兑汇票的贴现期限)
银行承兑汇票贴现天数怎么算(银行承兑汇票的贴现期限) 2023-04-22

年度 data 库 select * from dbo.VoucherPlugins单据二次开发插件信息表(Vouche...

格力电器股票十年行情(格力电器股票十年行情走势图)
格力电器股票十年行情(格力电器股票十年行情走势图) 2023-04-22

年度 data 库 select * from dbo.VoucherPlugins单据二次开发插件信息表(Vouche...