SAP Abap Pdf Şifreleme

sap

Merhaba bu yazımızda SAP Abap pdf şifreleme konusunu ele alacağız. Pdf şifrelemeyi özellikle gizli olması gereken belgeleri gönderirken kullanabilirsiniz. Örneğin çalışanların maaşlarında herhangi bir artış olduğunda yeni maaşlarının mail yoluyla iletilmesi senaryosunda, göndereceğimiz pdf ekinin güvenliği genellikle müşteri tarafından sorgulanıyor. Daha çok hr modülüyle ilişkili yerlerde kullanılsa da diğer modüllerde de kullanılabilir.

Pdf Şifreleme Senaryo

Bizim örneğimize gelecek olursak abapta mail gönderme kısmını başka bir yazımızda ele alacağız. Temel olarak şifresiz bir pdf’in otf dönüşümü yapacağız. Dönüşümden sonra elimizdeki data ile unique bir id üreteceğiz. Sistemde bu id ile adlandıracağımız geçici bir dosya oluşturacağız. Komutumuzu bu dosya üzerinde uygulayıp dosyamızı şifreli hale getireceğiz. Daha sonra şifreli dosya üzerinde tekrar dönüşüm işlemi yaparak mailde bir ek olarak kullanabileceğiniz formata getireceğiz.

3.Parti Yazılımların İndirilmesi ve Sisteme Yüklenmesi

Öncelikle buradan Apache’nin geliştirmiş olduğu pdfbox isimli jar dosyasını indirmeliyiz. Daha sonra Sap de CG3Z işlem koduna giderek aşağıdaki gibi ilgili sistem yoluna indirdiğimiz dosyası yükleyelim.

pdf

Daha sonra SM69 işlem koduna giderek yeni bir komut oluşturacağız. Bu komutlar sayesinde cmd üzerinden istediğiniz herhangi başka bir işlem de yapabilirsiniz. Command name alanına komutumuzun ismini veriyoruz. Operation System yazan yerde sistemimizin ne olduğu yazmaktadır. Definition kısmı windows ve linux sistemler için değişiklik göstermektedir.

Windows Sistemler

2 pdf şifreleme sm69

Linux Sistemler

Not: Linux sistemlerde pdf şifreleme komutunu çalıştırmak için daha önceden java’nın yüklü olması gerekmektedir.

3 pdf şifreleme sm69

Abap Kodunun Yazılması

İlk olarak şifrelenecek pdf’imizi CONVERT_OTF_2_PDF fonksiyonunu kullarak dönüştürelim. Abap’ta normal çıktı işlemleri gibi yapıyoruz fakat ön görünüm vb özellikler için aşağıdaki gibi gerekli ayarlamaları yapıyoruz.


DATA: lv_formname             TYPE tdsfname,
      lv_smartform            TYPE rs38l_fnam,
      ls_output_options       TYPE ssfcompop,
      ls_control_parameters   TYPE ssfctrlop,
      ls_document_output_info TYPE ssfcrespd,
      ls_job_output_info      TYPE ssfcrescl,
      ls_job_output_options   TYPE ssfcresop,
      lt_otf                  TYPE tsfotf,
      lv_bin_filesize         TYPE i,
      lt_docs                 TYPE STANDARD TABLE OF docs,
      lt_lines                TYPE STANDARD TABLE OF tline,
      ls_lines                LIKE LINE OF lt_lines,
      lv_file                 TYPE string,
      lt_params               TYPE TABLE OF btcxpgpar,
      ls_params               LIKE LINE OF lt_params,
      lv_cmd                  LIKE sxpgcolist-name,
      lv_unique_name          TYPE sysuuid_c.

"Çıktı aygıtımızı LP01 olarak ayarlıyoruz.
ls_output_options-tddest = 'LP01'.
"Herhangi bir diloag penceresinin gelmesini istemiyoruz.
"Bu yüzden kapatıyoruz.
ls_control_parameters-no_dialog = abap_true.
"Ön görünüm özelliğine space veriyoruz false anlamına geliyor.
ls_control_parameters-preview = space.
"Otf dönüşümü yapmak için getotf özelliğini açıyoruz.
ls_control_parameters-getotf = abap_true.
"Smartform ismi
lv_formname = 'ZMOSF_DENEME'.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    formname           = lv_formname
  IMPORTING
    fm_name            = lv_smartform
  EXCEPTIONS
    no_form            = 1
    no_function_module = 2
    OTHERS             = 3.

