Descargar smartform en PDF en ABAP

En el post del día de hoy os vamos a mostrar cómo podemos descargar un smartform en PDF en ABAP.

En primer lugar, vamos a daros algo de información acerca de lo que es un smartform. Usaremos información de la web http://www.cvosoft.com/

Qué es un smartform?

Los Formularios son objetos de SAP que se utilizan para crear documentos que necesitan ser impresos, visualizados por pantalla o enviados por correo electrónico.

Ejemplos de formularios son Facturas, Remitos, Órdenes de compra, Solicitudes de pedido o cualquier otro documento que queramos crear como formulario SAP.

SAP posee varias tecnologías especialmente diseñadas para la creación de formularios. Ellas son:

  • SAPScripts: es la primera herramienta que creo SAP para el desarrollo de formularios. No es muy amigable y tampoco muy flexible pero todavía se continúan utilizando en muchos entornos de trabajo, principalmente donde encontramos las versiones más antiguas de SAP.
  • SmartForms: reemplazaron a los SAPScripts a partir de la versión 4.7 de SAP. Son los más amigables al desarrollador y los más flexibles a la hora de realizar cambios. Poseen muchas ventajas con respecto a sus antecesores.
  • AdobeForms: es la última tecnología de SAP en cuanto a formularios. Es producto de la alianza entre SAP y Adobe.

A continuación, os mostramos un ejemplo de cómo podemos descargar un smartform en PDF en ABAP:

  DATA: l_funcion TYPE rs38l_fnam,
        w_return  TYPE ssfcrescl,
        i_otf TYPE TABLE OF itcoo,
        w_ctrlop TYPE ssfctrlop,
        w_compop TYPE ssfcompop,
        i_tline TYPE TABLE OF tline,
        lv_binfile TYPE  xstring,
        lt_lines TYPE STANDARD TABLE OF tline.


  DATA: v_form_name TYPE rs38l_fnam,
        v_len_in    TYPE sood-objlen,
        v_len_out   TYPE sood-objlen,
        v_len_outn   TYPE i.

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = 'ZWD_CURSO'
*     VARIANT            = ' '
*     DIRECT_CALL        = ' '
    IMPORTING
      fm_name            = l_funcion
    EXCEPTIONS
      no_form            = 1
      no_function_module = 2
      OTHERS             = 3.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  w_ctrlop-getotf = 'X'.
  w_ctrlop-no_dialog = 'X'.
  w_compop-tdnoprev = 'X'.
  w_compop-tdprinter = 'PDF1'.

  CALL FUNCTION l_funcion
    EXPORTING
      control_parameters = w_ctrlop
      output_options     = w_compop
    IMPORTING
      job_output_info    = w_return
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
      max_linewidth         = 132
    IMPORTING
      bin_file              = lv_binfile
    TABLES
      otf                   = w_return-otfdata[]
      lines                 = lt_lines
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  cl_wd_runtime_services=>attach_file_to_response(
   i_filename = 'mypdf.pdf'
   i_content = lv_binfile
   i_mime_type = 'application/pdf'
   ).

A continuación, tienes un enlace donde te mostramos cómo realizar debugging de un smartform:

Debugging de un smartform en ABAP