前台调用 BP 取数 版 本 号 :V1.0 作者:张刘剑 版本记录 【此部分要记录该文档形成过程中的历次版本变更过程及变更的内容】 版本 修改与参与人 修改时间 修改原因 修改概述 审批人1.0 张刘剑 2008/07/1 原始文档建立 一、 问题域说明 本范例描述前台如何实现调用后台数据操作; 例如在 UI 项目中你得到一个员工 ID,这时你想知道这个员工的姓名,但在前台数据中没有,为取得员工姓名你需要开发一个后台 BP 实现通过员工 ID 返回员工姓名的操作。 二、 基本原理 概念 BP BP 业务操作:英文全称 Business Process,领域模块中的业务逻辑对象,用于描述对象行为,如审核、检查库存、检查信用额度等。 DTO DTO 数据传输对象:英文全称 Data Transient Object,领域模型中数据传输对象,用于 BP、Servie 的传入参数、返回参数,不参与持久化。 BP 传入参数类型 传入参数可分为 5 类: 简单系统类型:如整型、长整型、字符型等 BE 数据对象:如人员,联系对象,会计期间等 DTO 类型:根据业务需求自定义 DTO 对象 集合类型:特定类型的集合 实体 KEY : 特定类型的 Key 类型,继承 UFSoft.UBF.Business.BusinessEntity.EntityKey 枚举类型:如员工类别、性别等 BP 返回参数类型 与 BP 传入参数一致 BP 产出 BP DLL:如 UFIDA.U9.XXXBP.dll BP Agent DLL:如 UFIDA.U9.XXXBP.Agent.dll BP Deploy DLL: 如 UFIDA.U9.XXXBP.Deploy.dll BP ubfsvc 配置文件 UFIDA.U9.XXXBP.ubfsvc 三、 关键代码及说明 样例 设计一个 BP,通过员工 ID 获取员工姓名、性别。 设计 BP 新建 BP 组件 步骤 1:右击 BP 组件树,在弹出菜单选择新建 步骤 2:输入业务组件名称,确定 步骤 3:切换到模型视图界面,选中组件命名空间,然后切换到属性视图,按规范修改命名空间(如 UFIDA.U9.CBO.HR.Person) 添加 DTO 步骤 1:添加 DTO 模型图,如果有了跳过该步骤 步骤 2:从操作定义工具中拖入一个数据传输对象到模型图,选中并在属性视图修改名称、现实名称和描述 步骤 3:增加 DTO 属性,在模型图中选中 DTO,在详细信息视图中添加属性 添加操作 步骤 1:双击打开模型图,从操作定义工具中拖入一个操作,并选中在属性视图修改名称、显示名称和描述 步骤2:设置 BP 传入参数,在模型图中选中 BP,在详细信息视图中添加传入参数 注:实体 Key 类型是在类型选择将将实体 Key 复选框选中 步骤3:设置 BP 返回类型,在模型图中选中 BP,在属性视图设置返回类型 构造,生成代码 选中 BP 项目,右击菜单选构造 修改代码添加操作业务逻辑 打开生成的 VS 工程项目,修改 BP 实现策略代码,然后编译 namespace UFIDA.U9.CBO.HR.Person { using System; using System.Collections.Generic; using System.Text; using UFSoft.UBF.AopFrame; using UFSoft.UBF.Util.Context; /// /// GetPersonNameSex partial /// public partial class GetPersonNameSex { internal BaseStrategy Select() { return new GetPersonNameSexImpementStrategy(); } } #region implement strategy /// /// Impement Implement /// /// internal partial class GetPersonNameSexImpementStrategy : BaseStrategy { public GetPersonNameSexImpementStrategy() { } public override object Do(object obj) { GetPersonNameSex bpObj = (GetPersonNameSex)obj; if( bpObj.PersonKey == null || bpObj.PersonKey.ID <= 0 ) return null; //通过人员实体Key获取人员对象 UFIDA.U9.CBO.HR.Person.Person o = UFIDA.U9.CBO.HR.Person.Person.Finder.FindByID(bpObj.PersonKey); //对返回DTO赋值 PersonNameSexDTO dto = new PersonNameSexDTO(); dto.PersonName = o.Name; dto.PersonSex = o.Sex; return dto; } } #endregion } 部署 BP 产出 ...