业务维度
在某些应用下,需要以业务维度区分不同的资源。例如,在trantor的交付控制台里,制品版本就属于一个业务维度,用户可以通过切换不同的制品版本,获取对应版本下的数据,达到一个资源隔离的效果。

实现
在本文中,将使用最简单的班级-学生作为模型,其中,班级作为业务维度,如:一班有哪些学生,二 班有哪些学生。
在线定义业务维度
todo 陈功 暂未实现
- 如班级作为业务维度时,返回的Classes需要继承自BusinessDimensionData,实现其中的
getId()和getTitle(),其中getId()为业务维度id,getTitle()为下拉展示的业务维度名称。 - 业务维度列表通过
@TBusinessDimension注解定义,并继承BusinessDimensionAction实现load方法,返回的业务维度列表List<BusinessDimensionData>数据。BusinessDimensionData是一个接口,返回的实际数据需要继承BusinessDimensionData。
@Datapublic class Classes implements BusinessDimensionData { private Long id; private String title;
@Override public @NotNull Long getId() { return this.id; }
/** * 业务维度下拉展示名称 * * @return */ @Override public String getTitle() { return this.title; }
}@TBusinessDimension("以班级区分")public class ClassesBusinessDimension implements BusinessDimensionAction {
@Autowired private ClassesDao classesDao;
@Override public List<BusinessDimensionData> load() {
List<Classes> product = classesDao.find(query -> { });
// 按课程编码排序 return product.stream().sorted(Comparator.comparing(Classes::getClassesNo).reversed()).collect(Collectors.toList()); }
}业务维度进行数据隔离
在通过DataAction获取数据时,实际上是需要用户通过编码的方式按照业务维度id 进行数据隔离。如通过业务维度获取某个特定班级的学生列表时,用户可以通过上下文Integer id = TContext.getFrontendContext().getCurrentBusinessDimensionId()获取班级id,之后在获取学生列表时,可以通过制定班级id获取数据。
ServerAction设置业务维度
@TAction(modelClass = Student.class)public void save(@TParam Student student) { Integer id = TContext.getFrontendContext().getCurrentBusinessDimensionId(); Classes classes = new Classes(); classes.setId(Long.valueOf(id)); student.setClasses(classes); studentDao.saveWithRelationSkipNull(student);}DataAction业务维度隔离
@Componentpublic class StudentDataAction implements MultiDataAction<Student> {
@Resource StudentDao studentDao;
@Override public MultiDataResult<Student> load(MultiDataParams multiDataParams) {
// 获取业务维度id,对应班级的id Integer id = TContext.getFrontendContext().getCurrentBusinessDimensionId();
List<Student> response = studentDao.find(query -> { query.where(conditionSet -> { conditionSet.condition(Student.classes_field, classes -> { classes.eq(Classes.id_field, id); }); }); query.selectAll(); query.orderBy(Student.createdAt_field, false); });
return new MultiDataResult(response, (long) response.size()); }}使用
配置应用业务维度和快速链接应用
业务维度是应用级别下的配置,用户在配置应用时,可以配置一个应用负责展示业务维度下的数据,一个应用负责管理业务维度(增删改查)。然后通过快速链接应用对应用之间进行跳转。

业务维度隔离数据展示
- 首先需要创建业务维度,本示例使用用班级作为业务维度。
- 然后通过在不同班级隔离学生数据。
