Skip to content
加入微信交流群
微信交流群二维码

后端开发文档

代码示例

java

/**
 * 持久层管理器,可以从中获取元数据信息和数据存取接口
 */
@Resource
PersistenceManager pm;

/**
 * 数据操作service,用于操作实体数据
 */
@Resource
CrudService crudService;

/**
 * 用于获取当前登录人信息,及检查当前登录人权限
 */
@Resource
CallerContext callerContext;

/**
 * 获取系统配置
 */
@Resource
SystemSetting systemSetting;

/**
 * 用于发送消息
 */
@Resource
NotificationService notificationService;

/**
 * 演示方法
 * @param recordId 数据ID
 * @return
 */
public String demo(String recordId) {
    /********************* 低代码基础数据概念 *********************/
    //低代码中有三个基础数据对象,分别是:Entity,Field,EntityRecord
    //Entity对应实体,Field对应实体的字段,EntityRecord对应实体中的数据。
    //在低代码中,每条数据都会有一个唯一的id。接下来,从一个数据ID开始,简单的演示下这些基础数据对象
    ID id = ID.valueOf(recordId);
    //你可以通过这个ID获取它对应的实体Code
    int entityCode = id.getEntityCode();

    //如果需要获取实体Code对应的实体,可以通过metadataManager(元数据管理器)对象来获取
    MetadataManager metadataManager = pm.getMetadataManager();
    Entity entity = metadataManager.getEntity(entityCode);
    //获取所有实体
    Collection<Entity> entitySet = pm.getMetadataManager().getEntitySet();

    //Entity 就是低代码中实体对应的对象。你可以在entity中获取实体的属性
    System.out.println("实体Label:" + entity.getLabel()); // 实体Label:用户
    System.out.println("实体Name:" + entity.getName());// 实体Name:User
    System.out.println("实体Code:" + entity.getEntityCode()); //实体Code:21
    System.out.println("实体的Id字段:" + entity.getIdField().getName()); // 实体的Id字段:userId
    System.out.println("实体的字段数量:" + entity.getFieldSet().size()); // 实体的字段数量:19
    //.........

    //在实体对象中,可以获取实体下的字段
    Field idField = entity.getIdField(); //获取实体的ID字段
    Field nameField = entity.getNameField(); //获取名称的名称字段
    Collection<Field> fieldSet = entity.getFieldSet(); //获取所有字段集合

    //在字段对象中,可以获取字段的属性
    System.out.println("字段label:" + nameField.getLabel()); // 字段label:用户名称
    System.out.println("字段Name:" + nameField.getName()); // 字段Name:userName
    System.out.println("字段Type:" + nameField.getType().getName()); // 字段Type:Text
    //...........


    //EntityRecord 就是低代码中一条数据对应的对象 (如何查询数据请继续往下查看,这里不做赘述)
    EntityRecord entityRecord = super.queryRecordById(id, idField.getName(), nameField.getName());
    System.out.println("数据名称:" + entityRecord.getName()); //数据名称:系统管理员
    System.out.println("数据指定字段的值:" + entityRecord.getFieldValue("userId")); // 数据指定字段的值:0000021-00000000000000000000000000000001
    System.out.println("数据查出来的所有字段:" + entityRecord.getValuesMap()); //数据查出来的所有字段:{userName=系统管理员, userId=0000021-00000000000000000000000000000001}
    //...........

    /********************* 操作数据 *********************/
    //低代码中,对数据的操作有两种
    //第一种是使用 CrudService 对数据进行操作,CrudService下所有的操作都会进行权限校验,修改操作会创建修改日志。
    //第二种是使用 BaseService 对数据进行操作,BaseService下的操作只会做最基础的CRUD,不会有其他额外的操作
    //PS:由于CrudService 继承了 BaseService,所以CrudService中包含了BaseService的方法,主要不要调用错方法了

    //CrudService 示例(具体入参可以看每个方法的注释):
    if (false) {
        //根据Id查询
        EntityRecord user = crudService.queryById(id, idField.getName(), nameField.getName());
        //根据条件查询
        QuerySchema querySchema = new QuerySchema();
        querySchema.setMainEntity("User"); //设置查询的实体
        querySchema.setSelectFields("userName,userId"); //设置查询的字段
        querySchema.setFilter("userName LIKE '%管理员%'");//设置过滤条件
        querySchema.setSort("userName DESC");//设置排序规则
        List<Map<String, Object>> maps = crudService.queryListMap(querySchema, new Pagination(1, 10));
        //新增编辑(recordId传 null 则是新增)
        crudService.saveRecord("User","数据ID",new HashMap<>());
        //分配
        crudService.assignRecord(ID.valueOf("数据ID"), ID.valueOf("目标用户Id"), ID.valueOf("目标用户部门ID"));
        //删除
        crudService.delete(ID.valueOf("数据Id"));
    }

    //BaseService 示例(具体入参可以看每个方法的注释):
    if (false) {
        EntityRecord user = super.queryRecordById(id, idField.getName(), nameField.getName());
        List<EntityRecord> entityRecords = super.queryListRecord(SystemEntities.User, "userName LIKE '%管理员%'", null, " userName DESC ", new Pagination(1, 10), "userName");
        //.........
        //新增、编辑、删除、分配等方法与CrudService类似,不做赘述,可以点进BaseService中查看注释。
    }

    // 可以看到,上述的查询数据的方法,有两种返回值: EntityRecord(List<EntityRecord>) 和 Map(List<Map>),在此做个简单介绍
    // 1. EntityRecord(List<EntityRecord>)
    //返回EntityRecord 的方法只能查询实体本身的字段,如果查询的字段在实体中不存在,方法会报错
    EntityRecord user = super.queryRecordById(id, "userId", "userName");

    // 2. 返回Map的方法可以查询到关联的实体的数据
    QuerySchema querySchema = new QuerySchema();
    querySchema.setMainEntity("User");
    // User实体中,departmentId 是一对多引用字段,可以用 departmentId.字段名 查询相关的部门数据的字段
    querySchema.setSelectFields("userName,departmentId.departmentOwnerUser");
    List<Map<String, Object>> mapList = super.queryListMap(querySchema, new Pagination(1, 10));
    System.out.println(mapList);


    /********************* 列举一下常用方法 *********************/
    //获取当前登录用户的ID和部门ID
    String callerID = callerContext.getCallerId();
    String departmentID = callerContext.getDepartmentId();

    if(false){
        //发送内部通知(notificationService中还有发送邮件,短信等方法)
        notificationService.addNotification(ID.valueOf("接收人Id"),ID.valueOf("相关数据id"), NotificationTypeEnum.SYSTEM_MSG,"消息内容");
    }

    //获取系统通用配置
    systemSetting.getAppName(); // 获取系统名称
    systemSetting.getVersion(); // 获取版本号
    systemSetting.getThemeColor(); // 主色调
    // .........

    if(false){
        //获取数据字典
        OptionCacheManager oc = pm.getOptionCacheManager();
        List<OptionModel> options = oc.getOptions("实体名称", "多选字段名称");
    }

    return "示例执行完成";
}

