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


1 说明

    接到需求,如果判断是产品不支持的,需要定制,首先得判断是在哪里插入什么功能,或者需要修改什么文件,因此我们需要先定位到具体的JS组件,然后再根据需要进行修改。下面从几个常用场景说明如何定位。

注意:说明调试定位之前,请选好一个前端调试工具,现在各浏览器实际都自带了调试工具,网上搜索:IE 开发者工具、Chrome 开发者工具、 火狐开发者工具等等,都会有大量的教程,各开发者工具的使用都大同小异,本文以chrome 开发者工具为例。

2 JS组件的定位

    如果要更改现有JS组件的内容、逻辑、布局或布局上文字,那就需要找到对应的JS组件,找到对应js之后就可以参考修改Smartbi JS文件修改,主要有以下几种定位方式

2.1 调试快捷键

    Smartbi 提供了很多操作快捷键,可以便捷地定位代码位置,具体可见:调试快捷键

2.2 监控网络请求

    使用开发者工具中的网络功能监控网络请求,根据请求js名称或html布局文件名称猜测。

    Smartbi是按需加载js组件的,且每个组件基本都会有对应的同名html或.template文件,并且命名都有规范,具有相应功能意义,那实际要看功能对应的JS组件是哪个,只要在加载那个功能之前,监控网络请求,基本就能定位到对应的JS组件。

    以查找创建用户功能代码为例

    1)先刷新浏览器,保证是第一次打开创建用户界面(再次打开可能会有缓存而不再请求文件)。打开Chrome调试工具,在点击“新建用户”按钮之前,切换到Network(网络)标签页,先清空所有历史信息,然后点击“新建用户”按钮:

    

    2)查找请求的文件,根据名称大概判断UserCreateAction.js文件接近新建用户功能:

    

    3)打开文件,在入口方法处添加debugger即可调试进入,判断是否为新建用户功能代码:

    

2.3 监控RMIServlet请求

    Smartbi的前后端交互主要通过RMIServlet请求,当功能存在前后端交互时,可通过分析RMIServlet的请求内容,快速定位到前后端代码。(注意:要观察前后的端数据时,需要在URL上添加debug=true参数,否则前后端交互数据会被加密。

    以查找灵活分析的保存逻辑为例:

    1)打开Chrome调试工具,切换到Network,在点击“保存”按钮前,先清空历史请求记录。然后再点击“保存”按钮:

    

     2)页面提示报表“保存成功”,可以发现灵活分析的保存操作会发出三条RMIServlet请求,即保存操作发生了三次与服务器的交互动作。逐一查看RMIServlet的请求内容,判断查找实际的保存方法:(此过程也可以知道灵活分析保存方法的实际执行过程)。

    

    3)通过ClientReportService类名,与overwriteQuery方法名,即可直接定位到后端代码的逻辑。

    


    注意:当通过类名无法直接查找到Module类时,则代表实际Module类的名称被重新定义过,此时可查找Smartbi.Application\src\web\WEB-INF\applicationContext.xml文件查找类名,找到Module类的实际名称,如:

    

    此时,如果需要同时定位前端代码,则可以使用overwriteQuery方法名,进行全文搜索*.js文件:

    

    根据查找结果,即可找到前端代码:

    

2.4 特殊属性查找

    在定制开发过程在,如果需要知道某个功能界面的逻辑,但不想用断点调试,或调试过程中代码隐藏较深,调试起来效率很慢,可以尝试查找界面上的关键DOM元素(即一般只会出现在该功能界面上的元素),看看是否存在特殊的属性,如bofid、class等属性,然后进行全文搜索,看看能否查找到界面对应的HTML模板文件,如果查找到即可确定对应的JS代码,在JS入口方法处添加debugger即可进行调试。

    之所以可以这么做是因为我们产品在设计上,一般遵循HTML代码与JS代码分离的规则,而HTML对应的JS代码在命名上会保持一致,如LoginView.html --> LoginView.jsExcelImportView.html --> ExcelImportView.js。因此查询元素属性时可先查询*.html, *.template(HTML模板文件的两种格式),查询不到,则可能该功能界面没有使用模板,可能是JS代码动态生成的,此时可再考虑用属性值查找*.js

2.4.1 示例:查找HTML模板

    以查找Excel导入模板功能为例:

    

    复制bofid="ssreporttemplate",全文查找*.template, *.html文件:

    

    查找完成后,发现可以唯一查找到一条匹配记录:

    

    打开查找到的文件,比对模板的结构与实际界面上的结构是否一致。

    

     

2.4.2 示例:查找JS文件

     以查找定制管理快捷入口界面功能代码为例:

    

    先复制class="superviseDefaultCommand_block",全文搜索*.template, *.html文件,会发现没有搜索到结果,此时可考虑该class是JS代码动态赋予的,考虑用属性值全文搜索*.js

    

    查找完成后,发现可以唯一查找到一条匹配记录,打开文件后,即可查看功能的代码逻辑,如需调试,在方法入口处添加debugger即可: