如何通过IBM Content Navigator插件为搜索模板追加隐藏搜索条件
实现方案
1. 自定义ICN插件基础结构搭建
首先按照IBM Content Navigator官方开发规范创建标准插件工程,继承Plugin基础类,完成插件的基础配置。
2. 功能实现(两种可选方案)
方案1:前端JS拦截(实现成本低,适合普通场景)
重写搜索模板的原生搜索方法,在请求发出前自动追加隐藏条件,代码写入插件的主JS加载逻辑中即可:
// 备份原有搜索方法 const originSearchMethod = ecm.model.SearchTemplate.prototype.search; ecm.model.SearchTemplate.prototype.search = function() { // 构造隐藏的搜索条件 const hiddenCondition = new ecm.model.SearchCriterion({ name: "strStatus", operator: "EQUAL", values: ["In Progress"], dataType: "STRING", hidden: true // 标记为隐藏,不会在搜索模板界面对外展示 }); // 临时插入到当前搜索条件列表 this.searchCriteria.push(hiddenCondition); // 执行原生搜索逻辑 const result = originSearchMethod.apply(this, arguments); // 搜索请求发出后移除临时条件,避免用户下次打开模板时显示该条件 this.searchCriteria.pop(); return result; };
方案2:服务端Java拦截(安全性更高,适合强管控场景)
通过ICN的服务端扩展点实现,避免前端代码被篡改绕过条件过滤:
- 实现
SearchServiceExtension扩展点,重写预搜索方法:
public class HiddenConditionSearchExtension extends SearchServiceExtension { @Override public void preSearch(SearchRequest searchRequest, SearchContext searchContext) throws Exception { // 构造隐藏查询条件 QueryCondition statusCondition = new QueryCondition(); statusCondition.setAttributeName("strStatus"); statusCondition.setOperator(QueryCondition.OPERATOR_EQUAL); statusCondition.getValues().add("In Progress"); // 追加到全局搜索条件中 searchRequest.getQueryConditions().add(statusCondition); } }
- 在插件主类中注册该扩展点:
@Override public List<Extension> getExtensions() { List<Extension> extensionList = new ArrayList<>(); extensionList.add(new HiddenConditionSearchExtension()); return extensionList; }
3. 验证要点
- 所有搜索模板的前端界面均不会显示
strStatus筛选条件 - 执行搜索后返回的结果自动匹配
strStatus="In Progress"的过滤规则 - 若需要仅针对特定存储库生效,可在追加条件前增加存储库标识判断逻辑,避免跨库字段不存在报错
内容的提问来源于stack exchange,提问作者pooja purushan
相关产品推荐
相关产品推荐

