Publicidad

lunes, 6 de enero de 2014

Restricciones en OpenERP mediante PostgreSQL

En OpenERP existen 2 Tipos de principales para validar la información que esta introduciendo el usuario contra la contenida en el sistema, ya sea contra la hora del sistema o algún formato necesario para la información, etc., estos tipos de validación serian:
 - Mediante funciones Python: Este tipo de restricción se realiza mediante funciones python.
 - Mediante restricciones de la Base de Datos(SQL Constraint): Este tipo de restricción se define en la clase a la cual se aplicara o la tabla a la cual se estará validando que los datos cumplan con los requisitos que definimos, por ejemplo si queremos que el campo nombre de un producto sea único tendríamos que tener esta restricción en mi clase.
Restricciones con Funciones Python

FORMATO 
Las restricciones se definen mediante el atributo _constraints. Si éste está definido, debe consistir en una lista de tuplas (una tupla por restricción) del tipo:
[(metodo, 'mensaje de error', nombres_de_campos), ...]
 Donde
metodo: Es un método del objeto usado para comprobar la restricción. Este método debe tener la siguiente signatura:
def _nombre_del_metodo_(self, cr, uid, ids): -> True|False
mensaje de error: Es el mensaje de error que se mostrará al usuario si la comprobación falla, por ejemplo "El nombre debe ser unico".
nombres_de_campos: Es la lista de los nombres de los campos que se añadirán al mensaje de error.
Ejemplo:
El siguiente ejemplo valida que en la captura de un registro con una expiración entre 2 fechas que serian Inicio y Fin, la fecha fin no pueda ser menor a la fecha de inicio ya que seria contradictorio en la expiración de un contrato por ejemplo, y la manera de evitar que el usuario realice este tipo de capturas es con la siguiente validación:
 def _check_dates(self, cr, uid, ids, context=None):
  for rec in self.browse(cr,uid,ids):
   date_start = rec.date_start
   date_end = rec.date_end
   if date_start < date_end:
    return True
  return False

 _constraints = [
  (_check_dates, 'Error ! No puedes crear registros en donde la fecha fin sea menor a la fecha inicio del contrato ', ['date_start'])
 ]
 
Restricciones con SQL Constraint
 Otro tipo de restricción que se puede utilizar en nuestro codigo python al momento de programar las validaciones para el usuario es utilizar SQL Constraint, en donde se restringe al usuario al duplicación de registros, por mencionar un ejemplo, este tipo de restricción tiene la signatura:
 _sql_constraints = [
  ('name_uniq', 'unique(name)', message'E nombre del registro debe ser unico!'),
 ]
 En donde:
    • name_uniq : El nombre con el que openerp guardara esta restricción.
    • unique: El atributo que define que la regla para aplicar es que sera único el campo.
    • (name): El nombre del campo a validar en este caso el campo name.
    • message: El mensaje  a mostrar al usuario al cumplirse la restricción.

4 comentarios:

  1. si deseo validar que cmpos sean enteros o numeros, como se haria

    ResponderBorrar
    Respuestas
    1. No sera necesario ya que Odoo tiene esas validaciones desde el Core.

      Saludos

      Borrar
  2. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  3. Hola!
    Soy nuevo en OpenERP y estoy inciando con Odoo 9.
    ¿Me podrias decir paso a paso como hacer el Unique SQL en un campo que tengo que crear en la pantalla de Contactos?

    ResponderBorrar