金蝶 K3 BOS开发百问百答(2007年版)
- 格式:pdf
- 大小:426.56 KB
- 文档页数:34
K/3 BOS开发百问百答应用集成部客户化管理部2005年12月目录一、插件开发篇______________________________________________________ 1【问题1】在插件中以新增、修改和查看方式打开另一单据____________________________ 1【问题2】我想在投料变更单的菜单上加入一个菜单项,需要插入一个插件,但投料变更单上已经有一个插件了,我想了解一下怎样才可以再插入一个插件呢?_______________ 2【问题3】如何通过插件代码动态设置基础资料或业务单据序时薄过滤条件 _______________ 2【问题4】在插件中调用序时簿并返回选中的数据 ____________________________________ 3【问题5】在自定义的BOS单据上,通过插件作生成凭证的功能,但是在调用凭证的组件时,需要一个二次登录后才能使用相应的模块。
请问:如何处理隐身的二次登录,或者其他的变通处理。
________________________________________________________ 3【问题6】在设计BOS单据的过程中,经常会有关联的下拉列表框操作,如我在客户上选择“建设银行”,那么在客户相对应的地址的下拉列表框中应动态显示“建设银行所对应的地址”。
也就是说客户地址是随着客户的变化而变化的。
________________________ 6【问题7】如何可以物料多选?___________________________________________________ 6【问题8】在表单分录里需要在第一列中使用F7键或点击菜单调出某一窗体(在插件中自定义Form,上有Spread表单),在Form中选中数据(多条或一条),返回到源单,请问在插件中用什么事件可以完成?在单据中添加一菜单,用MenuBarClick事件,F7不易实现。
K3+Cloud+BOS+业务配置百问百答K/3 Cloud BOS百问百答修订记录⽬录⼀、BOS集成开发环境 _______________________________________________ 11.1 【摘要】:单据体中的字段顺序怎样调整 _________________________________________ 1 1.2 【摘要】:单据列表中的字段顺序怎样调整 _______________________________________ 1 1.3【摘要】:单据列表中汇总⾏怎样设置字段汇总 ____________________________________ 1 1.4【摘要】:BOS报表引出问题____________________________________________________ 1 1.5【摘要】:创建的动态表单发布后,在单据转换、⼯作流管理都选择不到 ______________ 2 1.6【摘要】:单据中的基础资料字段的关联检索字段属性不能控制模糊查询______________ 2 1.7【摘要】:调整“默认⽪肤 - 我的⼯作”的页签的⽅法 _____________________________ 2 1.8【摘要】:K/3 Cloud kdpkg格式的补丁及SP安装包如何安装________________________ 3 1.9【摘要】:单据体中的字段汇总⾄表头 ____________________________________________ 3 1.10【摘要】:K/3 Cloud有没有类似K/3 WISE的单据⾃定义的功能?___________________ 3 1.11【摘要】:K/3 Cloud BOS平台配置的⾃定义单据是如何⽣成凭证____________________ 4 1.12【摘要】:K/3 Cloud BOS注册开发商信息________________________________________ 4 1.13【摘要】:K3cloud单据是否可以⽀持图⽚显⽰和打印______________________________ 4 1.14【摘要】:K/3 Cloud BOS开发平台的详细说明____________________________________ 5 1.15【摘要】:K/3 Cloud BOS运⾏时站点相关问题____________________________________ 5 1.16【摘要】:K/3 Cloud BOS注册开发商信息________________________________________ 5 1.17【摘要】:K/3 Cloud 下载BOS设计器和客户端问题_______________________________ 5 1.18【摘要】:K/3 Cloud BOS单据体⾥⾏号如何设置__________________________________ 6 1.19【摘要】:K/3 Cloud BOS IDE的⼆次开发单据测试问题____________________________ 6 1.20【摘要】:源单编号字段与原单类型字段的⽤法___________________________________ 6 1.21【摘要】:单据体分录设置冻结列_______________________________________________ 6 1.22【摘要】:⼆次开发单据的员⼯基础资料字段携带相关“部门”“岗位”等信息____________ 7 1.23【摘要】:K/3 Cloud BOS运⾏平台站点数计算⽅式________________________________ 7 1.24【摘要】:K/3 Cloud BOS⼆次开发单据⽣成凭证问题______________________________ 8 1.25【摘要】:K/3 Cloud BOS⼆次开发单据⼦系统变更________________________________ 8 1.26【摘要】:K/3 Cloud附件管理界⾯菜单锁定控制__________________________________ 8 1.27【摘要】:K/3 Cloud弹性域及辅助属性的应⽤问题________________________________ 81.28【摘要】:K/3 Cloud BOS建⽴的单据和基本资料权限控制问题 _____________________ 9 1.29【摘要】:单据状态信息中操作⼈字段、操作⽇期字段配置问题 _____________________ 9 1.30【摘要】:单据作废后删除问题_________________________________________________ 9 1.31【摘要】:下拉列表必录控制逻辑问题___________________________________________ 9 1.32【摘要】:K/3 Cloud附件管理界⾯菜单锁定控制__________________________________ 9 1.33【摘要】:单据头菜单能否做成模版,其他新建单据引⽤?________________________ 10 1.34【摘要】:单据体中⾃动新增⾏________________________________________________ 101.35【摘要】:单据体分录附件问题 ________________________________________________ 10⼆、套打设计平台__________________________________________________ 142.1 【摘要】:套打合计⾏在每个页⾯中都打印 ______________________________________ 14 2.2 【摘要】:布局表格添加⽂本后边框怎样设置 ____________________________________ 14 2.3 【摘要】:安装了“打印组件”,打印时扔提⽰提⽰“打印组件不可⽤,…”___________ 14 2.4 【摘要】:套打中数量的精度与单据上数量精度保持⼀致__________________________ 14 2.5 【摘要】:套打格式复制怎样复制______________________________________________ 153.1 【摘要】:万能报表发布问题 _________________________________________________ 19 3.1 【摘要】:单据类报表明细问题 _______________________________________________ 193.1 【摘要】:万能报表---设置字体加粗打印出现问题 _______________________________ 19四、业务流程______________________________________________________ 204.1【摘要】:单据下推时,⽆法选择⽬标单的单据类型。
金蝶常见的100个问题集1、明细帐查询错误错误描述:帐套在查询明细帐(包括数量明细帐)时提示“产生未知错误”或提示:发生未知错误,系统将当前操作取消,错误号为0,请与金蝶公司联系。
问题原因:数据库表Glbal,Glpnl 表损坏处理方法:备份当前数据表后,导入新的表结构,并把原数据导入到新表,再利用Check 检查关系的完整性。
2、报表取数出现翻倍错误描述:在报表中进行数据重算后,数据出现双倍。
问题原因:系统在凭证过账时产生过账错误。
(报表公式错误除外)处理方法:具体步骤如下:1)进行反过帐、反结帐到出错期间,2)安装新版本软件(建议用比较高的版本),3)在新版本软件中恢复操作权限,4)在新版本软件中重新进行过帐、结帐注意:如果是偶尔在最近一期才出现这种现象,则只需将数据中的Glpnl 表中的记录删除,再反过帐→反结帐→过帐→结帐,即可。
3、利用ODBC 修复账套操作步骤;1)、打开Office 工作组管理文件Wrkgadm.Exe 链接System.Mda 文件2)、取消System.Mda 的登录密码:进入Access,不打帐套,通过“工具--安全--用户组与帐号”----“更改登录密码”,输入原密码后,直接确定。
3)、设置Odbc:进入Win2000 的ODBC,添加--选择“DriverDo Microsoft Access(*.Mdb)”---完成4)、数据库---选择System.Mda 所在路径和它的文件名5)、设置高级选项:输入登录的名称(Morningstar);此时不要输入密码,它也没有密码的。
6)、设置修复选项:选择需要修复的帐套,确定。
7)、待系统将提示修复成功,可以用Access 和软件检测试数据了,结合Check 检查该帐套的完整性。
8)、修改完成后,建议回到Access 中,将密码还原,以确保数据库的安全。
帮助顾客成功- 4 - 技术支持快递第6 期4、帐套备份提示错误错误描述:进行账套备份时,系统提示:文件操作发生下面的错误,请仔细检查有关的文件、路径和驱动器91:未设置对象变量或With Block 变量。
金蝶K3 认证考试理论题库单项选择题1、库存订货点理论在时间开展起来的〔 B 〕A、20世纪80年代B、20世纪30年代C、20世纪90年代末2、ERP 理论是何时应运而生的〔A 〕A、20 世纪80年代B、20世纪30年代C、20世纪90年代末3、金蝶K/3 产品的核心设计思想〔B 〕A、效劳客户B、标准业务流程C、企业根底管理D、理性决策4、安装金蝶K/3 之前关键要进展〔C 〕工作,以便使系统环境满足安装需要。
A、安装2000操作系统B、安装数据库C、环境检测并安装所需第三方软件D、安装sqlserver5、财政部制定的?会计核算软件根本功能标准?是对会计软件的〔 C 〕要求。
A、最高B、较高C、最低D、较低6、K/3 系统的建账工作是在〔B 〕进展。
A、K/3客户端B、K/3中间层C、K/3数据库D、以上几处皆可7、某企业成立于2000年6月,2005年12月购入K/3软件,2006年3月开场正式使用软件并录入2006 年1月的账务数据,那么该企业的账套启用期间是〔 D 〕A、2000年6月B、2005年12月C、2006年3月D、2006年1月8、用户详细的授权是通过〔 C 〕按钮来进展的。
A、<授权>B、<全选>C、<高级>D、<数据授权>9、拥有最大管理权限,无需授权的用户是( A )A、系统管理员B、任何授予了全部权限的用户C、账套主管D、没有此类用户10、用户对各子系统中功能模块的功能操作权限,当用户拥有了子系统的此项权限时,才能进展对应模块的功能操作。
此权限是指〔 A 〕A、功能权限B、数据权限C、字段权限D、金额权限11 、以下〔C 〕账簿查看前需要设计账簿格式A、总账B、明细账C、多栏账D、数量金额明细账12、凭证打印时只想打印一级科目,不想打印明细科目,在〔 B 〕中汇总打印中实现。
A、凭证录入界面B、凭证序时簿C、账簿D、凭证汇总13、只有在〔B〕中设定为<期末调汇〉的科目才会进展期末调汇处理。
金蝶BOS认证模拟试题金蝶BOS认证模拟试题判断题1、基础资料分单级、多级、分组单级、分组多级四种<错>答案:基础资料分单级、多级、分组、分组多行表四种2、业务单据都需要一个具有数字含义,同时参杂着重要信息的编号,作为单据的唯一的、有意义的标识,这个标识符,就是编码。
<对>3、套打中的数据表是一种表格,行、列、单元格是组成表格的基本元素,具有分组展现、统计功能,可以绑定多个数据源<错> 答案:只能绑定一个数据源4、编码规则中的规则模板不能指定使用的公司<对>5、BIM视图下不支持将已定义的业务单元部署到真实的运行环境中<错>答案:支持6、BOTP单据转换中必须是新建的空目标单据才能拉式生成<对>7、员工生日预警为即时预警<错>答案:周期预警8、工作流中子流程挂起会不会影响父流程任何节点<错>答案:会导致父流程对应节点挂起9、用户建立后默认是有查看功能权限的<错>答案:默认是没有任何功能权限10、在BIM中WEB界面可以通过已有的GUI界面生成< 对>多选题1、业务建模工具提供包括以下哪些功能A、基础资料定义B、业务单据定义C、核算项目定义D、业务功能定义E、主菜单管理2、业务单元在发布的过程中,会做以下哪些事情A、发布相关元数据,包括校验、发布生成代码B、生成部署文件,生成相关的属性文件C、编译代码D、生成数据库升级脚本E、做发布记录等相关内容3、导入解决方案有下例几种方式:A、远程服务器导入B、远程项目导入C、本地服务器导入D、本地项目导入4、工作流中路流的作用有:A、流程转换B、美化图形C、互斥动作D、条件判断5、工作流中活动出口方式有:A、所有连接B、任意一条满足条件的连接C、任意一条连接D、满足条件的连接6、扩展报表可以通过下列哪些来访问:A、GUI报表B、WEB报表C、打印D、EXCEL、PDF7、预警模板由哪些组成A、预警对象B、预警条件C、消息设置D、调度周期8、工作流中流程类型有:A、微流程B、普通流程C、特殊流程D、流程模版9、字段中的数据来源方法有A、手工录入B、基础资料类别C、已有基础资料相关属性D、固定下拉列表E、其他业务单元10、套打中的单元对象包括:A、文字对象B、金额对象C、日期对象D、图片对象E、数字对象11、扩展报表有哪几种类型:A、图表型B、交叉分析型C、分组汇总型D、列表型12、编码规则的优先策略有:A、集团优先B、多组织优先C、组织优先D、管理单元优先13、特殊数据权限中设置了字段权限后效果有:A、编辑界面无权查看字段,会用“无权限”遮盖B、编辑界面无权修改的字段,灰掉。
K/3 BOS开发百问百答(版本:2007版)行业产品部2008年1月目录一、业务单据篇_____________________________________________________1【摘要】如何控制BOS单据不允许删除_______________________________________________1【摘要】应收应付套打_____________________________________________________________1【摘要】收款单(BOS老单据)模板修改后,多个用户同时新增单据时出错_______________1【摘要】BOS单据新增功能网络控制问题______________________________________________1【摘要】通过插件对单据体某一列进行锁定或解锁_____________________________________2【摘要】BOS插件调用F7功能_______________________________________________________2【摘要】如何在插件中调出BOS单据的序事簿并且不弹出过滤窗口_______________________3【摘要】用户类型字段赋值_________________________________________________________4【摘要】在插件中刷新序事簿_______________________________________________________5【摘要】如何在BOS单据体中显示红字或蓝字_________________________________________5【摘要】获取当前被审核单据的FID值________________________________________________5【摘要】组件中如何直接调用取得即时库存___________________________________________6【摘要】单据编号不允许重复_______________________________________________________6【摘要】BOS单据生成凭证出错______________________________________________________6【摘要】下推按钮放在单据上,而不是序事簿里_______________________________________6【摘要】用BOS插件支持DDE吗_______________________________________________________7【摘要】BOS插件如何调用存储过程_________________________________________________7【摘要】如何在单据显示前给字段预赋值_____________________________________________8【摘要】无法复制分录_____________________________________________________________8【摘要】如何在10.3和10.4的老单据上添入图形字段,并可套打出来____________________8【摘要】K3 V10.3 BOS能否在change事件中读取到改变前的原值_________________________8【摘要】在插件中实现自动保存_____________________________________________________9【摘要】对所选单据分录如何正行高光显示或改变所选中行的背景色_____________________9【摘要】如何在BOS单据的插件中调用老单据__________________________________________9【摘要】如何在BOS单据(供应链单据)中使用F12查看即时库存________________________13【摘要】BOS单据下推老单据时如何处理辅助属性____________________________________13【摘要】开发一张BOS单据在编辑状态下能否输入一个单据号调出整张单据的信息_________14【摘要】在生成记录凭证时相同的分录不能合并______________________________________14【摘要】如何在插件中获取单据体某个字段的值______________________________________14【摘要】K3V10.3是否支持基础资料多选____________________________________________15【摘要】BOS V10.4按单生居凭证,合并生成凭证不见了________________________________15【摘要】如何在插件中调出附件界面________________________________________________15【摘要】如何在插件中执行值更新事件______________________________________________15【摘要】升级至10.4后,进入BOS系统业务单据不能保存_______________________________16二、多级审核篇____________________________________________________17【摘要】关于多级审核指定下级审核人______________________________________________17【摘要】处理多极审核设置跳转条件后有选择性地发送消息____________________________17【摘要】K3 10.3 BOS叙事簿如何实现批审核功能_____________________________________18【摘要】怎样显示驳回信息________________________________________________________18【摘要】BOS单据如何自动启动多级审核____________________________________________18【摘要】远程服务器不存在或不可用________________________________________________19三、单据转换流程篇________________________________________________20【摘要】不能实现记录选择________________________________________________________20【摘要】如何新增K3工业单据(老单据)之间的单据转换流程?另外如果用BOS可以满足,客户是否需要沟买BOS?___________________________________________________20【摘要】如何控制已关联的单据不能再下推__________________________________________20【摘要】如何将下推按钮移到序事簿工具栏上________________________________________21【摘要】BOS单据下推老单据时无法处理值更新事件__________________________________21【摘要】删除BOS单据时报错,提示“对象名T1无效”_________________________________21【摘要】生产任务单下推BOS单据,关联关系为钩稽或关联复制时报错__________________21【摘要】新单推老单时如何实现严格控制____________________________________________22【摘要】请设置关联源单内码保存__________________________________________________22四、报表篇_________________________________________________________1【摘要】万能报表中选择数据表的问题_______________________________________________1五、部署发布篇_____________________________________________________2【摘要】应收应付系统中的BOS单据(老单据)修改后如何发布____________________________2【摘要】基础资料自定义属性不能随BOS安装包一起发布_______________________________2【摘要】无法发布_________________________________________________________________2六、其他篇_________________________________________________________4【摘要】BOS登录问题_____________________________________________________________4【摘要】K/3账套管理密码丢失的处理方法___________________________________________4【摘要】如何使远程桌面登录到中间层服务器上的K3客户端能够正确登录_________________4【摘要】K3工业单据动态过滤______________________________________________________4【摘要】如何设置BOS开发的模块的帐期______________________________________________5【摘要】关于k3v10.4的一个bug____________________________________________________5【摘要】加密狗使用记录不存在(或无效),请退出重新登录______________________________5【摘要】10.4软加密后,还能不能帮助客户进行二次开发_______________________________6【摘要】账套升级错误_____________________________________________________________6【摘要】如何在外挂程序中利用VB调用BOS单据及BOS序时薄,BOS单据中的关联关系如何在VB中使用____________________________________________________________________6【摘要】工业单据插件中如何获得基础资料类型字段的内码_____________________________7一、业务单据篇【摘要】如何控制BOS单据不允许删除版本:所有版本问题描述:在K3BOS开发的单据序时薄中,如何实现选中的单据不允许删除,只能在外挂系统(二次开发)中删除,未发现单据序时薄的BeforeDeleteBill事件,只有AfterDeleteBill事件,插件中无法实现上述控制。
金蝶K3认证考试理论题库单选题1、库存订货点理论在时间发展起来的(B)A、20世纪80年代B、20世纪30年代C、20世纪90年代末2、ERP理论是何时应运而生的(A)A、20世纪80年代B、20世纪30年代C、20世纪90年代末3、金蝶K/3产品的核心设计思想( B )A、服务客户B、规范业务流程C、企业基础管理D、理性决策4、安装金蝶K/3之前关键要进行(C)工作,以便使系统环境满足安装需要。
A、安装2000操作系统B、安装数据库C、环境检测并安装所需第三方软件D、安装sqlserver5、财政部制定的《会计核算软件基本功能规范》是对会计软件的(C)要求。
A、最高B、较高C、最低D、较低6、K/3系统的建账工作是在(B)进行。
A、K/3客户端B、K/3中间层C、K/3数据库D、以上几处皆可7、某企业成立于2000年6月,2005年12月购入K/3软件,2006年3月开始正式使用软件并录入2006年1月的账务数据,则该企业的账套启用期间是(D)A、2000年6月B、2005年12月C、2006年3月D、2006年1月8、用户详细的授权是通过(C)按钮来进行的。
A、<授权>B、<全选>C、<高级>D、<数据授权>9、拥有最大管理权限,无需授权的用户是( A )A、系统管理员B、任何授予了全部权限的用户C、账套主管D、没有此类用户10、用户对各子系统中功能模块的功能操作权限,当用户拥有了子系统的此项权限时,才能进行对应模块的功能操作。
此权限是指(A)A、功能权限B、数据权限C、字段权限D、金额权限11、下列(C)账簿查看前需要设计账簿格式A、总账B、明细账C、多栏账D、数量金额明细账12、凭证打印时只想打印一级科目,不想打印明细科目,在(B)中汇总打印中实现。
A、凭证录入界面B、凭证序时簿C、账簿D、凭证汇总13、只有在(B)中设定为<期末调汇>的科目才会进行期末调汇处理。
金蝶K3问题整理问题描述在套打销售出库单时,单价的小数位都成了两位,实际上不止两位?解决方法进入套打设置后,在文本属性找到“销售单价”,在数字格式中找到0.00,在其后加上0,即有多少个小数位就有多少个0即可。
问题描述在录入应收应付系统的某些单据时,有些项目不用录入,如部门,职员等,但在保存时系统老是提示,能否去除?解决方法如果是供应链的单据,可以在单据自定义中显示其可见性或是直接在部门和职员等项目处补充完整,如果是应收应付系统的单据需要进入到K3BOS系统中去对这些单据设置其可见性。
问题描述销售出库单或其他单据录入界面功能栏“批录”作用是什么?解决方法是指可以批量录入仓库和成本对象(生产领料单)在出、入库单、调拨单等有仓库的单据多条分分下,录入仓库信息(成本对象)时,首先将光标停留在录好的仓库信息上,则其他物料的“收入或发出仓库”会自动填入相同的仓库信息问题描述购货发票修改金额字段后,单价不会改变解决方法单据界面选项--钩上“调整金额后倒算单价”问题描述在9月份做的出库单,现在要退货,如何做单据?如果以前有录入出库单,现关联原出库单生成红字出库单,如果以前没有录入出库单,现手工录入红字销售出库单,成本要手工确定。
问题描述仓库调拨单从原材料仓调到了不良品仓,调拨单已经审核了,但是在即时库存中,不良品仓里没有这一笔,原材料仓里也没有这一笔解决方法调拨入库后又有出库,因此即时库存为0问题描述用户权限可否从一个账套引入到另一个账套解决方法通过账套管理-账套菜单-用户引入引出,选择复制权限问题描述10.3采购管理中,一个用户在查询某一供应商的采购订单时有一张订单查询不到,其他用户却是可以的。
解决方法系统参数设置了“操作员权限控制到操作员组”。
问题描述某客户原来叫“东方电子”,现在该名为“东北电子”,在应收系统,之前有发票,现在在收到款项,怎样核销?解决方法先进行应收款转销,在核销。
问题描述哪一张报表能反映调拨单业务的情况?收发业务汇总表可选单据的事务类型过滤报表问题描述订单关闭后能否手工录入信息。
K/3 Cloud BOS 插件开发百问百答修订记录问题和意见如果你对文档有任何意见、问题或想法,或者你的问题未在此文档中找到答案,请通过电子邮件联系我们jinbo_zhang@目录K/3 Cloud BOS 插件开发百问百答 (1)1. 入门篇 (4)1.1. 如何创建并启用各类插件 (4)1.1.1. 如何创建并启用动态表单插件 (4)1.1.2. 如何创建并启用单据编辑插件 (8)1.1.3. 如何创建并启用基础资料编辑插件 (9)1.1.4. 如何创建并启用列表插件 (10)1.1.5. 如何创建并启用操作插件 (11)1.1.6. 如何创建并启用账表取数插件 (15)1.1.7. 如何创建并启用单据转换插件 (18)1.1.8. 如何创建并启用反写插件 (18)1.2. 为何插件不起作用,如何排查 (20)2. 进阶篇 (21)2.1. 插件代码,如何自行调用单据操作服务 (21)2.1.1. 如何加载(Load)单据 (21)2.1.2. 如何调用保存(Save)操作 (25)2.1.3. 如何调用提交(Submit)操作 (28)2.1.4. 如何调用审核/反审核(Audit/UnAudit)操作 (31)2.1.5. 如何调用禁用(Disabled)操作 (34)2.1.6. 如何删除(Delete)单据 (37)2.2. 调用单据操作后,如何判断结果,并处理交互提示 (40)2.3. 插件给字段赋值后,为什么不执行字段”值更新属性”上配置的表单服务 (44)2.4. 在动态表单插件中,如何修改界面数据 (46)2.4.1. 如何新增单据体行 (46)2.4.2. 如何删除单据体行 (48)2.4.3. 如何给普通字段赋值 (49)2.4.4. 如何给基础资料字段赋值 (50)2.4.5. 如何动态设置下拉列表字段的可选项 (52)2.5. 字段标识(Key)、字段名(FieldName)、属性名(PropertyName)的差别 (53)2.6. 在动态表单中,如何实现文件下载 (53)2.7. 如何支持用户把本地文件上传到服务器 (57)2.8. 以实例说明如何为动态表单取数、填充 (58)2.9. 如何为预置账表,添加字段 (60)2.10. 如何获取基础资料的属性值 (60)2.11. 保存前,如何为新建的单据数据包、单据体行,填写主键 (61)2.12. 在动态表单插件中,如何显示指定界面 (62)2.13. 如何为收款单,往来单位类型,添加新的基础资料 (64)2.14. 如何创建、调试自定义执行计划 (66)2.15. 如何通过按钮实现F8选择返回效果 (67)2.16. 如何在操作插件中,自定义操作校验器并启用 (69)2.17. 如何实现超链接,打开外部URL地址 (73)2.18. 如何获取基础资料字段的类别(FormId) (74)3. 高级篇 (75)3.1. 如何给单据体表格,增加自定义过滤行 (75)1.入门篇1.1.如何创建并启用各类插件1.1.1.如何创建并启用动态表单插件创建插件工程动态表单插件,运行在K/3 Cloud的Web服务层,需要建立一个独立的工程管理动态表单插件类;动态表单插件工程,建议命名格式为[开发商][.K3][.业务领域][.子系统].Business.PlugIn;如JD.K3.SCM.PUR.Business.PlugIn;创建工程过程:Visual Studio →New →ProjectVisual C# →Class Library →选择工程文件存放位置→OK工程References右键,添加工程引用,所添加组件都来自Cloud网站的website\bin路径修改插件工程输出路径为Cloud网站路径website\bin:选中插件工程→右键→Property (属性)→Build页签→Output Path(输出路径)修改当前类(Class1)的继承对象为AbstractDynamicFormPlugIn类文件引用基类(AbstractDynamicFormPlugIn)所在命名空间C#using Kingdee.BOS.Core.DynamicForm.PlugIn;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")] publicclass Class1 : AbstractDynamicFormPlugIn{}}注册并启用插件插件编写完毕,编译工程,输出类库*.dll文件到WebSite\Bin目录;打开BOSIDE,定位到动态表单模型整体属性,配置表单插件属性点开表单插件属性,注册编译生成的插件工程组件,从website\bin路径下找到插件工程组件,选择插件工程组件下的插件类,一般在插件类上使用微软元数据描述,在注册插件时区分不同的类,选择注册插件后,注意勾选“启用”复选框1.1.2.如何创建并启用单据编辑插件创建单据编辑插件单据编辑插件,运行在K/3 Cloud的Web服务层,重用动态表单插件工程;创建插件类的过程,与创建动态表单插件几乎一样,唯一区别是单据编辑插件继承的基类是AbstractBillPlugIn插件类引用基类所在命名空间C#using Kingdee.BOS.Core.Bill.PlugIn;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")]publicclass Class2 : AbstractBillPlugIn{//TODO}}启用单据编辑插件与启用动态表单插件一样1.1.3.如何创建并启用基础资料编辑插件如何创建基础资料编辑插件基础资料编辑插件,运行在K/3 Cloud的Web服务层,重用动态表单插件工程;与创建单据编辑插件一样,唯一区别是基础资料编辑插件继承的基类是AbstractBasePlugIn,目前AbstractBasePlugIn与AbstractBillPlugIn完全一样,但不论从模型分类角度或从未来发展趋势看,还是请大家严格遵守插件体系,即:从AbstractBasePlugIn继承C#using Kingdee.BOS.Core.Base.PlugIn;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")]publicclass Class3 : AbstractBasePlugIn{//TODO}}如何启用基础资料编辑插件与启用动态表单插件一样1.1.4.如何创建并启用列表插件如何创建列表插件列表插件,运行在K/3 Cloud的Web服务层,重用动态表单插件工程;与创建表单插件一样,唯一区别是列表插件从AbstractListPlugIn继承出来C#using Kingdee.BOS.Core.List.PlugIn;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")] publicclass Class4 : AbstractListPlugIn{//TODO}}如何启用列表插件与启用动态表单插件一样,唯一区别是注册列表插件的位置是模型的列表插件属性1.1.5.如何创建并启用操作插件如何创建操作插件操作插件,运行在K/3 Cloud的App服务层,需要单独创建一个工程管理操作插件类; 操作插件工程,命名规范:[开发商][.K3][.业务领域][.子系统].App.ServicePlugIn,如JD.K3.SCM.PUR.App.ServicePlugIn操作插件工程类型也是Class library,编译输出的路径同样是Website\bin;操作插件工程类型,因为运行层次不一样,与动态表单插件工程引用的类库*dll稍有不同:新建操作插件类的过程,与创建动态表单插件类似,区别在于操作插件继承的基类是AbstractOperationServicePlugInC#using Kingdee.BOS.Core.DynamicForm.PlugIn;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{[ponentModel.Description("区分当前类应用在哪个操作上")]publicclass Class1 : AbstractOperationServicePlugIn{}}如何启用操作插件打开BOSIDE,点开模型操作列表例如当前操作插件是应用在保存操作上,选择保存操作,点编辑其他控制页签,服务插件1.1.6.如何创建并启用账表取数插件如何创建账表取数插件账表取数插件,运行在K/3 Cloud的App服务层,需单独创建一个工程(Class library); 账表取数插件工程,命名规范:[开发商][.K3][.业务领域][.子系统].App.ReportPlugIn,如JD.K3.SCM.PUR.App.ReportPlugIn;插件工程引用组件(包括但不限于此,也可参考操作插件工程引用的组件):与创建动态表单插件类似,区别在于帐表服务器插件继承自SysReportBaseService 插件类文件引用基类所在命名空间C#using Kingdee.BOS.Contracts.Report;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ReportPlugInDemo{publicclass Class1 : SysReportBaseService{//TODO}}如何启用账表服务器插件进入BOSIDE,打开账表模型,设置服务器插件属性注册编译好的账表服务器插件,并点击启用复选框1.1.7.如何创建并启用单据转换插件如何创建单据转换插件单据转换插件,运行在K/3 Cloud的App服务层,重用操作插件工程;创建插件类,与创建动态表单插件类类似,继承基类是AbstractConvertPlugIn插件类文件引用基类所在命名空间C#using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BusinessFlowPlugIn{publicclass Class1 : AbstractConvertPlugIn{//TODO}}如何启用单据转换插件打开BOSIDE,打开单据转换设计界面,插件策略,注册编译生成的单据转换插件,并启用1.1.8.如何创建并启用反写插件如何创建反写插件反写插件,运行在K/3 Cloud的App服务层,重用操作插件工程;创建插件类与创建动态表单插件类似,继承基类AbstractBusinessFlowServicePlugInusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BusinessFlowPlugIn{publicclass Class2 : AbstractBusinessFlowServicePlugIn{//TODO}}如何启用反写规则插件打开BOSIDE,打开业务流程的下游单据模型(如采购申请单下推采购订单,则反写插件挂在采购订单上),选择单据关联配置属性反写插件,注册编译生成的反写插件工程组件对应的反写类,并启用1.2.为何插件不起作用,如何排查插件不起作用,按照如下步骤检查:插件工程编译后,是否输出到Cloud网站路径website\bin插件类是否注册到了当前表单上,并成功保存?注册插件时,要找website\bin路径下的插件工程组件编译生成dll到指定网站目录后,是否重启过站点的IIS?必须重启站点IIS,新组件才会被启用;调试代码,附加w3wp.exe程序后,插件代码是否能够命中?如果不能命中,说明运行中的组件,与代码不匹配,需要重新编译并重启IIS;2.进阶篇2.1.插件代码,如何自行调用单据操作服务2.1.1.如何加载(Load)单据2.1.1.1.运行在Web层的插件,如何加载单据?运行在Web层的插件,包括动态表单插件、单据编辑插件、基础资料编辑插件、列表插件等,控制着交互界面;实现思路✧调用Kingdee.BOS.ServiceHelper.dll的BusinessDataServiceHelper类提供的Load方法 插件准备✧插件工程引用Kingdee.BOS.ServiceHelper.dll组件✧类文件引用BusinessDataServiceHelper类所在的命名空间Kingdee.BOS.ServiceHelper BusinessDataServiceHelper.Load方法介绍BusinessDataServiceHelper提供了4个Load方法,分别介绍如下✧publicstatic DynamicObject[] Load(Context ctx, BusinessInfo businessInfo,List<SelectorItemInfo> selector, OQLFilter ofilter).构建过滤条件OQLFilter,检索某些字段片段信息(List<SelectorItemInfo>)的目标数据集合✧publicstatic DynamicObject[] Load(Context ctx, DynamicObjectType type,QueryBuilderParemeter queryParemeter)构建过滤条件QueryBuilderParemeter,检索满足条件的目标数据集合✧publicstatic DynamicObject[] Load(Context ctx, Object[] pkArray,DynamicObjectType type)指定目标数据id集合根据数据id集合,动态对象类型,检索满足条件的目标数据集合✧publicstatic DynamicObject[] Load(Context ctx, string formid,List<SelectorItemInfo> selector, OQLFilter ofilter)指定单据模型唯一标示,感兴趣的字段片段信息(也就是说,只取部分字段出来,不会把这个模型的所有字段数据都取出来),构建过滤条件OQLFilterC#using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using Kingdee.BOS.Core.SqlBuilder;using Kingdee.BOS.Orm.DataEntity;using Kingdee.BOS.ServiceHelper;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{publicclass Class7 : AbstractDynamicFormPlugIn{publicoverridevoid ButtonClick(ButtonClickEventArgs e){//加载id为10001的物料数据//获取物料元数据FormMetadata materialMetada =MetaDataServiceHelper.Load(this.Context, "BD_Material") as FormMetadata;//构建过滤条件QueryBuilderParemeter queryParameter = new QueryBuilderParemeter();queryParameter.BusinessInfo = materialMetada.BusinessInfo;queryParameter.FilterClauseWihtKey = "FMaterailId = 10001";//构建快捷过滤条件OQLFilter filter = new OQLFilter();filter.Add(new OQLFilterHeadEntityItem() { FilterString = "FMaterialId = 10001"});//构建关心的字段片段信息List<SelectorItemInfo> lstSelectorItemInfos = new List<SelectorItemInfo>();//物料属性lstSelectorItemInfos.Add(new SelectorItemInfo("FErpClsId"));//使用组织lstSelectorItemInfos.Add(new SelectorItemInfo("FUseOrgId"));//方法1:DynamicObject[] objs = BusinessDataServiceHelper.Load(this.Context,materialMetada.BusinessInfo.GetDynamicObjectType(),queryParameter);//方法2:objs = BusinessDataServiceHelper.Load(this.Context,newobject[] { 10001 },materialMetada.BusinessInfo.GetDynamicObjectType());//方法3:根据过滤条件获取满足条件的目标数据的部分字段信息objs = BusinessDataServiceHelper.Load(this.Context,materialMetada.BusinessInfo,lstSelectorItemInfos,filter);//方法4:根据过滤条件获取满足条件的目标数据的部分字段信息objs = BusinessDataServiceHelper.Load(this.Context,"BD_Material",lstSelectorItemInfos,filter);}}}2.1.1.2.运行在App服务层的插件,如何加载单据?运行在App层的插件,包括操作插件、单据转换插件、反写插件、账表取数插件等,此类插件掌控着某种特定服务的执行过程,与交互界面无关;实现思路✧通过Kingdee.BOS.App.dll的ServiceHelper类获取ViewService服务,调用此服务提供的Load方法插件准备✧插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll✧类文件引用相关命名空间,详见示例代码IViewService接口介绍✧同web层插件方法介绍示例代码C#using Kingdee.BOS.Contracts;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using Kingdee.BOS.Core.SqlBuilder;using Kingdee.BOS.Orm.DataEntity;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{publicclass Class6 : AbstractOperationServicePlugIn{publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e) {//加载id为10001的物料数据//获取ViewServiceIViewService viewService =Kingdee.BOS.App.ServiceHelper.GetService<IViewService>();//获取元数据服务IMetaDataService metadataService =Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();//获取物料元数据FormMetadata materialMetada =metadataService.Load(this.Context, "BD_Material") as FormMetadata;//构建过滤条件QueryBuilderParemeter queryParameter = new QueryBuilderParemeter();queryParameter.BusinessInfo = materialMetada.BusinessInfo;queryParameter.FilterClauseWihtKey = "FMaterailId = 10001";//构建快捷过滤条件OQLFilter filter = new OQLFilter();filter.Add(new OQLFilterHeadEntityItem() { FilterString = "FMaterialId = 10001"});//构建关心的字段片段信息List<SelectorItemInfo> lstSelectorItemInfos = new List<SelectorItemInfo>();//物料属性lstSelectorItemInfos.Add(new SelectorItemInfo("FErpClsId")); //使用组织lstSelectorItemInfos.Add(new SelectorItemInfo("FUseOrgId"));//方法1:DynamicObject[] objs = viewService.Load(this.Context,materialMetada.BusinessInfo.GetDynamicObjectType(),queryParameter);//方法2:objs = viewService.Load(this.Context,newobject[] { 10001 },materialMetada.BusinessInfo.GetDynamicObjectType());//方法3:objs = viewService.Load(this.Context,materialMetada.BusinessInfo,lstSelectorItemInfos,filter);//方法4:objs = viewService.Load(this.Context,"BD_Material",lstSelectorItemInfos,filter);}}}2.1.2.如何调用保存(Save)操作2.1.2.1.Web层插件,如何调用保存(Save)操作实现思路✧调用BusinessDataServiceHelper类提供的Save方法插件准备✧插件工程引用Kingdee.BOS.ServiceHelper.dll组件✧类文件引用BusinessDataServiceHelper类所在的命名空间Kingdee.BOS.ServiceHelperBusinessDataServiceHelper.Save方法介绍BusinessDataServiceHelper提供4个Save方法,看上去差不多,其实本质有区别,可以将这4个方法区分为2类方法✧直接调用Orm把数据保存到数据库⏹publicstatic DynamicObject Save(Context ctx, DynamicObject dataObject)⏹publicstatic DynamicObject[] Save(Context ctx, DynamicObject[]dataObject)✧模拟保存操作服务端完整过程,调用填充主键、生成单据编号,执行校验器,调用服务端服务与服务端插件,最后调用Orm把数据保存到数据库⏹publicstatic DynamicObject[] Save(Context ctx, BusinessInfobusinessInfo, DynamicObject[] dataObject, string operationNumber)⏹publicstatic IOperationResult Save(Context ctx, BusinessInfobusinessInfo, DynamicObject dataObject, OperateOption option = null,string operationNumber = "")示例代码C#using Kingdee.BOS.Core.Bill.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.ServiceHelper;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")]publicclass Class2 : AbstractBillPlugIn{publicoverridevoid ButtonClick(ButtonClickEventArgs e){//直接调用Orm保存,把数据保存到数据库BusinessDataServiceHelper.Save(this.Context, this.View.Model.DataObject);//执行保存服务端服务和保存操作的服务端插件BusinessDataServiceHelper.Save(this.Context, this.View.BusinessInfo,this.View.Model.DataObject);}}}2.1.2.2.App层插件,如何调用保存(Save)操作实现思路✧通过Kingdee.BOS.App.dll组件提供的ServiceHelper类,调用GetService泛型方法,获取SaveService服务,调用SaveService提供的Save方法插件准备✧插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll✧类文件引用相关命名空间,详见示例代码ISaveService.Save接口介绍同Web层插件介绍,分为两类方法详见Web层插件、BusinessDataServiceHelper.Save介绍示例代码C#using Kingdee.BOS.Contracts;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using Kingdee.BOS.Orm.DataEntity;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{[ponentModel.Description("区分当前类应用在哪个操作上")]publicclass Class1 : AbstractOperationServicePlugIn{publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e){//例如:保存id为10001的物料//获取元数据服务IMetaDataService metadataService =Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();//获取保存服务ISaveService saveService = Kingdee.BOS.App.ServiceHelper.GetService<ISaveService>(); //获取加载数据服务IViewService viewService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>();//获取物料元数据FormMetadata materialMetadata = metadataService.Load(this.Context,"BD_Material") as FormMetadata;//获取id为10001的物料数据DynamicObject[] objs = viewService.Load(this.Context,newobject[] { 10001 },materialMetadata.BusinessInfo.GetDynamicObjectType());//保存id为10001的物料saveService.Save(this.Context, objs);saveService.Save(this.Context, materialMetadata.BusinessInfo, objs);}}}2.1.3.如何调用提交(Submit)操作2.1.3.1.Web层插件,如何调用提交(Submit)操作实现思路✧调用Kingdee.BOS.ServiceHelper.dll组件的BusinessDataServiceHelper类提供的Submit方法插件准备✧插件工程引用Kingdee.BOS.ServiceHelper.dll✧插件类引用BusinessDataServiceHelper类所在的命名空间BusinessDataServiceHelper.Submit方法介绍BusinessDataServiceHelper类提供了1个Submit方法,调用此方法模拟提交操作的服务端服务全过程,即修改单据状态、执行提交服务端服务,执行提交服务端插件,最后执行Orm保存数据到数据库示例代码C#using Kingdee.BOS.Core.Base.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.ServiceHelper;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")]publicclass Class3 : AbstractBasePlugIn{publicoverridevoid ButtonClick(ButtonClickEventArgs e){//例如:提交当前单据数据BusinessDataServiceHelper.Submit(this.Context,this.View.BusinessInfo,newobject[] { this.View.Model.DataObject["Id"] },"Submit");}}}2.1.3.2.App层插件,如何调用提交(Submit)操作实现思路✧调用Kingdee.BOS.App.dll组件提供的ServiceHelper类所提供的GetService泛型方法,获取提交服务,调用提交服务的Submit方法插件准备✧插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll✧类文件引用相关命名空间,详见示例代码ISubmit.Submit接口介绍✧同web层插件介绍示例代码C#using Kingdee.BOS.Contracts;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{publicclass Class2 : AbstractOperationServicePlugIn{publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e){//例如:提交id为10001的物料数据//获取提交服务ISubmitService submitService = Kingdee.BOS.App.ServiceHelper.GetService<ISubmitService>(); //获取元数据服务IMetaDataService metadataService =Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();//获取物料元数据FormMetadata materialMetadata = metadataService.Load(this.Context, "BD_Material") as FormMetadata;//执行提交服务submitService.Submit(this.Context,materialMetadata.BusinessInfo,newobject[] { 10001 },"Submit");}}}2.1.4.如何调用审核/反审核(Audit/UnAudit)操作2.1.4.1.Web层插件,如何调用审核/反审核(Audit/UnAudit)操作实现思路✧调用Kingdee.BOS.ServiceHelper.dll组件提供的BusinessDataServiceHelper类提供的SetBillStatus方法插件准备✧插件工程引用Kingdee.BOS.ServiceHelper.dll组件✧插件类文件引用BusinessDataServiceHelper所在的命名空间BusinessDataServiceHelper.SetBillStatus方法介绍SetBillStatus方法与SetStatus方法看上去类似,其实完全不一样,其参数列表也完全不一样,调用单据审核操作的服务端要使用SetBillStatus方法,SetStatus方法后续介绍示例代码C#using Kingdee.BOS.Core.DynamicForm;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.List.PlugIn;using Kingdee.BOS.ServiceHelper;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{[ponentModel.Description("区分当前类应用在哪个模型上")]publicclass Class4 : AbstractListPlugIn{publicoverridevoid ButtonClick(ButtonClickEventArgs e){List<KeyValuePair<object,object>> lstKeyValuePairs =new List<KeyValuePair<object,object>>();KeyValuePair<object, object> keyValuePair = new KeyValuePair<object, object>(10001, ""); lstKeyValuePairs.Add(keyValuePair);//审核id为10001的当前单据IOperationResult auditResult = BusinessDataServiceHelper.SetBillStatus(this.Context,this.View.BusinessInfo,lstKeyValuePairs,null,"Audit");//反审核id为10001的当前单据IOperationResult unAuditResult = BusinessDataServiceHelper.SetBillStatus(this.Context,this.View.BusinessInfo,lstKeyValuePairs,null,"UnAudit");}}}2.1.4.2.App层插件,如何调用审核/反审核(Audit/UnAudit)操作实现思路✧调用Kingdee.BOS.App.dll组件提供的ServiceHelper类提供的GetService泛型方法,获取改变单据状态服务,调用此服务提供的SetBillStatus方法插件准备✧插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll✧类文件引用相关命名空间,详见示例代码接口介绍✧同Web层插件介绍示例代码C#using Kingdee.BOS.Contracts;using Kingdee.BOS.Core.DynamicForm;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{publicclass Class3 : AbstractOperationServicePlugIn{publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e){//审核\反审核id为10001的物料数据//获取单据状态转换服务ISetStatusService setStatusService =Kingdee.BOS.App.ServiceHelper.GetService<ISetStatusService>();//获取元数据服务IMetaDataService metaDataService =Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();//构建id为10001的数据集合List<KeyValuePair<object, object>> lstKeyValuePairs = new List<KeyValuePair<object,object>>();KeyValuePair<object, object> keyValuePair = new KeyValuePair<object, object>(10001, ""); lstKeyValuePairs.Add(keyValuePair);//获取物料元数据FormMetadata materialMetaData = metaDataService.Load(this.Context, "BD_Material") as FormMetadata;//审核IOperationResult auditResult = setStatusService.SetBillStatus(this.Context,materialMetaData.BusinessInfo,lstKeyValuePairs,null,"Audit");//反审核IOperationResult unAuditResult = setStatusService.SetBillStatus(this.Context,materialMetaData.BusinessInfo,lstKeyValuePairs,null,"UnAudit");}}}2.1.5.如何调用禁用(Disabled)操作2.1.5.1.Web层插件,如何调用禁用(Disabled)操作实现思路✧调用Kingdee.BOS.ServiceHelper.dll组件提供的BusinessDataServiceHelper类所提供的SetState方法插件准备✧插件工程引用Kingdee.BOS.ServiceHelper.dll组件✧插件类文件引用BusinessDataServiceHelper所在的命名空间BusinessDataServiceHelper.SetState方法介绍✧SetState方法直接操作数据库,执行update语句,按方法参数构建一条例如updatexxx set xxx =’ xxx’ where xxx = xxx的指令示例代码C#using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.ServiceHelper;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{publicclass Class5 : AbstractDynamicFormPlugIn{publicoverridevoid ButtonClick(ButtonClickEventArgs e){//禁用物料id为10001和10002的数据BusinessDataServiceHelper.SetState(this.Context,"T_BD_Material","FForbidStatus","B","FMaterialdId",newobject[] { 10001, 10002 });}}}2.1.5.2.App层插件,如何调用禁用(Disabled)操作实现思路✧调用Kingdee.BOS.App.dll组件提供的ServiceHelper类提供的GetService泛型方法,访问BusinessDataService服务的SetState方法插件准备✧插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll✧类文件引用相关命名空间,详见示例代码接口介绍✧同Web层插件介绍示例代码C#using Kingdee.BOS.Contracts;using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{publicclass Class4 : AbstractOperationServicePlugIn{publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e){//获取数据服务IBusinessDataService businessDataService =Kingdee.BOS.App.ServiceHelper.GetService<IBusinessDataService>(); businessDataService.SetState(this.Context,"T_BD_Material","FForbidStatus","B","FMaterialId",newobject[] { 10001, 10002 });}}}2.1.6.如何删除(Delete)单据2.1.6.1.Web层插件,如何删除(Delete)单据实现思路✧调用Kingdee.BOS.ServiceHelper.dll组件的BusinessDataServiceHelper类提供的Delete方法插件准备✧插件工程引用Kingdee.BOS.ServiceHelper.dll组件✧插件类文件引用BusinessDataServiceHelper所在的命名空间方法介绍BusinessDataServiceHelper提供两个Delete方法,其区别在于✧参数不带元数据描述信息的,直接执行数据库删除操作,把数据删除⏹publicstaticvoid Delete(Context ctx, object[] Ids, DynamicObjectTypedynamicObjectType)✧参数带元数据描述信息的,执行删除操作的服务端完整服务,如执行删除操作的校验器、删除操作的服务端服务、删除操作的服务端插件⏹publicstatic IOperationResult Delete(Context ctx, BusinessInfobusinessInfo, object[] Ids, OperateOption option = null, stringoperationNumber = "")示例代码C#using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using Kingdee.BOS.ServiceHelper;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyDynamicFormPlugIn{publicclass Class6 : AbstractDynamicFormPlugIn{publicoverridevoid ButtonClick(ButtonClickEventArgs e){//删除id为10001和10002的物料//获取物料元数据FormMetadata materialMetadata =MetaDataServiceHelper.Load(this.Context,"BD_Material") as FormMetadata;//模拟删除服务端操作完整过程BusinessDataServiceHelper.Delete(this.Context,materialMetadata.BusinessInfo,newobject[] { 10001, 10002 });}}}2.1.6.2.App层插件,如何删除单据实现思路✧调用Kingdee.BOS.App.dll组件的ServiceHelper类提供的GetService泛型方法获取删除服务插件准备✧插件工程引用Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll、Kingdee.BOS.DataEntity.dll✧类文件引用相关命名空间,详见示例代码接口介绍✧同Web层插件介绍using Kingdee.BOS.Core.DynamicForm.PlugIn;using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;using Kingdee.BOS.Core.Metadata;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace MyOperaionServicePlugIn{publicclass Class5 : AbstractOperationServicePlugIn{publicoverridevoid BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e){//获取删除服务IDeleteService deleteService =Kingdee.BOS.App.ServiceHelper.GetService<IDeleteService>();//获取元数据服务IMetaDataService metaDataService =Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>();//获取物料元数据FormMetadata materialMetadata =metaDataService.Load(this.Context,"BD_Material") as FormMetadata;//执行删除服务的完整过程(推荐方式)deleteService.Delete(this.Context,materialMetadata.BusinessInfo,newobject[] { 10001, 10002 });//直接执行数据删除 (风险极高,仅适用于未定义单据,只是利用ORM模型存取数据的情况)// 调用此服务会跳过删除校验,仅删除ORM模型内含表格的数据,其他相关数据不会处理,如果有上下游单据及反写,不会撤销关联及回滚反写,从而造成数据错误!deleteService.Delete(this.Context,newobject[] { 10001, 10002 },materialMetadata.BusinessInfo.GetDynamicObjectType());}}}2.2.调用单据操作后,如何判断结果,并处理交互提示IInteractionResult接口定义:C#publicinterface IInteractionResult{// 交互表单显示标题string FormTitle { get; set; }// 交互上下文信息InteractionContext InteractionContext { get; set; }// 本次交互的发起人string Sponsor { get; set; }}交互上下文信息定义:C#publicclass InteractionContext{public InteractionContext();// 当前表单模型信息public BusinessInfo BusinessInfo { get; }// 数据上下文public Context Context { get; set; }// 交互服务操作的实体集合public ExtendedDataEntity[] DataEntities { get; set; }// 自定义交互表单的初始化参数:InteractionFormId属性有值时,本属性才生效public DynamicFormShowParameter FormShowParameter { get; set; }// 交互表单标识:默认为BOS_K3Displayerpublicstring InteractionFormId { get; set; }// 是否交互(发现有领域把此当成单纯的自定义信息提示用,所以加此标识来加以区分)默认是交互类型异常,如作它用,请在此标识publicbool IsInteractive { get; set; }// K3显示器模型public K3DisplayerModel K3DisplayerModel { get; set; }// 其它控制选项public OperateOption Option { get; set; }// 简单交互信息(批量自定义消息时,此属性建议赋值,以便平台在批量操作时作简单提示)publicstring SimpleMessage { get; set; }// 默认值是false 是否支持移动审批交互处理,移动端目前仅能支持到是否的交互处理。
K/3 BOS开发百问百答(版本:2007版)行业产品部2008年1月目录一、业务单据篇_____________________________________________________1【摘要】如何控制BOS单据不允许删除_______________________________________________1【摘要】应收应付套打_____________________________________________________________1【摘要】收款单(BOS老单据)模板修改后,多个用户同时新增单据时出错_______________1【摘要】BOS单据新增功能网络控制问题______________________________________________1【摘要】通过插件对单据体某一列进行锁定或解锁_____________________________________2【摘要】BOS插件调用F7功能_______________________________________________________2【摘要】如何在插件中调出BOS单据的序事簿并且不弹出过滤窗口_______________________3【摘要】用户类型字段赋值_________________________________________________________4【摘要】在插件中刷新序事簿_______________________________________________________5【摘要】如何在BOS单据体中显示红字或蓝字_________________________________________5【摘要】获取当前被审核单据的FID值________________________________________________5【摘要】组件中如何直接调用取得即时库存___________________________________________6【摘要】单据编号不允许重复_______________________________________________________6【摘要】BOS单据生成凭证出错______________________________________________________6【摘要】下推按钮放在单据上,而不是序事簿里_______________________________________6【摘要】用BOS插件支持DDE吗_______________________________________________________7【摘要】BOS插件如何调用存储过程_________________________________________________7【摘要】如何在单据显示前给字段预赋值_____________________________________________8【摘要】无法复制分录_____________________________________________________________8【摘要】如何在10.3和10.4的老单据上添入图形字段,并可套打出来____________________8【摘要】K3 V10.3 BOS能否在change事件中读取到改变前的原值_________________________8【摘要】在插件中实现自动保存_____________________________________________________9【摘要】对所选单据分录如何正行高光显示或改变所选中行的背景色_____________________9【摘要】如何在BOS单据的插件中调用老单据__________________________________________9【摘要】如何在BOS单据(供应链单据)中使用F12查看即时库存________________________13【摘要】BOS单据下推老单据时如何处理辅助属性____________________________________13【摘要】开发一张BOS单据在编辑状态下能否输入一个单据号调出整张单据的信息_________14【摘要】在生成记录凭证时相同的分录不能合并______________________________________14【摘要】如何在插件中获取单据体某个字段的值______________________________________14【摘要】K3V10.3是否支持基础资料多选____________________________________________15【摘要】BOS V10.4按单生居凭证,合并生成凭证不见了________________________________15【摘要】如何在插件中调出附件界面________________________________________________15【摘要】如何在插件中执行值更新事件______________________________________________15【摘要】升级至10.4后,进入BOS系统业务单据不能保存_______________________________16二、多级审核篇____________________________________________________17【摘要】关于多级审核指定下级审核人______________________________________________17【摘要】处理多极审核设置跳转条件后有选择性地发送消息____________________________17【摘要】K3 10.3 BOS叙事簿如何实现批审核功能_____________________________________18【摘要】怎样显示驳回信息________________________________________________________18【摘要】BOS单据如何自动启动多级审核____________________________________________18【摘要】远程服务器不存在或不可用________________________________________________19三、单据转换流程篇________________________________________________20【摘要】不能实现记录选择________________________________________________________20【摘要】如何新增K3工业单据(老单据)之间的单据转换流程?另外如果用BOS可以满足,客户是否需要沟买BOS?___________________________________________________20【摘要】如何控制已关联的单据不能再下推__________________________________________20【摘要】如何将下推按钮移到序事簿工具栏上________________________________________21【摘要】BOS单据下推老单据时无法处理值更新事件__________________________________21【摘要】删除BOS单据时报错,提示“对象名T1无效”_________________________________21【摘要】生产任务单下推BOS单据,关联关系为钩稽或关联复制时报错__________________21【摘要】新单推老单时如何实现严格控制____________________________________________22【摘要】请设置关联源单内码保存__________________________________________________22四、报表篇_________________________________________________________1【摘要】万能报表中选择数据表的问题_______________________________________________1五、部署发布篇_____________________________________________________2【摘要】应收应付系统中的BOS单据(老单据)修改后如何发布____________________________2【摘要】基础资料自定义属性不能随BOS安装包一起发布_______________________________2【摘要】无法发布_________________________________________________________________2六、其他篇_________________________________________________________4【摘要】BOS登录问题_____________________________________________________________4【摘要】K/3账套管理密码丢失的处理方法___________________________________________4【摘要】如何使远程桌面登录到中间层服务器上的K3客户端能够正确登录_________________4【摘要】K3工业单据动态过滤______________________________________________________4【摘要】如何设置BOS开发的模块的帐期______________________________________________5【摘要】关于k3v10.4的一个bug____________________________________________________5【摘要】加密狗使用记录不存在(或无效),请退出重新登录______________________________5【摘要】10.4软加密后,还能不能帮助客户进行二次开发_______________________________6【摘要】账套升级错误_____________________________________________________________6【摘要】如何在外挂程序中利用VB调用BOS单据及BOS序时薄,BOS单据中的关联关系如何在VB中使用____________________________________________________________________6【摘要】工业单据插件中如何获得基础资料类型字段的内码_____________________________7一、业务单据篇【摘要】如何控制BOS单据不允许删除版本:所有版本问题描述:在K3BOS开发的单据序时薄中,如何实现选中的单据不允许删除,只能在外挂系统(二次开发)中删除,未发现单据序时薄的BeforeDeleteBill事件,只有AfterDeleteBill事件,插件中无法实现上述控制。