DAM M10 T03 PDF
DAM M10 T03 PDF
DAM M10 T03 PDF
R Sengines”
VE
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Además del trabajo diario de los usuarios en un ERP, muchas veces se hace necesario
acceder a la base de datos mediante programas terceros, para generar informes o cuadros
F P
de mando. Se hace imprescindible, por lo tanto, conocer el Sistema Gestor de Bases de
Datos (SGBD) que utiliza nuestro ERP. También será primordial que estos accesos estén
I A
controlados, de forma que los accesos sean sólo en modo consulta. Manipular una base de
datos sin un extenso conocimiento puede ser letal para el ERP.
N K
LI
N O
U M
AL
L E
IB
I M
P R
IM
N
I Ó
R S
V E
2
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Odoo no tiene un diseño de la base de datos a priori. La base de datos de una empresa es
el resultado del mapeado del diseño de clases del ERP hacia el SGBD Odoo, que será el que
proporcionará la persistencia necesaria para los objetos.
En Odoo el modelo de datos se manipula y se describe por medio de las clases y los objetos
definidos con el lenguaje de programación Python
Odoo no tiene ningún diseño entidad-relación sobre la base de datos de la empresa.
F P
Tampoco facilita ningún modelo relacional. Sin embargo, si nos interesa un modelo
I A
dichos modelos a partir de los datos implementados en PostgreSQL.
N K
relacional, tenemos a nuestra disposición herramientas que nos permitirán construir
LI
A continuación se puede encontrar un video con la instalación de los programas
DbVisualizer y pgAdmin3. El primero nos permitirá ver las relaciones existentes entre las
O
tablas de la base de datos de Odoo, y el segundo gestionar totalmente la base de datos.
N
U M
AL
L E
I B
I M
P R
IM
N
I Ó
R S
VE
Video 1: DAM_M10_07_pgadmin_dbvisualizer
3
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
P R
IM
N
I Ó
R S Figura 2: URL en modo depuración
VE Una vez activado, sólo es necesario poner el ratón sobre la etiqueta de un campo para ver
las propiedades del objeto. Vamos a probarlo en el módulo de compras, en la sección de
órdenes de compra.
Para la etiqueta “Fecha de pedido”, vemos que se trata del campo date_order del objeto
purchase.order. Por tanto, si necesitamos efectuar una consulta sobre la base de datos,
accediendo a la fecha de pedido hemos de ir al campo date_order de la tabla
purchase_order.
4
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
F P
I A
N K
Figura 3: Etiqueta “fecha de pedido” LI
N O
Para la etiqueta “Proveedor” tenemos más información. Se trata del campo relacional
U M
parter_id del objeto purchase.order, que hace referencia a res.partner. Con esta
información, cuando necesitemos hacer una consulta en la BD, para acceder al proveedor
AL
de la orden de compra, sabemos que tendremos que ir al campo partner_id de la tabla
purchase_order, y a través de este campo establecer un join con la clave primaria de la
tabla res_partner.
L E
I B
I M
P R
IM
N
I Ó
R S
VE Figura 4: Etiqueta "pedido"
5
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Los nombres de las clases de Python siempre se ponen en letras minúsculas, usando el
guión bajo para separar palabras. Se sigue la nomenclatura:
nombre_del_módulo.nombre1.nombre2.nombre3…
El punto se usa para indicar una orden de jerarquía
Cada miembro de una clase de Python de Odoo que sea persistente se mapea con un
F P
atributo en la correspondiente tabla de PostreSQL con el mismo nombre. Por ejemplo:
I A
La clase Python sale.order describe las cabeceras de los pedidos de venta. Su
N K
LI
correspondiente tabla en la base de datos es sale_order.
N O
Figura 5: Clase Python sale.order
U M
AL
L E
I B
I M
P R
IM
N Figura 6: Tabla sale_order en la bbdd
I Ó
R S
De la misma manera, la clase sale.order.line describe las líneas de los pedidos de venta. Su
correspondiente tabla es sale_order_line.
VE
Figura 7: Clase Python clase.order.line
6
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
F P
IA
N K
LI
Figura 8: Tabla clase_order_line en la bbdd
U M
AL
Figura 9: Atributo date_order de la clase Python sale.order
L E
I B
I M
P R
IM
N
I Ó
R S
VE Figura 10: Columna date_order en la bbdd
7
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
La base de datos de un ERP se utiliza para introducir información, pero también para
consultarla y explotarla. Una empresa puede tener trabajadores expertos en realizar
consultas a la base de datos mediante herramientas gráficas o incluso ejecutar SQL desde
la consola de acceso. F P
I A
Si tenemos esta situación, tendremos que facilitar el acceso a los profesionales a la base de
K
datos, pero con sus correspondientes privilegios de acceso. Sólo accederán en modo
N
LI
consulta, y a aquellos objetos que les correspondan.
N O
U M
AL
L E
I B
I M
P R
IM
N
I Ó
R S
V E
8
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Primero de todo, es importante reseñar que los usuarios de PostgreSQL no tienen relación
con los usuarios de Odoo. Todos los accesos de Odoo a la base de datos los hará siempre
desde el usuario que se creó en la instalación. Todos los usuarios que creemos en
PostgreSQL a partir de ahora son exclusivos de PostgreSQL. Para poder crear usuarios
usaremos la herramienta de administración de PostgreSQL (pgAdmin III).
F P
I A
N K
LI
N O
M
Hemos de conectarnos con un usuario que tenga el privilegio de creación de usuarios (rol
U
AL
CREATEROLE). Podemos utilizar el superusuario postgres, que se crea por defecto al
instalar PostgreSQL. En la siguiente figura tenemos la pantalla de pgAdmin III para crear un
nuevo usuario: botón secundario del ratón sobre el nodo Login Roles del Explorador de
L E
Objetos y seleccionamos la opción “New Login Role”.
Figura 11: pgAdmin3
I B
I M
P R
IM
N
I Ó
R S
VE
9
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
También pueden crearse grupos, que agrupen usuarios con los mismos privilegios. Son una
herramienta muy práctica y sencilla de crear. Se crean mediante “Group Roles”.
F P
I A
N K
LI
Figura 13: Nuevo grupo
N O
Para asignar un usuario a un grupo, accedemos a la pestaña “Role membership” y
seleccionamos el grupo deseado.
U M
AL
L E
I B
Figura 14: Asignación de usuario a grupo
I M
P R
IM
N
I Ó
R S
VE
10
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
• Crear un grupo.
• Asociar los usuarios deseados al grupo.
• Conceder privilegios a los grupos.
La asignación de privilegios la hacemos sobre cada objeto (base de datos, esquema, tabla o
incluso columna), pudiendo hacerlo vía pgAdmin o mediante la consola PSQL. Para dar F P
privilegios a un objeto determinado, nos situamos sobre el nombre del objeto, dentro del
IA
Explorador de Objetos, editamos sus propiedades (botón secundario del ratón) y vamos a
la pestaña privilegios.
N K
LI
N O
U M
AL
L E
IB
I M
P R
IM
N
I Ó
R S
V E Figura 15: Asignación de privilegios al grupo "consultas_odoo_ventas"
En la figura anterior observamos la limitación para conceder privilegios. pgAdmin sólo nos
ofrece asignar privilegios mediante la interfaz gráfica a los grupos, y no a los usuarios
individuales. Por tanto si queremos asignar privilegios directamente a un usuario (Login
Role) tenemos que usar la instrucción grant de SQL desde la consola textual PSQL.
11
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
F P
IA
N K
LI
Figura 16: Asignación de privilegios al usuario "jefe ventas" mediante la consola PSQL
N O
M
Para ver los privilegios de acceso de un determinado objeto deberemos clicar en él, y en la
U
AL
ventana de propiedades revisar la fila ACL (Access control list). Podemos encontrar varios
casos:
L E
Línea ACL vacía. Cualquier usuario tendrá acceso a este objeto de la base de datos.
I B
I M
P R
IM
N
I Ó
R S
VE Figura 17: ACL de la tabla "account_account"
Línea ACL con el contenido {}. Ningún usuario tendrá acceso a este objeto, excepto los
marcados como “superusuario”.
12
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
F P
IA
Figura 18: ACL de la tabla "account_analytic_tag_account_invoice_line_ref"
N K
Línea ACL que contiene nombres/grupos de usuario. Nos marcará los derechos del usuario
y el usuario que los provee. LI
N O
U M
AL
L E
I B
Figura 19: ACL de la tabla sale_order
I M
Como podemos ver, el usuario odoo tiene permisos totales para la tabla, mientras que el
P R
grupo consultas_odoo_ventas solamente puede hacer select. Hemos conseguido esto
editando los privilegios del objeto mediante esta ventana.
IM
N
I Ó
R S
VE
13
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Un usuario, por pertenecer al rol público, tiene acceso UC sobre el esquema público de la
base de datos, esto implica lo siguiente:
• Puede ver la relación (nombres) de todos los objetos que existen en el esquema:
vista, tablas…
• Puede ver la descripción de cualquier objeto.
• Puede crear nuevos objetos dentro del esquema.
•
F P
No puede acceder a los contenidos de las tablas ni de las vistas si el propietario no
le concede el acceso.
I A
K
Si queremos que nuevos usuarios conecten con la base de datos y no nos interesa
N
LI
mantener esta situación procederemos así:
• Definimos el valor de la ACL de la base de datos, indicando los usuarios a los que se
•
le permite la conexión.
N O
Modificamos el valor de la propiedad ACL del esquema público, eliminando a
U M
asignación de privilegios al rol public y asignando solo el uso (usage) del esquema
público a los usuarios o roles correspondientes. Si ejecutamos esto mientras que el
AL
servidor Odoo está en ejecución, puede que este no se pueda conectar con la base
de datos hasta que se reinicie.
• E
Asignamos los privilegios, usualmente de lectura, a los usuarios o roles
L
correspondientes sobre los objetos que nos interese.
IB
I M
P R
IM
N
I Ó
R S
VE
14
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
F P
I A
N K
LI
N O
U M
AL
L E
IB
I M
P R
IM
N Vídeo: DAM_M10_08_adm_bbdd
I Ó
R S
VE
15
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
F P
I A
N K
LI
N O
U M
AL
L E
I B
I M
P R
IM
N
I Ó
R S
V E Video: DAM_M10_09_conexion_libreoffice
16
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Recursos y enlaces
• Tutorial de uso de pgAdmin3.
F P
I A
N K
Conceptos clave
LI
N O
• M
El modo desarrollador de Odoo, que permite acceder a muchas funciones
avanzadas. U
•
AL
pgAdmin3. Software que permite conectarse y administrar una base de datos
•
PostgreSQL.
L E
dbVisualizer. Software que nos permite conocer las relaciones entre las tablas de
Odoo.
I B
I M
P R
IM
N
I Ó
R S
VE
17
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
Ponlo en práctica
Actividad 1
18
Desarrollo de Aplicaciones Multiplataforma. Sistemas de gestión empresarial
Tema 3. Organización y consulta de la información
SOLUCIONARIOS
Ponlo en práctica
Actividad 1
F P
I
1. Conecta la base de datos de Odoo tal y como se hace en el vídeo. Piensa en
A
K
posibles consultas para un responsable de la empresa en la que se implantaría.
N
LI
Solución Actividad 1
N O
M
La respuesta a la cuestión es “la solución se encuentra en el vídeo de este mismo tema”.
U
AL
L E
I B
I M
P R
IM
N
I Ó
R S
VE
19
F P
IA
N K
LI
N O
U M
AL
L E
I B
I M
P R
IM
N
I Ó
RS
VE