Maximo自动化脚本:如何获取Assignment Manager中Labor List的选中人员
获取Assignment Manager中Labor List选中人员的解决方案
我之前在做Maximo自定义按钮的时候也碰到过完全一样的问题——能拿到Work List里选中的工单,就是摸不着Labor List的选中记录。试了几种方法后,总结出两个靠谱的实现方式,你可以根据自己的脚本场景选择:
方法1:通过Assignment Manager的AppBean直接拿选中项
Assignment Manager有专门的应用Bean(psdi.app.workorder.AssignmentManagerAppBean),里面封装了获取Labor List选中记录的方法,直接调用就行,这也是最推荐的方式:
// 先拿到Assignment Manager的应用Bean实例 var amAppBean = app.getAppBean(); // 调用getLaborSelection()获取选中的Labor MboSet var selectedLaborSet = amAppBean.getLaborSelection(); // 遍历处理选中的人员 if (selectedLaborSet && !selectedLaborSet.isEmpty()) { selectedLaborSet.reset(); while (selectedLaborSet.moveNext()) { var laborMbo = selectedLaborSet.getCurrentMbo(); // 这里可以取你需要的字段,比如LABORCODE、LABORNAME var laborCode = laborMbo.getString("LABORCODE"); println("选中的人员编码:" + laborCode); // 后续的分配逻辑写在这里就行 } }
方法2:通过UI组件的选中索引筛选关联记录
如果因为版本或者脚本上下文限制,用不了AppBean的方法,也可以直接操作UI组件拿到选中索引,再从关联的MboSet里取对应记录:
// 先获取当前的工单Assignment记录 var currentAssignment = mbo; // 拿到工单关联的LABORASSIGNMENT集合 var laborAssignSet = currentAssignment.getMboSet("LABORASSIGNMENT"); // 获取Labor List对应的表格组件,注意ID要和应用配置里的一致 var laborTable = app.getApp().getTab("ASSIGNMENT").getTable("LABORASSIGNMENT"); // 拿到表格的选中索引数组 var selectedIndices = laborTable.getSelectedIndices(); // 循环根据索引取对应的Labor记录 for (var i = 0; i < selectedIndices.length; i++) { laborAssignSet.setLocation(selectedIndices[i]); var laborMbo = laborAssignSet.getCurrentMbo(); var laborName = laborMbo.getString("LABORNAME"); println("选中的人员姓名:" + laborName); }
一些踩坑提醒
- 脚本的上下文一定要选对:把脚本绑定到按钮的
ACTION事件上,对象上下文选WMASSIGNMENT,这样mbo才是当前的工单分配记录 - 如果你用的是Maximo 7.6及以上版本,方法1的
getLaborSelection()是官方支持的方法,兼容性拉满 - 方法2里的组件ID(比如
ASSIGNMENT标签页、LABORASSIGNMENT表格)可以通过查看Assignment Manager的应用XML配置确认,避免写错
另外,你已经能拿到Work List的选中工单,把这部分和上面的Labor选中逻辑结合起来,就能完美复刻OOB的Assign Labor功能,再加上你需要的小修改就搞定了。
内容的提问来源于stack exchange,提问作者Quinn
相关产品推荐
相关产品推荐

