domain: server
language: python
class Item class
Call open
to generate and execute a SELECT SQL query to the item database
table for obtaining a dataset.
The method initializes the item
fields,
formulates parameters of a request, and triggers the
on_before_open
event handler if one is defined for the item.
If there is a
on_open
event handler defined for the item, open
executes this event handler and
assigns a dataset to the result, returned by it,
otherwise generates a SELECT SQL query, based on parameters of the request,
executes this query and assigns the result of the execution to the dataset
After that it sets
active
to true, the
item_state
to browse mode, goes to the first record of the dataset, triggers
on_after_open
, if it is defined for the item.
You can pass options
dictionary to specify parameters of the request in the same
form as for the
open
method on the client:
invoices.open({
'fields': ['customer', 'invoicedate', 'total'],
'where': {customer: customer_id, invoicedate__ge: date1, invoicedate__le: date2},
'order_by': ['invoicedate']
})
or pass the keyworded arguments:
invoices.open(
fields=['customer', 'invoicedate', 'total'],
where={customer: customer_id, invoicedate__ge: date1, invoicedate__le: date2},
order_by=['invoicedate']
)
expanded
- if the value of this parameter is true, the SELECT query will
have JOIN clauses to get lookup values of the
lookup fields
, otherwise there will be no lookup values. The default value if true
.
fields
- use this parameter to specify the WHERE clause of the SELECT
query. This parameter is a list of field names. If it is omitted, the fields
defined by the
set_fields
method will be used. If the
set_fields
method was not called before the open
method execution, all available fields
will be used.
where
- use this parameter to specify how records will be filtered in the
SQL query. This parameter is a dictionary, whose keys are
field names, that are followed, after double underscore, by a filtering symbols
(see
Filtering records
). If this parameter is omitted, values
defined by the
set_where
method will be used. If the
set_where
method was not called before the open
method execution, and where
parameter is omitted, then the values of
filters
defined for the item will be used to filter records.
order_by
- use order_by
to specify sort order of the records. This
parameter is a list of field names. If there is a sign ‘-‘ before the field
name, then on this field records will be sorted in decreasing order. If this
parameter is omitted, a list defined by the
set_order_by
method will be used.
offset
- use offset
to specify the offset of the first row to get.
limit
- use limit
to limit the output of a SQL query to the first
so-many rows.
funcs
- this parameter can be a a dictionary, whose keys are
a field names and values are function names that will be applied to the fields
in the SELECT Query
group_by
- use group_by
to specify fields to group the result of the
query by. This parameter must be a list of field names.
open_empty
- if this parameter is set to true
, the application does
not send a request to the server but just initializes an empty dataset.
The default value if false
.
params
- use the parameter to pass some user defined options to be used in
the
on_open
event handler. This parameter must be an object of key-value pairs
safe
- if set to True
the method checks if the user that called the
method has a right to view the item’s data and, if not, raises an exception.
The default value is False
.
See
Roles
In this example the parameters of the request are a dictionary:
import datetime
def get_sales(item):
date1 = datetime.datetime.now() - datetime.timedelta(days=3*365)
date2 = datetime.datetime.now()
invoices = item.task.invoices.copy()
invoices.open({
'fields': ['customer', 'date', 'total'],
'where': {'date__ge': date1, 'date__le': date2},
'order_by': ['customer', 'date']
})
Below the parameters are passed as a keyworded list:
import datetime
def get_sales(item):
date1 = datetime.datetime.now() - datetime.timedelta(days=3*365)
date2 = datetime.datetime.now()
invoices = item.task.invoices.copy()
invoices.open(
fields=['customer', 'date', 'total'],
where={'date__ge': date1, 'date__le': date2},
order_by=['customer', 'date']
)
The same result can be achieved by using set_fields, set_where, set_order_by methods:
import datetime
def get_sales(item):
date1 = datetime.datetime.now() - datetime.timedelta(days=3*365)
date2 = datetime.datetime.now()
invoices = item.task.invoices.copy()
invoices.set_fields('customer', 'date', 'total')
invoices.set_where(date__ge=date1, date__le=date2);
invoices.set_order_by('customer', 'date');
invoices.open();
import datetime
date1 = datetime.datetime.now() - datetime.timedelta(days=3*365) date2 = datetime.datetime.now() invoices = item.task.invoices.copy()
invoices.set_fields([‘customer’, ‘date’, ‘total’]) invoices.set_where({‘date__ge’: date1, ‘date__le’: date2}); invoices.set_order_by([‘customer’, ‘date’]); invoices.open();
def get_sales(task) {
sales = task.invoices.copy()
sales.open(fields=['customer', 'id', 'total'],
funcs={'id': 'count', 'total': 'sum'},
group_by=['customer'],
order_by=['customer'])