K/3 Cloud 技术开发培训 ----BOS 单据转换插件开发

Slides:



Advertisements
Similar presentations
校园及周边治安防范 暨应急预案桌面演练 实 训 乐山应急管理学会 贾 伟. 目 录 校园治安问题包含的内容 校园治安问题的特点 避免引发校园治安问题的对策 校园应急预案桌面演练实训 校园治安问题的成因.
Advertisements

“ 我不能 上学了,我 每天还要帮 家里拾柴火 呢。 ” 给远方的小学生写一封信 书信的基本格式: 开头顶格写称呼,打上冒号; 换行空两格写问候语; 接下来换行空两格写正文部分; 正文结束后,换行写祝颂语; 最后在右下方写上寄信人姓名和 写信日期。
中醫藥就醫用藥 - 婦女篇 中醫藥安全衛生教育資源中心 中醫藥就醫用藥百分百、就是藥做到: 停、看、聽、選、用專業.
下背痛 林口長庚醫院內科 住院醫師 毛畯台. 下背痛常見原因 軟組織受傷/背部筋膜發炎 椎間盤突出症 脊椎退化性關節炎 壓迫性骨折 椎間盤滑脫 惡性腫瘤 泌尿道疾患 姿勢不良.
華德學校上午校 「協助小學中國語文科教師建立專業學習型社群」計劃 (2008) 總結分享會 二零零九年一月十日.
園藝二乙 1 號 丁楷儒 32 號 孫子恩. 1. 福山萵苣 ( 大陸妹 ) : 福山萵苣,萵苣家族成員之一,鮮甜脆綠又帶有萵苣類的 特殊苦味,用來代替生菜搭配烤肉也別具風味。極少病蟲 害,只需定時澆水施肥就能健康長大,是相當容易種植又 能有大收穫的蔬菜 。 感想: 雖然大陸妹好吃又好種,但種了太多而吃不完.
第五单元 口语交际和作文.
第八章 負債 8-1 負債之意義及內容 8-2 流動負債 8-3 長期負債 8-4 其他負債.
工业财务状况表 财务部分培训 (2010年年报).
定海区渔农村集体资产 股份合作制改革工作 档案管理培训班
北京市工作居住证办理讲解.
SQL的简单查询.
祝贺您获得国家留学基金资助 请您登陆“国家留学网”查看《出国留学人员须知》,您在出国前及在外学习期间所需要办理的手续及具体流程,以及可能遇到的政策上疑问均在此《须知》上有所列明。
实际问题与一元二次方程(一).
审题与立意 夏邑高中高四语文组.
述职报告 ( 二○○七年度 ) 述职人: xxx 部 门: 计划财务部 岗 位: 部门经理.
转正述职报告 电商文案策划 XXX.
护患沟通技巧 护理部 马红云.
一、會計循環之意義 二、會計憑證概要 三、日記簿概要 四、分類帳概要
思想道德修养与法律基础 主讲人:XXX.
特种设备安全法简介 中原油田分公司 杜习广 2015年4月 视频.
马街乡综治维稳工作情况汇报 汇报人:xxx.
第三課 宗教(倫理)的獨特向度 單元 3.2 全球倫理:兩項原則和四項座右銘
通病文章 休 闲   今天天气真好,晴空万里,天上飘着朵朵白云。(偶可从没见过这样的情景^_^)我和同学小刚一起骑车去上学,突然他的车气门芯坏了,我就把我车上的拔下来给他装上,我俩继续一起高高兴兴地骑车往学校赶。(原来“我”的自行车可以不用气门芯啊^_^)   我们经过一家百货商店时,我不禁感慨道:啊!看来人民生活水平的确提高了,你看那位农民老大爷,左手一台电冰箱,右手一台电视机,一溜小跑回家去了。(比周星弛在《功夫》里还要厉害?!)都说一心不能二用,当我注视老大爷的时候,冷不丁岔道里冲出来一位老太太,说
科學與科技課程 教師分享會 二OO四年五月七日.
应如何深化普通高中学生综合素质评价 北京教科院基础教育研究所 赵学勤 2010、12、14-15.
追问课堂,寻求效益 —有效教学的几点思考 牟平区实验小学 战丽娜.
电商2班 第五组. 电商2班 第五组 小组成员: 组长:汤昀 成员:杨阳、陆萍、邹斯斯、吴晓庆、吴盈盈.
陈 汉 文 厦门大学会计系 主任 经济学教授 博士生导师
我真的很不想活,日子過得太沒有意思了。. 我真的很不想活,日子過得太沒有意思了。 聽起來,你現在的日子真難熬,你 願意說說看為什麼嗎?
让道德之花越开越鲜艳 主讲 xxx.
老员工心态管理.
平昌县泥龙初中校本培训 中小学微型课题研究
二、感谢信的种类 根据寄送对象不同,感谢信可以分为三种: 1、直接寄送给感谢对象; 2、寄送对方所在单位有关部门或在其单位公开张贴; 3、寄送给广播电台、电视台、报社、杂志社等媒体公开播发。
热烈祝贺医院开业.
產品責任險的意義 想一想,什麼是「產品責任險」? Q
K/3 Cloud 技术开发培训 ----BOS 业务插件开发
SVN服务器的搭建(Windows) 柳峰
SQL Injection.
辅导课程六.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
K/3 Cloud V6.0_产品培训 —BOS万能报表平台
K/3 Cloud V1.0技术开发培训 ----BOS 业务插件开发
VSS使用简介 王树升
K/3 Cloud V6.1产品培训 -- 实施平台 K/3 Cloud 产品部
K/3 Cloud V6.0产品培训 -- 系统工具 K/3 Cloud 产品部
古诗鉴赏.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
K/3 Cloud V6.0产品培训 -- 安全管理 K/3 Cloud 产品部
K/3 Cloud V6.0产品培训 -- 业务监控 K/3 Cloud 产品部
K/3 Cloud V5.0产品培训 -- 门户管理 K/3 Cloud 产品部
K/3 Cloud V6.1产品培训 ---集成平台 K/3 Cloud产品部.
K/3 Cloud V6.0产品培训 ---集成平台 K/3 Cloud产品部.
K/3 Cloud V5.0_产品培训 —BOS套打设计平台
K/3 Cloud V6.1产品培训 -- 业务监控 K/3 Cloud 产品部
K/3 Cloud V6.1产品培训 -- 业务流程 K/3 Cloud 产品部
提供机构:XXXXXXXXX 机构级别:X级X等(无级别可不填写)
商业分析平台-语义元数据 用友集团技术中心 边传猛 2013年 11月 06日.
VB与Access数据库的连接.
2015 商务汇报PPT模板 Please write down what you need here.
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
VB与Access数据库的连接.
唯美 中国风.
WEB程序设计技术 数据库操作.
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
實習學生:陳姵儒 指導教授:潘明全 實習單位:戴正彥升大學中心
Presentation transcript:

K/3 Cloud 技术开发培训 ----BOS 单据转换插件开发 注:云图标可根据标题长度适度调整移动,以标题右上角,与标题上、右均等距离7个像素为标准。

课程说明: 课程简介: 本课程介绍K/3 Cloud BOS 单据转换插件的开发及配置,以功能讲解辅之案例演练帮助学员快速掌握K/3 Cloud BOS平台的单据转换功能。

目录 概述 单据转换插件 案例演练

目录 概述 单据转换插件 案例演练

单据转换插件 – 插件注册

目录 概述 单据转换插件 案例演练

单据转换插件 – 接口结构 AbstractConvertPlugIn 接口

AbstractConvertPlugIn插件接口下推执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口下推执行顺序 OnInitVariable(InitVariableEventArgs e) 初始化变量,可以得到转换规则,源单和目标单的BussinessInfo OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e) 解析字段映射关系,并构建查询参数。这里可以加入你想要的额外的字段 OnInSelectedRow(InSelectedRowEventArgs e) 构建列表中选择数据行的查询条件语句 OnParseFilter(ParseFilterEventArgs e) 解析过滤策略中配置的条件,这里可以插件而外增加过滤条件。

AbstractConvertPlugIn插件接口下推执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口下推执行顺序 OnGetSourceData(GetSourceDataEventArgs e) 下推时,执行SQL,读取源单数据(下推执行) OnBeforeGroupBy(BeforeGroupByEventArgs e) 执行源数据分组前,在这里可以修改分组字段。 OnCreateTarget(CreateTargetEventArgs e) 根据源数据分组结果,初始化创建目标单据数据包(下推执行) OnBeforeFieldMapping(BeforeFieldMappingEventArgs e) 根据字段映射,向目标字段填充值之前。这里可以设置e. FireFieldMappingEvent值,启动插件每个字段填充事件(即:OnFieldMapping事件)

AbstractConvertPlugIn插件接口下推执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口下推执行顺序 OnFieldMapping(FieldMappingEventArgs e) 根据字段映射,向目标字段填充值 OnAfterFieldMapping(AfterFieldMappingEventArgs e) 所有字段映射完成 OnCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建前 OnAfterCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建完成 AfterConvert(AfterConvertEventArgs e) 单据转换后事件,这里目标单已经全部生成,可以在这里修改目标单数据包里的值。

AbstractConvertPlugIn插件接口选单前执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口选单前执行顺序 OnInitVariable(InitVariableEventArgs e) 初始化变量,可以得到转换规则,源单和目标单的BussinessInfo OnParseFilterOptions(ParseFilterOptionsEventArgs e) 解析映射关系中的过滤选项 OnParseFilter(ParseFilterEventArgs e) 选单前事件:解析过滤策略中配置的条件

AbstractConvertPlugIn插件接口选单执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口选单执行顺序 OnInitVariable(InitVariableEventArgs e) 初始化变量,可以得到转换规则,源单和目标单的BussinessInfo OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e) 解析字段映射关系,并构建查询参数。这里可以加入你想要的额外的字段 OnInSelectedRow(InSelectedRowEventArgs e) 构建列表中选择数据行的查询条件语句

AbstractConvertPlugIn插件接口选单执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口选单执行顺序 OnGetDrawSourceData(GetSourceDataEventArgs e) 选单时,执行SQL,读取源单数据(选单执行) OnBeforeGroupBy(BeforeGroupByEventArgs e) 执行源数据分组前 OnCreateDrawTarget(CreateTargetEventArgs e) 根据源数据分组结果,初始化创建目标单据数据包(选单执行) OnBeforeFieldMapping(BeforeFieldMappingEventArgs e) 根据字段映射,向目标字段填充值之前

AbstractConvertPlugIn插件接口选单执行顺序 如何开发插件 – 接口结构 AbstractConvertPlugIn插件接口选单执行顺序 OnFieldMapping(FieldMappingEventArgs e) 根据字段映射,向目标字段填充值 OnAfterFieldMapping(AfterFieldMappingEventArgs e) 所有字段映射完成 OnCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建前 OnAfterCreateLink(CreateLinkEventArgs e) 关联关系(Link表)创建完成 AfterConvert(AfterConvertEventArgs e) 单据转换后事件

目录 概述 单据转换插件 示例 namespace Kingdee.BOS.Demo.PlugIns { public class ConvertDemoPlugIns : AbstractConvertPlugIn //构建源单取数参数 public override void OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e) base.OnQueryBuilderParemeter(e); e.DicFieldAlias.Add("Fxxxx", "f100"); } //解析选单条件策略 public override void OnParseFilter(ParseFilterEventArgs e) base.OnParseFilter(e); e.FilterPolicySQL += "???"; //修改过了语句 //选单前事件;解析字段映射关系中配置的过滤选项; public override void OnParseFilterOptions(ParseFilterOptionsEventArgs e) base.OnParseFilterOptions(e); e.FilterOptionsSQL += "???"; //修改过了语句 //执行源单取数前事件 public override void OnBeforeGetSourceData(BeforeGetSourceDataEventArgs e) base.OnBeforeGetSourceData(e); e.QueryObject.SQLOrderBy += ",FXxx"; //分组策略执行前事件 public override void OnBeforeGroupBy(BeforeGroupByEventArgs e) e.HeadGroupKey = e.HeadGroupKey + ",FXxx"; e.EntryGroupKey = e.EntryGroupKey + ",FYyy"; e.SubEntryGroupKey = e.SubEntryGroupKey + ",FZzz"; //字段映射前事件 public override void OnBeforeFieldMapping(BeforeFieldMappingEventArgs e) e.FireFieldMappingEvent = true; //触发单个字段映射事件 //单个字段映射事件 public override void OnFieldMapping(FieldMappingEventArgs e) if (e.TargetField.Key.EqualsIgnoreCase("FXxx")) e.MapValue = "xxx"; //修改每个字段的映射值 public override void OnAfterFieldMapping(AfterFieldMappingEventArgs e) var extendEntities = e.TargetExtendDataEntitySet.FindByEntityKey("FBillHead"); foreach (var extendEntity in extendEntities) var billDynamicObject = extendEntity.DataEntity; billDynamicObject["propertyName"] = "xxx"; List<DynamicObject> lstSoureObjs = extendEntity[BOSConst.ConvSourceExtKey] as List<DynamicObject>; billDynamicObject["????"] = lstSoureObjs[0]["f100"]; public override void AfterConvert(AfterConvertEventArgs e) base.AfterConvert(e); var extendEntities = e.Result.FindByEntityKey("FBillHead");

如何开发插件 – 代码示例 单据转换插件 OnInitVariable(InitVariableEventArgs e)初始化事件 e.SourceBusinessInfo源单据BusinessInfo e. TargetBusinessInfo目标单据BusinessInfo e. Rule单据转换规则 示例: public override void OnInitVariable(InitVariableEventArgs e) { base.OnInitVariable(e); mainOrgField = e.TargetBusinessInfo.MainOrgField; this.lstOrgFields = new List<OrgField>(from p in e.TargetBusinessInfo.GetFieldList() where p is OrgField select (OrgField)p); }

如何开发插件 – 代码示例 OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e) 解析字段映射关系,并构建查询参数 QueryBuilderParemeterEventArgs e.SourceBusinessInfo来源单据BusinessInfo e. SelectItems添加查询参数集合 e. DicFieldAlias字段别名字典包 示例: public override void OnQueryBuilderParemeter(BOS.Core.Metadata.ConvertElement.PlugIn.Args.QueryBuilderParemeterEventArgs e) { //添加单据类型字段 e.SelectItems.Add(new SelectorItemInfo("FBillTypeID")); //添加业务类型 e.SelectItems.Add(new SelectorItemInfo("FBusinessType")); }

如何开发插件 – 代码示例 OnBeforeGroupBy(BeforeGroupByEventArgs e) 分组事件之前,可以添加分组字段 BeforeGroupByEventArgs e. GroupByMode分组类型,比如一对一 e. HeadGroupKey添加分组字段,单据分组依据 e. EntryGroupKey添加分组字段,单据体分录合并 e. SourceData来源单据数据包 示例: public override void OnBeforeGroupBy(BeforeGroupByEventArgs e) { base.OnBeforeGroupBy(e); bool isSplitStock = false; bool isSplitProcess = false; DynamicObject param = AppServiceContext.ParamService.TryGetUserParam(this.Context, MFGFormIdConst.SubSys_PRD.PickMtrlBill, MFGFormIdConst.SubSys_PRD.PickBillParamter); if(param!=null) isSplitStock = param.GetDynamicObjectItemValue<bool>("IsSplitStock"); isSplitProcess = param.GetDynamicObjectItemValue<bool>("IsSplitProcess"); } if (isSplitStock) e.HeadGroupKey += ",FStockID"; if (isSplitProcess) e.HeadGroupKey += ",FProcessID";

如何开发插件 – 代码示例 OnBeforeGroupBy(BeforeGroupByEventArgs e) 分组事件之前,可以添加分组字段 BeforeGroupByEventArgs e. GroupByMode分组类型,比如一对一 e. HeadGroupKey添加分组字段,单据分组依据 e. EntryGroupKey添加分组字段,单据体分录合并 e. SourceData来源单据数据包 示例: public override void OnBeforeGroupBy(BeforeGroupByEventArgs e) { base.OnBeforeGroupBy(e); bool isSplitStock = false; bool isSplitProcess = false; DynamicObject param = AppServiceContext.ParamService.TryGetUserParam(this.Context, MFGFormIdConst.SubSys_PRD.PickMtrlBill, MFGFormIdConst.SubSys_PRD.PickBillParamter); if(param!=null) isSplitStock = param.GetDynamicObjectItemValue<bool>("IsSplitStock"); isSplitProcess = param.GetDynamicObjectItemValue<bool>("IsSplitProcess"); } if (isSplitStock) e.HeadGroupKey += ",FStockID"; if (isSplitProcess) e.HeadGroupKey += ",FProcessID";