Serialización de Datos y Datos de Módulos
La mayoría de las configuraciones de Odoo, desde interfaces de usuario hasta reglas de seguridad, son en realidad registros de datos almacenados en tablas internas de Odoo. Los archivos XML y CSV que se encuentran en los módulos no son usados para ejecutar aplicaciones Odoo. Ellos solo son un medio para cargar esas configuraciones a las tablas de la base de datos.
Los módulos pueden también tener datos iniciales y de demostración (accesorios). La serialización de datos permite añadir eso a sus módulos. Adicionalmente, entendiendo los formatos de serialización de datos de Odoo es importante para exportar e importar datos en el contexto de la implementación de un proyecto.
Antes de entrar en casos prácticos, primero explorara el concepto de identificador externo, el cual es la clave a la serialización de datos de Odoo
Gráfico 4.1 - Vista de 'External Identifiers'
Entendiendo los Identificadores Externos
Todos los registros en la base de datos de Odoo tienen un identificador
único, el campo id
Es un número secuencial asignado automáticamente por la base de datos. De cualquier forma, este identificador automático puede ser un desafío al momento de cargar datos interrelacionados: ¿cómo podrá hacer referencia a un registro relacionado si no podrá saber de antemano cual ID de base de datos le será asignado?
La respuesta de Odoo a esto es el identificador externo. Los identificadores externos solucionan este problema asignando identificadores con nombre a los registros de datos que serán cargados. Un identificador con nombre puede ser usado por cualquier otra pieza de dato registrada para referenciarla luego. Odoo se encargará de traducir estos nombres de identificación a los IDs reales asignados a ellos.
El mecanismo detrás de esto es muy simple: Odoo mantiene una tabla con
el mapeo entre los IDs externos con nombre y sus correspondiente IDs
numéricos en la base de datos. Ese es el modelo ir.model.data
.
Para inspeccionar la existencia de mapeo, diríjase a la sección Técnico en el menú Configuración, y seleccione Secuencias e identificadores haga el item de menú Identificadores externos.
Por ejemplo, si vuelve a visitar la lista de identificadores externos
y filtra por el módulo todo_app
, vera los identificadores
externos creados previamente por el módulo.
Puede notar que los identificadores externos tienen una etiqueta ID
completa. Esta compuesta por el nombre del módulo y el nombre de
identificador unido por un punto, por ejemplo,
todo_app.action_todo_task
.
Debido a que solo es obligatorio que el ID completo sea único, el nombre
del módulo sirve como namespace
para los identificadores. Esto significa
que el mismo identificador puede repetirse en diferentes módulos, y no
tiene que preocuparnos por identificadores en su módulo que
colisionen con identificadores en otros módulos.
Gráfico 4.2 - Detalles del ID 'todo_app.action_todo_task'
Al principio de la lista, puedes ver el ID de
todo_app.action_todo_task
. Esta es la acción del menú que crea
para el módulo, el cual también es referenciado en el elemento de menú
correspondiente. Haciendo clic en él, puede abrir un formulario con sus
detalles: el action_todo_task
en el módulo todo_app
mapea hacia
un ID de un registro específico en el modelo ir.actions.act_window
.
Además de proporcionar una forma de hacer referencia a un registro de una manera fácil a otros registros, los ID externos también permiten evitar la duplicidad de datos en las importaciones repetidas. Si el ID externo esta presente, el registro existente se actualiza, en ves de crear un nuevo registro. Esta es la razón de porque, en las siguientes actualizaciones del módulo, los registros cargados previamente se actualizaran en lugar de duplicarse.
Encontrando los identificadores externos
Cuando prepara archivos de datos para la demostración y configuración del módulo, tiene que mirar frecuentemente la existencia de IDs Externos que se necesitan para realizar las referencias.
Podrá utilizar identificadores externos en el menú mostrado anteriormente, pero el menú de Desarrollo puede proporcionar un método que sea más conveniente. Como recordara en el Capítulo 1, Comenzando con el Desarrollo en Odoo, el menú de Desarrollo es activado en la opción Acerca de Odoo, y entonces, estará disponible en la esquina superior izquierda de la vista del cliente web.
Para buscar el ID externo para un registro de datos, en el mismo formulario correspondiente, seleccione la opción Ver metadatos desde el menú de Desarrollador. Esto mostrará un cuadro de dialogo con el ID de la base de datos registrado y el ID externo (también conocido como ID XML)
Como Ejemplo, para buscar el ID del usuario Demo, podrá navegar hasta la vista de formulario (Configuración > Usuarios ) y seleccionar la opción Ver metadatos, y se mostrará lo siguiente:
Gráfico 4.3 - Ver metadatos del módulo 'res.users'
Para buscar el ID externo de los elementos de vista, como formulario, árbol, buscador, y acción, el menú de Desarrollo es también de ayuda. Para esto, utilice la opción de Obtener Campos de Vista o abra la información para la vista deseada usando la opción Editar , y seleccione la opción Ver metadatos.
Exportar e importar datos
Va a empezar a trabajar en la exportación e importación de datos en Odoo, y desde allí, va a pasar a los detalles técnicos.
Exportando datos
Exportar datos es una característica estándar disponible en cualquier vista de lista. Para usarlo, primero tiene que seleccionar la fila de exportación seleccionando las casillas de verificación correspondiente en el extremo izquierdo, y luego selecciona la opción exportar en el botón "más".
Aquí esta un ejemplo, utilizando las reciente tareas creadas a realizar:
Gráfico 4.4 - Exportando datos del módulo 'To-Do'
La opción exportar le lleva a un dialogo, donde podrá elegir lo que se va a exportar. La opción exportar compatible se asegura de que el archivo exportado se pueda importar de nuevo a Odoo.
El formato de exportación puede ser CSV o Excel. Va a preferir archivos CSV para tener una mejor comprensión del formato de exportación. Continué, eligiendo las columnas que querrá exportar y hacer clic en el botón Exportar a fichero. Esto iniciara la descarga de un archivo con los datos exportados.
Gráfico 4.5 - Asistente para exportar datos del módulo 'To-Do'
Si sigue estas instrucciones y selecciona los campos que se demuestran en la imagen anterior, debe terminar con un archivo de texto CSV similar a este:
"id","name","user_id/id","date_deadline","is_done" "__export__.todo_task_1","Install Odoo","base.user_root","2015-01- 30","True" "__export__.todo_task_2","Create dev database","base.user_root","","False"
Observe que Odoo exporta automáticamente una columna adicional
identificada. Este es un ID externo que se genera automáticamente para
cada registro. Estos identificadores externos generados utilizan
__export__
en lugar de un nombre real de módulo. Nuevos
identificadores solo se asignan a los que no poseen uno asignado, y ya a
partir de allí, se mantienen unidos al mismos registro. Esto significa
que las exportaciones posteriores preservarán los mismos identificadores
externos.
Importar datos
Primero tiene que asegurarse que la función de importar este habilitada. Esto se hace en el menú de Configuración, Configuración > opción de Configuraciones Generales. En Importar/Exportar, asegúrese que la opción Permitir a los usuarios importar datos desde archivos CSV esté habilitada.
Con esta opción habilitada, los puntos de vista de la lista muestran la opción de Importar junto al botón Crear en la parte superior de la lista.
Va a realizar una edición masiva en sus datos de tareas pendientes: se abre en una hoja de calculo o en un editor de texto el archivo CSV que acaba de descargar, a continuación, cambie algunos valores y añada algunas nuevas filas.
Como se mencionó antes,la primera columna de identificación proporciona
un identificador único para cada fila permitiendo registros ya
existentes que se actualizaran en ves de duplicarse cuando importe
los datos de nuevo a Odoo. Para las nuevas filas que podrá añadir al
archivo CSV, el id
se deben dejar en blanco, y se creara un nuevo
registro para ellos.
Después de guardar los cambios en el archivo CSV, haga clic en la opción Importar (junto al botón crear) y se presentara el asistente de importación. Hay que seleccionar la ubicación del archivo CSV en el disco y hacer clic en Validar para comprobar si el formato es correcto. Debido a que en archivo a importar esta basado en una importación de Odoo, es probable que es archivo sea correcto.
Gráfico 4.6 - Importar archivos de datos CSV
Ahora podrá hacer clic en Importar y allí va: sus modificaciones y nuevos registros deberían haberse cargado en Odoo.
Registros relacionados en archivos de datos CSV
En el ejemplo visto anteriormente, el usuario responsable de cada tarea
es un registro relacionado en el modelo de los usuarios, con la relación
many to one - muchos a uno - (o foreign key - clave foránea). El nombre
de la columna para ello fue usuario_id/id
y los valores de los
campos eran identificadores externos para los registros relacionados,
tales como base.user_root
para el usuario administrador.
Las columnas de relación deben tener /id
anexo a su nombre, si se
usan IDs externos, o /.id
, si se usan IDs (numéricos) de base de
datos. Alternativamente, dos puntos (:)
se puede utilizar en lugar
de la barra para el mismo efecto.
Del mismo modo, la relación many to many - muchos a muchos - son
soportables. Un ejemplo de relación many to many es la que existe entre
usuarios y grupos: cada usuario puede estar en muchos grupos, y cada
grupo puede tener muchos usuarios. La columna nombre para este tipo de
campo debería haber añadido un /id
. Los valores de los campos
aceptan una lista separada por comas de Id externos, entre comillas
dobles.
Por ejemplo, los Seguidores de las tareas a realizar es una relación
many-to-many entre Tareas por hacer y Socios. El nombre de la columna
puede ser follower_ids/id
y un valor de campo con dos seguidores
podría ser: "__export__.res_partner_1,__export__.res_partner_2"
Finalmente, las relaciones one to many también se pueden importar a través de CSV. El ejemplo típico de esta relación es un documento "head" con varias "lines".
Podrá ver un ejemplo de tal relación en el modelo de empresa (la vista de formulario esta disponible en el menú configuración): una empresa puede tener varias cuentas bancarias, cada una con sus propios detalles, y cada cuenta bancaria pertenece a (tiene una relación many-to-one con) solo una empresa.
Es posible importar las empresa junto con sus cuentas bancarias en un
solo archivo. Para esto, algunas columnas corresponderán a empresas, y
otras columnas corresponderán a cuentas bancarias detalladas. Los
nombres de columnas de los detalles del banco deben ser precedidos de
los campos con la relación one-to-many que vincula a la empresa con los
bancos; bank_ids
en este caso.
Los primeros datos de la cuenta bancaria van en la misma fila de los datos vinculados de la empresa. Los detalles de la próxima cuenta bancaria van en la siguiente fila, pero solo los datos bancarios de la columna relacionada deben tener valores; La columna de datos de la empresa debe tener esas lineas vacías.
Aquí esta un ejemplo cargando una empresa con datos de tres bancos:
id,name,bank_ids/id,bank_ids/acc_number,bank_ids/state base.main_company,YourCompany,__export__.res_partner_bank_4,123456789,bank ,,__export__.res_partner_bank_5,135792468,bank
,,__export__.res_partner_bank_6,1122334455,bank
Observe que las dos ultimas lineas comienzan con comas: Esto corresponde
a valores en las dos primeras columnas, id
y name
, con respecto
a los datos del encabezado de empresa. Pero las columnas restantes, con
respecto a las cuentas bancarias, tienen valores para el segundo y
tercer registro del banco.
Estos son los elementos esenciales en el trabajo con la exportación e importación en la GUI. Es útil para establecer los datos en nuevas instancias Odoo, o para prepara nuevos archivos de datos que se incluirán en los módulos Odoo.
A continuación va aprender más sobre el uso de los archivos de datos en los módulos.
Datos de los Módulos
Los módulos utilizan archivos de datos para cargar sus configuraciones en la base de datos, los datos iniciales y los datos de demostración. Esto se puede hacer utilizando tanto CSV y archivos XML. Para completar, el formato de archivo YAML también se puede utilizar, pero esto rara vez se utiliza para la carga de datos, por lo tanto no se discutirá.
Los archivos CSV utilizados por módulos son exactamente los mismos que los que ha visto y utilizado para la función de importación. Cuando se usa en módulos, la única restricción adicional es que el nombre del archivo debe coincidir con el nombre del modelo a la que se cargan los datos.
Un ejemplo común es el acceso de seguridad, para cargar en el modelo
ir.model.acess
. Esto se hace generalmente con archivos CSV, y que
debe ser nombrado ir.model.acess.csv
.
Datos de demostración
Los módulos Odoo pueden instalar datos de demostración. Esto es útil
para proporcionar ejemplos de uso para un módulo y conjuntos de datos
para ser utilizados en pruebas. Se considera una buena práctica para los
módulos proporcionar datos de demostración. Los datos de demostración
para un módulo se declara con el atributo demo
del archivo de
manifiesto __openerp__.py
. Al igual que el atributo data
, se
trata de una lista de nombres de archivo con las rutas relativas
correspondientes en el interior del módulo.
Estará agregando los datos de demostración en su módulo
todo_user
. Podrá comenzar con la exportación de algunos datos de
las tareas a realizar, como se explico en la sección anterior. Luego
debe guardar los datos en el directorio todo_user
con el nombre
del archivo todo.task.csv
. Dado que esta información será propiedad
de su módulo, debe editar los valores de id
para reemplazar
el prefijo __export__
en los identificadores con el nombre técnico
del módulo.
Como ejemplo su archivo de datos todo.task.csv
podría tener
este aspecto:
id,name,user_id/id,date_deadline todo_task_a,"Install Odoo","base.user_root","2015-01-30" todo_task_b","Create dev database","base.user_root",""
No hay que olvidar agregar este archivo de datos en el atributo demo
del __openerp__.py
:
'demo': ['todo.task.csv'],
La próxima vez que actualice el módulo, siempre y cuando se haya instalado con los datos de demostración habilitados, se importará el contenido del archivo. Tenga en cuenta que estos datos se reescribirán cada vez que se realiza una actualización del módulo.
Los archivos XML también pueden ser utilizados para los datos de demostración. Sus nombres de archivo no están obligados a coincidir con el modelo a cargar, porque el formato XML es mucho más rico y la información es proporcionada por los elementos XML dentro del archivo.
Va a aprender más sobre lo que los archivos de datos XML le permiten hacer y que los archivos CSV no.
Archivos de datos XML
Mientras que los archivos CSV proporcionan un formato simple y compacto para serializar los datos, los archivos XML son más potentes y dan un mayor control sobre el proceso de carga.
Ya ha utilizado los archivos de datos XML en los capítulos anteriores. Los componentes de la interfaz de usuario, tales como vistas y elementos de menú, se encuentran en los registros de datos almacenados en los modelos de sistemas. Los archivos XML en los módulos son un medio utilizado para cargar los registros en el servidor.
Para mostrar esto, va a añadir un segundo archivo de datos para el
módulo todo_user
, llamado todo_data.xml
, con el siguiente
contenido:
<?xml version="1.0"?>
<openerp>
<data>
<!-- Data to load -->
<record model="todo.task" id="todo_task_c">
<field name="name">Reinstall Odoo</field>
<field name="user_id" ref="base.user_root" />
<field name="date_deadline">2015-01-30</field>
</record>
</data>
</openerp>
Este XML es equivalente al archivo de datos CSV que acaba de ver en la sección anterior.
Los archivos de datos XML tienen un elemento <openerp>
que contiene
elementos <data>
, dentro de los cuales podrá tener tienen varios
elementos <record>
, correspondientes a las filas de datos CSV.
Un elemento <record>
tiene dos atributos obligatorios, model
y
id
(el identificador externo para el registro), y contiene una
etiqueta <field>
para cada campo de texto.
Tenga en cuenta que la notación con barras en los nombres de campo no
está disponible aquí: no podrá usar <field name="user_id/id">
. En
cambio, el atributo especial ref
se utiliza para hacer referencia a
los identificadores externos. Se hablara de los valores para el campo
relacional "a muchos" en un momento.
El atributo de datos noupdate
Cuando se repite la carga de datos, los registros existentes de la ejecución anterior se reescriben.
Esto es importante a tener en cuenta: significa que la actualización de un módulo se sobrepone a los cambios manuales que podrían haber sido realizados en los datos. Cabe destacar que, si las vistas fueron modificadas con personalizaciones, esos cambios se perderán con la próxima actualización del módulo. El procedimiento correcto es crear vistas heredadas de los cambios que necesita, como se explica en el Capítulo 3.
Este comportamiento de sobrescribir es el valor predeterminado, pero se
puede cambiar, por lo que cuando un registro ya creado se carga de nuevo
no se realiza ningún cambio al mismo. Esto se hace añadiendo al elemento
<data>
un atributo noupdate="1"
. Con esto, sus registros se
crearán la primera vez que se cargan, y en mejoras de módulos
subsiguientes no se hará nada para ellos.
Esto permite que las personalizaciones realizadas manualmente estén a salvo de las actualizaciones del módulo. Se utiliza a menudo con las reglas de acceso de registro, lo que les permite adaptarse a las necesidades específicas de aplicación.
También es posible tener más de una sección <data>
en el mismo
archivo XML. Podrá tomar ventaja de esto para tener un conjunto de
datos con noupdate="1"
y otro con noupdate="0"
.
La etiqueta noupdate
se almacena en la información de Identificador
Externo para cada registro. Es posible editar la directamente utilizando
el formulario de Identificador Externo disponible en el menú Técnico >
opción Secuencias e identificadores > Identificadores externos, con la
casilla de verificación No actualizable.
Truco
El atributo noupdate
es difícil de manejar cuando se esta
desarrollando el módulo, ya que los cambios hechos a los datos más tarde
serán ignorados y Odoo no recogerá las modificaciones. Una solución es
mantener noupdate="0"
durante el desarrollo y sólo ponerlo a * 1
una vez terminado.
Definición de registros en XML
Cada elemento <record>
tiene dos atributos básicos, id
y
model
, y contiene elementos <field>
de la asignación de valores
a cada columna. Como se mencionó antes, el atributo id
corresponde
ID Externo del registro y el model
al el modelo de destino donde se
escribirá el registro. Los elementos <field>
tienen disponibles
algunas maneras diferentes para asignar valores. Vea en detalle.
Configuración de los valores de campo
El elemento <record>
define un registro de datos, y contiene
elementos para establecer los valores de cada campo.
El atributo name
del elemento field
identifica el campo a ser
escrito.
El valor a escribir es el contenido del elemento: el texto entre la
etiqueta de apertura y la etiqueta de cierre del elemento field
. En
general, esto también es adecuado para establecer los valores que no son
texto: para Booleanos, 0
y 1
o valores False
y True
;
para fechas, fechas y horas, cadenas de texto como YYYY-MM-DD
y
YYYY-MM-DD HH:MI:SS
, se realizará una correcta conversión.
Ajuste de valores utilizando expresiones
Una alternativa más avanzada para definir un valor de field
es
utilizar el atributo eval
. Este evalúa una expresión Python y asigna
el valor resultante al campo.
La expresión se evalúa en un contexto que, además de Python empotrado, también tiene algunos identificadores adicionales disponibles. Va a echar un vistazo a ellos.
Para manejar fechas, los siguientes módulos están disponibles:
time
, datetime
, timedelta
y relativedelta
. Ellos permiten el
cálculo de los valores de fecha, algo que se utiliza con frecuencia en
los datos de demostración (y prueba). Por ejemplo, para establecer un
valor de ayer se usaría:
<field name="expiration_date" eval="(datetime.now()+timedelta(-1)).strftime('%Y-%m-%d')"/>
También esta disponible en el contexto de evaluación la función
ref()
, que se utiliza para traducir un ID Externo al ID de base de
datos correspondiente. Esto puede ser usado para establecer los valores
para los campos relacionales. A modo de ejemplo, lo ha usado antes
para ajustar el valor para el user_id
:
<field name="user_id" eval="ref('base.group_user')" />
El contexto de evaluación también tiene una referencia, disponible para
el Modelo actual, escrita a través de obj
. Se puede utilizar junto
con ref()
para acceder a los valores de otros registros. He aquí un
ejemplo del módulo de venta:
<value model="sale.order" eval="obj(ref('test_order_1')).amount_total" />
Configuración de los valores de los campos de relación
Acaba de ver cómo establecer un valor en un campo de relación
muchos-a-uno, como user_id
, usando el atributo eval
con una
función ref()
. Pero hay una manera más sencilla.
El elemento <field>
también tiene un atributo ref
para
establecer el valor de campo many-to-one utilizando un ID Externo.
Usándolo, podrá establecer el valor de user_id
con solo:
<field name="user_id" ref="base.group_user" />
Para campos one-to-many y many-to-many, se espera una lista de ID relacionados, por lo que es necesaria una sintaxis diferente, y Odoo proporciona una sintaxis especial para escribir sobre este tipo de campos.
El siguiente ejemplo, tomado de la aplicación de Flota, sustituye a la
lista de registros relacionados de un campo tag_ids
:
<field name="tag_ids" eval="[(6,0,[ref('vehicle_tag_leasing'),ref('fleet.vehicle_tag_compact'),ref('fleet.vehicle_tag_senior')] )]" />
Para escribir sobre un campo a-muchos se utiliza una lista de tripletas. Cada tripleta es un comando de escritura que hace cosas diferentes según el código utilizado:
(0,_,{'field':value})
: Esto crea un nuevo registro y lo vincula a ésta.(1,id,{'field':value})
: Esto actualiza los valores en un registro ya vinculados.(2,id,_)
: Esto desvincula y elimina un registro relacionado.(3,id,_)
: Esto desvincula pero no elimina un registro relacionado.(4,id,_)
: Esto vincula un registro ya existente.(5,_,_)
: Esto desvincula pero no elimina todos los registros vinculados.(6,_,[ids])
: Esto reemplaza la lista de registros vinculados con la lista proporcionada.
El símbolo guión bajo utilizado anteriormente representa valores
irrelevantes, por lo general lleno de 0 o False
.
Atajos para modelos de uso frecuente
Si se remonta al Capítulo 2,
La construcción de su primera aplicación Odoo, podrá encontrar en los
archivos XML otros elementos además de <record>
, como <act_window>
y <menuitem>
.
Estos son los atajos convenientes para los modelos de uso frecuente, que
también se pueden cargar utilizando elemento <record>
regulares.
Estos cargan datos en los modelos base y dan apoyo a la interfaz de
usuario, se estudiarán con detalle más adelante, en el capítulo 6,
Vistas - Diseño de la interfaz de usuario.
Como referencia, de manera que podrá comprender mejor los archivos XML que podrá encontrar en los módulos existentes, los siguientes elementos de acceso directo están disponibles con los modelos correspondientes donde cargan los datos:
<act_window>
: Este es el modelo de acciones de ventanair.actions.act_window
.<menuitem>
: Este es el modelo de elementos de menúir.ui.menu
.<report>
: Este es el modelo de acciones de reporteir.actions.report.xml
.<template>
: Esto es el modelo de plantillas de vistas QWeb almacenadas enir.ui.view
.<url>
: Este es el modelo de acciones de URLir.actions.act_url
.
Otras acciones en archivos de datos XML
Hasta ahora ha visto cómo añadir o actualizar datos mediante archivos XML. Pero los archivos XML también permiten realizar otro tipo de acciones, a veces necesarios para configurar los datos. En particular, son capaces de eliminar los datos, ejecutar métodos arbitrarios del modelo, e iniciar la ejecución de eventos de flujo de trabajo.
Eliminación de registros
Para borrar un registro de datos se utiliza el elemento <delete>
,
siempre que sea con un id
o un dominio de búsqueda para encontrar el
registro de destino.
En el capítulo 3, Herencia - Ampliación de aplicaciones existentes,
se tuvo la necesidad de eliminar una regla de registro añadida por la
aplicación de tareas pendientes. En el archivo
todo_user/security/todo_access_rules.xml
se utilizó un elemento
<delete>
, con un dominio de búsqueda para encontrar el registro a
eliminar:
<delete model="ir.rule" search="[('id','=',ref('todo_app.todo_task_user_rule'))]" />
En este caso, el mismo efecto se puede lograr mediante el atributo
id
para identificar el registro a eliminar:
<delete model="ir.rule" id="todo_app.todo_task_user_rule" />
Activación de las funciones y flujos de trabajo
Un archivo XML también puede ejecutar métodos durante su proceso de
carga a través del elemento <function>
. Esto puede ser usado para
establecer datos de demostración y de prueba. Por ejemplo, en el módulo
de miembros se utiliza para crear facturas de demostración de membresía:
<function model="res.partner" name="create_membership_invoice"
eval="(ref('base.res_partner_2'), ref('membership_0'), {'amount':180})" />
Esto llama al método create_membership_invoice()
del modelo
res.partner
. Los argumentos se pasan como una tupla en el atributo
eval
. En este caso tiene una tupla con tres argumentos: el ID de
socio, la identificación de membresía y un diccionario que contiene el
importe de la factura.
Otra forma en que los archivos de datos XML pueden realizar acciones es
mediante la activación de los flujos de trabajo Odoo, a través del
elemento <workflow>
.
Los flujos de trabajo pueden, por ejemplo, cambiar el estado de un pedido de cliente o convertirlo en una factura. He aquí un ejemplo tomado del módulo de venta, la conversión de un proyecto de orden de ventas para el estado confirmado:
<workflow model="sale.order" ref="sale_order_4" action="order_confirm" />
A estas alturas, model
se explica por sí mismo, y ref
identifica
la instancia de flujo de trabajo sobre la cual esta actuando.
action
es la señal del flujo de trabajo enviada a la instancia de
flujo de trabajo.
Resumen
Ha aprendido todo lo necesario sobre la serialización de datos, y ganado una mejor comprensión de los aspectos de XML que vio en los capítulos anteriores.
También paso algún tiempo comprendiendo los identificadores externos, un concepto central para el manejo de datos en general, y para las configuraciones de módulo en particular.
Los archivos de datos XML se explicaron en detalle. Aprendió sobre las distintas opciones disponibles para establecer los valores de los campos y también para realizar acciones como eliminar registros y llamar a métodos de modelo.
Los archivos CSV y las características de importación / exportación de datos también fueron explicadas. Estas son herramientas valiosas para la configuración inicial de Odoo o para la edición masiva de datos.
En el siguiente capítulo se estudiará con detalle cómo construir modelos Odoo y posteriormente obtener más información sobre la construcción de sus interfaces de usuario.