Leer Archivo Excel codificado BASE 64 , decodificarlo y subirlo como adjunto a una orden de compra SAP

"A veces recibimos archivos enviados a través de interfaces en formato Base64. En este caso, el requerimiento consistió en tomar el archivo que la interfaz guarda en una tabla Z, decodificarlo y posteriormente subirlo como un archivo adjunto a una orden de compra (OC) en SAP."


Aqui les dejo un programa que realiza esta operación de forma sencilla y detallada 




En este programa tengo los datos en formato base 64 almacenados en una tabla que se llena a través de una interfaz IDOC , va almacenando los datos gigantescos base64 en una tabla z y el campo clave Orden de compra 

luego en el programa agrupo todas las líneas BASE64 de cada Orden de compra en la variable lv_base64
luego que tengo mis datos base64 de una OC agrupados en la variable la paso a xstring en la variable lv_x

ejecuto el método SAVE y este sube estos datos como adjunto en el formato especificado a la orden de compra según los datos de la estructura ls_por.

**&---------------------------------------------------------------------*
**& Report ZMM_IDOC_EXCEL_OPER
**&---------------------------------------------------------------------*
**& *DECODIFICA EXCEL Y ADJUNTA A OC  
**&---------------------------------------------------------------------*
 REPORT zmm_idoc_excel_OPER.



 TABLES: ekko.
 DATA lv_base64_decode TYPE xstring.
 DATA lv_resultado     TYPE string.
 DATA ls_OPER TYPE soli.
 DATA lv_string TYPE string.
 DATA lv_base64 TYPE string.
 DATA lv_x TYPE xstring .
 DATA lv_mensaje TYPE string.
 DATA lt_BAPIRETTAB TYPE bapirettab.
 DATA lo TYPE REF TO cl_fitv_gos.
 DATA ls_por TYPE sibflporb.


 SELECT-OPTIONSso_ebeln FOR ekko-ebeln  NO INTERVALS .                     "Business document number
 PARAMETERS: p_del AS CHECKBOX.


 START-OF-SELECTION.


"Tabla donde estan mis datos base64
   SELECT * INTO TABLE @DATA(lt_anexo) FROM zidoc_OPER_exc AS a
                                     WHERE a~ebeln IN @so_ebeln .



   IF sy-subrc = 0.
     SORT lt_anexo BY ebeln cont .

     LOOP AT  lt_anexo INTO DATA(ls_anexo).

       CONCATENATE lv_base64 ls_anexo-anexo  INTO lv_base64.
       AT END OF ebeln .
         DATA(lv_fin) = abap_true.
       ENDAT.


       IF lv_fin IS NOT INITIAL.

         ls_por-instid ls_anexo-ebeln.
         ls_por-typeid = 'BUS2012'. "BO para modificar Ordenes de compra
         ls_por-catid 'BO'.

         CALL METHOD cl_http_utility=>if_http_utility~decode_x_base64
           EXPORTING
             encoded = lv_base64
           RECEIVING
             decoded = lv_x.


         CREATE OBJECT lo.


         CALL METHOD lo->save
           EXPORTING
             iv_name        = 'Archivo.XLS'
             iv_content_hex = lv_x
             is_lporb       = ls_por
             iv_objtp       = 'EXT'
             iv_commit_on   = 'X'
           RECEIVING
             rt_messages    = lt_BAPIRETTAB.

         READ TABLE  lt_BAPIRETTAB  INTO DATA(ls_ret) WITH KEY type = 'E'.
         IF sy-subrc = 0.
           CONCATENATE ls_ret-message ls_ret-message_v1 ls_ret-message_v2 ls_ret-             message_v3 ls_ret-message_v4 INTO lv_mensaje.

         ELSE.
           CONCATENATE 'Adjunto'   ls_anexo-ebeln   'Creado' INTO lv_mensaje                   SEPARATED BY space.
         ENDIF.

         WRITE lv_mensaje .

         CLEAR: lv_fin, lv_base64, lv_mensaje, lv_x, ls_por.
         FREE   lo.
         REFRESH lt_BAPIRETTAB.

       ENDIF.
     ENDLOOP.

     IF p_del IS NOT INITIAL.
       DELETE zidoc_OPER_exc FROM TABLE lt_anexo.
       COMMIT WORK.
     ENDIF.

   ENDIF.



Dejo la estructura de la tabla para facilitar la comprensión del código 





Comentarios

Entradas populares de este blog

Reversa OT liberada - Volver OT modificable luego de liberarla

Saltar autorización de ingreso de transacciones SAP

ALV Editable estilo SM30 SAP