用友U8自定义按钮开发
Posted Hello World,
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用友U8自定义按钮开发相关的知识,希望对你有一定的参考价值。
网上搜索《U8界面按钮二次开发手册》即可找到基础的资料,主要分为几个步骤:
一、判断界面是否可进行二次开发
在一个界面上同时按住Ctrl+Shift并点击任何一个按钮,这样你所需要的信息将被Copy到写字板(附件中的写字板)上,(注意不是记事本notepad)。
二、根据获取的信息添加SQL按钮资料
在Meta数据库,表AA_CustomerButton中,表说明如下:
字段名 | 说明 |
cButtonID | 按钮ID,GUID |
cButtonKey | 按钮Key |
cButtonType | default表示一般按钮, menu表示菜单, system表示替换系统按钮的功能,执行自己的方法。 |
cProjectNO | 不允许使用U870项目号,客户化项目用U8CustDef |
cFormKey | 无用 |
cVoucherKey | 单据的Key |
cKeyBefore | 如果cButtonType是default则此键表示自定义按钮前的按钮key 如果cButtonType是menu则表示菜单所在的按钮 如果cButtonType是system则表示需要替换的按钮key |
iOrder | 无用 |
cGroup | 分组IEDIT,ICOMMON |
cCustomerObjectName | 组件名 |
cCaption | 标题 |
cLocaleID | 语种 zh-cn, zh-tw,en-us |
cImage | 图标的文件名 |
cHotKey | 快捷键如Ctrl+A |
bInneralCommand | 是否内部命令,设置为1 |
cVariant | 自定义内容,里面的值会传给处理的组件 |
cVisibleAsKey | 设置显示状态与系统的那个按钮键值一致 |
cEnableAsKey | 设置Enable状态与系统的那个按钮键值一致 |
插入代码示例:
--销售订单的数据预置脚本
--销售订单的保存按钮后面增加一个按钮的脚本
INSERT INTO [AA_CustomerButton]([cButtonID], [cButtonKey], [cButtonType], [cProjectNO], [cFormKey], [cVoucherKey], [cKeyBefore], [iOrder], [cGroup], [cCustomerObjectName], [cCaption], [cLocaleID], [cImage], [cToolTip], [cHotKey], [bInneralCommand], [cVariant], [cVisibleAsKey], [cEnableAsKey])
VALUES(newid(), 'btntest','default', 'U8CustDef',
'17', '17','save', '0', 'IEDIT','U8Test.mytestclass','测试',
'zh-cn','','测试','Ctrl+N',1,'测试数据','save','save')
--注意:U8Test.mytestclass类需要注册,否则会报Activex不能创建对象。
--直接替换销售订单的保存按钮按钮的脚本
INSERT INTO [AA_CustomerButton]([cButtonID], [cButtonKey], [cButtonType], [cProjectNO], [cFormKey], [cVoucherKey], [cKeyBefore], [iOrder], [cGroup], [cCustomerObjectName], [cCaption], [cLocaleID], [cImage], [cToolTip], [cHotKey], [bInneralCommand], [cVariant], [cVisibleAsKey], [cEnableAsKey])
VALUES(newid(), 'btntest2','system', 'U8CustDef',
'17', '17','save', '0', 'IEDIT','U8Test.mytestclass','测试',
'zh-cn','','测试','Ctrl+N',1,'测试数据','save','save')
--注意:U8Test.mytestclass类需要注册,否则会报Activex不能创建对象。
三、编写代码并注册
新建一个VB类,并写入以下方法即可。C#也可以编写,但不能转换接收到的对象,还是VB的方便。
‘执行按钮,objVoucher为单据或列表对象
‘VarentValue为在表中预置的cVariant的值。
Public Function RunCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _
ByVal sKey As String, ByVal VarentValue As Variant, ByVal other As String)
End Function
‘初始化
Public Function Init(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, msbar As Object)
End Function
‘在执行系统按钮只前调用,Cancel后会不再执行系统方法。
Public Function BeforeRunSysCommand(ByVal objLogin As Object, ByVal objForm As Object, ByVal objVoucher As Object, _
ByVal sKey As String, ByVal VarentValue As Variant, ByRef Cancel As Boolean, ByVal other As String)
Cancel = False
End Function
四、取值说明
objVoucher的数据获取
表头数据:objVoucher.HeaderText("cPersonCode") cPersonCode是后台表字段。
表体数据:objVoucher.bodytext(i, "iSum")
i:表体的第几行,从1开始,iSum:表体的后台字段
'获取表体当前行数据:
objVoucher.bodytext(objVoucher.Row, "cinvcode")
'获取指定行数据,指定第一行:
objVoucher.bodytext(1, "cinvcode")
以上是关于用友U8自定义按钮开发的主要内容,如果未能解决你的问题,请参考以下文章