Maximo中通过自动化脚本初始化绑定非持久化对象的对话框问题
问题:绑定非持久化对象的对话框中setWhere()方法未生效
我有一个绑定至非持久化对象(non-persistent object)的对话框,需要通过自动化脚本在对话框中显示过滤后的记录列表。尝试使用setWhere()方法实现过滤,但该方法没有生效,相关代码如下:
receiptInputSet =MXServer.getMXServer().getMboSet("ABC", MXServer.getMXServer().getUserInfo("TEST")) poLineNum="1" siteID=mbo.getOwner().getString("SITEID") receiptInputSet.setWhere("polinenum ='"+poLineNum+"' and SITEID='"+siteID+"'") receiptInputSet.reset()
解决方案
非持久化对象的MboSet不会从数据库读取数据,setWhere()依赖的SQL过滤逻辑自然无法生效,可通过以下方式实现需求:
手动过滤记录:遍历MboSet所有条目,保留符合条件的记录,移除不符合的
示例代码:receiptInputSet = MXServer.getMXServer().getMboSet("ABC", MXServer.getMXServer().getUserInfo("TEST")) poLineNum = "1" siteID = mbo.getOwner().getString("SITEID") receiptInputSet.reset() var mbo = receiptInputSet.moveFirst() while (mbo != null) { var nextMbo = receiptInputSet.moveNext() if (mbo.getString("POLINENUM") != poLineNum || mbo.getString("SITEID") != siteID) { receiptInputSet.remove(mbo) } mbo = nextMbo }使用QBE过滤替代:部分场景下,
setQbe()方法对非持久化对象的MboSet生效,可替代setWhere()
示例代码:receiptInputSet = MXServer.getMXServer().getMboSet("ABC", MXServer.getMXServer().getUserInfo("TEST")) poLineNum = "1" siteID = mbo.getOwner().getString("SITEID") receiptInputSet.setQbe("POLINENUM", poLineNum) receiptInputSet.setQbe("SITEID", siteID) receiptInputSet.reset()确认MboSet实例正确性:确保操作的是对话框绑定的MboSet实例,而非重新创建的独立实例。如果对话框已初始化MboSet,应直接获取对话框关联的实例进行操作,避免重复调用
getMboSet()创建新对象
内容的提问来源于stack exchange,提问作者max092012
相关产品推荐
相关产品推荐

