custom.js |
您所在的位置:网站首页 › 脚本用来干嘛 › custom.js |
# custom.js custom.js是SuccBI前端嵌入式脚本的约定文件名,当需要对某个页面(如一个仪表板、报表或SuperPage页面等)进行个性化前端开发的时候,通过custom.js可以向特定的页面注入前端js脚本代码,可以实现如“自定义按钮点击的执行逻辑”、“自定义某个组件的渲染逻辑”之类的个性化需求。 # 脚本位置为了方便管理二次开发的代码,SuccBI将多个页面的个性化脚本代码集中到一个custom.js文件进行管理,也就是说可以通过在特定的位置编写一个custom.js文件,实现多个目标页面的个性化处理。custom.js可以位于如下几个位置: /业务项目/fapp/xxx.fapp/custom.js - 表单应用内部页面加载 /业务项目/app/xxx.app/custom.js - 应用内嵌入的页面加载 /业务项目/public/hooks/custom.js - 项目内的报表、仪表板、应用、表单应用加载 /sysdata/public/hooks/custom.js - 系统内的报表、仪表板、应用、表单应用、元数据管理界面等所有页面都加载说明: 在custom.js中可以通过文件的路径、名称、类型等限定具体的脚本代码或事件代码作用到哪个具体的页面。 可以直接编辑custom.js文件,也可以在SuccIDE或元数据项目设置中通过脚本编辑器直接编辑ts语法的脚本文件custom.ts,编辑器会自动编译并生成custom.js。 当存在多个脚本时,系统将以函数为粒度按以上顺序优先使用应用内的、其次使用项目全局的最后使用系统全局的进行调用(如onDidInitFileViewer在项目脚本和系统脚本都存在,那么将会只调用项目脚本的,但如果项目脚本文件存在但是并不包含onDidInitFileViewer函数,那么会继续调用系统脚本文件中的onDidInitFileViewer函数)。 未登录用户也可以访问这个文件,所以将它放在/sysdata/public下面,这样就不需要给它分配权限。 # 支持的事件前端脚本支持大量的事件,不同的类型可能支持不同的事件,具体见 前端脚本支持的事件。 # 自定义表达式脚本函数前端表达式计算时,有时需要执行用户自定义逻辑,并在表达式中引用脚本函数执行结果(如:在表达式中引用数据库查询结果)。当产品内置表达式无法满足需求时,可以通过javascript脚本扩展表达式的执行能力。 在custom.js中的CustomExpFunctions定义个性化的脚本函数,然后通过表达式函数SCRIPT_STR调用脚本函数: /** * 提供给表达式中执行的个性化脚本函数。 * 1. 用户定义的个性化脚本函数,在表达式中调用`SCRIPT_STR`函数即可执行。 * 2. context: 表达式计算上下文 * 3. args: 脚本函数执行参数,参数类型只支持基本类型`string|number|boolean|Date`或者基本类型的数组形式`Array` */ CustomExpFunctions?: { [funcName: string]: (context: IExpEvalDataProvider, ...args) => string | Promise; }脚本示例: CustomExpFunctions: { queryUserData: (context: IExpEvalDataProvider, arg1,...,argN) => string | Promise { // TODO something // 在此处实现个性化需求,并返回结果 // let data = null; // return data; } }在表达式中如何引用: SCRIPT_STR('queryUserData', 控件1, 控件2); # 脚本模版下面的钩子函数按需实现,需要实现哪个就把它的注释去掉即可,也可以添加新的事件,支持的事件见脚本前端脚本支持的事件。 /** * `custom.js`是SuccBI前端嵌入式脚本的约定文件名,当需要对某个页面(如一个仪表板、报表或SuperPage页面等)进 * 行个性化前端开发的时候,通过`custom.js`可以向特定的页面注入前端js脚本代码,通过前端脚本开发可以实现如“自定 * 义按钮点击的执行逻辑”、“自定义某个组件的渲染逻辑”之类的个性化需求。 * * 为了方便管理二次开发的代码,SuccBI将多个页面的个性化脚本代码集中到一个`custom.js`文件进行管理,也就是说可以 * 通过在特定的位置编写一个`custom.js`文件,可以多个目标页面的个性化处理。 * * 更多信息见: */ import { throwError, assign, message, rc, Component, showSuccessMessage, ajax, browser, rc1, showErrorMessage, IPageContainer, UrlInfo, encodeUrlInfo, ctx, showWaiting, showDialog, ctxIf, AjaxArgs, } from "sys/sys"; import { IMetaFileViewer, MetaFileViewerArgs, IMetaFileCustomJS } from "metadata/metadata"; import { IAppCustomJS, IFAppCustomJS } from "metadata/metadata-script-api"; /** * 可以在此处通过路径、资源ID、文件名、类型指定脚本: * 优先级顺序为:id>路径>名称>类型>*。 * id/路径/名称 匹配到的脚本之间不会合并,取优先级最高的,与类型、*匹配到的脚本按优先级进行合并。 * * 1. path或resID, 完整的路径或资源id。 * 2. name,文件名(无路径,带扩展名) * 3. type,类型 * 4. *,默认 */ export const CustomJS: { [file_OR_type_OR_resid: string]: IMetaFileCustomJS } = { /** * 用完整的路径设置脚本作用到哪个具体的仪表板、报表或spg等,路径以/开头,包含项目名称和文件扩展名 */ "/path/to/file": { /** * 在这里定义报表类型的元数据的个性化脚本,支持的函数见 * */ }, /** * 用文件名设置脚本作用到哪个具体的仪表板、报表或spg等,文件名包含文件扩展名 */ "xxxxx.spg": { } }上一篇 custom.css 下一篇 filter.action 是否有帮助? 反馈成功 非常感谢您的反馈,我们会继续努力做得更好。 确定 反馈失败 评分打分、问题类型或者意见反馈没有填写。 关闭 您的反馈建议 评价打分 问题类型 意见反馈 标记内容 提交 分享 0条评论 评论 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |