假定有一张用户可以选择发货月份的报表。发货月份为一系列的值直到当前月。用户经常要选择上一个月以查看上一个月的数据,所以他们希望可以设置提示的默认值为上一个月。
准备工作…
任意创建一张包含Shipment Month Key字段的报表,定义detail filter为:
[Shipment Month Key]=? ShipmentMonthKey?
添加一个prompt page,并在此page上添加一个使用ShipmentMonthKey参数的prompt。
如何实施…
1. 选中prompt,并定义其排序,使得Shipment Month Key以降序显示。
2. 按照假定,我们知道MonthKey为直到当前月的数值,并已经降序排列。现在我们开发代码默认地选择选择prompt下拉框的第二个值。
3. 在Shipment Month prompt前添加一个HTML项目,并定义为:
<span id = ‘A1’>
4. 在Shipment Month prompt后添加一个HTML项目,并定义为:
5. 添加另外一个HTML项目到prompt page的页脚,在Finish按钮之后。并定义其代码为:
<script>
var theSpan = document.getElementById("A1");
var a = theSpan.getElementsByTagName("select");
for( var i = a.length-1; i >= 0; i-- )
{ var prompts = a[i];
if( prompts.id.match(/PRMT_SV_/))
{ prompts.selectedIndex = 3; }
canSubmitPrompt();
}
</script>
6. 运行报表并测试。
工作原理…
此处使用的逻辑是先降序排列Month,然后再下拉列表中从上之下选择第二个选项。因为数据库中提供的数据直到本月,所以从上之下选择的第二个值即为上月的。
Report Studio页面就是一个HTML页面。因而在页面中使用的元素就可以使用HTML提供的标准控制方法实现控制。我们可以在HTML项目中编辑代码实现大部分的HTML功能。
如果我们在HTML项目中嵌入JavaScript代码,它会在报表页面载入是自动执行。
此处,我们使用在prompt外套上一个span标签的方式来缩小JavaScript搜索范围。首先通过使用getElementById()方法获取span标签,然后通过getElementsByTagName()方法,获取span标签内所有标签为select的子对象。接着,使用了一个循环逐个获取span标签内的使用select标签的对象。最后,使用selectIndex的方法,选择prompt的第三个对象。
这里,我们还可以使用
getFormWarpRequest()._oLstChoicesPromptName.options[3].selected = true;
的方法俘获对象。这里,我们先要在属性栏中为prompt定义一个名称。
请体会这两种方法的不同之处,并弄明白循环在此处的作用。