
产品能力

-
页面的千行千面(千人千面),包含同一个页面不同布局、不同字段、不同样式
-
数据模块的千行千面(千人千面),根据不同身份执行不同的业务技术逻辑和服务编排
-
page一键创建,在没有新的业务组建和新的module情况无需开发接入,0代码上线,运营同学自行配置页面。
-
前端组件复用,在没有新前端组件,前端无需参与开发,后端只需编写module对应的业务接口。
-
实现module可复用,module数据渲染、数据写入,查询条件、浮层、半推页面、页面操作
-
新增字段扩展0代码,模型字段可以自定义,动态扩展,可定义来自本地数据库、远程HSF接口数据
-
环境可隔离,测试、预发、生产
-
平台和业务代码分离,业务上线只需关注业务逻辑本身的代码。
-
DO DTO可定义,动态映射
-
数据枚举动态定义,动态绑定
产品界面


用户
产品模块
核心逻辑
前端渲染

后端绑定
模型设计

template定义
-
列表页面 -
详情页面 -
半开页面 -
表单提交页面
page定义

module定义

module_type 定义
McubeContextAware
@Component public class McubeContextAware implements ApplicationContextAware { private static volatile ApplicationContext alc; @Resource private ModuleBeanFactory moduleBeanFactory; @Resource private ModuleGroupBeanFactory moduleGroupBeanFactory; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { alc = applicationContext; } @PostConstruct public void init(){ setModuleBeanMap(); setModuleGroupBeanMap(); } private void setModuleBeanMap() { Map<String, McubeModuleExecutor> beanMap = alc.getBeansOfType(McubeModuleExecutor.class); if (beanMap != null) { beanMap.values().stream().forEach(m -> { McubeModule module = AnnotationUtils.findAnnotation(m.getClass(), McubeModule.class); if (module != null) { String code = module.code(); String name = module.name(); if (code != null) { moduleBeanFactory.getMcubeBeanMap().put(code, m); } } }); } } private void setModuleGroupBeanMap() { Map<String, McubeModuleExecutor> beanMap = alc.getBeansOfType(McubeModuleExecutor.class); if (beanMap != null) { beanMap.values().stream().forEach(m -> { McubeModuleGroup module = AnnotationUtils.findAnnotation(m.getClass(), McubeModuleGroup.class); if (module != null) { String code = module.code(); String name = module.name(); moduleGroupBeanFactory.getMcubeBeanMap().put(code,m); } }); } } } 执行单元(moduleGroup executor)
/** * Created by hzliuxuan on 2022/5/27. * @author hzliuxuan * 模块接口 */ public interface McubeModuleExecutor<T,V> { /** * 填充数据,页面渲染,一般是read接口 * @param value * @return */ T populate(V value); /** * 编辑模块 * @param value * @return */ void edit(V value); /** * 写接口 * @param value * @return */ void add(V value); /** * 删除接口 * @param value * @return */ void delete(V value); } @Inherited @Component @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface McubeModuleGroup { /** * moduleGroup code (必填,唯一标识) */ @NotNull String code(); /** * 对应module code值 */ @NotNull String[] moduleCodes(); /** * moduleGroup name */ String name(); @NotNull ModuleGroupType type(); }
field定义

field数据结构定义
[
{
"key": "equityInvestment",
"value": null,
"label": null,
"name": "权益投放记录",
"text": null,
"width": null,
"lock": null,
"copyEnable": null,
"copy": null,
"sortable": null,
"tooltip": null,
"wordBreak": null,
"fieldMapper": null,
/**数据类型取值input, select, date, address(地址), switch(开关), staffSelector(花名选择),textArea,upload(上传)**/
"dataType": "input",
private String dataType;
"format": null,
"dataSource": null,
"dataUrl": null,
"required": null,
"unit": null,
"readOnly": false,
"isHidden": false,
"multiple": false,
"features": null,
"showTime": null,
"maxLength": null
}
]
page 数据结构
public class McubePageBeanDTO { /** * 页面编码 */ @CrmOperateLogBizCode private String pageCode; /** * 业务线 */ private String bizCode; /** * 配置类型 */ private TemplateTypeEnum templateType; /** * 配置模块 */ private List<McubeModuleBeanDTO> originalModules; /** * 配置字段 */ private Map<String, List<McubeField>> originalFields; /** * 实例的模块 */ private List<McubeModuleBeanDTO> instanceModules; private List<String> instanceModulesList; /** * 实例的字段 */ private Map<String, List<McubeField>> instanceFields; private String subBizCode; /** * 元页面version */ private Byte originVersion; /** * 实例version */ private Byte instanceVersion; /** * module version */ private Byte moduleVersion; /** * 属性集合 */ private List<Property> properties; ///** // * 显示的模块 // */ //private List<String> instanceModulesList; private Boolean isCache; @Data public static class Property { /** * property */ private Boolean checkable; private Boolean isEdit; private Boolean selectable; private Boolean isLeaf; private Boolean isAdd; private Boolean isDelete; private String showType; private Integer level; private String extendedField; } }
page渲染运行时序图

运行时类设计图


文章来源:阿里开发者
作者:刘玄(玄哥)
未经允许不得转载:RPA中国 | RPA全球生态 | 数字化劳动力 | RPA新闻 | 推动中国RPA生态发展 | 流 > 一种关于低代码平台(LCDP)建设实践与设计思路

heng.png)
实操演示 | 如何从0到1,快速搭建企业信息管理系统?
GPT驱动下,如何通过低代码为构建企业应用提效?
集成自研智能大模型,网易数帆CodeWave重塑软件开发模式
AI+低代码将带来怎样的生产力变革?















热门信息
阅读 (14728)
1 2023第三届中国RPA+AI开发者大赛圆满收官&获奖名单公示阅读 (13753)
2 《Market Insight:中国RPA市场发展洞察(2022)》报告正式发布 | RPA中国阅读 (13055)
3 「RPA中国杯 · 第五届RPA极客挑战赛」成功举办及获奖名单公示阅读 (12964)
4 与科技共赢,与产业共进,第四届ISIG中国产业智能大会成功召开阅读 (11567)
5 《2022年中国流程挖掘行业研究报告》正式发布 | RPA中国