页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

以新增一个筛选器操作符【为空串】为例,【为空串】实际代表含义为 以透视分析新增一个筛选器操作符【为空串】为例,【为空串】实际代表含义为 为NULL 或者是 等于空字符串(is null or = '')

...

setCustomOperators

作用: 自定义筛选器操作符


名称

类型

说明

输入参数

customOperators

Array

自定义筛选器操作符对象列表
[
  {
    id: 'EMPTY_STRING', // 操作符唯一标识
    label_cn: '为空串', // 中文标签
    label_tw: '為空串', // 繁体标签
    label_en: 'Empty String', // 英文标签
    noValue:true, // 是否需要参数值
    supportedDataTypes: ['STRING'], // 支持的数据类型
    supportedComponents: ['SELECT', 'MULTI_SELECT', 'LIST', 'MULTI_LIST'] // 支持的筛选器控件类型
 }

]

返回值

-

-

-


后端接口

IBeforeQueryHandler

名称: 查询前处理器

...

作用: 组件取数前, 对查询请求进行自定义处理, 如修改条件值.


名称

类型

说明

输入参数

context

QueryContext

查询上下文, 包含查询ID, 报表ID, 报表类型, 查询请求.

返回值




使用示例


代码块
// 以透视分析为例
// 前端扩展新增操作符
this.on(AD_HOC_DEFINE_ON_LOADED, (iAdHocAnalysis) => {
      console.log('AD_HOC_DEFINE_ON_LOADED')
        // 自定义操作符定义
		const customOperators = [
		  {
		    id: 'EMPTY_STRING',
		    label_cn: '为空串',
            label_tw: '為空串',
            label_en: 'Empty String',
            noValue:true,
		    supportedDataTypes: ['STRING'], // 只支持字符串数据类型
		    supportedComponents: ['SELECT', 'MULTI_SELECT', 'LIST', 'MULTI_LIST'] // 支持下拉筛选器类型
		  },
		  {
		    id: 'NOT_EMPTY_STRING',
		    label_cn: '不为空串',
            label_tw: '不為空串',
            label_en: 'Not Empty String',
            noValue:true,
		    supportedDataTypes: ['STRING'], // 只支持字符串数据类型
		    supportedComponents: ['SELECT', 'MULTI_SELECT', 'LIST', 'MULTI_LIST'] // 支持下拉筛选器类型
		  }
		]
        iAdHocAnalysis.setCustomOperators(customOperators)
    })

// 后端实现IBeforeQueryHandler根据自定义操作符修改查询条件
public class BeforeQueryHandler implements IBeforeQueryHandler {
	@Override
	public void before(QueryContext context) {
		IQueryCondition ret = QueryConditionUtil.handleCondition(context.getQueryOption().getQueryCondition(), (condition) -> {
			if (condition instanceof IQueryFieldConditionNode) {
				IQueryFieldConditionNode node = (IQueryFieldConditionNode) condition;
				String originalOperator = node.getOriginalOperator();
				// 处理 EMPTY_STRING 操作符
				if ("EMPTY_STRING".equals(originalOperator)) {
					IQueryRelationConditionNode co = createEmptyStringCondition(node.getField());
					return co;
				}
			}
			return condition; 
		});
	}

   /**
	 * 创建空字符串条件:字段为 NULL 或者是等于空字符串
	 * @param field 字段
	 * @return 复合条件
	 */
	private IQueryRelationConditionNode createEmptyStringCondition(IQueryField field) {
		IQueryRelationConditionNode relationCondition = new QueryRelationConditionNode();
		relationCondition.setRelation(LogicOperatorType.OR);
		relationCondition.setChildNodes(new ArrayList<>());
      // 条件1:字段为 NULL
		IQueryFieldConditionNode nullCondition = new IQueryFieldConditionNode() {
			@Override
			public FilterOperationType getOperator() {
				return FilterOperationType.NULL;
			}
			
			@Override
			public void setOperator(FilterOperationType operator) {
				// 不允许修改
			}
			
			@Override
			public List<Object> getValues() {
				return new ArrayList<>();
			}
			
			@Override
			public void setValues(List<Object> values) {
				// 不允许修改
			}
          @Override
			public IQueryField getField() {
				return field;
			}
			
			@Override
			public void setField(IQueryField field) {
				// 不允许修改
			}
			
			@Override
			public String getOriginalOperator() {
				return "NULL";
			}
			
			@Override
			public void setOriginalOperator(String originalOperator) {
				// 不允许修改
			}
		};

      // 条件2:字段等于空字符串
		IQueryFieldConditionNode emptyStringCondition = new IQueryFieldConditionNode() {
			@Override
			public FilterOperationType getOperator() {
				return FilterOperationType.EQUALS;
			}
			
			@Override
			public void setOperator(FilterOperationType operator) {
				// 不允许修改
			}
			
			@Override
			public List<Object> getValues() {
				List<Object> values = new ArrayList<>();
				values.add("");
				return values;
			}
			
			@Override
			public void setValues(List<Object> values) {
				// 不允许修改
			}
			
			@Override
			public IQueryField getField() {
				return field;
			}
			
			@Override
			public void setField(IQueryField field) {
				// 不允许修改
			}
			
			@Override
			public String getOriginalOperator() {
				return "EQUAL";
			}
			
			@Override
			public void setOriginalOperator(String originalOperator) {
				// 不允许修改
			}
		};

      // 添加两个子条件
		relationCondition.getChildNodes().add(nullCondition);
		relationCondition.getChildNodes().add(emptyStringCondition);
		
		return relationCondition;
	}
}