IBM Maximo跳转自定义应用(带Where条件)的排班人员筛选实现咨询
Maximo 员工班次分配选择功能实现方案
你这个需求有两种成熟的原生实现方案,均可以满足过滤参数传递、记录回传、列表可编辑的要求,具体实现步骤如下:
方案一:自定义可编辑列表对话框(推荐)
该方案不需要额外开发独立应用,直接在现有父应用中扩展功能,交互逻辑更符合用户操作习惯:
- 第一步:先创建自定义业务对象存储班次分配数据,建议新建交叉表
XX_EMP_SHIFTASSIGN,关联PERSON(员工表)、SHIFT(班次表),存储班次ID、员工ID、是否已发放班次、发放时间、资历年数等字段,既可以支撑列表编辑修改的需求,也方便后续做循环排班的排序逻辑。 - 第二步:在父应用(班次管理应用)的应用设计器中新增自定义对话框,对话框数据源绑定上述自定义对象,将列表控件设置为可编辑状态,用户浏览列表时可直接修改记录字段(比如标记班次已发放)。
- 第三步:实现父应用参数传递:给弹出对话框的按钮配置
launchDialog事件,在事件参数中拼接需要传递的上下文参数,示例配置如下:launchDialog('empSelectDialog', '&siteid=' + mainRecord.siteid + '&shifttype=' + mainRecord.shifttype)
对话框的数据源会自动将传入参数作为过滤条件,也可以在对话框的initialize事件中编写自动化脚本获取参数,拼接更复杂的过滤逻辑(比如按资历年数排序、排除已有排班冲突的员工)。 - 第四步:实现选中记录回传:给对话框的「确认选择」按钮添加事件脚本,获取用户选中的列表记录,将需要的字段值赋值给父应用对应字段后关闭对话框即可,示例脚本如下:
var selectedRecs = dialog.getDataProvider().getSelectedRecords(); var parentShiftRec = app.getMainRecord(); // 批量赋值多条选中员工到父应用班次分配子表 for(var i=0; i<selectedRecs.length; i++){ var newAssign = parentShiftRec.getMboSet("XX_SHIFTASSIGN").add(); newAssign.setValue("PERSONID", selectedRecs[i].getString("PERSONID")); } dialog.close();
方案二:独立子应用+Go To菜单跳转实现
如果确实需要独立应用管理员工排班分配逻辑,可按以下步骤实现两个要求:
A 父应用向子应用传递过滤条件
Go To菜单跳转原生支持上下文参数传递,只需做两处配置:
- 在父应用的应用设计器中,配置跳转按钮的目标URL,格式如下:
maximo.jsp?event=loadapp&appname=你的子应用标识&additionalevent=useqbe&shifttype={SHIFTTYPE}&siteid={SITEID}
其中{SHIFTTYPE}、{SITEID}为父应用当前主记录的字段名,Maximo会自动替换为当前记录的实际值传递给子应用。 - 在子应用的
appinit事件中添加自动化脚本,通过getWebClientSession().getParameter("参数名")获取传入的参数,自行拼接查询条件过滤子应用列表,同时可添加按资历排序的规则。
B 子应用选中记录回传给父应用
Maximo原生支持跨应用返回值逻辑,配置如下:
- 在子应用的应用设计器中新增「确认选择并返回」按钮,按钮事件配置为
returnvalue,指定需要返回的字段列表(比如PERSONID、DISPLAYNAME)。 - 在父应用的跳转事件中添加
returnvalue监听规则,子应用返回值后自动将字段映射赋值给父应用的对应字段,也可以添加脚本处理批量返回的多条记录。
内容的提问来源于stack exchange,提问作者araisbec
相关产品推荐
相关产品推荐

