页面树结构
转至元数据结尾
转至元数据起始

名词解释说明

X模块:主要是基于Vue2前端框架开发的系统功能模块,如仪表盘、数据模型、自主ETL、V11的即席查询、V11的透视分析
V模块:主要是基于原始JS前端技术开发的系统功能模块,如电子表格、web电子表格、旧即席查询、旧透视分析,系统主界面框架等

背景说明

背景

现场因为数据量大或者数据库性能或网络配置等原因,经查出现查询数据报错或者查询数据超时等情况,每次出现报错都需要找到BI团队排查,导致BI维护团队的工作量和维护压力很大。

所以,客户期望在数据查询报错或者查询超时等情况,可以通过前端的错误提示信息来引导用户找相关的维护团队解决问题。例如:查询超时可以找数据库维护团队、网络超时可以找网络团队等。

目前是有统一的js入口可以定制开发处理,X模块需要提供对应的接口。

之前在后端实现了一套扩展接口,但客户使用了中间件,中间件的报错没有经过smartbi后端,无法扩展,需要提供前端二开接口支持。


后端X模块报错扩展接口

接口定义

接口说明

getCode

功能:获取错误码

输入:无

输出:错误码,如SQL_ERROR,NO_PERMISSION,ENGINE_VERSION_ERROR等

getMessage

功能:获取错误信息

输入:无

输出:错误信息,前端错误弹窗的内容

setMessage

功能:设置错误信息

输入:错误信息

输出:无

setWeak

功能:设为弱提示,前端显示错误时将使用弱提示

输入:boolean

输出:无

isWeak

功能:判断是否是弱提示

输入:无

输出:boolean

setStackTrace

功能:设置错误栈,扩展时可设置为null,前端显示错误时则不显示栈信息按钮

输入:string

输出:无

getStackTrace

功能:获取错误栈

输入:无

输出:string

使用示例

// 扩展包module类, 用于注册IExceptionResultHandler
package smartbi.smartbixexception;

import smartbi.framework.IModule;
import smartbi.framework.IShutdownHook;
import smartbix.exception.ExceptionResultProcessorHolder;
import smartbix.exception.IExceptionResultHandler;

public class MyExceptionModule implements IModule, IShutdownHook {
  private static MyExceptionModule instance = new MyExceptionModule();
  private IExceptionResultHandler handler = new MyExceptionHandler();
  public static MyExceptionModule getInstance () {
    return instance;
  }
  @Override
  public void activate() {         
    ExceptionResultProcessorHolder.getInstance().addHandler(handler);
  }
  @Override
  public void shutdown() {       
    ExceptionResultProcessorHolder.getInstance().removeHandler(handler);
  }
}


// 扩展包实现的IExceptionResultHandler
package smartbi.smartbixexception;

import smartbix.ExceptionResult;
import smartbix.exception.IExceptionResultHandler;

public class MyExceptionHandler implements IExceptionResultHandler {
  @Override
  public ExceptionResult handle(ExceptionResult result) {
    // 忽略弱提示错误
    if (result.isWeak()) {
      return result;
    }
    // sql查询错误不显示栈信息
    if ("SQL_ERROR".equals(result.getCode())) {
      result.setStackTrace(null);
      return result;
    }
    // 权限错误使用弱提示
    if ("NO_PERMISSION".equals(result.getCode())) {
      result.setWeak(true);
      return result;
    }
    // 新引擎未开启修改提示信息, 且不显示栈信息
    if ("ENGINE_VERSION_ERROR".equals(result.getCode())) {               
      result.setMessage("新引擎未开启");
      result.setStackTrace(null);
      return result;
    }
    return result;
  }
}

前端X模块报错扩展接口

接口定义

setHttpErrorDialOPHander

作用:在报表初始化时设置报错弹窗处理函数


名称

类型

说明

输入参数

option

JSON

报错传参option信息

返回值

option

JSON

经过处理之后的报option信息

接口说明

不同的报表类型,二开接口的调用时机不一样

仪表盘,时机:PAGE_ON_INIT,调用对象iPage.setHttpErrorDialOPHander【针对V10.5.15及以上版本有效】

新透视,时机:AD_HOC_ANALYSIS_ON_INIT,调用对象iAdHocAnalysis.setHttpErrorDialOPHander 【针对V11及以上版本有效】

新即席,时机:DETAILED_QUERY_ON_INIT,调用对象iDetailQuery.setHttpErrorDialOPHander 【针对V11及以上版本有效】

使用示例

//仪表盘调用示范
this.on(PAGE_ON_INIT, (iPage) => {
    iPage.setHttpErrorDialOPHander(function (option) {
        if (option.message.indexOf('504') >= 0 || option.message.indexOf('502') >= 0) {
            option.message = '服务器请求网络超时'
        }
        return option;
    })
})

//透视分析调用示范
this.on(AD_HOC_ANALYSIS_ON_INIT, (iAdHocAnalysis) => {
    iAdHocAnalysis.setHttpErrorDialOPHander(function (option) {
        debugger
        if (option.message.indexOf('504') >= 0 || option.message.indexOf('502') >= 0) {
            option.message = '服务器请求网络超时-透视'
        }
        return option;
    })
})

//即席查询调用示范
this.on(DETAILED_QUERY_ON_INIT, (iDetailQuery) => {
    iDetailQuery.setHttpErrorDialOPHander(function (option) {
        debugger
        if (option.message.indexOf('504') >= 0 || option.message.indexOf('502') >= 0) {
            option.message = '服务器请求网络超时-即席查询'
        }
        return option;
    })
})



  • 无标签