Migración de datos - Como actualizar el campo create_date y create_uid

20 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Migrar datos es complicado, y hay ciertos datos (en realidad ciertas columnas) que son mas complicadas de migrar todavía. Estoy hablando de las columnas create_date y create_uid las cuales son creadas siempre por el ORM y el mismo ORM se encarga de actualizarlas cada vez que se crea un registro por medio del método create.

Estos dos campos son útiles para auditorías y para estadísticas (por ejemplo con el CRM, sirve para saber quien y cuando creó una oportunidad). Es por ello que cuando se migra los datos en Odoo, es importante actualizarlos. Ahora, como lo hacemos? El método write no es una opción ya que el mismo no actualiza la columna create_date ni create_uid.

Para eso usamos el SQL. Es probable que estemos migrando los datos conxmlrpc y actualizandolos mediante un módulo de Odoo. Entonces en el método que crea el registro, uno procede luego de la creación, ejecutar una sentencia SQL que actualiza el dicho registro. Supongamos a modo de ejemplo que estamos creando el registro de una iniciativa, y dicha iniciativa fue creada el 25 de enero de 2023. El código para crear la iniciativa en el sistema destino será:


# valores de la iniciativa
vals_lead = { ... }
res = self.env['crm.lead'].create(vals_lead)
# prepara la sentencia SQL con los valores a actualizar
sql_update = "UPDATE crm_lead SET create_date = '%s' WHERE id = %s'%('2023-01-25 00:00:00', res.id)
self.env.cr.execute(sql_update)

Si hay algo lindo es que en Odoo uno puede actualizar utilizando el ORM, y puede realizar operaciones de SQL. De la misma manera que actualizamos mediante un módulo lo podemos hacer mediante una herramienta de SQL como pgadmin, pero es más dificil de escalar ya que lo podemos hacer en contadas ocasiones (y la migración es una operación de miles y miles de registros) Por ejemplo supongamos que tenemos una iniciativa con el ID número 15, si queremos actualizar su fecha de creación la sentencia SQL sería:

UPDATE crm_lead SET create_date = "2023-01-25 00:00:00" WHERE id = 15;

Algo a destacar es, el campo create_date es del tipo datetime por eso agregamos el horario de la actualización. Tambien de la misma manera que se actualiza el campo create_date se puede actualizar el campo create_uid.

Si uno no se siente muy cómodo con sus habilidades de SQL (lo cual sería bastante triste) recomiendo la instalación del módulo import_metadata de Thibault Francois. Dicho módulo permite actualizar la metadata durante el momento de creación y actualización de registros. Además, si uno ve el código aprende como extender el ORM propio de Odoo. Es un módulo por demas interesante.

Gustavo Orrillo 20 de junio de 2023
Compartir
Archivar
Identificarse dejar un comentario