sap abap adobe forms dinamik resim üretme

merhaba, bu yazıda sap adobe forms çıktılarında satır bazında dinamik resim nasıl üretilir onu anlatacağım. örnek olarak site ismi ve site logosu ekrana basan bir çıktı oluşturalım. bunun için öncelikle zzz_s_website adında bir structure ve zzz_tt_website adında bir table type yaratıyoruz. zzz_tt_website satır tipini zzz_s_website olarak belirliyoruz.

zzz_s_website
zzz_tt_website

bu işlemden sonra SFP işlem koduyla zzz_i_website adında bir arayüz yaratıp import parametresini zzz_tt_website tipinde bir tablo veriyoruz.

zzz_i_website

arayüzü oluşturduktan sonra bu arayüzü kullanan zzz_f_website adında form nesnesini yaratıyoruz. burada t_website değişkenimizi bağlam üzerine sürükleyip bırakıyoruz ve data düğümüne graphiclogo adında bir graphic ekliyoruz. bu grafiğin besleneceği kaynak olarak da t_website-logo alanını gösteriyoruz. logo düğümünün de etkinliğini kaldırabiliriz burada.

zzz_f_website

bunu yaptıktan sonra düzen tabına geçip data view’den t_website tablosunu sürükleyip dizayn alanına bırakıyoruz. oluşan graphiclogo hücresinin tipini image field olarak değiştiriyoruz.

zzz_f_website2

sıra geldi programı yazmaya. programda test için üç adet veriyi tabloya ekleyip qr kodlarının ekranda basılmasını sağlıyoruz.

adobe forms dinamik resim

REPORT  zzz_dynamic_image.
 
 
DATA: lt_website TYPE zzz_tt_website,
      ls_website TYPE zzz_s_website,
      lv_qrurl   TYPE string.
 
 
ls_website-siteurl = 'http://www.serkanozcan.com/'.
APPEND ls_website TO lt_website.
ls_website-siteurl = 'http://www.google.com/'.
APPEND ls_website TO lt_website.
ls_website-siteurl = 'http://www.facebook.com/'.
APPEND ls_website TO lt_website.
 
LOOP AT lt_website INTO ls_website.
  CONCATENATE 'http://encode.i-nigma.com/QRCode/img.php?d='
                  ls_website-siteurl
                  '&c=&s=10'
                  INTO lv_qrurl.
 
  PERFORM get_html USING lv_qrurl CHANGING ls_website-logo.
 
  MODIFY lt_website FROM ls_website.
ENDLOOP.
 
DATA fp_outputparams   TYPE sfpoutputparams.
DATA lv_interface_type TYPE fpinterfacetype.
DATA lv_funcname       TYPE funcname.
DATA ls_formoutput     TYPE fpformoutput.
DATA ls_docparams      TYPE sfpdocparams.
 
fp_outputparams-pdftagged = 'X'.
fp_outputparams-nodialog  = 'X'.
fp_outputparams-dest      = 'ZPDF'.
fp_outputparams-preview   = 'X'.
fp_outputparams-getpdf    = ' '.
 
ls_docparams-langu   = 'T'.
ls_docparams-country = 'TR'.
 
CALL FUNCTION 'FP_JOB_OPEN'
  CHANGING
    ie_outputparams = fp_outputparams
  EXCEPTIONS
    cancel          = 1
    usage_error     = 2
    system_error    = 3
    internal_error  = 4
    OTHERS          = 5.
 
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
  EXPORTING
    i_name           = 'ZZZ_F_WEBSITE'
  IMPORTING
    e_funcname       = lv_funcname
    e_interface_type = lv_interface_type.
 
CALL FUNCTION lv_funcname
  EXPORTING
    /1bcdwb/docparams  = ls_docparams
    t_website          = lt_website
  IMPORTING
    /1bcdwb/formoutput = ls_formoutput
  EXCEPTIONS
    usage_error        = 1
    system_error       = 2
    internal_error     = 3
    OTHERS             = 4.
 
CALL FUNCTION 'FP_JOB_CLOSE'
  EXCEPTIONS
    usage_error    = 1
    system_error   = 2
    internal_error = 3
    OTHERS         = 4.
 
*&---------------------------------------------------------------------*
*&      Form  get_html
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_URL      text
*      -->P_DATA     text
*----------------------------------------------------------------------*
FORM get_html  USING    p_url
               CHANGING p_data.
 
  DATA lv_client        TYPE REF TO if_http_client.
 
* Create client
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = p_url
    IMPORTING
      client             = lv_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
 
  lv_client->request->set_header_field( name  = '~request_method'
                                          value = 'GET' ).
 
* Get request:
  CALL METHOD lv_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
 
* Prepare client-receive:
  CALL METHOD lv_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.
 
* Get HTML:
  CLEAR p_data.
  p_data = lv_client->response->get_data( ).
 
ENDFORM.                    " GET_HTML