• 首页
  • 产品中心
    • 数式Oinone四大产品

      低代码开发平台无代码开发平台集成开发平台AI大模型开发
    • 数式Oinone体系能力

      用户与组织权限管理文件管理消息中心国际化业务审计
    • 数式Oinone核心产品特性

      低无一体面向软件公司场景无限制应用级扩容可分可合
  • 服务中心
    • 客户服务

      预约演示方案咨询私有部署找人定制
    • 开发者

      问答下载
    • Oinone学院

      社区学习

    《精讲面向软件公司的低代码平台——以Oinone为例》

  • 合作伙伴
    渠道申请伙伴名录专家库
  • 关于数式
0571-88757863

开发辅助:低代码方式实现复制创建


实际项目的业务场景中,存在「复制创建」的需求,可以实现数据的快速录入。本文介绍通过低代码模式实现复制创建功能。

一、实现步骤

(一)定义基类模型

  1. 定义复制基类模型(如:AbstractCopyModel),有复制创建功能的模型都继承该模型;
@Model.model(AbstractCopyModel.MODEL_MODEL)
@Model(displayName = "提供复制方法的基类")
@Model.Advanced(type= ModelTypeEnum.ABSTRACT)
public abstract class AbstractCopyModel extends IdModel  {

    public static final String MODEL_MODEL = "hr.simple.AbstractCopyModel";

}
  1. 根据 Oinone 模型继承规则,子模型拥有父模型所有的函数;因此只需写基类AbstractCopyModel的复制逻辑即可;
@Component
@Model.model(AbstractCopyModel.MODEL_MODEL)
public class AbstractCopyModelAction {

    @Function(openLevel = FunctionOpenEnum.API)
    @Function.Advanced(type = FunctionTypeEnum.QUERY, displayName = "复制")
    public AbstractCopyModel copy(AbstractCopyModel data) {
        if (data.getId() != null) {
            data = data.queryById();
            data.unsetId();
            data.unsetCreateDate();
            data.unsetWriteDate();
            data.unsetCreateUid();
            data.unsetWriteUid();
        } else {
            data.construct();
        }

        return data;
    }
}

(二)定义业务模型

需复制创建功能的模型都继承于上面定义的「复制基类」,即继承 AbstractCopyModel

@Model.model(Employee.MODEL_MODEL)
@Model(displayName = "标品-员工", labelFields = "name")
public class Employee extends AbstractCopyModel {

    public static final String MODEL_MODEL = "hr.simple.Employee";

    @Field.String
    @Field(displayName = "姓名", required = true)
    private String name;

    @Field.String
    @Field(displayName = "工号", required = true)
    private String code;

    // 其他属性
}

(三)初始化"复制"按钮

系统启动时初始化「视图动作」,即默认页面的行操作增加「复制」按钮

@Component
public class HrSimpleModuleMetaDataEditor implements MetaDataEditor {

    @Override
    public void edit(AppLifecycleCommand command, Map<String, Meta> metaMap) {
        InitializationUtil util = InitializationUtil.get(metaMap, HrSimpleModule.MODULE_MODULE,
                                                         HrSimpleModule.MODULE_NAME);
        if(util==null){
            return;
        }

        // 初始化视图动作
        viewActionInit(util);
    }
    private void viewActionInit(InitializationUtil util){
        // 员工信息维护 生成行内复制按钮
        util.createViewAction("Employee_Copy","复制", Employee.MODEL_MODEL, InitializationUtil.getOptions(ViewTypeEnum.TABLE),
                              Employee.MODEL_MODEL, ViewTypeEnum.FORM, ActionContextTypeEnum.SINGLE, ActionTargetEnum.ROUTER,null,null)
        .setLoad("copy");// setLoad指定页面加载时调用后端的方法名

        // 部门信息维护 生成行内复制按钮
        util.createViewAction("Department_Copy","复制", Department.MODEL_MODEL, InitializationUtil.getOptions(ViewTypeEnum.TABLE),
                              Department.MODEL_MODEL, ViewTypeEnum.FORM, ActionContextTypeEnum.SINGLE, ActionTargetEnum.ROUTER,null,null)
        .setLoad("copy");
    }
}

通过上面几步,继承于基类AbstractCopyModel的模型,只需要初始化「视图动作」,就具备了「复制创建」的功能了。

编辑此页
最近更新:2026/1/15 04:02
上一页
开发辅助:低代码中实现页面数据联动
下一页
开发辅助:使用GraphQL生成API文档
默认页脚
Copyright © 2026 Mr.Hope