Una de las constantes en el desarrollo de Business Central, y sobre todo hasta la aparición de las reportextensions, ha sido y es la modificación o personalización de los reports estándar.
En muchas ocasiones lo que hacemos es duplicar el report estándar, y trabajar en el diseño o código de dicho report para ajustarlo al requerimiento.
Si se trata de formatos de documentos finalmente tendríamos que indicar en la ventana de «selección de informes» correspondiente cuál es el report que queremos que se lance desde ese momento, asociado al documento en cuestión. Pero, ¿qué ocurría si queremos sustituir un report estándar que no es configurable por una ventana de «selección de informes»?
Es bastante común que la solución pase por ocultar la acción que invoca al report estándar y añadir nuestra acción que llama a nuestro report. Incluso en el peor de los casos añadimos nuestra acción sin ocultar la acción estándar.
Pero existe una técnica para hacer que, cuando se lance la ejecución de un report del sistema, se «intercepte» esa ejecución y se lance otro report que a nosotros nos interese. Esto hace el proceso mucho más limpio y transparente para el usuario, y nos evita tener que buscar en qué puntos de la aplicación se lanza el report a sustituir.
La clave está en la codeunit «ReportManagement» y concretamente en el evento «OnAfterSubstituteReport». Si nos suscribimos a ese evento veremos que tendremos dos parámetros (ReportId y NewReportId), en el primero de ellos indicamos el identificador del report a sustituir, y en NewReportId indicamos el identificador del report que queremos que se lance realmente.
Por ejemplo, si suponemos que queremos sustituir el report «G/L – VAT Reconciliation» por uno propio (llamémosle «JAL_G/L – VAT Reconciliation») sería:
