K3常用二次开发.docx
《K3常用二次开发.docx》由会员分享,可在线阅读,更多相关《K3常用二次开发.docx(30页珍藏版)》请在冰豆网上搜索。
K3常用二次开发
1常用二次开发方法
1.1登陆界面图片修改
1)在中间层方式:
在中间层KDCOM目录新建两个图片文件:
LOGIN_PIC_LOG_TOP.bmp适用于10.4版本+PT007378,或V11版本及以后版本
LOGIN_PIC_LOG_BOTTOM.bmp适用于10.4版本+PT007378,或V11版本及以后版本
MAIN_PIC_LOG_RIGHT_FLOWCHART.bmp,适用于10.4版本+PT007378,或V11版本
MAIN_PIC_LOG_LEFT_FLOWCHART.bmp,适用于10.4版本+PT007378,或V11版本
MAIN_PIC_LOG_LEFT.bmp,适用于10.4版本+PT007378,或V11版本
MAIN_PIC_LOG_RIGHT.bmp,适用于10.4版本+PT007378,或V11版本
该方式不需要每个客户端机器安装图片,登陆时自动显示。
2)客户端方式:
直接修改以下图片文件,适用于V12及以后版本:
F:
\Program?
Files\Kingdee\K3ERP\k3Standard\KDSYSTEM\KEE_imgLogo.bmp
3)企业LOG方式
在中间层新建一个文件夹,命名为eptlogo并将其设置为只读共享,然后制作两个BMP格式的图片,分别作为logo和背景图,大小为145×180,分别命名为enterprise_logo.bmp,enterprise_bg.bmp,在客户端的主控台编辑器启用企业界面即可。
4)图标替换
LOG替换图片:
KDCOM文件夹下
名称长*宽(像素)说明
LOGIN_PIC_LOG_BOTTOM.bmp142*39登录界面底部
LOGIN_PIC_LOG_TOP.bmp331*101登录界面顶部
需要登录主控台->系统->设置->主控台编辑->选项->取消启用企业界面应用方案。
V12.0以后不需要下面文件:
MAIN_PIC_LOG_LEFT.bmp614*63主控台左上
MAIN_PIC_LOG_RIGHT.bmp186*36主控台右上
MAIN_PIC_LOG_LEFT_FLOWCHART.bmp614*71流程图左上
MAIN_PIC_LOG_RIGHT_FLOWCHART.bmp191*36流程图右上
主控台子系统图标替换:
把图标文件后缀名改为.dat文件,替换为:
D:
\ProgramFiles\Kingdee\K3ERP\SYSTEMICON
sys_SubsysID.dat
登录界面图片替换:
(该替换方式不支持只替换中间层后客户端自动替换)
V12.1V12.2:
(图片名称以成长版简体中文为例,如是WISE则将KEE替换为KUE,
如是繁体或英文环境则将CHS替换为CHT或EN)
KEE_imgLogo.bmp370*87登录界面左上角
KEE_ImgLogin.bmp617*408登录界面背景
KEE_imgLogoys.bmp92*52登录界面右下角友商网图标
kee_imglogo2.bmp110*52登录界面右下角Kindee图标
KEE_help_CHS.gif618*76用户手册顶部图标
KEE_KDTool_CHS.gif793*75客户端工具包顶部图标
KEE_Login_ACCT_CHS.bmp440*270帐套管理背景图片
KEE_About_logo_CHS.bmp365*102关于界面LOGO
1.2主控台无界面登陆
适用版本:
1)域用户登录:
提供命令行参数:
KDMain.exe-LoginWin|账套代码|机构密码,无界面直接登录到K/3系统主控台
2)命名用户登录:
提供命令行参数KDMain.exe-LoginUser|账套代码|机构密码|用户名|用户密码,无界面直接登录K/3系统主控台
3)参数之间的分隔符默认为”|”,由于用户密码可能包含特殊字符,用户可以通过修改注册表改变分隔符,注册表参数:
路径:
HKEY_CURRENT_USER\SoftWare\KingDee\K3
键:
LoginParm
4)获取账套代码的接口
组件名:
KdLogin.dll
组件部署:
客户端%Kdsystem%
程序名:
KdLogin.clsLogin
方法名:
GetAccountList
参数描述
GetAccountList()AsADODB.Recordset
参数:
无
返回值类型:
ADODB.Recordset,包含字段:
序号
字段名
描述
1
FAcctID
账套ID
2
FAcctNumber
账套代码
3
FAcctName
账套名称
5)测试登录参数设置是否成功的接口
组件名:
KdLogin.dll
组件部署:
客户端%Kdsystem%
程序名:
KdLogin.NoUILogin
方法名:
LoginUser
参数描述
PublicFunctionLoginUser(ByValsLoginTypeAsString_
ByValsAcctNumberAsString_
ByValsOrgPassAsString_
ByValsUserNameAsString_
ByValsUserPassAsString)AsString
参数:
序号
字段名
参数类型
描述
1
sLoginType
String
登录方式:
-LoginWin域用户身份登录
-LoginUser命名用户身份登录
2
sAcctNumber
String
账套代码
3
sOrgPass
String
组织机构密码
例如:
账套代码为:
10.02,则为组织机构10的密码.
4
sUserName
String
用户名,域用户身份登录时为空
5
sUserPass
String
用户密码,域用户身份登录时为空
返回值类型:
String,空字符串代表登录成功,否则登陆不成功,内容为登录不成功的原因。
1.3基础资料的图片读写?
1.显示图片
1.1)从数据库取得图片的二进制数据
DimbytFile()AsByte
‘根据取数SQL生成记录集:
selectFFilefromt_Accessory
bytFile=rs.Fields("FFILE")
1.2)保存到文件
DimsmFileAsadodb.Stream
SetsmFile=Newadodb.Stream
smFile.Type=adTypeBinary
smFile.Open
smFile.WritebytFile
smFile.SaveToFilem_sTempFileName,adSaveCreateOverWrite
1.3)解压缩
DimozipAsObject
Setozip=CreateObject("KDZIP.ZIP")
ozip.DeCompressm_sTempFileName, sFileName
1.4)显示出来
SetImg.Picture=LoadPicture(sFileName)
1.保存图片
1.4K/3自定义认证开发方法
目的:
提供用户可定义的K/3主控台登陆方法,用户可以按自己的方式验证,例如:
实现指纹认证,声音认证。
适用于K/3V10.3及以后版本。
:
1. 新建VB工程:
SelfIdentity.VBP
2. 添加一个窗体Form.frm
3. 添加一个模块Module1.mod
包含以下定义:
Publicg_strAcctNameAsString
Publicg_UserNameAsString
Publicg_UserPassWordAsString
4. 添加类ClsIdentity.cls
包含以下两个接口
PublicFunctionSeftClientSign(strAcctNameAsString,UserNameAsString,UserPassWordAsString,ErrMsgAsString)AsLong
IfUserName=g_UserNameAndg_strAcctName=strAcctNameAndg_UserPassWord=Trim(UserPassWord)Then
SeftClientSign=1
EndIf
EndFunction
PublicFunctionGetSelfPassWord(ByValstrAcctNameAsString,ByRefUserPassWordAsString)AsString
'弹出指纹任证界面,直到GetSelfPassWord返回值不为空
Form1.ShowvbModal
GetSelfPassWord="test"
UserPassWord="123"
g_strAcctName=strAcctName
g_UserName=GetSelfPassWord
g_UserPassWord=UserPassWord
EndFunction
5. 在账套管理>账套>参数设置,选择“自定义认证方式”
6. 在用户管理,设置用户test属性为“自定义认证方式”
7. 以test用户登陆。
1.5基础资料插件化开发
基础资料-插件接口由K3BaseDataEvents.dll提供:
1、概述
要使用插件,需要写一个插件的DLL,引用K3BaseDataEvents.dll,处理其提供的接口即可。
编写好插件DLL后,需要在数据库表中增加该插件的注册记录,如下:
表名:
t_ThirdPartyComponent
关键字段及意义:
FTypeID:
101
FTypeDetailID:
1-19,>=2000,核算项目类别ID
FComponentName:
客户端插件类的ProgID
FComponentSrv:
服务端插件类的ProgID–未实现
FDescription:
描述
注:
其中FTypeDetailID为0时表示该插件对所有核算项目都有效,比如对所有核算项目指定统一的编码规则、自定义某个通用行的名称等。
2、K3BaseDataEvents.ItemEvents类
该类定义了核算项目编辑界面所有的事件。
●PublicEventAfterGridLoad()
加载各字段后触发,可以在该事件中处理界面初始化、默认编码等等
●PublicEventGridChange(ByVallRowAsLong)
某一行单元格值更新后触发
●PublicEventEnterGrid(ByVallRowAsLong)
焦点进入某一行触发-如判断使用后不允许修改
●PublicEventOnPressF7(ByVallRowAsLong,
●ByRefRetColAsKDVBF.ReturnCollection,ByRefCancelAsBoolean)
按F7时触发,可以在该事件中自己处理弹出F7操作
●PublicEventBeforeList(ByVallRowAsLong,ByRefstrSqlReturnAsString)
弹出下拉列表前触发,用strSqlReturn返回查询列表的SQL语句,要求包括FNumber、FName等字段。
●PublicEventBeforeSave(CancelAsBoolean)
保存前触发–自定义校验数据
3、K3BaseDataEvents.ItemEditInterface类
该类定义了对核算项目编辑操作的一些属性、接口和方法
Ø属性
●PublicPropertyGetPropsString()AsString
功能未公开(Reserved)
●PublicPropertyGetGrid()AsObject
功能未公开(Reserved)
●PublicPropertyGetItemObject()AsEBCGL.Item
获得当前的核算项目对象,可以访问其属性
●PublicPropertyGetItemClass()AsEBCGL.ItemClass
获取核算项目类别对象,如类别为物料
●PublicPropertyGetItemClassId()AsLong
获取核算项目类别ID,如物料类别ID为4
●PublicPropertyGetParentID()AsLong
获取核算项目上级组ID,为0则没有上级组
●PublicPropertyGetParentItemObject()AsEBCGL.Item
获取上级组对象,通过该对象可访问上级组代码、名称等属性
方法
●PublicFunctionGetRowNumber(FieldNameAsString)AsLong
‘根据字段名称查找行号。
●PublicFunctionGetRowFieldProp(ByVallRowAsLong)AsCustomProperty
'根据行号获得字段属性
●PublicSubSetRowFocus(ByVallRowAsLong)
'设置焦点
●PublicSubSetRowLock(ByValRowAsLong)
'设置单元只读。
●PublicSubSetRowUnLock(ByValRowAsLong)
'设置单元为缺省非只读
●PublicSubSetRowNotNull(ByValRowAsLong)
'设置为必录项
●PublicSubSetRowBeNull(ByValRowAsLong)
'设置为非必录项
●PublicSubSetRowValue(ByValRowAsLong,OptionalNewValAsVariant="",OptionalNewIDAsVariant=0)
'设置行的值
●PublicFunctionReadCellText(ByVallColAsLong,ByVallRowAsLong)AsString
'读取Text
●PublicFunctionReadID(ByValRowAsLong)AsLong
'读取内部ID
●PublicFunctionReadValue(ByValRowAsLong)AsVariant
'读取数据
●PublicFunctionGetAnyRecordset(ByValSQLAsString)AsADODB.Recordset
'保留的
●PublicFunctionIsItemInUsed()AsBoolean
'判断该项目是否被使用-wScan
●PublicFunctionGetDecimalDigits(ByValdblValAsDouble)AsLong
'计算一个数值的小数位数
●PublicFunctionGetSystemProfileValue(ByValsCagegoryAsString,ByValsKeyAsString,OptionalByValsDefaultAsString="")AsString
'获得系统参数信息
●PublicFunctionItemIsDetail()AsBoolean
'获得该核算项目是否是明细,还是上级组
●PublicSubSetRowCaption(ByVallRowAsLong,sCaptionAsString)
'设置行标题
4、K3BaseDataEvents.ItemEditInterface对象
该对象不可直接创建,需由K3BaseDataEvents.ItemEvents的属性获得:
PublicPropertyGetEditInterface()AsItemEditInterface
5、插件编写方法
内部引用,初始化,并实现事件接口即可,(请参考组件K3BaseItemPlugin.dll的实现)
步骤如下:
a)新建DLL工程如Test.dll,并引用插件类库K3BaseItemPlugin.dll
b)新建类如MeterialPlug(物料插件)
c)定义WithEvents的K3BaseDataEvents.ItemEvents对象,并处理其事件
d)编写接口函数PublicSubShow(ByValoEventsAsItemEvents),在该函数中初始化插件对象,必须的!
!
e)可以使用K3BaseDataEvents.ItemEditInterface中提供的方法
f)插件写好后,编译成Test.dll,向数据库表中插入数据注册该插件即可,如下SQL:
insertintot_ThirdPartyComponent
(FTypeID,FTypeDetailID,FIndex,FComponentName)
values(101,4,1,'Test.MeterialPlug')
--101表示基础资料,4表示物料
--该sql表示当编辑物料时,加载Test.MeterialPlug插件,若要该插件在所有核算项目编辑中都加载,只要将FTypeDetailID设为0即可
g)测试、发布
'物料--插件
PrivateConstID_ITEMCLASSID=4'物料
PrivateWithEventsBaseItemEventsAsK3BaseDataEvents.ItemEvents'事件引擎
Privatem_EditInterfaceAsK3BaseDataEvents.ItemEditInterface'API接口
'该函数为接口函数,调用该函数进行初始化
PublicSubShow(ByValoEventsAsItemEvents)
SetBaseItemEvents=oEvents
Setm_EditInterface=BaseItemEvents.EditInterface
EndSub
'/********************************************************************/
'/*函数名称:
BaseItemEvents_AfterGridLoad
'/*日期:
2009-06-1114:
18
'/*作者:
wScan
'/*描述:
数据加载后触发,方便根据系统参数做某些特殊控制
'/*参数:
'/********************************************************************/
PrivateSubBaseItemEvents_AfterGridLoad()
''加载各字段后触发
EndSub
。
。
。
。
。
。
。
6、实例:
实现客户需要功能的代码
a)定义插件对象并初始化
PrivateWithEventsBaseItemEventsAsK3BaseDataEvents.ItemEvents'事件引擎
Privatem_EditInterfaceAsK3BaseDataEvents.ItemEditInterface'API接口
'该函数为接口函数,调用该函数进行初始化
PublicSubShow(ByValoEventsAsItemEvents)
SetBaseItemEvents=oEvents
Setm_EditInterface=BaseItemEvents.EditInterface
EndSub
b)实现:
录入物料的时候,不需要录入上级组代码。
系统自动带出上级组代码;核算项目录入界面的前两个字段是代码和名称,对任何核算项目都是这样。
客户要求加上前缀,如物料代码,客户代码。
PrivateSubBaseItemEvents_AfterGridLoad()
''加载各字段后触发
DimlRowAsLong
DimsParentNumberAsString
OnErrorGoToErr_Handler
lRow=m_EditInterface.GetRowNumber("FNumber")
Ifm_EditInterface.ParentID<>0Then
sParentNumber=
EndIf
''自动根据上级组编码填入前缀
m_EditInterface.SetRowValuelRow,sParentNumber&"."
EndIf
''设置个性化的行标题,如物料代码、物料名称等
m_EditInterface.SetRowCaption1,&"代码"
m_EditInterface.SetRowCaption
m_EditInterface.SetRowCaption
ExitSub
Err_Handler:
EndSub
c)自动编码实现和上面原理一样,指定一个规则,自动生成代码,并锁定不允许修改即可。
d)客户要求自动带出上级组代码,由于按上面的方法上级组代码仍然可以被修改掉,因此一种方法是:
可以让客户只录最后一级代码,在保存前自动加上其上级组代码,处理BeforeSave事件即可。
2.实现对物料的默认仓库属性的F7功能和下拉列表功能的进一步过滤,使其只显示包含“6.”的仓库
1.6用户权限管理插件化开发
用户权限管理-插件接口由K3BaseDataEvents.dll提供:
组件位置:
$/CodePublic/K3BASE/BaseData/client/K3BaseDataEvents/K3BaseDataEvents.vbp
实例插件代码位置:
$/CodePublic/K3BASE/BaseData/client/K3BaseAccessPlugin/K3BaseAccessPlugin.vbp
1.概述
要使用插件,需要写一个插件的DLL,引用K3BaseDataEvents.dll,处理其提供的接口即可。
编写好插件DLL后,需要在数据库表中增加该插件的注册记录,如下:
表名:
t_ThirdPartyComponent
关键字段及意义:
FTypeID:
102
FTypeDetailID:
从1开始,按照已有顺序+1定义。
FComponentName:
客户端插件类的ProgID
FComponentSrv:
服务端插件类的ProgID–未实现
FDescription:
描述
2.K3BaseDataEvents.AccessEvents类
该类定义了权限管理保存后的相关事件。
PublicEventAfterSaveUserAccessGroup(ByValUserIDAsLong,vctPermDataAsVector,ByValUserNameAsString,ByValsMachineNameAsString,ByValsIPAddressAsString)
用户组权限保存后触发
PublicEventPublicEventAfterSaveUserAccessDetail(ByValObjectTypeAsLong,_
ByValObjectIDAsLong,_
ByValvctSecurityInfoAsOb