浏览数据集

每个活动数据集都有一个游标或指针,指向数据集中的当前行。 数据集中的当前行是可以通过 editinsertdelete 方法操作的行, 也是其字段值当前显示在表单上数据感知控件中的行。

您可以通过将游标指向移动到不同的行来更改当前行。 下表列出了您可以在应用程序代码中用于移动到不同记录行的方法:

客户端方法

服务器端方法

描述

first

first

将游标移动到实体数据集的第一行。

last

last

将游标移动到实体数据集的最后一行。

next

next

将游标移动到实体数据集中当前行的下一行。

prior

prior

将游标移动到实体数据集中当前行的上一行。

除了这些方法之外,下表描述了两种在遍历数据集记录时能提供有用信息的方法:

客户端方法

服务器端方法

描述

bof

bof

如果该方法返回 true,则游标位于数据集的第一行;否则,不确定游标是否位于数据集的第一行。

eof

eof

如果该方法返回 true,则游标位于数据集的最后一行;否则,不确定游标是否位于数据集的最后一行。

每次游标在数据集中移动到另一条记录时,都会触发以下事件:

客户端事件

服务器端事件

描述

on_before_scroll

on_before_scroll

在应用程序显示的记录从一条切换到另一条之前发生。

on_after_scroll

on_after_scroll

在应用程序显示的记录从一条切换到另一条之后发生。

使用这些方法,我们可以浏览数据集。例如,

在客户端:

function get_customers(customers) {
    customers.open();
    while (!customers.eof()) {
        console.log(customers.firstname.value, customers.lastname.value);
        customers.next();
    }
}

在服务器端:

def get_customers(customers):
    customers.open()
    while not customers.eof():
        print customers.firstname.value, customers.lastname.value
        customers.next()

更简洁的浏览数据集方式

客户端上有 each 方法,可用于浏览数据集:

例如:

function get_customers(customers) {
    customers.open();
    customers.each(function(c) {
        if (c.rec_no === 10) {
            return false;
        }
        console.log(c.rec_no, c.firstname.value, c.lastname.value);
    });
}

在服务器端,我们可以通过以下方式遍历数据集行:

def get_customers(customers):
    customers.open()
    for c in customers:
        if c.rec_no == 10:
            break
        print c.firstname.value, c.lastname.value

两个函数都将输出数据集中前 10 条记录的客户姓名。

在这两种情况下,ccustomers 都是指向同一对象的指针。