NCV5-新查询模板技术红皮书
- 格式:doc
- 大小:618.00 KB
- 文档页数:22
第一章开发工具一、简介uapweb开发工具是基于eclipse开发平台开发的一系列插件,为uapweb应用开发者提供便捷的可视化建模开发,能够快速生成功能的Controller类、UI元数据、多语抽取以及安装盘的构造等等操作。
二、工具使用1、创建工程1.1业务组件概念几个相关的工程可以放在一个工程下管理,这几个相关的工程就是大工程下的几个业务组件。
创建业务组件在已经创建好的uapweb工程或Portal工程上点击右键,新建->项目选择Uap-web Development中的New Business Compenent,点击“下一步”,输入业务组件的Id和Name。
点击完成,业务组件创建成功。
1.2U apweb工程在studio中选择文件->新建->项目在新建向导中选择Uapweb Project,点击“下一步”,输入项目名称以及模块名称。
点击“下一步”,设置当前项目是主项目,还是某个项目的从属项目,并且指定访问器路径。
点击完成,Uapweb工程创建成功。
Uapweb工程创建完成后,需要在工程上创建业务组件。
1.3P ortal工程在studio中选择文件->新建->项目在新建向导中选择Portal Project,点击“下一步”,输入项目名称以及模块名称。
点击“下一步”,设置当前项目是主项目,还是某个项目的从属项目,并且指定访问器路径。
一般Portal工程都作为portal的从属项目,如下图。
点击完成,Portal工程创建成功。
portal工程创建完成后,需要在工程上创建业务组件。
Portal组件比uapweb组件多了一个名字为portalspec的源码路径,里面存放portlet相关配置文件。
2、功能开发创建完成工程后,可以通过组件模型视图进行功能的开发。
在进行功能开发之前,需要先启动相关服务。
在包资源管理器中选择要开发的工程,点击右键选择调试方式->LFW Middleware,启动服务。
NC财务二次开发接口红皮书NC-FI 5.02用友NC-FI2013-08-06目录第一章前言 (4)第二章总账二次开发接口 (4)凭证保存接口IV oucherSave (4)凭证作废接口IV oucherAbandon (4)凭证审核接口IV oucherAudit (4)凭证删除接口IV oucherDelete (5)凭证签字接口IV oucherSign (5)凭证记账接口IV oucherTally (5)自定义转账接口1 IMethodReturn (6)自定义转账接口2 IMethodRunner (6)第三章收付二次开发接口 (6)单据保存接口ArapPubAddInterface (6)暂存单据保存接口ArapPubAddTemporarilyInterface (7)单据删除接口ArapPubDelInterface (7)暂存单据删除接口ArapPubDelTemporarilyInterface (7)单据修改接口ArapPubEditTemporarilyInterface (7)暂存单据修改接口ArapPubEditTemporarilyInterface (8)单据审核接口ArapPubShenheInterface (8)单据反审核接口ArapPubUnShenheInterface (8)单据核销接口ArapPubVerifyInterface (8)单据反核销接口ArapPubUnVerifyInterface (8)单据生效接口IArapPubEffectInterface (8)单据反取消生效接口IArapPubUnEffectInterface (9)单据收付接口IArapPayPlugin (9)单据预收付接口IArapPrePayPlugin (9)第四章固定资产二次开发接口 (10)判断卡片的可删除性IcheckCardDelete (10)判断卡片的可编辑性IcheckCardEditabl (10)判断卡片数据合法IcheckCardSaveable (10)结帐后的其他操作IhandleBackCloseBook (10)结帐前的其他操作IhandlePreCloseBook (11)反结帐后的其他操作IhandleBackUnCloseBook (11)反结帐前的其他操作IhandlePreUnCloseBook (11)卡片保存后的其他操作IhandleCardSave (11)卡片删除后的其他操作IhandleCardDelete (11)卡片项目编辑后的操作IhandleLostFocus (11)自定义附属卡片IcardPanel (12)自定义折旧方法IDeprOperater (12)自定义资产编码产生方式IGetAssetCode (12)第一章前言在产品发展过程中,财务产品针对项目开发对产品扩展性的需求设计了若干二次开发接口,并且陆续在项目中得到应用。
NCV5 报表二次开发技术红皮书ncv5-报表二次开发技术红皮书nc报表二次开发红皮书nc-iufov5.5用友nc报表及bi开发部2021/12/101.iufo与第3方产品实现单点登陆单点登入参数表明:logintype:登录类型,单点登录请使用值portalm_strunitcode:登录单位m_strusercode:登录用户m_strpassword:登录密码m_strlogindate:登录日期m_strlangcode:登录语种登入语种可不提供更多,预设为中文。
其他必须提供更多。
执行步骤:1.登入检验url:如果验证通过,返回字符串为“true”;如果验证失败,页面返回具体的错误提示信息。
2.检验后登入url:此链接直接重定向到iufo主页面。
实际采用时,特别注意把127.0.0.1替代为实际的nc应用服务器地址。
2.iufo可以作为独立应用整体嵌入第3方portal仿效ncportal内置iufo的方案,采用上述单点登入流程,轻易传达有关参数并解锁iufo主界面。
3.iufo的具体报表可以作为portal中一个链接,点击打开目前iufo暂时未提供更多具体内容报表对外公布为链接的方式。
但可以通过下列方式手工以获取链接地址,然后手工编辑portal的页面文件将链接嵌入portal.以获取具体内容报表链接地址的方式如下:因为报表的格式设计和数据态浏览界面都禁用了鼠标右键,要获取报表页面链接,只能通过maxthon或ie7等带标签栏的浏览器登录iufo,然后打开具体报表页面,复制该页面的链接地址。
4.iufo静态报表内容可以公布至portal上一、在发布到的机器上建立共享1.在公布至的机器上创建一个目录,用作放置公布的html文件。
2..对该目录创建共享资源。
共享资源的建议就是,以启动nc中间件的用户的身份登入nc服务器,,对该共享资源目录存有修正权限。
二、iufo报表数据发布过程1.登入iufo,关上报表数据节点2.如上图所示,在单位树上选择单位,在右侧查询条件界面上选择关键字条件,选择完后,点击“查询”按钮,出现报表数据列表。
自由报表技术红皮书NC-UAP 6.0用友NC-UAP2020-01-13目录第一章前言 (1)1.背景 (1)2.入门 (1)2.1自由报表的新建 (1)2.2自由报表的格式设计 (4)2.3语义模型的使用 (7)2.4可扩展区域 (9)2.5数据预览功能 (14)2.6分析功能 (16)3.小结 (19)第二章基本功能 (19)1.可扩展区域管理 (19)2.排序 (24)3.筛选 (25)4.固定成员 (26)5.分组 (29)6.分组统计 (30)7.排名函数 (32)8.TopN分析 (35)9.交叉 (40)第三章分析功能综合应用 (43)1.分组功能应用 (43)1.1列表中的多级分组 (44)1.2交叉表结合分组应用 (47)2.数据依赖处理区域拼接 (48)第四章报表发布节点 (50)1.报表发布 (50)2.发布后节点 (51)第五章穿透和联查 (52)1.报表穿透 (52)2.报表联查 (53)2.1接口TraceDataInterface (53)2.2注册方式 (54)2.3联查的执行 (54)2.4工具方法 (54)第六章报表节点的扩展 (55)1.查询动作扩展 (55)2.查询条件 (57)3.区域条件 (58)4.业务格式 (59)5.格式调整器 (61)6.工具方法 (62)第七章辅助开发工具 (64)1.手工导入导出 (64)2.安装盘脚本 (65)2.1构造平台中支持自由报表(以及语义模型)的脚本导出 (65)2.2发布的报表节点导出 (66)3.安装程序 (66)第一章前言1. 背景为满足各类用户在报表分析方面的综合要求,NC报表产品IUFO从5.5版本开始提供了一个分析型报表的解决方案:自由报表。
本文针对V6自由报表功能进行介绍,但是使用了部分5.6版本的产品截图,后续会逐步替换。
自由报表具有以下特点:1.针对企业不同业务角色,提供多样使用方式:报表数据查询人员可以在报表数据查询结果上直接构建分析型报表,而不需具备较深技术背景;专业的分析报表设计人员则可以全面使用设计功能实现复杂报表的定义和发布;2.支持多种数据来源:系统内置报表数据提供者和多种语义模型提供者,还支持注册其他类型语义模型提供者,多来源数据都可以在一张自由报表中进行数据分析和展现;3.报表支持多区域模型,多个区域按照数据分析结果各自动态展开;多区域和多数据来源之间均可以设置依赖关系,能灵活组合拼装出各类样式的复杂报表;4.格式设计和报表展现效果一致:各种数据分析和格式设置都在设计界面有直观展现,特别是交叉表的设计方式突破以往,能够可视化的直接定义维度指标及各类展现效果;5.提供了分析图表功能:提供了各类常见图表分析功能;6.分析功能和交互性加强:全面支持排序/过滤/分组/统计/交叉/排名函数/TopN等分析功能,并具有页维度和待定参数等交互特性。
NC财务二次开发接口红皮书NC-FI 5.02用友NC-FI2013-04-20目录第一章前言 (4)第二章总账二次开发接口 (4)凭证保存接口IV oucherSave (4)凭证作废接口IV oucherAbandon (4)凭证审核接口IV oucherAudit (4)凭证删除接口IV oucherDelete (5)凭证签字接口IV oucherSign (5)凭证记账接口IV oucherTally (5)自定义转账接口1 IMethodReturn (6)自定义转账接口2 IMethodRunner (6)第三章收付二次开发接口 (6)单据保存接口ArapPubAddInterface (6)单据删除接口ArapPubDelInterface (7)暂存单据删除接口ArapPubDelTemporarilyInterface (7)单据修改接口ArapPubEditTemporarilyInterface (7)暂存单据修改接口ArapPubEditTemporarilyInterface (8)单据审核接口ArapPubShenheInterface (8)单据反审核接口ArapPubUnShenheInterface (8)单据核销接口ArapPubVerifyInterface (8)单据反核销接口ArapPubUnVerifyInterface (8)单据生效接口IArapPrePayPlugin (8)单据反取消生效接口IArapPubUnEffectInterface (9)单据预收付接口IArapPrePayPlugin (9)单据UI扩展接口ArapAssistantInf .............................................. 错误!未定义书签。
第四章固定资产二次开发接口 (10)判断卡片的可删除性IcheckCardDelete (10)判断卡片的可编辑性IcheckCardEditabl (10)判断卡片数据合法IcheckCardSaveable (10)结帐后的其他操作IhandleBackCloseBook (10)结帐前的其他操作IhandlePreCloseBook (11)反结帐后的其他操作IhandleBackUnCloseBook (11)反结帐前的其他操作IhandlePreUnCloseBook (11)卡片保存后的其他操作IhandleCardSave (11)卡片删除后的其他操作IhandleCardDelete (11)卡片项目编辑后的操作IhandleLostFocus (11)自定义附属卡片IcardPanel (12)自定义折旧方法IDeprOperater (12)自定义资产编码产生方式IGetAssetCode (12)第一章前言在产品发展过程中,财务产品针对项目开发对产品扩展性的需求设计了若干二次开发接口,并且陆续在项目中得到应用。
NC5系列开发培训1说明1.1主题本次实战培训选择开发一个简单的学生管理系统,主要为了体现在NC中如何开发管理系统。
学生管理系统大致功能为:功能界面类型说明课程信息维护列表型~档案学生信息管理管理型~档案学生选修课程申请管理型审批流程1.2目标:1)了解NC UAP开发平台2)了解数据模型的设计规范3)了解单据开发的操作步骤4)了解界面的具体技术细节1.3环境要求NC版本:NC56,可以只安装UAP客户化,完整系统路径中严禁包含中文或空格。
Eclipse:培训时必须使用我提供的Eclipse3.7,完整系统路径中严禁包含中文或空格。
JDK:Win7、Win8用户建议使用JDK1.6,其他1.5、1.6均可。
严禁使用低于1.5、高于1.6 的JDK/JRE同时建议配置JAVA_HOME到用户的环境变量中,而非系统变量。
2数据模型设计2.1数据设计规范NC5系列大部分使用PowerDesigner进行数据模型设计,也有使用元数据设计数据模型。
本文暂时介绍PowerDesigner的设计方法。
在设计数据模型的时候每张表都必须设计ts{Char(19)}、dr{int}、pk_corp{char(4)}三个字段,分别表示记录的最后操作时间、删除标记、公司标记。
如果单据需要走审批流或业务流推式、拉式生成单据,则必须加上如下几个字段(如原2.2数据模型学生信息(bd_student)学生信息子表~紧急联系人(bd_contact)选修课程申请(st_courseapply)选修课程(st_courseapply_b)pk_courseapply 申请单主键char(20)pk_course 课程ID char(20)credit 学分intmemo 备注varchar(300)ts ts char(19)dr dr int2.3PowerDesigner 建模1)使用PowerDesigner 新建物理数据模型,点击菜单栏新建按键,弹出如下界面:在界面中选择【Physical Data Model】,右边的DBMS选择【Microsoft SQL Server 2005】。
基础数据公共访问方式红皮书NC-UAP 5.01用友NC-UAP2019-08-15目录第一章前言 (1)第二章客户化-基础数据 (2)1.币种 (2)2.会计期间方案 (2)3.会计期间 (2)4.公司目录 (2)第三章客户化-基本档案 (4)1.自定义项 (4)1.1定义自定义项 (4)1.2引用自定义项 (4)1.3自定义项档案定义 (4)2.账簿信息 (4)2.1核算账簿 (4)3.组织机构 (5)3.1库存组织 (5)3.2部门档案 (5)3.3采购组织 (5)3.4销售组织 (5)3.5仓储与成本域关系 (5)3.6会计主体 (5)4.人员信息 (5)4.1人员类别 (6)4.2人员管理档案 (6)4.3集团人员档案 (6)4.4人员档案约束设置 (6)5.客商信息 (6)5.1地区分类 (6)5.2地点档案 (6)5.3客商基本档案 (7)5.4客商管理档案 (7)6.库位信息 (7)6.1仓库档案 (7)6.2货位档案 (7)7.存货信息 (7)7.1产品线档案 (7)7.2存货分类 (7)7.3计量档案 (8)7.5存货管理档案 (8)7.6物料生产档案 (8)7.7存货批次号规则定义 (8)7.8存货ABC分类定义 (8)7.9存货基本档案分配情况查询 (9)7.10存货管理档案分配关系查询 (9)8.项目信息 (9)8.1项目类型 (9)8.2项目基本档案 (9)8.3项目管理档案 (9)9.结算信息 (9)9.1结算单位 (9)9.2开户银行 (10)9.3账户档案 (10)9.4结算方式 (10)9.5收付款协议 (10)9.6账龄区间设置 (10)9.7结算中心 (10)9.8内部账户 (11)10.财务会计信息 (11)10.1科目方案 (11)10.2科目自由项选择 (11)10.3会计科目 (11)10.4会计科目变更日志 (12)10.5凭证类别 (12)10.6外币汇率 (12)10.7常用摘要 (12)10.8收支项目 (12)10.9现金流量项目 (13)10.10科目类型 (13)10.11科目预留 (13)10.12科目分配关系查询 (13)11.业务信息 (13)11.1发运方式 (13)11.2收发类别 (13)11.3税目税率 (13)11.4请购业务对照 (13)12.管理会计信息 (14)12.1责任中心 (14)13.工作日历管理 (14)13.1公休日定义 (14)13.2班次类别定义 (14)13.3工作日历维护 (14)14.1属性控制 (14)14.2值域管理 (15)14.3成套件 (15)14.4基本档案引用查询 (15)15.客商合并 (15)第一章前言本文描述了基本档案各结点所具有的公共访服务,包括查询工具类、查询接口和数据库操作接口。
NCV5-流程平台技术红皮书流程平台技术红皮书NC-UAP 5.0用友NC-UAP 2021-10-28目录第一章1. 2. 3. 4.第二章1.1.1 1.2 1.3 1.4 1.5 1.62.2.1 2.2 2.33.3.1 3.2 3.3 3.4 3.5 3.6第三章1.2.2.1 2.2 2.33.3.13.24.4.14.2 4.3工作流与BPM (1)信息系统的演变............................................................................ ........... 1 企业业务流程............................................................................ ............... 1 工作流............................................................................ (2)BPM........................................................................... . (2)流程平台 ........................................................................... . (3)单据元模型............................................................................ . (4)单据类型 ........................................................................... ........................................ 4 单据动作及脚本 ........................................................................... ............................ 7 单据函数 ........................................................................... ........................................ 9 单据UI ........................................................................... ........................................ 11 单据项目 ........................................................................... ...................................... 11 单据VO对 (12)业务流平台............................................................................ .. (13)业务类型 ........................................................................... ...................................... 14 流程配置 ........................................................................... ...................................... 15 单据VO交换 ........................................................................... (19)审批流平台............................................................................ .. (21)流程定义 ........................................................................... ...................................... 21 工作项 ........................................................................... .......................................... 25 流程结果与单据状态 ........................................................................... .................. 26 反向流转 ........................................................................... ...................................... 28 流程监控 ........................................................................... ...................................... 29 短信审批 ........................................................................... .. (30)开发规范 ........................................................................... .. (34)平台缓存数据............................................................................ ............. 34 动作处 (35)UI端调用-PfUtilClient ................................................................. .......................... 37 BS端调用 ........................................................................... .................................... 41 返回值 ........................................................................... (42)动作脚本............................................................................ (42)执行脚本编写 ........................................................................... .............................. 43 返回值 ........................................................................... (45)审批流平台............................................................................ .. (46)审批状态回写与查询 ........................................................................... .................. 46 送审 ........................................................................... .............................................. 46 审批 ........................................................................... . (48)第 2 页4.4 4.5 4.6 弃审 ........................................................................... .............................................. 51 删除 ........................................................................... .............................................. 53 审批流相关接 (53)5.5.1 5.2 5.3 5.4业务流平台............................................................................ .. (59)动作驱动 ........................................................................... ...................................... 59 单据VO交换 ........................................................................... .............................. 60 单据UI菜单填充与响应 ........................................................................... ............ 61 业务流相关接口 ........................................................................... .. (64)第四章开发流程 ........................................................................... .. (70)附录 ........................................................................... .. (71)1.1.11.2 1.3NC5.0短信服务 ........................................................................... . (71)应用模式 ........................................................................... ...................................... 71 短信发送 ................................................................................................................. 72 短信接收 ........................................................................... .. (73)第 3 页第一章工作流与BPM1. 信息系统的演变从简单的办公信息系统,到事务处理系统,再到复杂的知识管理和决策支持系统,我们可以看到,越来越多的通用任务已被从应用程序中分离出来并放入分解的管理系统中。
NCV5-界面集成技术红皮书NC 界面集成技术红皮书NC-UAP 5.02用友NC-UAP2013-04-20目录第一章前言 (3)第二章与NC进行单点登录 (4)第三章打开NC节点 (5)1.通过iframe登录NC系统 (5)2.通过javascript打开节点 (5)第四章打开NC待办事务 (6)1.获取待办事务列表,把其内容显示在相应Portal页面上 (6)2.打开代办事务 (6)第五章示例代码 (7)1.打开NC节点代码 (7)2.打开代办事务 (9)第一章前言在广泛多样的产品集成场景中,基于界面的集成是非常重要的一类。
NC待办事务消息集成到Portal和在第3方产品(包含Portal)中打开NC具体节点是最典型的需求。
例如,很多企业拥有自己的OA Portal,并且是企业领导和员工最常用的办公桌面。
这时候,希望作为其整体信息系统一部分的NC产生的待办事务消息也可以及时出现在其Portal 中并且相应角色可以直接点击处理就成为最常见的要求。
企业还希望在相应角色的办公桌面上直接添加NC业务节点的链接,使得其领导或员工可以不登陆而进入到具体NC节点做相应业务。
与第3方产品集成应用时,也常常面对本产品界面嵌入对方产品的需求,例如双方相关单据的互相联查。
无论是代办事务的集成还是NC节点嵌入的集成,都需要完成关键的三步:●与NC进行单点登录。
●通过页面Iframe(隐藏)登录进NC系统●通过javascript调用iframe中的NC Applet提供的特定java方法,进行反射类调用。
下面章节进行详细阐述。
注:该红皮书内容作为支持重点项目特定集成场景的临时技术方案,所公布之方式、API 不排除后续版本更新的可能。
第二章与NC进行单点登录利用NC提供的机制,登录方使用http GET或者POST方式,NC servlet提交如下信息: Servlet URL 如下:http://NC_IP/service/RegisterServlet提交参数: accountcode=帐套编码workdate=工作日期language=登录语言usercode=用户编码pwd=密码key=生成的唯一key。
新查询模板技术红皮书NC-UAP 5.3用友NC-UAP2013-07-16目录第一章前言 (1)第二章设计介绍 (4)1.模型 (4)2.默认编辑器及扩展机制 (5)3.查询模板与数据权限 (8)第三章开发说明 (11)1.如何调用 (11)1.1原先自己实现了查询对话框情况 (11)1.2没有自己写的查询模板的单据 (12)1.3常用条件Panel的使用 (12)1.4多公司的数据权限控制 (13)2.FAQ (13)附录 (18)1.查询模板中的条件表中的各字段值的意义 (18)第一章前言查询模板的功能比较单纯,用一句话概况就是,接受用户的输入,构造SQL语句的Where 条件。
另外还可以通过设置固定条件和启用数据权限实现对用户的所能查询的数据做一定的限制。
V53对查询模板重新做了设计(以下称新查询模板)准备逐步替换原来的查询模板(以下称老查询模板)。
老查询模板主要存在问题是1.操作不方便,不够直观,尤其是在定义复杂条件时。
2.无法支持对括号的嵌套,无法支持一些复杂条件,比如A and (B or (C and D))图 1 老查询模板新版查询模板较之旧查询模板明显优点:(1)新查询模板设计了“普通”和“高级”两个视图,分别针对简单条件和复杂条件的编辑。
普通视图采用Form形式,使简单条件(查询条件都是And联接)的录入更方便。
高级视图采用了类似ClearQuest的树形查询编辑器的形式,避免了括号的输入,使得复杂条件的设置比老查询模板要简单和直观。
图 2 普通视图图 3 高级视图(2)增加了Between操作符,可以替换各产品组定制的常用条件的“从…到…”类条件。
增强了等于操作符,使其能支持多选(相当把原来的等于和in操作符合成一个了,单独的in操作符仍然支持),这样可以消除实际操作时对“或者(or)”操作符的需要,加强了常规视图的实用性。
第二章设计介绍1. 模型查询模板最终形成的Where条件总是由若干个相对独立的小条件通过and和or操作符组合合成的。
比如:部门=’生产部’and (人员编码=’P0001’or 人员编码=’P0003’)。
在新查询模板中,这样每个独立的小条件由一个IFilter接口来描述。
IFilter又分成三个组成部分,元信息(IFilterMeta),操作符(IOperator),和字段取值(IFieldValue)。
图 1 IFilter 类结构图FilterMeta(IFilterMeta的在查询模板中的默认实现)描述了条件字段的元信息,相当于老查询模板的QueryConditionVO。
FilterMeta目前实际就是通过把QueryConditionVO进行转换操作后生成的,以后有可能从单据元数据生成。
IOperator接口是对操作符的抽象。
IFileldValue 接口是对字段取值的抽象,它实际只有一个方法,即返回一个IFieldValueElement的集合。
IFieldValueElement是对一个“原子”值的抽象,实际可能是描述了一个整数,或者是一个枚举值,或者是参照返回值。
整个的Where条件就可以看成由and, or操作符以及IFilter形成的一棵树,在新查询模板中以QueryTree来描述。
前面举的例子,表示成树的形式就如下图所示。
图 2 Where条件树不论是高级视图还是常规视图,其内部都是用QueryTree来组织单个的IFilter的。
QueryTree 及相关类结构图如图3下方所示图 3 QueryTree相关类结构图2. 默认编辑器及扩展机制基于前面的模型,查询模板从功能上就可以理解为一个是能对QueryTree和IFilter进行编辑的编辑器。
对QueryTree的编辑实际就是把IFilter看成最小的单元,提供一定的方法,让用户修改IFilter 之间的与或关系。
对于常规视图来说,用户不用关心,实际也不能修改,IFilter之间的与或关系。
常规视图上的IFitler都是“与(AND)”的关系,用户不能修改,只能增加或删除IFilter。
对于高级视图,用户可以则可以任意调整IFilter之间的与或关系,从而构造出复杂的查询条件。
新查询模板对QueryTree的编辑没有设计扩展机制,因为对与或关系的编辑没有太多的特殊性需求,常规视图和高级视图已经能完全满足简单条件和复杂的条件的编辑了。
但是对于IFilter的编辑,往往是和具体的业务相关的,默认的编辑方式不一定能满足业务的要求。
因此新查询模板针对这个问题重点做了设计,支持在不同层次上对IFilter编辑进行扩展。
对IFilter进行编辑的编辑器被抽象为接口IFilterEditor,当查询模板需要一个IFilter的编辑器,即一个IFilterEditor实例时,会调用FilterEditorManager创建出一个。
默认的情况下查询模板创建出来的是DefaultFilterEditor,如图4所示。
如果DefaultFilterEditor不能满足业务的需要,则可以按需定制符合要求的编辑器,并注册到FilterEditorManager中,即可实现对DefaultFilterEditor的替换。
图5展示了一个定制的FilterEditor,对于“经济类型”这样的枚举型字段,采用图示的编辑器可能更方便。
图 4 DeafultFilterEditor图 5 定制的FilterEditor图4中被红色线框框住的部分即是DefaultFilterEditor,它由三部分组成:左边是显示FilterMeta的Label控件,中间是供选择操作符的下拉框控件,右边被绿色线框框住的部分是对IFieldValue进行编辑的编辑器,抽象为IFieldValueEditor,默认情况下创建出来的是DefaultFieldValueEditor,同DefaultFilterEditor一样,通过FieldValueEditorManager注册定制的编辑器,DefaultFieldValueEditor也是可以被替换的。
如前文所述,IFieldValue是对IFieldValueElement包装,而DefaultFieldValueEditor实际上是对IFieldValueElementEditor的包装。
DefaultFieldValueEditor包含了两个IFieldValueElementEditor的实例,根据用户所选择的操作符的不同会有不同的界面展现。
图4中选择的是“介于”操作符,它是一个接受2个参数的操作符,因此DefaultFieldValueEditor 把两个IFieldValueElementEditor都显示出来了。
如果是其他情况,即操作符是接受0个,1个,任意多个参数时,DefaultFieldValueEditor总是显示一个IFieldValueElementEditor,但会根据操作符接受参数的个数,设置IFieldValueElementEditor是否允许多选。
上面所描述的DefaultFieldValueEditor的行为如果符合业务的需要,那么你可以坦然接受它,反之则是定制你自己的IFieldValueEditor的时候了。
在没替换DefaultFieldValueEditor的情况下,用户在为某个查询条件选定一个部门,或者一个公司,或者一个人员,或者输入一个订单货品的数量,实际都是通过IFieldValueElementEditor进行的,而后者是通过IFieldValueElementEditorManager创建出来的,默认的情况下它又把这个任务委托给了DefaultFieldValueElementEditorFactory这个工厂类。
这个工厂类根据注册在pub_query_condition的信息,主要是字段的数据类型等信息,生产出合适的IFieldValueElementEditor实例。
同样地,这个过程也是可以根据需要扩展的,支持注册定制的IFieldValueElementEditor。
综上所述,新查询模板对IFilter的编辑,分别在IFilterEditor,IFieldValueEditor,IFieldValueElementEditor三个层次上提供了扩展机制,在实际使用时可以根据情况具体选择扩展方式。
图6是相关的类图,从中可以看到,这三个层次的扩展机制是完全相同的。
都是由一个IXXEditor接口来表示编辑器,然后有一个IXXEditorFactory的工厂来负责创建编辑器,一个XXEditorManager来管理工厂。
注册一个定制的编辑器,概况来讲可以分成三个步骤,1.提供一个实现了IXXEditor接口的自定义编辑器2.提供一个相应的工厂类,负责生产该自定义编辑器3.把该工厂类注册到XXEditorManager中。
关于如何注册,请参看开发说明有关章节!图 6 IFilter编辑器相关类图3. 查询模板与数据权限NC中需要控制数据权限的业务节点,对于查询操作的控制,即限制用户仅能查询到其有权限的数据,一般是通过查询模板来实现的。
其原理是由查询模板在用户设置的查询条件后面自动附件数据权限相关的条件。
举例来说,订单上有经销商(custom),存货(inv)等字段。
现在需要限制某个用户仅能查询特定的经销商和特定的存货订单。
用户A,其有权限的经销商为C1,C2,C3,其有权限的存货为I1,I2,I3。
那么当用户A对订单执行查询操作时,不论其设置的条件是什么查询模板都必须附加如下的SQL语句。
当然对于订单来说,其经销商和存货字段一般都是不可为空的,上面的"custom is null"这样的条件有些多余,但如果对于其他可以为空的字段则必须加上这样的条件,否则则查询出来的结果可能是不完全的。
另外实际查询模板拼接出来的sql不会象上面一样是用('C1','C2','C3')这样的形式枚举其有权限的数据而是一个有权限服务提供一个子查询sql语句。
实际的sql 是以下的形式NC的权限不但和角色相关,和角色所属的组织也相关,即权限实际上描述了,角色,组织和资源之间的关系。
在上面的例子里,忽略了多个组织的情况。
因为一般情况下对一个单据的查询实际上有个隐含的限制条件,即查询当前角色所登录的组织(公司或者主体账簿)的单据。
当要需要对多个组织的数据进行查询时,则数据权限的附件条件要比上面复杂许多。
还是上面的例子,现在需要指出订单上还有一个字公司(pk_corp)字段,即表示订单是按照公司的组织维度来区分的。
现在用户A有权限查询的公司为(O1,O2),并且对于公司o1,其有权限的经销商为(C1,C2),有权限的存货为(I1,I2);对于公司o2,其有权限的经销商为(C2,C3),有权限的存货为(I2,I3)。