通过实践网友的文章
在本地搭建了 Mendix模块:UserManager,实现了数据表记录的增、删、改、查、分页查询等。但是发现“查询功能”太单一,只能对单个表进行查询。在实际的项目中,多表关联查询是常见的事。实践步骤如下:
1.安装以下第三方模块:
- Community Commons:模块向您的应用程序添加了许多可重用的 Java 方法,这些方法可以从微流或自定义 Java 操作中调用。该模块还添加了处理日期、批次、字符串、互联网、文件和配置的功能。
- OQL:该模块允许您从微流执行OQL查询。用于测试和导出OQL查询的代码片段,用动作添加参数,执行查询返回实体,执行查询并返回CSV等。
第三方模块,被安装在“Marketplace modules”文件夹下:
附:Mendix 9.24.2 安装模块OQL时报错:The selected 'Atlas_UI_Resource_PopupLayout' no longer exists.
2.通过"微流+OQL"实现联表分页查询功能
2.1 新建 无需持久化“业务模型类”:ShiftBO
让ShiftBO继承系统分页类System.Paging,这样,ShiftBO又可以作为表单查询的表单类
2.2 新建专用来“分页查询演示”的文件夹“SQL_PageList”
2.3 添加分页列表页面:Shift_PageList
生成了一个空白的页面
2.4 拖动表格控件至页面:Data Grid
2.5 通过“微流”配置数据源:Shift_Microflow
(1) 给微流定义一个入参:Paging
(2) 定义一个SQL查询字符串变量:SQL
拖动一个 动作活动
双击,弹框,选择:Create variable
SELECT S.ShiftId ShiftId, S.StartTime StartTime, S.EndTime EndTime, D.DepartmentId DepartmentId, D.Name DepartmentName, E.EmployeeId EmployeeId, E.Title EmployeeName FROM UserManager.Shift S LEFT JOIN S/UserManager.Shift_Department/UserManager.Department D LEFT JOIN S/UserManager.Shift_Employee/UserManager.Employee E WHERE E/ID != NULL ORDER BY S.ShiftId ASC
(3) 定义查询变量,即根据“部门名”查询记录
if $Paging/DepartmentName != empty and $Paging/DepartmentName != '' then $SQL+ 'AND D.Name=' + replaceAll('''###''', '###', $Paging/DepartmentName) else $SQL
(4) 同理,根据“员工名”查询记录
if $Paging/EmployeeName != empty and $Paging/EmployeeName!= '' then $SQL+ 'AND E.Title=' + replaceAll('''###''', '###', $Paging/EmployeeName) else $SQL
(5) 执行前面的SQL变量,查询数据库
(6) 打印SQL日志
(7) 修改“终点事件”,让微流返回 数据集
2.6 给表格(data grid)配置数据源
选择datagrid的头部搜索栏,在右边的连接器“Connector”中,拖地查询字段到对应空栏位中: