Jam.py documentation

Server side programmingΒΆ

In most cases, the client sends a request to the server when following methods of an item are executed:

In this case the client sends to the server the ID of the item’s task, the ID item, the type of the request and its parameters.

The server on receiving the request, based on passed IDs, finds the task (it can be Project task or Application builder task) and the item on the server, executes the corresponing method with passed parameters and returns the result of the execution to the client. The server method can trigger events that can modify its default behavior.

Every item of the task tree have the environ and session attributes that store context of the current request.

The most common server events are:

Event Description
on_created The event is triggered by the task when it has just been created by the server application. It can be used to initialize the project.
on_apply The event is triggered when the apply method of the item is called on the client or the server
on_open The event is triggered when the open method of the item is called on the client or the server
on_generate The event is triggered when the print method of a report is called on the client.

Note

Please do always remember that events triggered by server methods can be executed in parallel threads or processes. Do be very carefull when modifying the attributes of the items of the tasks tree.

You can use the copy method to create a copy of an item. This copy is an exact copy of an item at the time of creating of the task tree. It is not added to the task tree and will be destroyed by Python garbage collector when no longer needed.

Example:

def on_generate(report):
    cust = report.task.customers.copy()
    cust.open()
    report.print_band('title')
    for c in cust:
        firstname = c.firstname.display_text
        lastname = c.lastname.display_text
        company = c.company.display_text
        country = c.country.display_text
        address = c.address.display_text
        phone = c.phone.display_text
        email = c.email.display_text
        report.print_band('detail', locals())