10K3CloudV30BOS技术开发培训二次插件开发(共65张).pptx

上传人:醉**** 文档编号:7795288 上传时间:2022-03-04 格式:PPTX 页数:65 大小:1.45MB
返回 下载 相关 举报
10K3CloudV30BOS技术开发培训二次插件开发(共65张).pptx_第1页
第1页 / 共65页
10K3CloudV30BOS技术开发培训二次插件开发(共65张).pptx_第2页
第2页 / 共65页
点击查看更多>>
资源描述

《10K3CloudV30BOS技术开发培训二次插件开发(共65张).pptx》由会员分享,可在线阅读,更多相关《10K3CloudV30BOS技术开发培训二次插件开发(共65张).pptx(65页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、内部公开 请勿外传版权所有1993-2012金蝶软件(中国)有限公司 内部公开 请勿外传K/3产品部K/3 Cloud V1.0K/3 Cloud V1.0技术开发培训-BOS -BOS 业务插件开发内部公开 请勿外传P2课程简介: 本课程介绍K/3 Cloud BOS 业务插件的开发及配置,以功能讲解辅之案例演练帮助学员快速掌握K/3 Cloud BOS平台的核心功能。 讲师:肖光雁课程说明:内部公开 请勿外传P3概述业务插件概览如何开发插件案例演练目录内部公开 请勿外传P4概述业务插件概览如何开发插件案例演练目录内部公开 请勿外传P5展示层Silverlight Web客户端WPF 桌面客

2、户端服务层动态表单UI生成服务内核层表单动态生成引擎动态表单控制服务Web 服 务 器动态表单视图模型动态表单控制器动态表单数据模型扩展逻辑层动态表单编程接口表单生成插件表单逻辑服务表单操作缺省值计算函数业务插件动态表单元数据应用服务 器动态表单逻辑组件动态表单服务端插件动态表单服务端编程接口数据库服务器元数据业务数据校验规则 客户端公共编程模型+客户端插件+第三方设备集成接口移动客户端Office客户端HttpHttp业务服务内部公开 请勿外传P6概述业务插件概览如何开发插件案例演练目录内部公开 请勿外传P7BOS业务插件用以解决什么问题?标准业务对象的的业务逻辑应用:标准业务对象没有实现的

3、控制;已有操作和服务未支持的功能;更灵活的控制方式和客户化定制;客户二次开发的需求; 快速开发、快速实施、快速应用;可配置,可测试,快速部署;有哪些插件?Web层表单插件列表插件表单构建插件App层服务插件BOS业务插件开发概览内部公开 请勿外传P8插件接口特性使用C# 4.0支持继承和扩展已封装业务插件; 组织控制;基础资料分配支持插件顺序支持动态语言IronPython 2.6.1BOS业务插件开发概览内部公开 请勿外传P9BOS业务插件开发概览插件分类 表单插件用于单个表单编辑界面运行于Web层 列表插件 用于列表 运行于Web层内部公开 请勿外传P10BOS业务插件开发概览 插件分类

4、服务插件挂在操作上的服务插件,对于操作进行扩展和校验器配合使用运行于App层 插件配置入口 操作列表 编辑操作内部公开 请勿外传P11BOS业务插件开发概览 插件分类 表单构建插件对于表单界面进行自定义的插件运行于Web层自定义菜单、控件内部公开 请勿外传P12BOS业务插件开发概览动态表单元数据结构动态表单元数据结构内部公开 请勿外传P13BOS业务插件开发概览动态表单元数据结构动态表单元数据结构内部公开 请勿外传P14概述业务插件概览如何开发插件 接口结构 插件中常用的对象说明 具体的代码示例案例演练目录内部公开 请勿外传P15概述业务插件概览如何开发插件 接口结构 插件中常用的对象说明

5、具体的代码示例案例演练目录内部公开 请勿外传P16如何开发插件 接口结构表单插件和列表插件 继承层次表单单据单据列表基础资料 插件针对对象动态表单单据基础资料Kingdee.BOS.Core.dll内部公开 请勿外传P17如何开发插件 接口结构AbstractBillPlugIn 接口 动态表单视图插件编程模型接口 定义了视图模型扩展 允许通过接口处理视图,实现特定业务需求内部公开 请勿外传P18如何开发插件 接口结构OnBillInitialize视图模型初始化事件AfterBindData绑定数据后事件处理接口BeforeF7Select基础资料弹出前事件BeforeClosed窗口关闭前

6、事件AbstractBillPlugIn的ViewPlugin插件接口内部公开 请勿外传P19如何开发插件 接口结构BarItemClick菜单单击事件处理扩展接口AfterBarItemClick菜单单击事件后BeforeDoOperation操作调用前事件AfterDoOperation操作调用完成后事件ButtonClick按钮单击事件AfterButtonClick按钮单击后事件AbstractBillPlugIn的ViewPlugin插件接口内部公开 请勿外传P20如何开发插件 接口结构ListViewClick列表项目单击事件TreeNodeClick树控件单击事件TreeDrag

7、Drop树控件拖拽EntityRowClick分录行单击事件AbstractBillPlugIn的ViewPlugin插件接口内部公开 请勿外传P21如何开发插件 接口结构AbstractBillPlugIn的ModelPlugIn接口 动态表单数据模型插件编程接口 定义了数据模型扩展 允许通过接口处理数据,以实现特定业务需求内部公开 请勿外传P22如何开发插件 接口结构CreateNewData数据模型创建实体对象事件AfterCreateNewData数据模型创建实体对象完成后事件BeforeUpdateValue数据更新前事件DataChanged数据改变后事件AbstractBillP

8、lugIn插件方法内部公开 请勿外传P23如何开发插件 接口结构CreateNewEntryRow创建分录行事件BeforeDeleteRow删除分录行事件AfterDeleteRow删除分录后事件AbstractBillPlugIn插件方法内部公开 请勿外传P24如何开发插件 接口结构列表插件接口 继承AbstractListPlugIn IListViewPlugIn IListModelPlugIn内部公开 请勿外传P25如何开发插件 接口结构AbstractListPlugIn 的ViewPlugIn接口 序时簿视图插件编程模型接口 定义了序时簿视图模型扩展 允许通过接口处理视图,实现

9、特定业务需求内部公开 请勿外传P26如何开发插件 接口结构ListInitialize视图模型初始化事件AfterGetData完成取数后事件FormatCellValue列表格式化接口AbstractListPlugIn 的ViewPlugIn接口内部公开 请勿外传P27如何开发插件 接口结构BeforeButtonClick按钮和菜单单击前事件AfterButtonClick按钮和菜单单击后事件CellDbButtonClick单元格双击事件AbstractListPlugIn 的ViewPlugIn接口内部公开 请勿外传P28如何开发插件 接口结构AbstractListPlugIn 的

10、ModelPlugIn接口 序时簿数据模型插件编程接口 定义了序时簿数据模型扩展 允许通过接口处理数据,以实现特定业务需求内部公开 请勿外传P29如何开发插件 接口结构PrepareFilterParameter准备过滤条件CreateFilterEditorControl触发创建过滤条件控件事件BatchCopyData复制单据事件AfterBatchCopyData复制单据完毕事件AbstractListPlugIn插件方法内部公开 请勿外传P30如何开发插件 接口结构服务插件 插件特性IOperationServicePlugin一般会附加校验器运行于App层事务保护 插件针对对象操作K

11、ingdee.BOS.Core.dll内部公开 请勿外传P31如何开发插件 接口结构服务插件接口服务插件接口 服务插件 AbstractOperationServicePlugIn 应用服务器插件与业务数据更新操作在一个事务执行 校验器插件 AbstractValidator 在服务插件的OnAddValidators加入内部公开 请勿外传P32如何开发插件 接口结构AbstractOperationServicePlugIn插件方法插件方法OnPreparePropertys可以定制加载指定字段到实体里OnAddValidators添加自定义数据校验器内部公开 请勿外传P33如何开发插件 接

12、口结构AbstractOperationServicePlugIn插件方法插件方法BeforeExecuteOperationTransaction执行操作事务前事件AfterExecuteOperationTransaction执行操作事务后事件BeginOperationTransaction调用操作事件前触发(支持事务)EndOperationTransaction调用操作事件完毕(支持事务)内部公开 请勿外传P34如何开发插件 接口结构表单构建插件 继承层次表单单据叙事簿基础资料 插件针对对象动态表单单据基础资料Kingdee.BOS.Core.dll内部公开 请勿外传P35如何开发插

13、件 接口结构AbstractDynamicWebFormBuilderPlugIn插件方法插件方法CreateControl构建界面元素事件AfterCreateControl构建界面元素后事件CreateMainMenu构建菜单事件AfterCreateMainMenu构建菜单后事件内部公开 请勿外传P36如何开发插件 接口结构表单插件调用过程 由控制器创建视图、模型、插件代理 初始化视图、模型 由插件服务注册到插件代理 插件代理初始化插件 加载数据,通知插件创建数据,创建表单数据包 表单操作 插件服务调用代理,发送事件通知 插件代理调用插件,执行事件 返回执行结果内部公开 请勿外传P37业

14、务插件插件调用过程插件调用过程内部公开 请勿外传P38业务插件插件调用过程插件调用过程内部公开 请勿外传P39如何开发插件 接口结构动态语言支持 IronPython 脚本语言 支持和C#交互调用 事件接口和C#完全一致 更加简练明白内部公开 请勿外传P40概述业务插件概览如何开发插件 接口结构 插件中常用的对象说明 具体的代码示例案例演练目录内部公开 请勿外传P41如何开发插件 常用对象View对象 属性 this.View(View接口) this.View的常用属性 BillBusinessInfo(界面业务对象元数据) LayoutInfo(布局元数据) Model(动态表单模型接口)

15、 OpenParameter(页面调用时传入的参数) 方法 GetFieldEditor (获取界面控件对象) ShowMessage(显示信息)内部公开 请勿外传P42如何开发插件 常用对象View对象 更改界面控件状态 this.View. GetFieldEditor 示例: / / 设置金额列精度 / / / private void SetColumnScale(short iScale, string strField) thisthis.View.GetFieldEditor.View.GetFieldEditor(strField, -(strField, -1).Scale

16、= iScale;1).Scale = iScale; 内部公开 请勿外传P43如何开发插件 常用对象View对象 显示信息 this.View.ShowMessage 示例: if (e.CurParentId = 0) thisthis.View.ShowMessage.View.ShowMessage(“请先选择顶层组织。”); return; 内部公开 请勿外传P44如何开发插件 常用对象Model对象 属性 this.View.Model(动态表单模型接口) This.View.Model的常用属性 DataObject 当前对象的数据实体 方法 GetEntryCurrentRow

17、Index(获取分录当前行索引) GetEntryRowCount(获取分录行数量) CreateNewEntryRow(新建分录行) GetValue(获取字段(对象)值) SetValue(设置字段(对象)值)内部公开 请勿外传P45如何开发插件 常用对象Model对象 获取单据属性:例如分录集合 this.View.Model.DataObject 示例: / / 获取分录集合 / DynamicObjectCollection entrys = (DynamicObjectCollection)thisthis.View.Model.DataObject.View.Model.Data

18、ObjectPOOrderEntry;内部公开 请勿外传P46如何开发插件 常用对象Model对象 新增单据体分录行 this.View.Model.CreateNewEntryRow 示例: / / 单据复制完成事件 / / public override void AfterCopyData(CopyDataEventArgs e) base.AfterCopyData(e); /单据复制完,处理单据体 _billFormID = “”; thisthis.View.Model.CreateNewEntryRow.View.Model.CreateNewEntryRow(“FFieldCo

19、ntrol”); UpdateFieldControlRowLock(); 内部公开 请勿外传P47如何开发插件 常用对象Model对象 获取字段值 this.View.Model.GetValue 示例: /获取根节点组织复制到目标节点 Organization org = (DynamicObject) thisthis.View.Model.GetValue.View.Model.GetValue(FRootORGID); targetRoot.id = rootOrgId; targetRoot.text = org.Name.ToString(); targetRoot.childr

20、en = new List(); ctl = this.View.GetControl(FOrgTree); ctl.SetRootNode(targetRoot);内部公开 请勿外传P48如何开发插件 常用对象Model对象 设置字段值 this.View.Model.SetValue 示例: / / 字段修改事件函数重载 / public override void DataChanged(DataChangedEventArgs e) switch (e.Key.ToUpper() case FPARENTDEPTID: /组织隶属方案和上级部门变化,重新生成部门全称 thisthis.

21、View.Model.SetValue.View.Model.SetValue(“FFullName”, GetFullName(e.Key); break; 内部公开 请勿外传P49概述业务插件概览如何开发插件 接口结构 插件中常用的对象说明 具体的代码示例案例演练目录内部公开 请勿外传P50如何开发插件 代码示例 表单插件 OnBillInitialize初始化事件 BillInitializeEventArgs 示例: public override void OnBillInitialize(BillInitializeEventArgs e) base.OnBillInitializ

22、e(e); firstLoad = this.View.OpenParameter.Status != OperationStatus.ADDNEW; 内部公开 请勿外传P51如何开发插件 代码示例 表单插件 AfterBindData绑定数据后事件 示例: public override void AfterBindData(EventArgs e) base.AfterBindData(e); DynamicObject dy = this.View.Model.GetValue(FAccountBookID) as DynamicObject; if (dy != null & !str

23、ing.IsNullOrWhiteSpace(dyId.ToString() DynamicObject org = dyAccountOrgID as DynamicObject; if (org != null & !string.IsNullOrWhiteSpace(orgId.ToString() this.View.Model.SetValue(FACCBOOKORGID, org); 内部公开 请勿外传P52如何开发插件 代码示例 表单插件 BeforeClosed绑定数据后事件 BeforeClosedEventArgs 示例:public override void Befor

24、eClosed(BeforeClosedEventArgs e) ReturnData(); base.BeforeClosed(e); 内部公开 请勿外传P53如何开发插件 代码示例 表单插件 BeforeF7Select BeforeF7SelectEventArgs 示例: public override void BeforeF7Select(BeforeF7SelectEventArgs e) base.BeforeF7Select(e); bool success = true; switch (e.FieldKey.ToUpperInvariant() case FACCOUNT

25、ORG: e.ListFilterParameter.Filter = this.GetAccountOrgFilter(e.ListFilterParameter.Filter, out success); break; case FACCOUNTBOOK: e.ListFilterParameter.Filter = this.GetAccountBookFilter(e.ListFilterParameter.Filter, out success); break; e.Cancel = !success; 内部公开 请勿外传P54如何开发插件 代码示例 表单插件 ButtonClick

26、 ButtonClickEventArgs 示例: public override void ButtonClick(ButtonClickEventArgs e) base.ButtonClick(e); switch (e.Key.ToUpperInvariant() case FBTNOK: this.StartDeposit(); break; default: break; 内部公开 请勿外传P55如何开发插件 代码示例 表单插件 DataChanged DataChangedEventArgs 示例: public override void DataChanged(DataCha

27、ngedEventArgs e) switch (e.Key.ToLowerInvariant() case fdiffadjusttype: case fexpuniontype: SetEnableAndValue(); break; default: break; base.DataChanged(e); 内部公开 请勿外传P56如何开发插件 代码示例 动态语言支持 IronPython 示例:fromSystemimportStringComparisondefDataChanged(e):ife.Field.Key.Equals(FIsTrans,StringComparison.O

28、rdinalIgnoreCase):#isTrans=clr.Referencebool()isTrans=e.NewValueifisTrans=False:this.View.Model.SetValue(FPriority,0)内部公开 请勿外传P57如何开发插件 代码示例 服务插件 OnPreparePropertys PreparePropertysEventArgs 示例: public override void OnPreparePropertys(PreparePropertysEventArgs e) e.FieldKeys.Add(FAccountSystemEntry)

29、; e.FieldKeys.Add(FMAINORGID); e.FieldKeys.Add(FAPPACCTPOLICY); e.FieldKeys.Add(FDefAcctPolicy); base.OnPreparePropertys(e); 内部公开 请勿外传P58如何开发插件 代码示例 服务插件 OnAddValidators AddValidatorsEventArgs 示例: public override void OnAddValidators(AddValidatorsEventArgs e) SaveValidator saveValid = new SaveValida

30、tor(); saveValid.EntityKey = FBillHead; e.Validators.Add(saveValid); SaveAfterAuditValidator saveAcctSysValid = new SaveAfterAuditValidator(); saveAcctSysValid.option = this.Option; saveAcctSysValid.EntityKey = FBillHead; e.Validators.Add(saveAcctSysValid); 内部公开 请勿外传P59如何开发插件 代码示例privateclassSaveVal

31、idator:AbstractValidatorpublicoverridevoidValidate(ExtendedDataEntitydataEntities,ValidateContextvalidateContext,Contextctx)foreach(varacctindataEntities)AccountSystemdEntity=(AccountSystem)acct.DataEntity;if(dEntity=null)continue;foreach(varacctSysindEntity.AccountSystemEntrys)if(acctSys=null|acctS

32、ys.MainOrgIdp!=null&p.SubOrgId0)ValidationErrorInfoerrorInfo=newValidationErrorInfo(,dEntity.Id.ToString(),acct.DataEntityIndex,acct.DataEntityIndex,BD,string.Format(核算组织【0】的下级组织不允许为空。,acctSys.MainOrgName.ToString(),string.Format(0【1】,dEntity.Name.ToString(),dEntity.Number);validateContext.AddError(

33、null,errorInfo);内部公开 请勿外传P60如何开发插件 代码示例 表单构建插件 CreateControl事件 CreateControlEventArgs 示例: public override void CreateControl(CreateControlEventArgs e) if (e.ControlAppearance.Key.EqualsIgnoreCase(FORGID) if (this.Context.IsMultiOrg = false) e.Control.Put(visible, 0); base.CreateControl(e); 内部公开 请勿外传P61如何开发插件 接口结构表单插件表单插件内部公开 请勿外传P62业务插件列表插件列表插件内部公开 请勿外传P63概述业务插件概览如何开发插件案例演练目录内部公开 请勿外传P64案例演练业务插件开发 建立部门基础资料 增加部门全名(带上级部门前缀,以点分隔) 部门隶属关系变化后需要修改部门全名前缀 建立员工基础资料 增加禁用状态,不能在界面上用复制功能复制禁用员工内部公开 请勿外传P65演讲完毕,谢谢观看!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com