8. Asistentes, informes y tareas
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
- Defina la decisión del usuario y su confirmación.
- Use StateView para parámetros y StateTransition para trabajo del servidor.
- Devuelva una acción solo si requiere navegación o salida.
- Encole procesos lentos o reintentables.
- 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.