一个用户触手可及的 XPages Web 图表控件(3)
 
- UID
- 1066743
|

一个用户触手可及的 XPages Web 图表控件(3)
在 XPages 中通过 Java API 访问 Domino 视图对象Domino 的 Java API 为用户提供了在 Java 程序中访问 Domino 数据的能力。与 Domino 视图结构和对象相对应,在 Java API 中,定义了视图列、视图行、视图导航指针、文档、视图行集合等对象,也定义了访问这些对象的方法。
一个典型的用户应用是:遍历视图中所有的视图行,读取某个视图列的数据,并进一步分析和操作数据。它的 Java 函数伪代码形式如下:
代码 1. 用 Java API 中访问 Domino 数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| import lotus.domino.*; // 在 Java 中访问 Domino 数据必须包含该包
public void RetrievalViewColumn(Session session,
String dbName, String viewName, String columnIdx){
try {
Database db = session.getDatabase(null, dbName);
View view = db.getView(viewName);
ViewEntryCollection collection= view.getAllEntries();
int idxColumn = Integer.parseInt(columnIdx)-1;
ViewEntry entry = collection.getFirstEntry();
while (entry != null) {
Vector entries = entry.getColumnValues();
String value = entries.elementAt(idxColumn).toString().trim();
( Do something by users … . // 用户在此处加入自己的处理和计算 )
entry = collection.getNextEntry();
}
}catch(Exception e){
return;
}
}
|
现在,通过 Designer 集成环境,用户可以在 Domino 数据库中编写 Java 函数库,在 XPages 页面中,通过编写服务器端 Javascript 脚本,可以调用其中的 Java 函数,从而完成各种数据操作。
假设上述的 Java 函数 RetrievalViewColumn 定义在类 DominoUtil 中,该类放置在 com.ibm.lotus.xpages 包中,该函数的作用是返回某个视图中某列出现最多的值。那么下面 Javascript 函数的作用就是:根据用户传入的视图名称和视图列的序号(从左到右的序号),得到该视图该列中出现最多的值。
代码 2. 服务器端 Javascript1
2
3
4
5
6
7
8
9
10
11
12
13
| function getColumnMostValue(viewName, columnIdx)
{
if(!viewName || viewName=="") return;
//database 和下面的 session 是 Xpages 中的环境变量
var dbName = database.getFilePath();
if(!dbName || dbName=="") return "";
var util:com.ibm.lotus.xpages.DominoUtil = new com.ibm.lotus.xpages.DominoUtil ();
var most = util. RetrievalViewColumn(session, dbName, viewName, columnIdx);
return most;
}
|
接下来,用户需要将上述 Javascript 函数添加到数据库的“服务器端 Javascript 函数库”中,这样就可以在 XPages 页面的某个计算域中调用该函数,得到需要的数据了。
用 Domino 数据构造 Dojo 图表数据得到了 Domino 的数据,下一步就是要将这些数据以 Dojo 图表的形式展现。在 Dojo 中,以 JSON 格式定义各种对象的数据格式和它们的含义。各种 Dojo 图表都有它们对应的 JSON 格式,用户将数据转换成特定的格式,才能被 Dojo 图表对象理解并展现出来。
以 Dojo 的饼图(Pie chart)为例,它的 JSON 字串是一个无序的“多个‘名称 / 值’对”集合,集合中的每个元素代表了饼图的一个扇区,每个扇区中的多个‘名称 / 值’代表了该扇区的属性,如数值、显示文字,鼠标悬浮时的浮动文字等等。下面是一个简单饼图 JSON 字串的例子。它所生成的 Dojo 饼图如图 4 所示。
1
2
| [{y: 5, text: "Valid", tooltip: "Valid is 83%"},{y: 1, text: "Invalid",
tooltip: "Invalid is 16%"}]
|
图 4. 一个 Dojo 饼图和它的 JSON 数据示例 对饼图而言,还有许多可定制的 JSON“名称 / 值”对,感兴趣的用户可以查阅 Dojo 相关的技术文章。由 Domino 数据构造 Dojo 图表数据是数据展现的关键一步,它决定了是否能根据用户需求,合理组织统计数据,最终展现成既符合用户需求又美观方便的图表。其思考的逻辑应该是:
- 根据用户需求,分析饼图所需要获取的数据。
- 根据数据写出 JSON 的格式,并将该格式作为 Java 函数的输出形式。
- 用 Java 和 Javascript 得到满足需求的数据格式。
至此,我们已经介绍了如何在 XPages 页面中通过 Java API 获取 Domino 数据,并转换成 Dojo 图表需要的数据格式。也就是图 2 中数据线路(1)。 |
|
|
|
|
|