SAP ABAP SMARTFORMS

From SapWiki
Revision as of 13:19, 27 March 2020 by WikiSysop (talk | contribs)

ejemplo de función que retorna smartform en BASE 64 con preview para pruebas en la trn. SE37

FUNCTION zhr_get_pdf.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     VALUE(P_PERNR) TYPE  PERNR_D OPTIONAL
*"     VALUE(P_IDDOCUMENTO) TYPE  TIM_REQ_ID OPTIONAL
*"  EXPORTING
*"     VALUE(P_BINFILE) TYPE  XSTRING
*"     VALUE(P_FILEBASE64) TYPE  STRING
*"     VALUE(P_ERRMSG) TYPE  STRING
*"----------------------------------------------------------------------
  DATA: l_formname          TYPE tdsfname VALUE 'ZSF_MY_SMARTFORM',
        lf_fm_name          TYPE rs38l_fnam,
        ls_control_param    TYPE ssfctrlop,
        ls_composer_param   TYPE ssfcompop,
        ga_job_output_info  TYPE ssfcrescl.
        
*insert some logic here
  
*
*--------------------------------------------------------------------*
* call Smartform
*--------------------------------------------------------------------*
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      formname           = l_formname
    IMPORTING
      fm_name            = lf_fm_name
    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 INTO p_errmsg.
    RETURN.
  ENDIF.

  ls_control_param-device = 'PRINTER'.
  ls_control_param-no_dialog = 'X'.
  ls_control_param-preview   = .
  ls_control_param-no_open   = .
  ls_composer_param-tdcover  = ' '.
  ls_control_param-getotf    = 'X'.
  ls_composer_param-tdimmed  = 'X'.
  ls_composer_param-tdcopies = 1.

  CALL FUNCTION lf_fm_name
    EXPORTING
      control_parameters = ls_control_param
      output_options     = ls_composer_param
      i_data             = wa_data
    IMPORTING
      job_output_info    = ga_job_output_info
*              TABLES
*     detalle            = it_ccnom1
    EXCEPTIONS
      formatting_error   = 1
      internal_error     = 2
      send_error         = 3
      user_canceled      = 4
      OTHERS             = 5.
  IF sy-subrc <> 0.
* Implement suitable error handling here
*     Transfer SF errors to internal table
    DATA lt_errortab TYPE tsferror.

    CALL FUNCTION 'SSF_READ_ERRORS'
      IMPORTING
        errortab = lt_errortab.

    LOOP AT lt_errortab INTO DATA(wa).
      MESSAGE ID wa-msgid TYPE wa-msgty NUMBER wa-msgno
            WITH wa-msgv1 wa-msgv2 wa-msgv3 wa-msgv4 INTO p_errmsg.
      EXIT.
    ENDLOOP.
    RETURN.
  ENDIF.

  ltd_otf[]  = ga_job_output_info-otfdata[].
  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
*     max_linewidth         = 800
    IMPORTING
      bin_filesize          = lv_bytes
      bin_file              = bin_file
    TABLES
      otf                   = ltd_otf
      lines                 = gt_pdfdata
    EXCEPTIONS ##FM_SUBRC_OK
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.

  IF NOT bin_file IS INITIAL.
    p_binfile = bin_file.
  ENDIF.

  CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
    EXPORTING
      input  = p_binfile
    IMPORTING
      output = p_filebase64.

  IF sy-tcode = 'SE37'.
*  Preview PDF.
    CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
      EXPORTING
        i_otf                    = ltd_otf[]
      EXCEPTIONS ##fm_subrc_ok
        convert_otf_to_pdf_error = 1
        cntl_error               = 2
        OTHERS                   = 3.
  ENDIF.

ENDFUNCTION.