OpenERP: ORM básico y simple

Vamos todos los ORM’s son iguales almenos en su filosofía manejan las bases de datos relacionales como objetos, así si tenemos la clase mrp.production es mas que seguro que tenemos una tabla en la base de datos con el nombre mrp_production y si quiero acceder mediante el ORM a los campos de esa tabla tengo que instanciar esa clase y luego podría llamar a sus propiedades (que vendrían a ser las columnas de la clase) de esta manera: obj_production.id porejemplo accediendo al campo ID bien el ORM de OpenERP, openObject en realidad tiene métodos para crear, modificar, eliminar, clonar, buscar, instanciar veamos eso:

Instaciar una clase: obj_produccion = self.pool.get(‘mrp.production’) se le envía como parámetro el nombre de la clase de la cual se require una instancia de la misma, si se han fijado en todas las funciones OpenERP se le pasan tres parámetros obligatorios que son:
self: que es la referencia al objeto actual y es pasado por defecto siempre cuando se llaman a las funciones/métodos OpenERP lo adiciona autmáticamente.
cr: es el cursor de la base de datos actual y con el que se ejecutan internamente las consultas a la base de datos, pero tambien podemos usarlo para ejecutar sentencias SQL (lo trataré luego, pero no es recomendable salirse del ORM)
uid: es el ID del usuario actual.
context: contexto de los objetos actuales, normalmente puede no ser pasado ya que tiene None como valor por defecto pero no cuesta nada escribirlo.

Crear un registro: obj_produccion.create(cr,uid,vals,context) el parámetro vals es un diccionario de esta forma: {‘nombrecampo1′:valor1,’nombrecampo2′:valor2,’nombrecampo3’:valor3, …… ‘nombrecampoN’:valorN,} donde cada “nombrecampo” es el nombre de un campo y “valor” el contenido que queremos que se ponga en ese campo, el método create retorna el ID del registro insertado.

Actualizar un registro: obj_produccion.write(cr, uid,ids,vals,context) aquí a diferencia de create le pasamos una lista de ID’s (parámetro ids) que está conformado de esta manera [1,5,7] y vals es un diccionario como en el create donde se ponen solo los campos y valores a actualizar, esta función/método siempre retorna True.

Buscar un registro: obj_production.search(cr,uid,[(‘name’,’=’,’MO/00025′)],context), bien este elemento retorna una lista de ID’s que correspondan a la búsqueda sino encuentra anda retorna False, las tuplas para las búsquedas estan formadas de esta manera [(‘name’,’=’,’MO/00025′),’|’,(‘product_id’,’=’,3)], el ORM asume que si existe mas de una tupla y no tiene un elemento intermnedio la busqueda será AND por eso en el caso del ejemplo puse ‘|’ que significa OR, este método se usa siempre para obtener el o los id’s para luego usar el método browse para obtener los objetos.

Obtener un objeto: obj_produccion.browse(cr,uid,[idbscado],context), bien si tenemos un ID digamos que acabamos de crear un objeto y luego de hacer algunas operaciones como crear otro registro y queremos usar algún valro de ese nuevo segundo elemento en el primero podríamos usar browse para crear un objeto y luego usar write para actualizr algún campo.

Llamar al evento padre (herencia): super(clasepadre,self).<metodo>, bien los métodos en las clases heredas pueden ser llamados con esa sintaxi, si quisiera ejecutar lo que hace el método create de la clase mrp.production puedes hacer esto: super(mrp_production).create(cr,uid,vals,context)

El ejemplo y demas lo vemos luego, esto es como una guía resumen.

Acerca de

Antes que nada voy a dejar en claro algo, en este blog escribo como se me place, asi que no busquen errores de ortografia o de redaccion que los van a encontrar a montones y tampoco me critiquen o me digan nada sobre ellos pues no tengo intencion alguna de cambiarlos, lo que escribo lo dejo asi y no lo corrijo,claro esta a menos que sean lineas de codigo. Jorge Prado Anci, profesional en desarrollo de aplicaciones, en especial las dirigidas a bases de datos. He trabajado con VFP en casi todas sus versiones, se algo de Java (que no me gusta, es eso solo no me gusta, es bueno pero no me gusta), lo suficiente de PHP como para tener mi propio CMS(es que sigue sin gustarme por la capacidad de desorden que te permite este “lenguaje”), VB lo conoci y lo deteste tanto que lo olvide al punto de no querer adoptar ni por obligacion a su reemplazante VB .NET (por lo mismo de Java) y si C# este si me encanta y aun que conozco bastante bien el lenguaje, la verdad es que me falta mucho del Framework (del 100% estare en un 65%). Soy un apasionado por el orden (en los proyectos de desarrollo), de la programacion en capas (de MVC conozco pero no he aplicado mucho), los estandares y las condenadas pruebas unitaria. Venga creo que ya con esto fue suficiente.

Tagged with: , , , , , , , , , ,
Publicado en OpenERP, python
3 comments on “OpenERP: ORM básico y simple
  1. Andres Agredo dice:

    Hola, la verdad estoy algo enredado porque necesito hacer una consulta algo “complicada”
    es:

    select rp.name, sp.partner_id, sm.name, sm.product_id, sm.product_uos_qty from stock_move sm, stock_picking sp, res_partner rp where sm.picking_id = sp.id and sp.type = ‘in’ and sp.partner_id = rp.id

    Objetivo: hacer una modificacion del modulo product_supplier_info, poder especificar para cada proveedor, que cantidad de producto y de cual producto hay existencias en el inventario

    pagina del modulo: https://www.openerp.com/apps/7.0/product_supplier_info/

    inicialmente pretendo modificar este modulo para que el campo qty de la product_supplierinfo de cada proveedor, contenga la suma de todos los ingresos de cada producto que haya hecho su respectivo proveedor

    Espero me puedas ayudar.

    Gracias

    • Andres Agredo dice:

      ***
      inicialmente pretendo modificar este modulo para que el campo qty de la TABLA product_supplierinfo de cada proveedor, contenga la suma de todos los ingresos de cada producto que haya hecho su respectivo proveedor

      • xmeele dice:

        No tengo el módulo instalado es más no lo conocía hasta ahora pero me parece que si lo que quieres es que se agrupen los valores por proveedor y producto o algo similar no haz intentado usar las agrupaciones por defecto que tiene esa ventana, allí en el search, yo creo que podrías hacerlo sin escribir una línea de código, solo busca la agrupación correcta borra la que viene por defecto, luego agrupas por los campos que quieres y por ultimo grabas esa agrupación como por defecto ya queda, una cosa que he aprendido de OpenERP es que no intentes programarlo todo hay muchas cosas que puedes lograr desde la interfase.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 441 seguidores

Blog Stats
  • 304,391 hits
A %d blogueros les gusta esto: