插件式开发原理及流程

栏目:u9cloud知识作者:用友来源:用友发布:2024-08-20浏览:1

插件式开发原理及流程

UDDI: Universal Description, Discovery and Integration 统一描述,发现和集成

它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务

 

业务逻辑扩展

  • 支持业务实体(BE)扩展
  • 支持业务操作(BP)扩展
  • 支持服务(SV)扩展


 

业务逻辑扩展开发流程

 

 

业务实体BE事件的顺序—新增/修改

业务实体BE事件的顺序—删除

业务操作BP扩展方法

  • BeforeDo(object bp) 操作执行前
  • bp是扩展的业务对象,是object类型,可以转化为业务对象类型
  • 可以对传入的参数做相应处理

 

  • AfterDo(object bp,ref object result) 操作执行后
  • bp是扩展的业务对象,是object类型,可以转化为业务对象类型
  • 可以对返回结果result进行相应处理,或根据返回结果实现其它业务

 

BE扩展类继承和配置文件

  • 继承的扩展类
  • 添加引用UFSoft.UBF.Execution.dll
  • 继承UFSoft.UBF.Eventing.IEventSubscriber
  • 插件dll部署
  • 部署到Portal/ApplicationServer/Libs
  • 扩展点配置文件
  • 文件:名称.sub.xml ,部署到Portal/Bin/
  • 配置节:

 

        

  

说明:event :要扩展的BE事件,如 Inserting, Inserted

         type :插件类,插件程序集

  • 继承的扩展类
    • 添加引用UFSoft.UBF.Execution.dll
    • 继承UFSoft.UBF.Eventing.IEventSubscriber
  • 插件dll部署

部署到Portal/ApplicationServer/Libs

  • 扩展点配置文件
    • 文件:名称.sub.xml ,部署到Portal/Bin/
    • 配置节:

 

     

  

说明:event :要扩展的BE事件,如 Inserting, Inserted

        type :插件类,插件程序集

  • 继承的扩展类
    • 添加引用UFSoft.UBF.Execution.dll
    • 继承UFSoft.UBF.Eventing.IEventSubscriber
  • 插件dll部署

部署到Portal/ApplicationServer/Libs

  • 扩展点配置文件
    • 文件:名称.sub.xml ,部署到Portal/Bin/
    • 配置节:

 

     

  

说明:event :要扩展的BE事件,如 Inserting, Inserted

        type :插件类,插件程序集

、BP/SV扩展类继承和配置文件

  • 继承的扩展类
    • 添加引用UFSoft.UBF.AopFrame.dll
    • 继承UFSoft.UBF.Service.BPSVExtendBase
  • 插件dll部署
    • 部署到Portal/ApplicationServer/Libs
  • 扩展点配置文件
    • 文件Portal/UBFConfig/UFIDA.UBF.BPSVExtend.config
    • 配置节:

 

        extendType="UFIDA.U9.Customer.OrderBP.RewritingIndentDoc,UFIDA.U9.Customer.OrderDocBP.dll"/>

说明:on :要扩展的BP/SV

extendType:插件类,插件程序集

在文件中增加配置节

 

表单逻辑扩展

表单逻辑扩展事件顺序

 

表单逻辑标准单据扩展事件说明

 可写的逻辑
AfterCreateChildControls()创建控件树,创建关联控件
"border-bottom:1.0pt solid black;border-left-style:none;border-right:2.25pt solid black;border-top-style:none;height:35.95pt;padding:2.7pt 5.4pt;vertical-align:top;width:238.15pt;">非PostBack状态下创建控件树,加载数据
After"border-bottom:1.0pt solid black;border-left-style:none;border-right:2.25pt solid black;border-top-style:none;height:37.1pt;padding:2.7pt 5.4pt;vertical-align:top;width:238.15pt;">

创建控件树的最后机会,

也可以加载数据,修改控件属性

ActionExtend()针对每个事件的操作
BeforeUIModelBinding()修改模型数据最后的机会,不然不会反映到控件上,修改控件属性
AfterUIModelBinding()修改控件属性

表单逻辑第三方扩展事件说明

 可写的逻辑
Before/AfterInit(IPart Part, EventArgs args)前:初始化前 后:创建控件树,创建关联控件
BeforeLoad(IPart Part, EventArgs args)Form加载前

BeforeDataLoad (IPart Part, out bool executeDefault)

/AfterDataLoad(IPart Part)

数据加载前后
AfterLoad(IPart Part, EventArgs args)Form加载后

BeforeAfterDataCollect(IPart Part, out bool executeDefault)

/AfterDataCollect(IPart Part)

数据收集前后的处理

BeforeAfterEventProcess(IPart Part, string eventName, object sender, EventArgs args, out bool executeDefault)

