Saltar al contenido principal
Versión: Tryton 6.0 (LTS)

8. Asistentes, informes y tareas

Tryton 6.0 · curso práctico versionado

Objetivos​

  • elegir entre asistente, informe, tarea en cola y acción programada
  • transferir datos explícitos entre estados del asistente
  • mantener los trabajos largos fuera de peticiones interactivas

Modelo mental​

Este concepto debe entenderse como parte de un sistema transaccional: la interfaz ayuda al usuario, el servidor conserva las reglas y la base persiste el resultado. Un asistente coordina una conversación con el usuario. Un informe representa registros. Una tarea de cola procesa asincrónicamente. Una acción programada inicia trabajo recurrente.

Práctica guiada​

  1. Defina la decisión del usuario y su confirmación.
  2. Use StateView para parámetros y StateTransition para trabajo del servidor.
  3. Devuelva una acción solo si requiere navegación o salida.
  4. Encole procesos lentos o reintentables.
  5. Haga informes y tareas reproducibles y conscientes de permisos.

Ejemplo mínimo​

from trytond.model import ModelView, fields
from trytond.pool import Pool
from trytond.wizard import Button, StateTransition, StateView, Wizard

class LoanDoneStart(ModelView):
"Complete Loans"
__name__ = 'library.loan.done.start'
note = fields.Text("Note")

class LoanDone(Wizard):
"Complete Loans"
__name__ = 'library.loan.done'
start = StateView(
'library.loan.done.start',
'library.loan_done_start_view_form', [
Button("Cancel", 'end', 'tryton-cancel'),
Button("Complete", 'complete', 'tryton-ok', default=True),
])
complete = StateTransition()

def transition_complete(self):
Loan = Pool().get('library.loan')
Loan.done(self.records)
return 'end'

Cómo leer el ejemplo​

Registre asistente y modelos de estado con el tipo correcto del Pool. No use un asistente para ocultar un método: úselo si el usuario debe proporcionar o confirmar información.

Ejercicio​

Añada un resumen de confirmación, recibo imprimible y notificación en cola. Pruebe reintentos sin notificaciones duplicadas.

Realice el ejercicio primero con un caso mínimo, después agregue un caso inválido y convierta ambos en pruebas repetibles.

Resultado verificable​

El asistente respeta registros activos y permisos, el recibo es determinista y la notificación lenta no bloquea el formulario.

Errores frecuentes​

  • confiar en active_ids sin validarlos
  • ejecutar trabajos enormes en una transición
  • mezclar representación del informe con mutación
  • crear tareas reintentables no idempotentes

Criterio para avanzar​

  • Puedo explicar la diferencia entre los conceptos sin mirar el código.
  • El caso válido y el inválido tienen pruebas.
  • Probé con un usuario sin privilegios administrativos.
  • Sé cómo actualizar y cómo recuperar la base de entrenamiento.

Versión y referencias​

La serie 6.0 requiere como mínimo Python 3.6 según los metadatos oficiales. Esta rama oficial todavía conserva metadatos históricos en setup.py; mantenga compatibilidad con la serie, pero prepare sus paquetes personalizados para la construcción estándar mediante python -m build. No confunda ese mínimo histórico con la versión de Python que haya certificado su organización.

Esta edición fija ejemplos y dependencias en la serie 6.0. Consulte el tutorial oficial 6.0, la API del servidor y el código de esa rama antes de trasladar el patrón a producción.