open

open(options, callback, async)

使用范围: client

编程语言: javascript

父类: Item 类

描述说明

调用 open 向服务端发送请求以获取实体项的数据集。

open 方法可以有以下参数:

  • options - 一个对象,指定发送到服务端的请求参数

  • callback:如果参数不存在,则同步向服务端发送请求, 否则,异步执行请求,并在收到数据集后执行回调

  • async:如果其值为 true,且缺少 callback 参数,则异步执行请求

参数的顺序无关紧要。

该方法根据 options 初始化实体项的 fields 并制定请求参数, 如果为实体项定义了 on_before_open 事件处理程序,则触发 。

之后,它向服务端发送请求。如果指定了 callback 参数对应的函数, 则异步执行请求,否则同步执行。

服务端在收到请求后,检查服务端上相应的实体项(具有相同 ID 属性的 task 树 中的实体项)是否具有 on_open 事件处理程序。如果有,它执行此事件处理程序并将执行结果返回给客户端;否则,根据请求参数生成 SELECT SQL 查询语句,执行此查询并将结果返回给客户端。

客户端在收到请求结果后,更改其数据集,将 active 设置为 true, 将 item_state 设置为 “浏览” 模式,转到数据集的第一条记录, 触发 on_after_openon_filters_applied 事件处理程序(如果为实体项定义了),并更新控件。

然后,如果指定了 callback 参数,则调用对应的函数。

Options

options 对象参数可以具有以下属性:

  • expanded - 如果此属性的值为 true,则在服务端生成的 SELECT 查询语句将具有 JOIN 子句以获取 查找字段 的查找值, 否则不会返回查找值。默认值为 true

  • fields - 使用此参数指定 SELECT 查询的 WHERE 子句。此参数是字段名称列表。 如果省略,则使用 set_fields 方法定义的字段。 如果在 open 方法执行之前未调用 set_fields 方法, 则使用开发者创建的所有字段。

  • where - 使用此参数指定如何在 SQL 查询中过滤记录。此参数是 “键值对” 对象, 其中键是字段名称,后跟双下划线,然后是过滤符号 (请参阅 过滤记录 )。 如果省略,则使用 set_where 方法定义的值。 如果在 open 方法执行之前未调用 set_where 方法, 且省略了 where 参数,则使用为项目定义的 过滤器 的值来过滤记录。

  • order_by - 使用 order_by 指定记录的排序顺序。此参数是字段名称列表。 如果字段名称前有 '-' 符号,则在此字段上按降序排序记录。 如果省略,则使用 set_order_by 方法定义的列表。

  • offset - 使用 offset 指定要返回的第一行记录的偏移量。

  • limit - 使用 limit 限制 SQL 查询语句的输出 “前几行” 。

  • funcs - 此参数可以是 “键值对” 对象,其中键是字段名称,值是将在 SELECT 查询中应用于字段的函数名称。

  • group_by - 使用 group_by 指定用于对查询结果进行分组的字段。此参数必须是字段名称列表。

  • open_empty - 如果此参数设置为 true,应用程序不会向服务端发送请求,而是仅仅初始化一个空的数据集。默认值为 false

  • params - 使用此参数传递一些用户定义的选项,以在服务端的 on_open 事件处理程序中使用。 此参数必须是 “键值对” 对象。

备注

当实体项的 paginate 属性设置为 true 且通过 create_table 方法创建表时, limitoffset 参数由表根据其行数和当前页面在内部设置。

Examples

function get_customer_sales(task, customer_id) {
    var date1 = new Date(new Date().setYear(new Date().getFullYear() - 5)),
        date2 = new Date(),
        invoices = task.invoices.copy();

    invoices.open({
        fields: ['customer', 'invoicedate', 'total'],
        where: {customer: customer_id, invoicedate__ge: date1, invoicedate__le: date2},
        order_by: ['invoicedate']
    });
}
function get_customer_sales(task, customer_id) {
    var date1 = new Date(new Date().setYear(new Date().getFullYear() - 5)),
        date2 = new Date(),
        invoices = task.invoices.copy();

    invoices.set_fields(['customer', 'invoicedate', 'total']);
    invoices.set_where({customer: customer_id, invoicedate__ge: date1, invoicedate__le: date2});
    invoices.set_order_by(['invoicedate']);
    invoices.open();
}
function get_sales(task) {
    var sales = task.invoices.copy();

    sales.open({
        fields: ['customer', 'id', 'total'],
        funcs: {'id': 'count', 'total': 'sum'},
        group_by: ['customer'],
        order_by: ['customer']
    });
}