在查找过滤器中管理资源

时间:2019-03-06 22:07:14

标签: javascript ibm-mobilefirst maximo maximo-anywhere

我的客户希望能够使用所选资产来过滤工作计划。为了做到这一点,我开发了一个函数,该函数根据自定义资源jpassetsplink过滤结果:

filterJobPlansForLookup: function(eventContext){
			var workOrderSet = CommonHandler._getAdditionalResource(eventContext,"workOrder");
			var jobPlanSet = CommonHandler._getAdditionalResource(eventContext,"jobPlanResource");
			jobPlanSet._lookupFilter = null;
			var assetSet = null;
			var assetnum = null;
			var itemnum = null;
			var jpAssetSpLinkSet = null;

			//CommonHandler._clearFilterForResource(this,jobPlanSet);	
			
			var siteid = workOrderSet.getCurrentRecord().get("siteid");
			if(siteid == null){
				siteid = UserManager.getInfo("defsite");
			}

			if(workOrderSet.getCurrentRecord() != null){
				assetnum = workOrderSet.getCurrentRecord().get("asset");
				assetSet = CommonHandler._getAdditionalResource(eventContext,"additionalasset");
				CommonHandler._clearFilterForResource(eventContext, assetSet);
				assetSet = assetSet.clearFilterAndSort().filter('siteid == $1', siteid)
				if (assetnum != null){
					var asset = assetSet.find('assetnum == $1', assetnum);
					if (asset && asset.length>0){
						itemnum = asset[0].get('itemnum');
					}
				}
			}
			
			var filter = [{siteid: siteid, status: "ACTIF"}];
			if (assetnum != null){
				jpAssetSpLinkSet = CommonHandler._getAdditionalResource(eventContext,"jpassetsplinkResource");
				jpAssetSpLinkSet._lookupFilter = null;
				CommonHandler._clearFilterForResource(eventContext, jpAssetSpLinkSet);
				
				var filteredJpAssets = null;
				if (itemnum == null){
					filteredJpAssets = jpAssetSpLinkSet.clearFilterAndSort().filter('assetnum == $1', assetnum);	
				} else {
					filteredJpAssets = jpAssetSpLinkSet.clearFilterAndSort().filter('itemnum == $1', itemnum);
				}
				
				Logger.trace("[WODetailExtensionHandler] Found " + filteredJpAssets.data.length + " links out of " + jpAssetSpLinkSet.count() );
				if(filteredJpAssets && filteredJpAssets.data.length>0){
					filter = [];
					filteredJpAssets.data.forEach(function(jpAsset){
						filter.push({jpnum: jpAsset.get("jpnum"), siteid: siteid, status: "ACTIF"});
					});
				}
			}
			jobPlanSet.lookupFilter = filter;
		}

在适当的情况下,此代码有效。但是,它有多个问题:

1-搜索资产时,结果过滤器将应用于资源,并且似乎无法删除。如果我在资产查找中搜索资产,则执行此函数时,资源数据仍会被过滤并调用CommonHandler._clearFilterForResource,assetSet.clearFilterAndSort()或直接更改_lookupFilter属性均无效。有时这导致无法在资产资源中找到所选资产,因此过滤最终会失败。

2-不搜索并直接输入所需资产会导致另一个问题。由于资源上没有过滤器,因此仅加载由pageSize指定的条目数。就我而言,资产资源的pageSize设置为2000。这意味着,如果所选资产不在2000个第一项中,则该函数找不到该资产,因此过滤失败。

3-如果过滤器成功运行,则似乎阻止了jpnum或作业计划查找中的描述进一步过滤。

总而言之,这是我的问题:是否有一种方法可以管理资源,以免发生这些问题?任何提示,不胜感激。

谢谢

0 个答案:

没有答案