Introducción
La gestión de mensajes en Batch-Input y BAPI es bastante horrorosa, teniendo en cuenta además que utilizan dos estructuras muy similares pero con nombres de campos muy parecidos, lo que suele llevar a confusiones frustrantes cuando intentamos analizar el resultado.
Estas macros permiten gestionar los mensajes de ambos tipo de llamadas unificando criterios y simplificando al máximo el código a utilizar.
Las macros
- vc_messtab2bapiret messtab bapiret2: mueve una estructura bdcmsgcoll a bapiret2.
- vc_bapiret2messtab bapiret2 messtab: mueve una estructura bapiret2 a bdcmsgcoll.
- vc_messtab2mensaje messtab cadenadetexto: construye un mensaje como texto a partir de una estructura bdcmsgcoll.
- vc_bapiret2mensaje bapiret2 cadenadetexto: construye un mensaje como texto a partir de una estructura bapiret2.
El código
* _ _ ___ _ *| |__ (_) / / |__ __ _ _ __ (_) _ __ ___ ___ ___ ___ __ _ __ _ ___ ___ *| '_ \| | / /| '_ \ / _` | '_ \| | | '_ ` _ \ / _ \ __| __|/ _` |/ _` |/ _ \ __| *| |_) | |/ / | |_) | (_| | |_) | | | | | | | | __/__ \__ \ (_| | (_| | __/__ \ *|_.__/|_|_/ |_.__/ \__,_| .__/|_| |_| |_| |_|\___|___/___/\__,_|\__, |\___|___/ * |_| |___/ * as seen in http://glob.cranf.net * ASCII art made using http://ascii.cranf.net * *********************************************************************** DEFINE vc_messtab2bapiret."convierte estructura messtab de BI a bapiret2 "vc_messtab2bapiret messtab bapiret2. "lo hace de línea en línea, no usando tablas perform vc_messtab2bapiret using &1 changing &2. END-OF-DEFINITION. * FORM vc_messtab2bapiret USING pbi TYPE bdcmsgcoll CHANGING pbapi TYPE bapiret2. pbapi-type = pbi-msgtyp. pbapi-id = pbi-msgid. pbapi-number = pbi-msgnr. pbapi-message_v1 = pbi-msgv1. pbapi-message_v2 = pbi-msgv2. pbapi-message_v3 = pbi-msgv3. pbapi-message_v4 = pbi-msgv4. ENDFORM. "vc_messtab2bapiret *********************************************************************** DEFINE vc_bapiret2messtab. "convierte estructura bapiret2 a messtab de BI "vc_bapiret2messtab bapiret2 messtab. "lo hace de línea en línea, no usando tablas perform vc_bapiret2messtab using &1 changing &2. END-OF-DEFINITION. * FORM vc_bapiret2messtab USING pbapi TYPE bapiret2 CHANGING pbi TYPE bdcmsgcoll. pbi-msgtyp = pbapi-type. pbi-msgid = pbapi-id. pbi-msgnr = pbapi-number. pbi-msgv1 = pbapi-message_v1. pbi-msgv2 = pbapi-message_v2. pbi-msgv3 = pbapi-message_v3. pbi-msgv4 = pbapi-message_v4. ENDFORM. "vc_bapiret2messtab *********************************************************************** DEFINE vc_messtab2mensaje. "convierte estructura messtab en mensaje verbal "vc_messtab2mensaje messtab cadenadetexto perform vc_messtab2mensaje using &1 changing &2. END-OF-DEFINITION. * FORM vc_messtab2mensaje USING pbi TYPE bdcmsgcoll CHANGING pmensaje. DATA lmsgid LIKE sy-msgid. DATA lmsgnr LIKE sy-msgno. DATA lmensaje LIKE sy-lisel. DATA lmsgv1 TYPE symsgv. DATA lmsgv2 TYPE symsgv. DATA lmsgv3 TYPE symsgv. DATA lmsgv4 TYPE symsgv. lmsgid = pbi-msgid. lmsgnr = pbi-msgnr. lmsgv1 = pbi-msgv1. lmsgv2 = pbi-msgv2. lmsgv3 = pbi-msgv3. lmsgv4 = pbi-msgv4. CALL FUNCTION 'RPY_MESSAGE_COMPOSE' EXPORTING language = sy-langu message_id = lmsgid message_number = lmsgnr message_var1 = lmsgv1 message_var2 = lmsgv2 message_var3 = lmsgv3 message_var4 = lmsgv4 IMPORTING message_text = lmensaje EXCEPTIONS message_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. CLEAR lmensaje. ENDIF. pmensaje = lmensaje. ENDFORM. "vc_messtab2mensaje *********************************************************************** DEFINE vc_bapiret2mensaje."convierte estructura bapiret2 en mensaje verbal perform vc_bapiret2mensaje using &1 changing &2. END-OF-DEFINITION. * FORM vc_bapiret2mensaje USING pbapi TYPE bapiret2 CHANGING pmensaje. DATA lbi TYPE bdcmsgcoll. vc_bapiret2messtab pbapi lbi. vc_messtab2mensaje lbi pmensaje. ENDFORM. "vc_bapiret2mensaje ***********************************************************************
Shameless self-promotion
Tengo unas estupendas macros para hacer Batch-Input en mi compactador de código BI. Échales un vistazo.
Deja un comentario