BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑

课程说明

▍1.1 课程实现功能

本课程进行迭代产品和设备组管理的功能

1. 在产品列表显示表格中增加:

  • 设备数量汇总(台);

  • 数据流数量汇总(个);

  • 功能点数量汇总(个)。

2. 在设备组列表显示表格中增加:

  • 设备数量汇总(台);

  • 网关数量汇总(台)。

▍1.2 课程知识点

本课程涉及到的主要知识点包括:

  • 编写界面流来处理页面逻辑;

  • 编写Javaaction来实现业务逻辑;

  • 创建逻辑流调用Javaaction;

  • 数据源创建、更新和删除时调用逻辑流实现业务逻辑。

▍1.3 数量汇总实现思路

让我们先回顾一下v1.5的实体关系图: 从实体关系图中可以看到:

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第1张图片

  • 数据流是产品的儿子

  • 功能点是产品的孙子

  • 设备和网关是设备的一个子集

为了减少产品和设备组查询时的关联查询次数,我们将在产品和设备组实体中添加数量汇总属性,在数据流、功能点和设备新增和删除的时候加减来更新汇总数量。

课程内容

01 完善业务对象定义

我们规划的v1.5版本在v1.0基础上增加了数据流和功能点,下面是更新后的业务对象设计。

▍1.1 为 产品 业务对象增加属性

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第2张图片

▍1.2 为 设备组 业务对象增加属性

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第3张图片

02 完善列表显示信息

1. 切换到页面产品->产品列表->表格组件 ,添加列表字段:

  • 设备数量

  • 数据流数量

  • 功能点数量

2. 切换到页面设备组->设备组列表->表格组件,添加列表字段:

  • 设备数量

  • 网关数量

03 设置默认值

属性的默认值如果是静态值,可以在业务对象属性定义的时候设置,如果需要进行计算或者复杂逻辑的可以通过页面流或者逻辑流来实现,本课程为了展示的目的采用页面流的功能来设置默认值为0。

1. 在产品页面下添加页面流,输入信息:

  • 名称:设置数量默认值

  • 编码:setDefaultValues

2. 选择流程组件->提前记录到开始节点后,设置:

  • 数据源:产品

  • 范围类型:当前记录

  • 节点说明:当前记录

  • 返回值输出变量名称:currentProduct

3. 选择数据集操作->变更到当前记录节点后,设置:

  • 变量名:currentProduct

  • 修改值:STREAM_QUANTITIES=0, DEVICE_QUANTITIES=0, POINT_QUANTITIES=0

  • 节点说明:设置默认值

4. 选择数据集操作->提交到当前记录节点后,设置:

  • 数据源:产品

  • 节点说明:保存记录

  • 返回值输出变量名称:savedFlag

5. 修改产品->新增产品Section按钮 增加 的属性:

  • 逻辑类型:uiflow

  • 选取一个uiflow:设置数量默认值

6. 新建产品可以看到默认值。

 

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第4张图片

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第5张图片

04 编写数量增加的代码逻辑

▍4.1 定义JavaAction

选择应用设计器左侧的JAVA ACTION 图标进入Java action列表窗口:

1. 选择右上角的创建链接进入创建Java Action窗口,录入如下信息:

  • 名称:增加数据流数量

  • 编码:IncStreamQty

  • DataSet业务对象类型:产品

2. 填写信息完成后,点击创建Javaaction窗口左下角的 “创建” 按钮完成Javaaction创建后进入定义窗口;

3. 在参数区域点击新增来创建一个参数将当前的数据流对象传给javacation:

  • 参数名称:curentStream

  • 类型:Object

  • 业务对象:数据流

  • 返回值类型:Long

▍4.1 编写Javaaction的代码

切换到服务设置中的服务信息标签页,点击访问代码库按钮打开代码库,下面是代码结构:

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第6张图片

打开 action/IncStreamQty.java(可以使用在线的Web IDE,也可以克隆到本地使用其他IDE工具完成),修改executeAction()方法为:


