
產品能力

-
頁面的千行千面(千人千面),包含同一個頁面不同布局、不同字段、不同樣式
-
數據模塊的千行千面(千人千面),根據不同身份執行不同的業務技術邏輯和服務編排
-
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)建設實踐與設計思路
熱門信息
閱讀 (14728)
1 2023第三屆中國RPA+AI開發者大賽圓滿收官&獲獎名單公示閱讀 (13753)
2 《Market Insight:中國RPA市場發展洞察(2022)》報告正式發布 | RPA中國閱讀 (13055)
3 「RPA中國杯 · 第五屆RPA極客挑戰賽」成功舉辦及獲獎名單公示閱讀 (12964)
4 與科技共贏,與產業共進,第四屆ISIG中國產業智能大會成功召開閱讀 (11567)
5 《2022年中國流程挖掘行業研究報告》正式發布 | RPA中國