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

二开接口文档:https://smartbi.feishu.cn/docx/AdlLdoZDGo8ZNMxoX6wc71m8nGg

示例文档:https://smartbi.feishu.cn/docx/GqQrdOCyiodqAdxvfG3c1EVknhe


禁用切换数据集

需求:禁止数据面板的切换数据集,包括切换按钮,下拉菜单的编辑、切换菜单

代码实现:

import SmartBIExt from  'smartbi-ext-x'
let {
        DetailedQueryModule: {
         BaseDetailedQueryExtender,
         DetailedQueryEventEnum: {
                 D_QUERY_DATA_PANEL_ON_INIT
     }
  }
} = SmartBIExt

class MyExtender extends BaseDetailedQueryExtender {
  
  constructor() {
    super()
  }

  install () {
    // 监听界面初始化
    this.on(D_QUERY_DATA_PANEL_ON_INIT, async (dataPanelImpl) => {
            // 禁止切换数据集
            if (!dataPanelImpl.getCurrentDatasetId()) {
                    dataPanelImpl.setSelectDatasetDisabled(true)
            }
            // 屏蔽数据面板下拉部分菜单
            dataPanelImpl.setDropDownBtnsFilter(menu => {
                    // 屏蔽编辑和切换数据集菜单
                    return menu.id !== 'EDIT' && menu.id !== 'SWITCH_DATASET'
            })
    })
  }  

}

export default MyExtender

对数据来源选择进行限制

需求:设置选择数据集弹窗根节点为:公共空间,搜索时非公共空间下的资源不允许显示

代码:

import SmartBIExt from  'smartbi-ext-x'
let {
  DetailedQueryModule: {
         BaseDetailedQueryExtender,
         DetailedQueryEventEnum: {
                 D_QUERY_DATASET_SELECTOR_ON_INIT
     }
  }
} = SmartBIExt

class DatasetSelectDlgExtender extends BaseDetailedQueryExtender {
  
  constructor() {
    super()
  }

  install () {
    // 监听界面初始化
    this.on(D_QUERY_DATASET_SELECTOR_ON_INIT, async (impl) => {
        impl.setRootNodeId('DEFAULT_TREENODE')
        // 搜索时过滤自定义节点
        impl.setSearchNodeFilter(searchItem => {
                return searchItem[0].id !===  'DEFAULT_TREENODE'
        })
    })
  }  

}

export default DatasetSelectDlgExtender

效果

对保存弹窗进行限制

需求:保存资源时不允许保存到分析展现

代码:

import SmartBIExt from  'smartbi-ext-x'
let {
        DetailedQueryModule: {
         BaseDetailedQueryExtender,
         DetailedQueryEventEnum: {
                 D_QUERY_SAVE_DIALOG_ON_INIT
     }
  }
} = SmartBIExt

class SaveDialogExtender extends BaseDetailedQueryExtender {
  
  constructor() {
    super()
  }

  install () {
    // 监听界面初始化
    this.on(D_QUERY_SAVE_DIALOG_ON_INIT, async (saveDialogImpl) => {
            var ids = [
                    // 隐藏分析展现节点
                    'PUBLIC_ANALYSIS'
            ]
            saveDialogImpl.setNodeFilter((node) => {
                    return ids.indexOf(node.id) === -1
            })
    })
  }  

}

export default SaveDialogExtender

效果:

对工具栏增加按钮

需求:工具栏添加自定义按钮,点击触发自定义监听

代码:

import SmartBIExt from  'smartbi-ext-x'
let {
        DetailedQueryModule: {
         BaseDetailedQueryExtender,
         DetailedQueryEventEnum: {
                 D_QUERY_TOOLBAR_ON_INIT
     }
   }
} = SmartBIExt

class MyExtender extends BaseDetailedQueryExtender {
  
  constructor() {
    super()
  }

  install () {
    // 监听界面初始化
    this.on(D_QUERY_TOOLBAR_ON_INIT, async (toolbarImpl) => {
            // 添加自定义按钮
            toolbarImpl.addItem({
                    id: 'test',
                    label: '自定义按钮',
                    icon: 'sx-icon-data-panel-toggle',
                    handler: () => {
                            alert('点击自定义按钮')
                    },
                    ext: {
                       showPopoverOnClick: true, // 点击菜单项时否显示下拉菜单 
                       expandorIcon: 'sx-icon-tree-expandor',  // 下拉icon
                       showExpand: true // 是否显示下拉按钮// 是否显示下拉按钮
                    },
					children: [{  // 若需要子菜单可以在children中添加工具栏item作为子项
     					 id: 'SAVE',
     					 label: lang.$t('common.save'),
     					 icon: 'sx-icon-save'
   					 }, {
      					id: 'SAVEAS',
      					label: lang.$t('common.saveAs2'),
     					 icon: 'sx-icon-saveas'
   					 }]
            })
    })
  }  

}

