Consells de programació: restriccions i excepcions
OpenERP ofereix un mecanisme estàndard per afegir restriccions als registres. Aquest mecanisme s’utilitza, per exemple, a account.move.line per garantir que no es faci servir cap compte de tipus view en un apunt comptable. A primera vista, aquesta funcionalitat sembla útil, però l’experiència demostra que el mecanisme actual de restriccions presenta problemes greus d’usabilitat.
El motiu és força senzill. Si considerem l’exemple d’account.move.line, pot passar que l’usuari empleni un extracte bancari molt extens i, quan acabi, intenti confirmar-lo. És en aquest moment quan es creen els assentaments comptables i, si només un d’ells utilitza un compte de tipus view, l’usuari rebrà sempre el mateix missatge: «No es pot crear un apunt comptable en un compte de tipus vista». Perfecte. Però quina de les 100 línies de l’extracte és la incorrecta?
Una situació semblant es produeix quan els desenvolupadors no tenen en compte aquest problema en generar excepcions. Per exemple, si una de les 100 línies de l’extracte bancari ja està conciliada, l’usuari rebrà el missatge tan informatiu: Ja conciliat.
Aquests aspectes són molt importants en entorns de producció i hem hagut de fer diversos canvis per millorar les excepcions, especialment als mòduls de comptabilitat. Un missatge senzill com ara «L’apunt comptable %s, amb un dèbit de %.2f i un crèdit de %.2f, ja ha estat conciliat» resol el problema i pot evitar molts maldecaps als usuaris d’OpenERP.
Cal tenir en compte que, si el registre s’acaba de crear, és possible que l’usuari no pugui localitzar el registre problemàtic, perquè la reversió de la transacció pot eliminar-lo. Per això, sempre és recomanable proporcionar tanta informació com sigui possible.
D’altra banda, com que els missatges estàndard de les restriccions no permeten incloure tota la informació necessària, la millor opció és utilitzar el mecanisme de restriccions però generar una excepció informativa des de la funció de restricció, en comptes de deixar que OpenERP mostri a l’usuari el missatge estàndard.