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