export default MyExtender

效果:

不显示导出弹窗

需求: 点击导出后直接导出

示例1

import SmartBIExt from  'smartbi-ext'
let {
  DetailedQueryModule: {
   DetailedQueryEventEnum: {
     D_QUERY_ON_BEFORE_EXPORT_DIALOG
   },
   BaseDetailedQueryExtender
  }
} = SmartBIExt
class DQueryInterfactExtension extends BaseDetailedQueryExtender {
  install () {
    this.on(D_QUERY_ON_BEFORE_EXPORT_DIALOG, (dQueryImpl, ext) => {
      ext.openDialog = false; // 不显示导出弹窗
    })
  }
}
export default DQueryInterfactExtension

示例2

import SmartBIExt from  'smartbi-ext'
import  * as Element from 'element-ui'
let {
  Utils: {
    ExtensionUtil: { documentLoadResource }
  },
  InterfaceObject: {
    IGlobal
  },
  DetailedQueryModule: {
   DetailedQueryEventEnum: {
     D_QUERY_ON_BEFORE_EXPORT
   },
   BaseDetailedQueryExtender
  }
} = SmartBIExt
class DQueryInterfactExtension extends BaseDetailedQueryExtender {
  install () {
    this.on(D_QUERY_ON_BEFORE_EXPORT, (dQueryImpl, { exportType }) => {
      // 获取默认的导出设置
      let setting = dQueryImpl.execGenerateExportSetting({ exportType })
      // 调用系统导出
      dQueryImpl.execExportWithSetting({ exportType, setting })
    })
  }
}
export default DQueryInterfactExtension

修改导出弹窗

需求: 导出名称设为"固定报表"且不允许修改, 导出模式是在线导出且不允许显示

代码

import SmartBIExt from  'smartbi-ext'
let {
  DetailedQueryModule: {
   DetailedQueryEventEnum: {
     D_QUERY_ON_BEFORE_EXPORT_DIALOG
   },
   BaseDetailedQueryExtender
  }
} = SmartBIExt
class DQueryInterfactExtension extends BaseDetailedQueryExtender {
  install () {
    this.on(D_QUERY_ON_BEFORE_EXPORT_DIALOG, (dQueryImpl, { props }) => {
      props.defaultValue.fileName = '固定报表'; // 设置默认值: 文件名
      props.disables.fileName = 'true'; // 设置可编辑性: 文件名不允许编辑
      props.visibles.exportMode = 'false'; // 设置可见性: 导出渠道不可见
      console.info(props); // 打印props以查看都有哪些选项可修改
    })
  }
}
export default DQueryInterfactExtension

定制导出弹窗

需求: 使用自定义的导出弹窗

代码

import SmartBIExt from  'smartbi-ext'
let {
  DetailedQueryModule: {
   DetailedQueryEventEnum: {
     D_QUERY_ON_BEFORE_EXPORT
   },
   BaseDetailedQueryExtender
  }
} = SmartBIExt
class DQueryInterfactExtension extends BaseDetailedQueryExtender {
  install () {
    this.on(D_QUERY_ON_BEFORE_EXPORT, (dQueryImpl, { exportType }) => {
      // 获取默认的导出设置
      let setting = dQueryImpl.execGenerateExportSetting({ exportType })
      // 使用prompt弹窗询问文件名
      // const layer = SmartBIExt.InterfaceObject.IGlobal.getLayer()
      let fileName = prompt('请输入文件名', "定制组件导出弹窗");
      if (fileName === null) {
        // 取消导出
        return;
      }
      if (fileName === '') {
        // 不输入文件名
        return;
      }
      setting.fileName = fileName;
      // 调用系统导出
      dQueryImpl.execExportWithSetting({ exportType, setting })
    })
  }
}
export default DQueryInterfactExtension

定制导出流程

需求: 导出需要审核, 且存放到固定位置

代码

import SmartBIExt from  'smartbi-ext'
let {
  DetailedQueryModule: {
   DetailedQueryEventEnum: {
     D_QUERY_ON_BEFORE_EXPORT
   },
   BaseDetailedQueryExtender
  }
} = SmartBIExt
class DQueryInterfactExtension extends BaseDetailedQueryExtender {
  install () {
    this.on(D_QUERY_ON_BEFORE_EXPORT, (dQueryImpl, { exportType }) => {
      // 自定义导出流程

      // 这里做审核之类的事情
      let pass = true;  // 审核是否通过

      if (pass) {
        // 使用系统的导出弹窗
        dQueryImpl.execOpenExportSettingDialog({ exportType }, (setting) => {
          // 获取导出接口入参
          let exportOption = dQueryImpl.execGetExportSetting({ exportType, setting })
          // 使用exportOption调用自定义导出接口
          
        })
      }
    })
  }
}
export default DQueryInterfactExtension
  • 无标签