组件的脚本

<< Click to Display Table of Contents >>

当前位置:  脚本 

组件的脚本

Previous pageReturn to chapter overviewNext page

很多时候用户希望通过脚本去动态修改组件的属性,绑定数据来源。脚本会在组件被执行前运行,通过改变某个属性,就可以把某个部分隐藏。

给组件定义脚本 , 当组件被刷新的时候 , 会运行该脚本 . 组件的脚本和仪表盘上的脚本一样 , 都有顶级作用域和仪表盘作用域上支持的函数 , 对象 , 常量。

实际上,通过脚本可以访问到任意仪表盘上的组件。但通过某个组件上的脚本去修改其他组件的脚本是不建议使用的,可能会导致依赖关系混乱。

 

打开方式

选中组件,选择右侧面板-设置中的脚本,即可打开组件的脚本对话框。如下图所示。

script30

例如:选中交叉表,在右侧面板-设置中点击脚本,结果如下图所示的对话框,交叉表对应的脚本文件夹展开,其他组件的文件夹是闭合的,用户可输入脚本。

script31

 

基本概念

本节讲述脚本使用的基本概念。

访问组件属性

可以通过组件的名字来访问一个组件。例如, “Table1” 是某个表格组件的名字。例如,Table1.width = 100。

如果组件名字中有空格或其他特殊字符,需要把名字用引号引起来,并作为 db 的一个属性来访问。这 db 是对当前仪表盘的一个引用。例如,db["Table1"].width = 100。这句和上面那句脚本是等价的,都是修改 Table1 的宽度值。

作用域

在 Yonghong Z-Suite 的脚本环境中,包含多层次的作用域。对于仪表盘中的对象,有如下几层作用域:

o顶级作用域

o仪表盘作用域

o组件作用域

当一个符号被用在脚本中,会首先检查它的作用域范围。如果在组件内部没找到,就检查仪表盘作用域,最后是顶级作用域。这就意味着,在访问属性的时候,也可以不用带上组件名称。

例如,需要设置Table1的高度为200像素。你可以选中该组件,打开它的脚本对话框,直接在脚本框中书写 height = 200。如果是在仪表盘上加脚本,就只能通过组件名来访问:Table1.height = 200。这两种添加脚本的方式是等价的,都是修改Table1的高度。

脚本执行顺序

一个仪表盘上有很多组件,每个组件都可以引入脚本,而且还可以在一个组件的脚本里访问其他脚本的属性。脚本的最终执行效果是受执行时序控制的。如果修改同一个属性,哪个脚本是最后被触发的,最终效果就受它影响。例如,在 Table1 上修改了 Table2 的背景色, 而 Table2 上也修改了自己的背景色。最终效果要看是 Table1 被后执行,还是 Table2 被后执行。如果 Table2 被最后执行,那就显示 Table2 里修改的背景色。

以下规则是用来评判在一个仪表盘的生命周期中,脚本的执行顺序的标准:

o在装载时运行的脚本,是最先执行的。此脚本定义在仪表盘上。

o用户被要求通过输入框输入的参数。

o所有的组件的查询数据被执行。

o组件上的脚本被执行。

如果在仪表盘级别里, " 在变化时运行 " 的脚本中定义了脚本。

o当仪表盘上有任何变化时,设定在变化时运行的脚本被执行。

o最后还是要执行组件上的脚本。

脚本的层次

通过脚本可以访问组件的属性,可以调用方法。可以修改一个组件的不同层次的内容。

例如对于一个图表组件:

1.通过修改属性,格式,超链接等的脚本 , 来达到修改图表的展现。此时的数据绑定是不修改的。

2.通过修改轴,标记,图例等信息的脚本,添加字段 , 来达到修改绑定的信息。此时会影响到数据的输出。把城市字段换成国家字段。数据完全不同。

3.通过直接修改数据和 BChart 等信息的脚本 , 来达到修改数据和画图的信息。此时就不需要组件上有绑定信息就能画出图表来。和 2 的区别就是,2 需要有绑定,通过绑定来生成数据。而 3 可以直接执行一个查询,放回查询结果作为图表的数据。此用法会限制图表的交互行为,多用在表格渲染上。例如某列的所有格子都用图表来显示,画出各个维度下的销售趋势线。

 

修改组件的属性

所有的组件有一些属性是通用的,例如前景色,背景色,高宽,位置, 可见,可用,字体,字号,等等。当你在编辑区域给组件定义属性的时候,可以通过树状列表查阅到该对象的属性。

应用举例

1. 存在一表组件,如下图所示。

script13

2. 打开表组件的脚本,打开脚本输入对话框,输入脚本:

var loc=new Locator(["PRODUCT"],CELL,DETAIL);// 选定 PRODUCT 列

var color=new Color(java.awt.Color.red);// 设定颜色

表1.setBackground(loc,color);// 给 PRODUC 列添加背景色

script32

3. 运行结果如下图所示。

script33