/**
 * 持久层管理器,可以从中获取元数据信息和数据存取接口
 */
@Resource
PersistenceManager pm;

/**
 * 数据操作service,用于操作实体数据
 */
@Resource
CrudService crudService;

/**
 * 用于获取当前登录人信息,及检查当前登录人权限
 */
@Resource
CallerContext callerContext;

/**
 * 获取系统配置
 */
@Resource
SystemSetting systemSetting;

/**
 * 用于发送消息
 */
@Resource
NotificationService notificationService;

/**
 * 演示方法
 * @param recordId 数据ID
 * @return
 */
public String demo(String recordId) {
    /********************* 低代码基础数据概念 *********************/
    //低代码中有三个基础数据对象,分别是:Entity,Field,EntityRecord
    //Entity对应实体,Field对应实体的字段,EntityRecord对应实体中的数据。
    //在低代码中,每条数据都会有一个唯一的id。接下来,从一个数据ID开始,简单的演示下这些基础数据对象
    ID id = ID.valueOf(recordId);
    //你可以通过这个ID获取它对应的实体Code
    int entityCode = id.getEntityCode();

    //如果需要获取实体Code对应的实体,可以通过metadataManager(元数据管理器)对象来获取
    MetadataManager metadataManager = pm.getMetadataManager();
    Entity entity = metadataManager.getEntity(entityCode);
    //获取所有实体
    Collection<Entity> entitySet = pm.getMetadataManager().getEntitySet();

    //Entity 就是低代码中实体对应的对象。你可以在entity中获取实体的属性
    System.out.println("实体Label:" + entity.getLabel()); // 实体Label:用户
    System.out.println("实体Name:" + entity.getName());// 实体Name:User
    System.out.println("实体Code:" + entity.getEntityCode()); //实体Code:21
    System.out.println("实体的Id字段:" + entity.getIdField().getName()); // 实体的Id字段:userId
    System.out.println("实体的字段数量:" + entity.getFieldSet().size()); // 实体的字段数量:19
    //.........

    //在实体对象中,可以获取实体下的字段
    Field idField = entity.getIdField(); //获取实体的ID字段
    Field nameField = entity.getNameField(); //获取名称的名称字段
    Collection<Field> fieldSet = entity.getFieldSet(); //获取所有字段集合

    //在字段对象中,可以获取字段的属性
    System.out.println("字段label:" + nameField.getLabel()); // 字段label:用户名称
    System.out.println("字段Name:" + nameField.getName()); // 字段Name:userName
    System.out.println("字段Type:" + nameField.getType().getName()); // 字段Type:Text
    //...........


    //EntityRecord 就是低代码中一条数据对应的对象 (如何查询数据请继续往下查看,这里不做赘述)
    EntityRecord entityRecord = super.queryRecordById(id, idField.getName(), nameField.getName());
    System.out.println("数据名称:" + entityRecord.getName()); //数据名称:系统管理员
    System.out.println("数据指定字段的值:" + entityRecord.getFieldValue("userId")); // 数据指定字段的值:0000021-00000000000000000000000000000001
    System.out.println("数据查出来的所有字段:" + entityRecord.getValuesMap()); //数据查出来的所有字段:{userName=系统管理员, userId=0000021-00000000000000000000000000000001}
    //...........

    /********************* 操作数据 *********************/
    //低代码中,对数据的操作有两种
    //第一种是使用 CrudService 对数据进行操作,CrudService下所有的操作都会进行权限校验,修改操作会创建修改日志。
    //第二种是使用 BaseService 对数据进行操作,BaseService下的操作只会做最基础的CRUD,不会有其他额外的操作
    //PS:由于CrudService 继承了 BaseService,所以CrudService中包含了BaseService的方法,主要不要调用错方法了

    //CrudService 示例(具体入参可以看每个方法的注释):
    if (false) {
        //根据Id查询
        EntityRecord user = crudService.queryById(id, idField.getName(), nameField.getName());
        //根据条件查询
        QuerySchema querySchema = new QuerySchema();
        querySchema.setMainEntity("User"); //设置查询的实体
        querySchema.setSelectFields("userName,userId"); //设置查询的字段
        querySchema.setFilter("userName LIKE '%管理员%'");//设置过滤条件
        querySchema.setSort("userName DESC");//设置排序规则
        List<Map<String, Object>> maps = crudService.queryListMap(querySchema, new Pagination(1, 10));
        //新增编辑(recordId传 null 则是新增)
        crudService.saveRecord("User","数据ID",new HashMap<>());
        //分配
        crudService.assignRecord(ID.valueOf("数据ID"), ID.valueOf("目标用户Id"), ID.valueOf("目标用户部门ID"));
        //删除
        crudService.delete(ID.valueOf("数据Id"));
    }

    //BaseService 示例(具体入参可以看每个方法的注释):
    if (false) {
        EntityRecord user = super.queryRecordById(id, idField.getName(), nameField.getName());
        List<EntityRecord> entityRecords = super.queryListRecord(SystemEntities.User, "userName LIKE '%管理员%'", null, " userName DESC ", new Pagination(1, 10), "userName");
        //.........
        //新增、编辑、删除、分配等方法与CrudService类似,不做赘述,可以点进BaseService中查看注释。
    }

    // 可以看到,上述的查询数据的方法,有两种返回值: EntityRecord(List<EntityRecord>) 和 Map(List<Map>),在此做个简单介绍
    // 1. EntityRecord(List<EntityRecord>)
    //返回EntityRecord 的方法只能查询实体本身的字段,如果查询的字段在实体中不存在,方法会报错
    EntityRecord user = super.queryRecordById(id, "userId", "userName");

    // 2. 返回Map的方法可以查询到关联的实体的数据
    QuerySchema querySchema = new QuerySchema();
    querySchema.setMainEntity("User");
    // User实体中,departmentId 是一对多引用字段,可以用 departmentId.字段名 查询相关的部门数据的字段
    querySchema.setSelectFields("userName,departmentId.departmentOwnerUser");
    List<Map<String, Object>> mapList = super.queryListMap(querySchema, new Pagination(1, 10));
    System.out.println(mapList);


    /********************* 列举一下常用方法 *********************/
    //获取当前登录用户的ID和部门ID
    String callerID = callerContext.getCallerId();
    String departmentID = callerContext.getDepartmentId();

    if(false){
        //发送内部通知(notificationService中还有发送邮件,短信等方法)
        notificationService.addNotification(ID.valueOf("接收人Id"),ID.valueOf("相关数据id"), NotificationTypeEnum.SYSTEM_MSG,"消息内容");
    }

    //获取系统通用配置
    systemSetting.getAppName(); // 获取系统名称
    systemSetting.getVersion(); // 获取版本号
    systemSetting.getThemeColor(); // 主色调
    // .........

    if(false){
        //获取数据字典
        OptionCacheManager oc = pm.getOptionCacheManager();
        List<OptionModel> options = oc.getOptions("实体名称", "多选字段名称");
    }

    return "示例执行完成";
}