Introducción
Los sufridos programadores de ABAP solemos preferir el uso de BAPIs al de Batch-Input por velocidad y fiabilidad (incluso a pesar de fantásticas utilidades -shameless self-promotion- como BI compactor), pero en algunos casos pueden ser desesperantes.
Es el caso de las BAPIs de PS (Project System) que son un tanto especiales si no se las llama correctamente. A base de probar, puesto que no encontré documentación clara sobre el tema, finalmente di con una lógica que funciona y además, no da dumps.
En este ejemplillo pongo un fragmento de código para la creación de elementos PEP. Obsérvese las llamadas previas y posteriores a las de la BAPI en sí.
El código
"[...] CALL FUNCTION 'BAPI_PS_INITIALIZATION'. CALL FUNCTION 'BAPI_BUS2054_CREATE_MULTI' EXPORTING i_project_definition = i_project_definition TABLES it_wbs_element = it_wbs_element et_return = it_return. LOOP AT it_return WHERE type = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. "tenemos que añadir aquí control de error EXIT. ENDLOOP. "aquí deberíamos controlar el error "en caso de que lo hubiera, nos salimos REFRESH it_return. CALL FUNCTION 'BAPI_PS_PRECOMMIT' TABLES et_return = it_return. LOOP AT it_return WHERE type = 'E'. "tenemos que añadir aquí control de error EXIT. ENDLOOP. "aquí deberíamos controlar el error "en caso de que lo hubiera, nos salimos REFRESH it_return. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' IMPORTING return = it_return. LOOP AT it_return WHERE type = 'E'. "tenemos que añadir aquí control de error EXIT. ENDLOOP. "aquí deberíamos controlar el error "en caso de que lo hubiera, nos salimos