Creación de Modulos
Para iniciar vamos a crear un módulo para Tryton llamado HelloWorld, inicialmente solo va a tener un enlace en el menú principal para luego adicionarle algunas otras cosas. Se puede descar este módulo desde acá: helloWorld.tar.gz
Creación de HelloWorld
Cree una carpeta llamada hello en la carpeta modules de trytond
cd /usr/local/tryton/trytond/trytond/modules/ mkdir hello
Dentro de allí se pondrá un archivo llamado _ _init_ _.py el cual tendrá los enlaces .py de nuestro módulo para ello poner en dicho archivo:
from hello import *
Se crea el archivo llamado _ _tryton_ _.py que tendrá la información:
{
'name' : 'Hello World',
'version' : '0.0.1',
'author' : 'nickname',
'email': 'correo@example.com',
'website': 'http://www.tryton.org/',
'description': 'Hello World con menus',
'depends' : [
'ir',
],
'xml' : [
'hello.xml',
],
'translation': [
],
}Adicionamos el archivo hello.py
from trytond.model import ModelView, ModelSQL, fields
class Hello(ModelSQL, ModelView):
'HelloWorld'
_name = 'hello.hello'
_description = __doc__
Hello()y por último en el archivo hello.xml colocamos:
<?xml version="1.0"?>
<tryton>
<data>
<menuitem name="Hello World" id="menu_hello_world" sequence="10" icon="tryton-users"/>
</data>
</tryton>Con esto ya tenemos un primer módulo para poder importar, donde se muestra un menú inicial sin ninguna otra información.
Adición de un modelo y vistas a HelloWorld
Luego vamos a colocar un modelo y dos vistas para poder realizar algunas otras cosas al módulo. Para ello:
Editamos el archivo hello.py y adicionaremos dos campos a la clase Hello:
name = fields.Char('Nombre')
saludo = fields.Char('Saludo')con ello nuestro archivo quedará
from trytond.model import ModelView, ModelSQL, fields
class Hello(ModelSQL, ModelView):
'HelloWorld'
_name = 'hello.hello'
_description = __doc__
name = fields.Char('Nombre')
saludo = fields.Char('Saludo')
Hello()Esto significará que se crearán dos campos en la base de datos, ambos de tipo Varchar o string.
Luego se edita el archivo hello.xml donde colocaremos los siguientes fragmentos, la explicación se muestra a continación, para mayor información revise la documentación de tryton la sección de Views:
Se adiciona la especificación para un modelo hello.hello, además se dice que la vista es de tipo tree y se mostrarán dos campos: nombre y saludo
<!-- Vista para el Arbol del saludo-->
<record model="ir.ui.view" id="hello_view_tree">
<field name="model">hello.hello</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<![CDATA[
<tree string="Hello World">
<field name="nombre" select="1"/>
<field name="saludo" select="1"/>
</tree>
]]>
</field>
</record>Se especifica una vista de tipo form con 2 labels y 2 fields para el modelo hello.hello
<record model="ir.ui.view" id="hello_view_form">
<field name="model">hello.hello</field>
<field name="type">form</field>
<field name="arch" type="xml">
<![CDATA[
<form string="Hello">
<label name="nombre"/>
<field name="nombre"/>
<label name="saludo"/>
<field name="saludo"/>
</form>
]]>
</field>
</record>Se adiciona el evento para el menú Hello World es importante tener en cuenta el id
<!-- Vista para el menú principal y el evento -->
<record model="ir.action.act_window" id="act_hello_world_form">
<field name="name">Hello World</field>
<field name="res_model">hello.hello</field>
<field name="view_type">form</field>
</record>Con el id del evento para el menú y las dos vistas definidas arriba se adicionan dos fragmentos en los cuales se enlace el id de la ventana y la vista a donde se dirigirá, el campo view es el que indica a que vista se irá y el campo act_windows denota a que evento reaccionará la vista.
<!-- Vista que conecta el form del arbol con la especificación-->
<record model="ir.action.act_window.view" id="act_hello_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="hello_view_tree"/>
<field name="act_window" ref="act_hello_world_form"/>
</record>
<!-- Vista para la edición o el Form de hello-->
<record model="ir.action.act_window.view" id="act_hello_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="hello_view_form"/>
<field name="act_window" ref="act_hello_world_form"/>
</record>
Toda la trazabilidad de la aplicación se indica con el id de cada uno de los record del XML esto efectuará que sea reconocido para todo paso de cualquier evento y también dependencias o herencias.
Por último se adiciona un fragmento adicional para enlazar las vistas anteriores al menú:
<menuitem parent="menu_hello_world" sequence="1"
id="menu_hello_world_form" icon="tryton-list" action="act_hello_world_form"/>
Colcar un Menú de HelloWorld en el menú de administración
Para colocar un enlace en el menú de Administración basta con poner un menutem que tendra como parent ir.menu_administration para ello colocar:
<menuitem parent="ir.menu_administration" action="act_hello_admin_form"
id="menu_admin_hello_form"/>Luego de ello se adiciona de la misma forma las vistas y las acciones de act_hello_admin_form
<record model="ir.action.act_window" id="act_hello_admin_form">
<field name="name">Hello Admin</field>
<field name="res_model">hello.hello</field>
<field name="view_type">form</field>
</record>
<record model="ir.action.act_window.view" id="act_hello_admin_form_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="hello_view_tree"/>
<field name="act_window" ref="act_hello_admin_form"/>
</record>
<record model="ir.action.act_window.view" id="act_hello_admin_form_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="hello_view_form"/>
<field name="act_window" ref="act_hello_admin_form"/>
</record>Esto indicará que se colocará en la administración las mismas vistas que se habían creado para el usuario, si se desea se pueden cambiar a alguna otra vista, o reportes según sea el caso.