/AfterEventProcess(IPart Part, string eventName,  object sender, EventArgs args)

针对每个事件的操作前后的处理
BeforeRender(IPart Part, EventArgs args)修改模型和控件属性

BeforeDataBinding(IPart Part, out bool executeDefault)

/AfterDataBinding(IPart Part)

前:修改模型 ,修改控件属性

后:修改控件属性

AfterRender(IPart Part, EventArgs args)修改控件属性

Part: 原Form对象,executeDefault:是否执行系统默认操作,sender:触发控件

 

表单逻辑扩展开发流程

 

表单扩展类继承和配置文件

  • 继承的扩展类
    • 添加引用UFSoft.UBF.UI.FormProcess.dll
    • 继承UFSoft.UBF.UI.Custom.ExtendedPartBase
  • 插件dll部署
    • 部署到Portal/UILib
  • 扩展点配置文件
    • 文件Portal/WebPartExtend_**.config(UI插件配置文件支持扩展文件,防止多人开发被覆盖,文件前缀必须是WebPartExtend_,否则无法识别插件)
    • 配置节:

 

                          

                              extendedPartAssemblyName="UFIDA.U9.UI.PlugIn.dll">

                          

说明: parentPartFullName :要扩展的原Form全名

extendedPartFullName :插件类全名

extendedPartAssemblyName :插件程序集

 

注意:一个Form只能有一个扩展类,后期对该Form的扩展既修改第一次扩展的文件

 

案例

案例1-订货单金额控制

需求

  • 控制经手人每张订货单金额上限

如果经手人一张订货单所有订单行,含税金额汇总超过100万,单位本币(不同币种按汇率转换),那么不允许保存并提示错误信息

 

设计

  • 订阅订货单AfterValidate事件
  • 汇总所有订货单行含税金额
  • 判断汇总金额是否超过100万,是抛出异常

 

编码实现校验逻辑

  • 订阅订货单AfterValidate事件

 

 

 

  • 汇总所有订货单行含税金额

  • 判断汇总金额是否超过100万,是抛出异常

案例2-消息通知上级领导

需求

  • 订货单保存成功后发消息给经手人上级

通过消息中心和邮件的方式将订单保存成功的信息发送给经手人上级

 

设计

  • 订阅订货单AfterInserted事件
  • 找到经手人上级
  • 取得经手人上级的Email并发送消息

 

编码实现校验逻辑

  • 订阅订货单AfterInserted事件

 

      

 

  • 找到经手人上级

 

  • 取得经手人上级的Email并发送消息

 

案例3-记录单据之间关联

需求

  • 批量生成销售订单后回写订货单属性记录关联的销售订单信息

 

设计

  • 在订货单生成销售订单BP后的方法扩展
  • 取得订货单生成的销售订单
  • 把销售订单的信息回写到订货单的扩展字段

 

编码实现校验逻辑

  • 在订货单生成销售订单BP后的方法扩展

 

extendType="UFIDA.U9.Customer.OrderBP.RewritingIndentDoc,UFIDA.U9.Customer.OrderDocBP.dll"/>

  • 取得订货单生成的销售订单

 

  • 把销售订单的信息回写到订货单的扩展字段

 

案例4-界面增加联查功能

需求

  • 在订货单界面增加联查销售订单功能

 

设计

  • 扩展订货单
  • 在扩展方法AfterInit()中创建销售订单按钮
  • 按钮事件弹出对应的销售订单界面
  • 在扩展方法AfterRender()方法中控制销售订单按钮的状态

 

编码实现校验逻辑

  • 扩展订货单

 

 

 

  • 在扩展方法AfterInit()中创建销售订单按钮

 

 

  • 按钮事件弹出对应的销售订单界面
  • 在扩展方法AfterRender()方法中控制销售订单按钮的状态

案例5-界面增加汇率功能

需求

  • 订货单增加汇率自动带出功能

在录入完本币和交易币后按买入汇率类型自动带出汇率值

 

设计

  • 扩展订货单
  • 增加取汇率的方法(调用取汇率的BP)
  • 在扩展方法AfterInit()中注册关联控件
  • 关联控件逻辑方法中调用取汇率的方法

 

编码实现校验逻辑

  • 扩展订货单(同上)
  • 增加取汇率的方法(调用取汇率的BP)
  • 在扩展方法AfterInit()中注册关联控件

 

  • 关联控件逻辑方法中调用取汇率的方法

 

插件式开发原理及流程

UDDI: Universal Description, Discovery and Integration 统一描述,发现和集成它是一个基于XML的跨平台的描述规范,可以使世界范围...
点击下载文档
标签: # U9C
分享:
上一篇:U9调试技巧下一篇:自定义报表开发
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息