金蝶Bos基础二次开发.docx

上传人:b****5 文档编号:12191716 上传时间:2023-04-17 格式:DOCX 页数:24 大小:58.80KB
下载 相关 举报
金蝶Bos基础二次开发.docx_第1页
第1页 / 共24页
金蝶Bos基础二次开发.docx_第2页
第2页 / 共24页
金蝶Bos基础二次开发.docx_第3页
第3页 / 共24页
金蝶Bos基础二次开发.docx_第4页
第4页 / 共24页
金蝶Bos基础二次开发.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

金蝶Bos基础二次开发.docx

《金蝶Bos基础二次开发.docx》由会员分享,可在线阅读,更多相关《金蝶Bos基础二次开发.docx(24页珍藏版)》请在冰豆网上搜索。

金蝶Bos基础二次开发.docx

金蝶Bos基础二次开发

1常用二次开发方法

1.1登陆界面图片修改

1)在中间层方式:

在中间层KD目录新建两个图片文件:

适用于10.4版本+PT007378,或V11版本与以后版本适用于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 

3)企业LOG方式

在中间层新建一个文件夹,命名为eptlogo并将其设置为只读共享,然后制作两个BMP格式的图片,分别作为logo和背景图,大小为145×180,分别命名为enterprise_logo.bmp,enterprise_bg.bmp,在客户端的主控台编辑器启用企业界面即可。

1.2主控台无界面登陆

适用版本:

(K/3V11.0.1+PT016290或V12以上版本)

1)域用户登录:

提供命令行参数:

KDMain.exe-LoginWin|账套代码|机构密码,无界面直接登录到K/3系统主控台

2〕命名用户登录:

提供命令行参数KDMain.exe-LoginUser|账套代码|机构密码|用户名|用户密码,无界面直接登录K/3系统主控台

3)参数之间的分隔符默认为〞|〞,由于用户密码可能包含特殊字符,用户可以通过修改注册表改变分隔符,注册表参数:

路径:

HKEY_CURRENT_USER\SoftWare\KingDee\K3

键:

LoginParm

4)获取账套代码的接口

组件部署:

客户端%Kdsystem%

方法名:

GetAccountList

参数描述

参数:

返回值类型:

ADODB.Recordset,包含字段:

序号

字段名

描述

1

FAcctID

账套ID

2

FAcctNumber

账套代码

3

FAcctName

账套名称

5)测试登录参数设置是否成功的接口

组件部署:

客户端%Kdsystem%

方法名:

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〕从数据库取得图片的二进制数据

    DimbytFile()AsByte ‘根据取数SQL生成记录集:

selectFFilefromt_Accessory

   bytFile=rs.Fields("FFILE")1.2)保存到文件

    DimsmFileAsadodb.Stream 

   

   smFile.Type=adTypeBinary

   

   smFile.WritebytFile

   smFile.SaveToFilem_sTempFileName,adSaveCreateOverWrite

1.3)解压缩

  DimozipAsObject

  Setozip=CreateObject("KDZIP.ZIP")

   ozip.Depressm_sTempFileName, sFileName

1.4)显示出来

   SetImg.Picture=LoadPicture(sFileName)  

1.保存图片

2.1)对图片进展压缩,压缩强度为6   Setdzip=CreateObject("KDZIP.ZIP")   dzip.pressApp.Path&"\1.bmp",App.Path&"\1.zip",6 2.2)读取文件      mstream.Type=adTypeBinary      mstream.LoadFromFileApp.Path&"\1.zip"   DimvarFile()AsByte   varFile=mstream.Read() 2.3)修正字节数,必须是偶数个(从0到奇数)   lFileSize=UBound(varFile)+1-(UBound(varFile)Mod2)   ReDimPreservevarFile(0TolFileSize)AsByte 2.4)把压缩后的图片导入到t_accessory表中   con="PersistSecurityInfo=True;Provider=SQLOLEDB.1;UserID=sa;Password=;DataSource=?

;InitialCatalog=AIS20091116094820"   sql1="select*fromt_accessorywhereFID=1"      rs.Opensql1,con,adOpenDynamic,adLockOptimistic   rs.Fields("FFile").AppendChunkvarFile()   

1.4K/3自定义认证开发方法

目的:

提供用户可定义的K/3主控台登陆方法,用户可以按自己的方式验证,例如:

实现指纹认证,声音认证。

适用于K/3V10.3与以后版本。

1.        

2.        

3.        

包含以下定义:

Publicg_strAcctNameAsString

Publicg_UserNameAsString

Publicg_UserPassWordAsString

4.        

包含以下两个接口

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_ThirdPartyponent

关键字段与意义:

FTypeID:

101

FTypeDetailID:

1-19,>=2000,核算项目类别ID

FponentName:

客户端插件类的ProgID

FponentSrv:

服务端插件类的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)

获得当前的核算项目对象,可以访问其属性

获取核算项目类别对象,如类别为物料

●PublicPropertyGetItemClassId()AsLong

获取核算项目类别ID,如物料类别ID为4

●PublicPropertyGetParentID()AsLong

获取核算项目上级组ID,为0如此没有上级组

获取上级组对象,通过该对象可访问上级组代码、名称等属性

方法

●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

'读取数据

'保存的

●PublicFunctionIsItemInUsed()AsBoolean

'判断该项目是否被使用-wScan

●PublicFunctionGetDecimalDigits(ByValdblValAsDouble)AsLong

'计算一个数值的小数位数

●PublicFunctionGetSystemProfileValue(ByValsCagegoryAsString,ByValsKeyAsString,OptionalByValsDefaultAsString="")AsString

