Foxnic-Web —— 模块的多版本支持

LeeFJ
• 阅读 185

Foxnic-Web —— 模块的多版本支持

概述

  站在产品角度,如何满足不同客户的需求定制?如何积累丰富的业务功能,尽可能复用避免重复开发?针对最近实施的几个客户,Foxnic-Web 为模块增加了多版本特性,在一定程度上解决了甲方需求的多样性和差异性。
  Foxnic-Web 模块多版本主要是从 UI 界面和 Service 层着手。

  本文中的示例代码均可在 https://gitee.com/LeeFJ/foxnic-samples 项目中找到。

UI界面多版本支持

  为了实现UI界面多版本,我们首先要在模块页面内新建一个目录,如图所示:
Foxnic-Web —— 模块的多版本支持
  第一步:建立目录与文件
  如图所示,profile 目录下包含 advance 目录和另外5个js以及html文件,这5个文件是模式实现。现在为了实现高级版本在 profile 目录下创建了 advance 目录,并把 UI 代码放置其中。需要注意的是,页面入库文件名需保持一致,如菜单入口页面是 profile_list.html 那么在 advance 目录下也同样需要一个同名文件 profile_list.html。
  第二步:配置菜单
  版本目录建好后,需要将目录配置到菜单,如图所示。进入对应的菜单页面,点击 “版本管理”按钮,维护一个版本。
Foxnic-Web —— 模块的多版本支持
Foxnic-Web —— 模块的多版本支持
维护完毕,重新登录  即可。这时,我们可以看到两个版本可以切换使用了
Foxnic-Web —— 模块的多版本支持
因为在项目实  施时,用户只会固定使用一个特定的版本,所以版本切换的菜单受权限是需要控制的,需要勾选 “菜单管理”下的 “功能版本切换(Fork)”权限。
Foxnic-Web —— 模块的多版本支持

UI界面多版本的代码生成

  例如,我们要为数据字典管理生成另外一个版本的代码,此时,我们已经实现了默认的代码生成类 SysDictConfig ,新版本的代码实现类继承 SysDictConfig 类,并调用 context.setViewImplDir("tree") 指定界面生成的目录名即可,如下代码所示:

public class SysDictConfig_Tree extends SysDictConfig {
    public SysDictConfig_Tree() {
        super();
        // 指定实现的目录名称
        this.context.setViewImplDir("tree");
    }
    @Override
    public void configSearch(ViewOptions view, SearchAreaOptions search) {
        search.inputLayout(new Object[]{
            SYS_DICT.NAME,SYS_DICT.CODE
        });
    }
}

  执行后生成将在 tree 目录下生成代码,如图所示:
Foxnic-Web —— 模块的多版本支持

UI界面版本规则

  事实上,在项目实施过程中,我们只需要锁定一个版本,或按登录人不同的身份使用不同的界面,我们在系统参数进行配置即可。目前支持按账户、租户指定不同的界面。当然也可以逐步支持到按角色、部门、岗位、业务角色等不同的身份使用不同的界面。
  参数配置界面如图所示:
Foxnic-Web —— 模块的多版本支持

Service多版本支持

  所谓 Service 的多版本,即一个 Service 有多个实现,不同的场合使用不同的版本,如图所示:
Foxnic-Web —— 模块的多版本支持
  在这个示例中,我们  对 IDictService 接口有4个实现。通过参数配置,指定默认实现为 DictServiceImplForChinaYIE 类,Service 实现类的配置规则和 UI 类似,可按不同的身份使用不同的 Service 实现。如图所示:
Foxnic-Web —— 模块的多版本支持

Service多版本的代码生成

  多版本 Service 的代码生成比较简单,在 configService 方法中执行 serviceImpl 配置方法即可。由代码生成工具自动生成这些其它版本的实现类。

@Override
public void configService(ServiceOptions service) {
    //开启多服务实现的支持
    service.serviceImpl("ForCLPS","实现CLPS客户EAM定制逻辑");
    service.serviceImpl("ForChinaYIE","实现 ChinaYIE 客户定制逻辑");
    service.serviceImpl("ForAUX","实现奥克斯 PMS 项目定制逻辑");
}

小结

  本小节主要介绍了 Foxnic-Web 的多版本特性,包括UI界面的多版本和Service的多版本。

相关项目

  https://gitee.com/LeeFJ/foxnic
  https://gitee.com/LeeFJ/foxnic-web
  https://gitee.com/lank/eam
  https://gitee.com/LeeFJ/foxnic-samples

官方文档

  http://foxnicweb.com/docs/doc.html

点赞
收藏
评论区
推荐文章
LeeFJ LeeFJ
1年前
Foxnic-Web —— 可插拔模块的菜单控制
FoxnicWeb的设计就是业务模块下Maven依赖层面可插拔,即只要把对应的模块加入启动项目的Maven依赖中那么启动项目就拥有了插入模块的功能,反之亦然。因此,在FoxnicWeb的业务模块(MavenModule)中需要做一些特殊处理,使业务模块插拔时同时体现在菜单上。
Easter79 Easter79
2年前
springboot2之优雅处理返回值
前言最近项目组有个老项目要进行前后端分离改造,应前端同学的要求,其后端提供的返回值格式需形如{"status":0,"message":"success","data":{}}方便前端数据处理。要实现前端同学这个需求,其实也挺简单的,
Stella981 Stella981
2年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Wesley13 Wesley13
2年前
Vtiger CRM 几处SQL注入漏洞分析,测试工程师可借鉴
本文由云社区发表0x00前言干白盒审计有小半年了,大部分是业务上的代码,逻辑的复杂度和功能模块结构都比较简单,干久了收获也就一般,有机会接触一个成熟的产品(vtigerCRM)进行白盒审计,从审计的技术难度上来说,都比公司内的那些业务复杂得多,而真正要提高自己技术水平,更应该看的也是这些代码。vtigerCRM是一个客
Wesley13 Wesley13
2年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
2年前
Android 主Module引用依赖Module,却无法使用里面的依赖库
如果模块化开发中遇到多模块的AndroidManifest.xml没有合并or多模块的资源文件没有合并or模块Ainclude了模块B,而无法使用模块B内依赖的其他aar包中的类的时候or提示Support包版本不一致这篇文章可能就是你要的解决方案~举个栗子:比如我们现在有一个App模块设计为:主
javalover123 javalover123
11个月前
多模块项目使用枚举配置spring-cache缓存
1.近期被刷接口了,考虑增加本地缓存提高性能,另配置限流;2.使用springcache注解式缓存,可以提高使用缓存的开发效率;3.不同业务,可以定制自己的缓存策略,是基本需求;4.多模块项目,最好在统一的模块(如common)加载缓存配置
子桓 子桓
10个月前
好用的Java开发推荐!
好用的Java开发IntelliJIDEA2023中文,IntelliJIDEA提供了丰富的工具和功能,可以帮助开发人员提高开发效率和代码质量。它具有智能代码编辑器、代码检查、快速修复、多模块构建、重构、版本控制等功能。此外,它还支持自动化构建、测试和部署