CALL FUNCTION lv_smartform
  EXPORTING
    control_parameters   = ls_control_parameters
    output_options       = ls_output_options
    user_settings        = space
  IMPORTING
    document_output_info = ls_document_output_info
    job_output_info      = ls_job_output_info
    job_output_options   = ls_job_output_options
  EXCEPTIONS
    formatting_error     = 1
    internal_error       = 2
    send_error           = 3
    user_canceled        = 4
    OTHERS               = 5.

lt_otf = ls_job_output_info-otfdata.

CALL FUNCTION 'CONVERT_OTF_2_PDF'
  IMPORTING
    bin_filesize           = lv_bin_filesize
  TABLES
    otf                    = lt_otf
    doctab_archive         = lt_docs
    lines                  = lt_lines
  EXCEPTIONS
    err_conv_not_possible  = 1
    err_otf_mc_noendmarker = 2
    OTHERS                 = 3.

Otf dönüşümünü yaptıktan sonra SYSTEM_UUID_C_CREATE fonksiyonu ile unique bir id oluşturup şifreleme yapmak için sistem üzerinde geçici bir dosya oluşturuyoruz. Daha sonra SM69 işlem kodundan oluşturduğumuz pdf şifreleme komutunu çalıştırıyoruz. Bu komutla birlikte dostamız şifrelenmiş oluyor. Şifreli dosyayı tekrar okuyarak kullanabileceğimiz formata dönüştürüyoruz. Son olarak sistemde gereksiz yer kaplamaması için geçici dosyamızı siliyoruz.


"Unique id üretiyoruz.
CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
  IMPORTING
    uuid = lv_unique_name.

"Yeni dosya yolunu id ile birlikte oluşturuyoruz
CONCATENATE '/usr/sap/trans/cofiles/' lv_unique_name '.PDF' INTO lv_file.

OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE .
IF sy-subrc = 0 .
  LOOP AT lt_lines INTO ls_lines.
    TRANSFER ls_lines TO lv_file .
  ENDLOOP.

  CLOSE DATASET lv_file .
  " { şifre  dosya } --- bu formatta olması gerekiyor
  CONCATENATE 'qweqwe' lv_file INTO ls_params SEPARATED BY space.
  "SM69 komut ismi
  lv_cmd = 'Z_PDF_ENCRYPT'.

  "SM69 dan oluşturduğumuz komut çalıştırılıyor.
  CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
    EXPORTING
      commandname           = lv_cmd
      additional_parameters = ls_params
    EXCEPTIONS
      OTHERS                = 15.
  IF sy-subrc = 0.
    CLOSE DATASET lv_file.
    OPEN DATASET lv_file FOR INPUT IN BINARY MODE.
    IF sy-subrc EQ 0.
      REFRESH lt_lines.
      DO.
        CLEAR ls_lines.
        READ DATASET lv_file INTO ls_lines.
        IF sy-subrc = 0.
          APPEND ls_lines TO lt_lines.
        ELSE.
          IF ls_lines IS NOT INITIAL.
            APPEND ls_lines TO lt_lines.
          ENDIF.
          EXIT.
        ENDIF.
      ENDDO.

      CLOSE DATASET lv_file.
      " mail gönderme / dosyayı kaydetme burada yapılıyor
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = 'C:\TEMP\B.PDF'
          filetype = 'BIN'
        TABLES
          data_tab = lt_lines
        EXCEPTIONS
          OTHERS   = 15.
    ENDIF.
  ENDIF.
  " geçici dosya serverdan siliniyor
  DELETE DATASET lv_file.
ENDIF.

Bu işlemlerin sonucunda lt_lines internal tablosunu maillerimizde ek olarak kullanabiliriz. Bu vb yazılarımıza buradan ulaşabilirsiniz. Bir sonraki yazımızda görüşmek üzere.

E-bültene Abone Ol Merak etmeyin. Spam yapmayacağız.

Yazar

Merhaba, Kocaeli Üniversitesi Bilişim Sistemleri Mühendisliği Bölümü'nden 2019 yılında mezun oldum. Daha sonra Sap sektöründe çalışma hayatına başladım. Burada elimden geldiğince tecrübelerimi sizinle paylaşacağım.

İlgili Yazılar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Hızlı yorum için giriş yapın.

Başka Yazı Yok

Kayıt Ol

Zaten üye misiniz? Giriş Yap

Giriş Yap

Henüz üyeliğiniz yok mu? Kayıt Ol