Управление ресурсами в фильтре поиска

#javascript #ibm-mobilefirst #maximo #maximo-anywhere

#javascript #ibm-mobilefirst #maximo #maximo-где угодно

Вопрос:

Мой клиент хочет иметь возможность фильтровать планы заданий с выбранным ресурсом. Чтобы иметь возможность делать это, я разработал функцию, которая фильтрует результаты на основе пользовательского ресурса 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 amp;amp; 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 amp;amp; 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 не работает. Иногда это приводит к невозможности найти выбранный ресурс в ресурсе asset, таким образом, фильтрация заканчивается сбоем.

2- Отсутствие поиска и прямого ввода нужного ресурса приводит к другой проблеме. Поскольку на ресурсе нет фильтра, загружается только количество записей, указанное pageSize. В моем случае размер страницы установлен равным 2000 для ресурса asset. Это означает, что если выбранный ресурс отсутствует в 2000 первых записях, он не найден функцией, таким образом, фильтрация завершается с ошибкой.

3- Если фильтру удается работать, похоже, что он блокирует дальнейшую фильтрацию по jpnum или описанию в поиске jobplan.

В заключение, вот мой вопрос: есть ли способ управлять ресурсами так, чтобы эти проблемы не возникали? Приветствуется любой совет.

Спасибо,