// BEGIN USER CODE
io.buildrun.engine.app.persistence.javaaction.JavaActionHelpejavaActionHelper = 
context.getCore().getRuntimeManager(getPersistenceManager().getJavaActionHelper();

io.buildrun.engine.briotsrv.entity.Products product = 
javaActionHelper.selectByPrimaryKey(context,io.buildrun.enginbriotsrv.entity.Products.class,
curentStream.getBelongProduct(null);

if(product.getStreamQuantities()==null){
    product.setStreamQuantities(1L);
}else{
    product.setStreamQuantities(product.getStreamQuantities()+1);
}
javaActionHelper.updateByPrimarykey(context,product);
return product.getStreamQuantities();
// END USER CODE

05 创建逻辑流

选择应用设计器左侧的逻辑流图标进入界面列表窗口:

1. 选择右上角的创建链接进入创建逻辑流窗口,录入如下信息:

  • 名称:产品的数据流数量

  • 编码:STREAM_QUANTITIES

  • DataSet业务对象类型:数据流

2. 填写信息完成后,点击创建逻辑流窗口左下角的 “创建” 按钮完成逻辑流创建后进入逻辑流设计视图;

3. 从右侧流程组件下选择常规操作 -> 参数拖动到中间设计区域:

  • 数据类型 :List

  • 实体:数据流

  • 名称:streams

4. 从右侧流程组件下选择对象操作 -> 提交拖动到中间设计区域的流程线中开始节点后:

  • 变量名 :streams

  • 节点说明:保存数据流

  • 返回值 输出变量名称:saved_streams

5. 从右侧流程组件下选择常规操作 -> 循环拖动到中间设计区域的流程线中 保存数据流 节点后:

  • 变量名 :saved_streams

  • 输出变量名称:stream

6. 从右侧流程组件下选择常规操作 -> JavaAction拖动到中间设计区域的流程线中循环节点中:

  • JavaAction :增加数据流数量

  • 设置参数:currentstream - $stream

  • 节点说明:更新数据流数量

  • 输出变量名称:updatedStreamQuantities

7. 设置结束节点的返回值:

  • 数据类型:List

  • 值业务对象:数据流

  • 值:$saved_streams

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第7张图片

06 关联数据源和逻辑流

关联的目的是当创建数据流的时候,给数据流所属的产品的数据流数量加一(+1)。

1. 切换到数据流页面的数据源->处理逻辑 :

  • 创建 :自定义

  • 参数-DataSetConfig<数据流>:inputDatasetConfig

  • 参数-数组<数据流>:streams

2. 点击右上角的保存编辑按钮保存。

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第8张图片

07 发布预览应用

点击发布按钮,预览刚才的设置。

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第9张图片

 

为水表添加一个数据流之后,可以看到产品的数据流数量变成: 1

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第10张图片

 

08 设置相关数量统计

统计产品功能点和设备数量、设备组设备和网关数量。

▍8.1 定义JavaAction

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第11张图片

▍8.2 IncPointQty.java中executeAction()的代码

// BEGIN USER CODE
io.buildrun.engine.app.persistence.javaactionJavaActionHelper javaActionHelper = 
context.getCore()getRuntimeManager().getPersistenceManager()getJavaActionHelper();

io.buildrun.engine.briotsrv.entity.Streams stream = 
javaActionHelper.selectByPrimaryKey(context,io.buildrunengine.briotsrv.entity.Streams.class,
currentPoint.getBelongStream() ,null);

io.buildrun.engine.briotsrv.entity.Products product = 
javaActionHelper.selectByPrimaryKey(context,io.buildrunengine.briotsrv.entity.Products.class,
stream.getBelongProduct(),null);

if(product.getPointQuantities()==null){
    product.setPointQuantities(1L);
}else{
    product.setPointQuantities(product.getPointQuantities()+1);
}
javaActionHelper.updateByPrimarykey(context,product);
return product.getPointQuantities();
// END USER CODE

▍8.3 IncDeviceQty.java中executeAction()的代码

// BEGIN USER CODE
io.buildrun.engine.app.persistence.javaaction.JavaActionHelper javaActionHelper = 
context.getCore().getRuntimeManager().getPersistenceManager().getJavaActionHelper();

io.buildrun.engine.briotsrv.entity.Products product =
javaActionHelper.selectByPrimaryKey(context,io.buildrunengine.briotsrv.entity.Products.class,
currentDevice.getBelongProduct(),null);

if(product.getDeviceQuantities()==null){
    product.setDeviceQuantities(1L);
}else{
    product.setDeviceQuantities(product.getDeviceQuantities()+1);
}
javaActionHelper.updateByPrimarykey(context,product);
io.buildrun.engine.briotsrv.entity.DeviceGroups group =
javaActionHelper.selectByPrimaryKey(context,io.buildrunengine.briotsrv.entity.DeviceGroups.class,
currentDevice.getBelongDeviceGroup(),null );

if("DEVICE".equals(product.getProductType())) {
    if(group.getDeviceQuantities() == null) {
        group.setDeviceQuantities(1L);
    }else {
        group.setDeviceQuantities(group.getDeviceQuantities() + 1) ;
    }
}else{ //GATEWAY
    if(group.getGatewayQuantities() == null) {
        group.setGatewayQuantities(1L);
    }else {
        group.setGatewayQuantities(group.getGatewayQuantities() + 1) ;
    }
}        
javaActionHelper.updateByPrimarykey(context,group);

return product.getDeviceQuantities();
// END USER CODE

▍8.4 定义逻辑流

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第12张图片

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第13张图片

▍8.5 关联数据源和逻辑流

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第14张图片

 

09 发布和运行应用

新增数据流、功能点和设备(设备和网关),查看产品和设备组相关的汇总信息。由于一些数据是之前维护的存在脏数据。

 

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第15张图片

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第16张图片

这一节介绍了如何编写界面流来处理页面逻辑以及如何编写Javaaction来实现业务逻辑,下一节将介绍如何添加组件设置页面图表和仪表盘。本系列开发教程每周一更,请持续关注。

 

前四节课程回顾▼

BuildRun低代码开发教程第一节 | 项目环境准备

BuildRun低代码开发教程第二节 | 功能需求梳理和任务定义

BuildRun低代码开发教程第三节 | 数据模型设计和定义

BuildRun低代码开发教程第四节 | 产品和设备组管理开发

 

遇到问题怎么办?

在Buildrun使用过程中,任何关于平台的问题和建议,都可以点击页面右下角用户反馈按钮,实时向开发团队提交反馈,我们会在第一时间处理。

BuildRun低代码开发教程第七节 | 如何处理页面逻辑和实现业务逻辑_第17张图片

关于BuildRun

BuildRun带来了多云架构环境下基于视觉的企业级应用创建、集成、部署、生命周期管理和分发的能力,由开源Choerodon猪齿鱼核心团队创立的BuildRun公司(上海翘腾科技有限公司)的使命是以云原生的现代化软件架构来帮助企业提升软件开发生产力和业务敏捷性,它提供企业级DevOps平台和企业级低代码开发平台,帮助隐藏应用所依赖的基础环境的复杂性,让每个人都只需要专注在业务逻辑上,以新的方式让团队能够快速、持续地将他们的想法转化为真正的商业价值。

欢迎免费注册,体验试用低代码应用开发

  • 注册地址:apps.gobuildrun.com/#/base/regi…

  • 官网:http://gobuildrun.com

  • 微信:BuildRun低代码开发平台

你可能感兴趣的:(BuildRun)