Árvore de tarefas¶
Todos os objetos do framework representam uma árvore de objetos. Esses objetos são chamados de itens.
Todos os itens da árvore têm uma classe ancestral comum AbstractItem (
referência do cliente
/
referência do servidor
) e atributos comuns:
ID- ID único do item no frameworkowner- pai imediato e proprietário do itemtask- raiz da árvore de tarefasitems- lista de itens filhositem_type- tipo do itemitem_name- o nome do item que será usado no código de programação para acessar o itemitem_caption- o nome do item que aparece para os usuários
Na raiz da árvore está o item de tarefa.
A tarefa contém itens de grupo. Existem três tipos de grupos que têm os
seguintes valores para o atributo item_type:
“journals” - esses grupos contêm itens com
item_type“item”, que podem ter uma tabela de banco de dados associada.“catalogs” - esses grupos também contêm itens que podem ter tabelas de banco de dados associadas, mas podem ser usados para criar detalhes para outros itens (veja Detalhes ).
“reports” - esses grupos contêm relatórios – itens com
item_type“report”, que são usados para criar relatórios.
Pode haver um número ilimitado de grupos. Sugerimos usar nomes lógicos para os grupos, já que o nome é usado no menu suspenso.
Itens que podem ter uma tabela de banco de dados associada podem possuir detalhes, que são usados para armazenar registros pertencentes a um registro mestre.
Por exemplo, a árvore de tarefas do Projeto de demonstração é:
/demo/
catalogs/
customers
tracks/
invoice_table
albums
artists
genres
mail
journals/
invoices/
invoice_table
invoices_client/
invoice_table
details/
invoice_table
reports/
invoice
purchases_report
analytics
system
Na raiz da árvore de tarefas está uma tarefa com o item_name demo. Ela possui
cinco grupos: catalogs, journals, details, reports, analytics
e system. Os grupos catalogs e journals têm item_type “items”. Os itens que eles possuem
são invólucros sobre as tabelas correspondentes do banco de dados. Há um item de detalhe com
item_name invoice_table, que também possui sua própria tabela de banco de dados, e três
relatórios no grupo reports.
O journal invoices possui o detalhe invoice_table, que mantém uma lista de faixas em uma fatura do cliente. Portanto, há três itens com o mesmo nome “invoice_table”: a tabela de detalhes no grupo Details, detalhes para Registro/Invoices e detalhes para Cadastros/Tracks.
Cada item é um atributo de seu proprietário e todos os itens, tabelas e relatórios
também são atributos da tarefa (todos têm um item_name único).
Uma tarefa é um objeto global no cliente. Para acessá-la, basta digitar task
em qualquer lugar no código.
No servidor, a tarefa não é global. O Jam.py é um ambiente orientado a eventos. Cada evento tem como parâmetro o item (ou campo) que disparou o evento. Funções definidas no módulo do servidor de um item que podem ser executadas a partir do módulo cliente usando o método server têm o item correspondente como o primeiro parâmetro também.
Conhecendo um item, podemos acessar qualquer outro item da árvore de tarefas. Por exemplo, para acessar o Cadastro customers, podemos escrever:
def on_apply(item, delta, params):
customers = item.task.catalogs.customers.copy()
ou simplesmente
def on_apply(item, delta, params):
customers = item.task.customers.copy()
A estrutura hierárquica do projeto é uma das bases do princípio DRY (“don’t repeat yourself” – não se repita) do framework.
Por exemplo, alguns métodos dos itens, quando executados, geram eventos sucessivamente para a tarefa, grupo e o item.
Dessa forma, podemos definir um comportamento básico para todos os itens no manipulador de eventos da tarefa, que pode ser expandido no manipulador de eventos do grupo e, finalmente, se necessário, pode ser especificado no manipulador de eventos do próprio item. Para mais detalhes, veja Eventos de formulário
Vídeo¶
O vídeo tutorial Task tree demonstra a árvore de tarefas usando o Projeto de demonstração