'获得系统参数信息

●PublicFunctionItemIsDetail()AsBoolean

'获得该核算项目是否是明细,还是上级组

●PublicSubSetRowCaption(ByVallRowAsLong,sCaptionAsString)

'设置行标题

 

4、K3BaseDataEvents.ItemEditInterface对象

该对象不可直接创建,需由的属性获得:

PublicPropertyGetEditInterface()AsItemEditInterface

5、插件编写方法

内部引用,初始化,并实现事件接口即可,〔请参考组件K3BaseItemPlugin.dll的实现〕

步骤如下:

a)新建DLL工程如Test.dll,并引用插件类库K3BaseItemPlugin.dll

b)新建类如MeterialPlug(物料插件)

c)定义WithEvents的对象,并处理其事件

d)编写接口函数PublicSubShow(ByValoEventsAsItemEvents),在该函数中初始化插件对象,必须的!

e)可以使用中提供的方法

f)插件写好后,编译成Test.dll,向数据库表中插入数据注册该插件即可,如下SQL:

insertintot_ThirdPartyponent(FTypeID,FTypeDetailID,FIndex,FponentName)

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)

IfoEvents.EditInterface.ItemClassID<>ID_ITEMCLASSIDThenExitSub

SetBaseItemEvents=oEvents

EndSub

'/********************************************************************/

'/*函数名称:

BaseItemEvents_AfterGridLoad

'/*日期:

2009-06-1114:

18

'/*作者:

wScan

'/*描述:

数据加载后触发,方便根据系统参数做某些特殊控制

'/*参数:

'/********************************************************************/

PrivateSubBaseItemEvents_AfterGridLoad()

''加载各字段后触发

EndSub

6、实例:

实现客户需要功能的代码

a)定义插件对象并初始化

PrivateWithEventsBaseItemEventsAsK3BaseDataEvents.ItemEvents'事件引擎

Privatem_EditInterfaceAsK3BaseDataEvents.ItemEditInterface'API接口

'该函数为接口函数,调用该函数进展初始化

PublicSubShow(ByValoEventsAsItemEvents)

SetBaseItemEvents=oEvents

EndSub

b)实现:

录入物料的时候,不需要录入上级组代码。

系统自动带出上级组代码;核算项目录入界面的前两个字段是代码和名称,对任何核算项目都是这样。

客户要求加上前缀,如物料代码,客户代码。

PrivateSubBaseItemEvents_AfterGridLoad()

''加载各字段后触发

DimlRowAsLong

DimsParentNumberAsString

OnErrorGoToErr_Handler

lRow=m_EditInterface.GetRowNumber("FNumber")

Ifm_EditInterface.ParentID<>0Then

sParentNumber=

EndIf

''自动根据上级组编码填入前缀

Ifm_EditInterface.ItemObject.ItemID=0Andm_EditInterface.ParentID<>0Then'新增

lRow,sParentNumber&"."

EndIf

''设置个性化的行标题,如物料代码、物料名称等

1,&"代码"

2,m_EditInterface.ItemClass.Name&"名称"

3,m_EditInterface.ItemClass.Name&"全名"

ExitSub

Err_Handler:

EndSub

c)自动编码实现和上面原理一样,指定一个规如此,自动生成代码,并锁定不允许修改即可。

d)客户要求自动带出上级组代码,由于按上面的方法上级组代码仍然可以被修改掉,因此一种方法是:

可以让客户只录最后一级代码,在保存前自动加上其上级组代码,处理BeforeSave事件即可。

 

2.实现对物料的默认仓库属性的F7功能和下拉列表功能的进一步过滤,使其只显示包含“6.〞的仓库

1.6用户权限管理插件化开发

用户权限管理-插件接口由K3BaseDataEvents.dll提供:

 

要使用插件,需要写一个插件的DLL,引用K3BaseDataEvents.dll,处理其提供的接口即可。

编写好插件DLL后,需要在数据库表中增加该插件的注册记录,如下:

表名:

t_ThirdPartyponent

关键字段与意义:

FTypeID:

102

FTypeDetailID:

从1开始,按照已有顺序+1定义。

FponentName:

客户端插件类的ProgID

FponentSrv:

服务端插件类的ProgID–未实现

FDescription:

描述

 

该类定义了权限管理保存后的相关事件。

PublicEventAfterSaveUserAccessGroup(ByValUserIDAsLong,vctPermDataAsVector,ByValUserNameAsString,ByValsMachineNameAsString,ByValsIPAddressAsString)

用户组权限保存后触发

PublicEventPublicEventAfterSaveUserAccessDetail(ByValObjectTypeAsLong,_

ByValObjectIDAsLong,_

ByValvctSecurityInfoAsObject,_

ByValUserIDAsLong,_

ByValsUserNameAsString,_

ByValsMachineNameAsString,_

ByValsIPAddressAsString,_

ByValvctDelAccessAsKFO.Vector)

用户明细权限保存后触发

 

内部引用,初始化,并实现事件接口即可,〔请参考组件K3BaseAccessPlugin.dll的实现〕

步骤如下:

a)新建DLL工程如K3BaseAccessPlugin.dll,并引用插件类库K3BaseDataEvents.dll

b)新建类如CBIAccessEdit(BI模块在权限修改后做相关处理的插件)

c)定义WithEvents的对象,并处理其事件

d)编写接口函数PublicSubShow(ByValoEventsAsAccessEvents),在该函数中初始化插件对象,必须的!

e)插件写好后,编译成K3BaseAccessPlugin.dll,向数据库表中插入数据注

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1