Á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 framework

  • owner - pai imediato e proprietário do item

  • task - raiz da árvore de tarefas

  • items - lista de itens filhos

  • item_type - tipo do item

  • item_name - o nome do item que será usado no código de programação para acessar o item

  • item_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