Maximo Anywhere自定义应用缓存异常:离线无法检索已下载工单记录
解决Maximo Anywhere 7.6.2离线筛选工单缺失的问题
针对你在自定义Work_Execution应用中遇到的离线筛选工单找不到的问题,结合Maximo Anywhere 7.6.2版本的特性,我整理了几个可行的解决方案和排查思路:
一、强制所有下载记录进入缓存
你猜测的“仅20条进入缓存、其余在本地存储”是符合Maximo Anywhere默认行为的——分页加载时,只有当前页的记录会存入内存缓存,剩余记录保存在本地SQLite数据库中。要让所有下载的工单都进入缓存,可以通过以下方式调整配置:
修改资源配置文件
打开自定义应用的WorkOrder.json资源配置文件,调整以下参数:- 将
pageSize设置为足够大的值(比如2000),2000条记录在Android 5/6设备的内存承受范围内; - 添加或修改
cachePolicy属性为"full",确保下载的所有记录都被缓存到内存中; - 若启用了离线分页,关闭
enableOfflinePagination属性,避免分页逻辑限制缓存数量。
- 将
自定义下载动作逻辑
在“下载当前列表”的按钮动作中,替换默认的分页加载方法为loadAll(),这个方法会一次性将所有符合条件的记录加载到缓存中。示例代码片段:// 替换原有的分页加载逻辑 WorkOrder.loadAll({ where: yourDownloadFilterCondition, success: function() { // 处理下载成功提示等逻辑 }, failure: function(error) { // 处理下载失败的错误提示 } });
二、直接查询设备本地SQLite存储
如果不想修改缓存策略,也可以直接查询本地存储的工单数据。Maximo Anywhere将离线数据存在设备的SQLite数据库中,你可以通过自定义代码访问:
- 使用SQLiteAccess API
编写自定义JavaScript模块,调用Anywhere提供的SQLiteAccess工具类执行查询。示例代码:
注意:需要先确认本地SQLite表的字段名和结构(可通过导出设备上的数据库文件查看),确保查询的字段与Maximo中的自定义组合字段完全对应。var db = new SQLiteAccess(); db.openDatabase(function() { // 替换ROUTE_FIELD为你实际的路线字段名 var query = "SELECT * FROM WORKORDER WHERE ROUTE_FIELD = ?"; db.executeSql(query, [targetRouteValue], function(resultSet) { // 处理查询结果,转换为应用可识别的工单对象 var workOrders = []; while (resultSet.isValidRow()) { workOrders.push({ wonum: resultSet.fieldByName("WONUM"), route: resultSet.fieldByName("ROUTE_FIELD"), // 按需添加其他需要展示的字段 }); resultSet.next(); } // 将结果绑定到界面控件进行展示 }, function(error) { // 处理查询错误的提示逻辑 }); }, function(error) { // 处理数据库打开失败的错误提示 });
三、额外排查要点
在实施上述方案前,建议先确认以下问题:
- 确认下载记录是否完整存储:通过Android调试工具导出应用的SQLite数据库(路径通常为
/data/data/com.ibm.anywhere.yourApp/databases/),用SQLite查看工具检查WORKORDER表的记录数,确认2000条工单是否都已下载到本地; - 检查筛选字段的离线同步配置:确保“路线”这个自定义组合字段已添加到WorkOrder资源的
offlineFields列表中,否则离线时该字段可能没有值,导致筛选失效; - 验证筛选逻辑的正确性:离线时的筛选是否正确匹配了本地存储中的字段值,比如组合字段的格式是否与在线时一致。
内容的提问来源于stack exchange,提问作者Cabelo1994
相关产品推荐
相关产品推荐

