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

8. Asistentes, informes y tareas

Tryton 7.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 7.0 requiere como mínimo Python 3.8 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 7.0. Consulte el tutorial oficial 7.0, la API del servidor y el código de esa rama antes de trasladar el patrón a producción.