电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

金蝶云·星空二次开发零基础入门(下)_定稿.pptx

金蝶云·星空二次开发零基础入门(下)_定稿.pptx_第1页
1/16
金蝶云·星空二次开发零基础入门(下)_定稿.pptx_第2页
2/16
金蝶云·星空二次开发零基础入门(下)_定稿.pptx_第3页
3/16
1993-2020金蝶国际软件集团有限公司金蝶中国知识与培训部出品主讲人:黄信东时间:2020年3月金蝶云星空二次开发零基础入门(下)内容简介•插件类型说明•为什么需要插件开发(常用场景)•如何进行插件开发(代码实操)•插件开发实现的效果(简单案例演示)插件类型说明插件类型插件类作用单据维护插件AbstractBillPlugIn单据维护插件允许在单据编辑界面上进行操作,比如赋值,计算单据列表插件AbstractListPlugIn列表插件允许对单据列表界面进行操作,比如列表格式化动态表单插件AbstractDynamicFormPlugIn动态表单插件是单据、基础资料、列表、过滤界面等插件的基类,提供了这些模型插件的统一接口,通过这些接口可以对表单编辑样式、列表样式、操作、model数据等进行控制。单据转换插件AbstractConvertPlugIn单据转换插件,能够介入到单据转换的各个关键时刻,对转换行为进行控制,从而调整所生成的下游数据包。操作插件AbstractOperationServicePlugIn操作插件,用于对操作的执行过程进行干预、控制,以实现自定义扩展功能反写插件AbstractBusinessFlowServicePlugIn反写插件实现对保存、审核、反审核、删除、作废等操作的反写过程,进行干预。账表服务取数插件SysReportBaseService账表的服务端取数插件,是通过插件组装账表取数Sql指令,把取数结果返回给平台账表引擎,平台将取数结果绑定到账表页面的过程。IDynamicFormView接口IDynamicFormViewIDynamicFormView接口,MVC架构中的视图层实现接口,负责界面展示等相关操作,对动态表单的视图进行管理IDynamicFormModel接口IDynamicFormModelIDynamicFormModel接口,对动态表单的数据模型进行管理为什么需要使用插件开发遇到的二开场景(1)账表开发,重新定义报表取数逻辑(2)在单据保存或审核时,对本单据或跨单据更新字段数据(3)在没有业务流程、关联关系的情况下,或者反写场景比较复杂,无法通过配置反写规则实现字段反写(4)跨单据界面打开另一个单据,比如在报表联查业务单据或凭证(5)跨单据取数,比如A单据满足某个条件时,将B单据的某个字段携带到A单据上总之,无法通过BOS(集成开发平台)配置实现的业务场景,都可以使用插件开发进行实现如何进行插件开发业务场景说明,某房产开发公司使用金蝶云星空开发两张业务单据,单据A预售合同,单据B购买合同,在设计前期,没有考虑到单据间的业务关联关系。现有需求如下:(1)添加或修改预售合同的情况下,选择房产位置时,根据房产位置查询相同房产位置的购买合同,获取购买合同上的成交金额,即时更新到预售合同的成交金额。(2)保存购买合同时,修改与其房产位置和客户一致的预售合同单据状态,由锁定改为已售,并且将预售合同的成交金额改为购买合同的成交金额。如何进行插件开发业务分析需求一:(1)涉及两个单据取数,属于跨单据取数,无法通过BOS配置实现,需要使用插件开发(2)添加或修改预售合同,说明在预售合同的编辑界面,所以需要使用表单插件AbstractBillPlugIn,选择房产位置获取其他成交金额,意思是字段变更时触发,那么可以使用表单插件的DataChanged()捕获触发事件。(3)查询成交金额,需使用查询服务开发说明AbstractBillPlugIn//表单插件DataChanged()//捕获房产位置更新的事件,执行查询逻辑如何进行插件开发(代码示例)//购买合同单据标识privatereadonlystringPurContractFormID="ora_PurContract";//捕获字段值改变事件publicoverridevoidDataChanged(BOS.Core.DynamicForm.PlugIn.Args.DataChangedEventArgse){stringkey=e.Field.Key;if(key=="FYSHouse"){//房产标识DynamicObjecthouse=this.View.Model.GetValue("FYSHouse")asDynamicObject;//获取当前房产的名称属性varfName=house!=null?house["FNAME"].ToString():"";//根据预售合同中房产名称获取购买合同对应的单据数据包DynamicObjectpurContractObj=GetPurContractInfo(fName);if(purContractObj!=null){stringpayAmount=purContractObj["FPAYAMOUNT"].ToString();//对当前预售合同的成交金额字段进行赋值this.View.Model.SetValue("FRealAmount",payAmount);}else{this.View.Model.SetValue("FRealAmount","0");}//刷新当前页面的数据this.View.UpdateView();}}如何进行插件开发(代码示例)//根据当前房产名称获取其购买合同信息privateDynamicObjectGetPurContractInfo(stringname){//使用标准查询方法QueryServiceQueryBuilderParemeterpara=newQueryBuilderParemeter();//构造需要查询的字段,比如单据编号、客户、房产、付款金额stringfields="FBILLNO,FCUSTOMER,FPurHouse,FPAYAMOUNT";//需要查询的单据标识para.FormId=PurContractFormID;para.SelectItems=SelectorItemInfo.CreateItems(fields);//过滤字段,相当于数据库查询T-SQL中的where条件//假如遇到字段是基础资料,可以使用当前引用基础资料的标识.属性进行查询para.FilterClauseWihtKey=string.Format("FPurHouse.FNAME='{0}'",name);//将构造好的查询语句进行查询相当于selectFBILLNO,FCUSTOMER,FPurHouse,FPAYAMOUNTfromAwhereFPurHouse.FNAME='{0}'DynamicObjectCollectionbillInfos=QueryServiceHelper.GetDynamicObjectCollection(this.View.Context,para);returnbillInfos.FirstOrDefault();}publicvoidTest(){//查询数据库帮助类stringsql="select1";DBServiceHelper.Execute(this.Context,sql);//查询数据库帮助类DBUtils.Execute(this.Context,sql);}需求一实现效果插件开发能达到什么效果如何进行插件开发需求二:(1)涉及两个单据的逻辑,存在上下游关联关系或单据转换的情况下,可以配置反写规则,但业务场景说明,两个单据没业务关联关系,则需要使用插件开发(2)保存购买合同执行逻辑,需要可以使用表单插件BarItemClick()捕获保存事件,或者使用操作插件,并且注册到保存操作服务上(3)保持在同一个事务执行,使用EndOperationTransaction()执行逻辑(4)根据购买合同的房产位置和客户查询预售合同的信息,需要使用查询服务(5)修改预售合同的状态和成交金额,需要调用预售合同的保存操作开发说明:AbstractOperationServicePlugIn//操作插件OnPreparePropertys()//添加需要获取的数据包EndOperationTransaction()//执行修改逻辑AfterExecuteOperationTransaction()//定制操作结果如何进行插件开发(代码示例)privatereadonlystringYsContractFormID="ora_YSContract";//需要更新的预售合同编号stringtmpBillNo=string.Empty;boolisUpdate=false;stringpayAmount=string.Empty;publicoverridevoidOnPreparePropertys(BOS.Core.DynamicForm.PlugIn.Args.PreparePropertysEventArgse){//加载当前操作需要用到的数据包e.FieldKeys.Add("FCustomer");e.FieldKeys.Add("FPurHouse");e.FieldKeys.Add("FPayAmount");}//当前操作的事务内执行publicoverridevoidEndOperationTransaction(BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgse){//获取当前销售合同的客户内码、房产内码、付款金额longcustId=Convert.ToInt64(e.DataEntitys[0]["FCustomer_Id"].ToString());longhouseId=Convert.ToInt64(e.DataEntitys[0]["FPurHouse_Id"].ToString());payAmount=e.DataEntitys[0]["FPayAmount"].ToString();//根据客户和房产信息获取预售合同数据包DynamicObjectcurYSContract=GetYsContractInfo(custId,houseId);if(curYSContract!=null){longfid=Convert.ToInt64(curYSContract["FID"]);tmpBillNo=curYSContract["FBILLNO"].ToString();SaveBillStatus(fid);}}如何进行插件开发(代码示例)publicoverridevoidAfterExecuteOperationTransaction(BOS.Core.DynamicForm.PlugIn.Args.AfterExecuteOperationTransactione){base.AfterExecuteOperationTransaction(e);//定制返回结果OperateResultCollectionoResult=this.OperationResult.OperateResult;//返回更新的预售合同if(this.OperationResult.IsSuccess&&oResult.Count>0&&isUpdate){oResult[0].Message+=string.Format("将预售合同{0}的单据状态修改为已售",tmpBillNo);}}//根据当前购买合同的客户和房产查询预售合同信息privateDynamicObjectGetYsContractInfo(longcustId,longhouseId){//使用标准查询方法QueryServiceQueryBuilderParemeterpara=newQueryBuilderParemeter();//构造需要查询的字段,比如单据编号、客户、预售房产stringfields="FID,FBILLNO,FCUSTOMER,FYSHouse";//需要查询的单据标识para.FormId=YsContractFormID;para.SelectItems=SelectorItemInfo.CreateItems(fields);//过滤字段,相当于数据库查询T-SQL中的where条件//假如遇到字段是基础资料,可以使用当前引用基础资料的标识.属性进行查询para.FilterClauseWihtKey=string.Format("FCUSTOMER={0}andFYSHouse={1}",custId,houseId);//将构造好的查询语句进行查询相当于selectFBILLNO,FCUSTOMER,FPurHouse,FPAYAMOUNTfromAwhereFPurHouse.FNAME='{0}'DynamicObjectCollectionbillInfos=QueryServiceHelper.GetDynamicObjectCollection(this.Context,para);returnbillInfos.FirstOrDefault();}如何进行插件开发(代码示例)//将预售合同的单据类型更新为已售和成交金额为购买合同的付款金额privatevoidSaveBillStatus(longfid){//通过单据内码加载数据包FormMetadatameta=MetaDataServiceHelper.Load(this.Context,YsContractFormID)asFormMetadata;DynamicObject[]contracts=BusinessDataServiceHelper.Load(this.Context,newobject[]{fid},meta.BusinessInfo.GetDynamicObjectType());if(contracts.Length>0){DynamicObjectcontract=contracts.FirstOrDefault();if(contract!=null){//将预售合同的单据状态更新为已售contract["FBillStatus"]='B';contract["FRealAmount"]=payAmount;//调用保存方法进行预售合同保存BusinessDataServiceHelper.Save(this.Context,meta.BusinessInfo,contract,OperateOption.Create());isUpdate=true;}}}需求二实现效果插件开发能达到什么效果知识推广金蝶云星空BOS资料合辑https://vip.kingdee.com/article/9186插件示例说明https://vip.kingdee.com/article/39061993-2019金蝶国际软件集团有限公司Thanksterimakasih感謝谢谢ありがとうขอบคุ ณ

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

金蝶云·星空二次开发零基础入门(下)_定稿.pptx

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信