19 Mart 2015 Perşembe

SAPUI5 da smartformu PDF olarak görüntüleme

Bu yayında SAP backend de bulunan bir  smartforma REST servis yardımıyla ulaşıp , PDF olarak web sayfamızda görüntüleyeceğiz.

İşe PDF stringini dönderecek  REST servisi yazmakla başlayalım.



SICF transaction ımıza giriş yapıyoruz.


Servislerimizi listeleyelim.


default host altında yeni alt öge oluşturalım.


 Servisimize bir isim verelim.


Servise açıklama girip kaydedelim.


SE24 den servisimiz için handler classımızı oluşturalım.


Classımızın interface i if_http_extension olacak.


handle request methodu default geldi , biz de get_smartform methodumuzu ekleyelim method listemize.



get_smartform methodumuz import olarak http request alsın ve bize string döndersin.


Sıra geldi methodlarımızın içeriğini doldurmaya.


 
  METHOD if_http_extension~handle_request.


    DATA : lv_pdf TYPE string.

    DATA : lv_form      TYPE        string,
           lr_exception TYPE REF TO cx_root,
           lv_error(1).

    lv_form = to_upper( server->request->get_form_field( 'method' ) ).


    TRY.

        CALL METHOD (lv_form)
          EXPORTING
            io_request = server->request
          IMPORTING
            ev_pdf    = lv_pdf.


      CATCH cx_sy_dyn_call_error INTO lr_exception.

        lv_error = abap_true.

    ENDTRY.


* Activate compression
    server->response->set_compression(
    disable_extended_checks = abap_true
    options = if_http_server=>co_compress_in_all_cases ).

    IF lv_error = abap_true.

      server->response->set_status( code = 500 reason = 'Internal Server Error' ).

    ELSE.

      server->response->set_status( code = 200 reason = 'OK' ).
      server->response->set_cdata( data = lv_pdf ).
      server->response->set_content_type(
      content_type = 'application/pdf' ).


    ENDIF.

  ENDMETHOD.


 
  METHOD get_smartform.

    DATA : lv_fm_name            TYPE                   rs38l_fnam,
           ls_control_parameters TYPE                   ssfctrlop,
           ls_job_output_info    TYPE                   ssfcrescl,
           lv_bin_tline          TYPE TABLE OF          tline,
           lv_bin_filesize       TYPE                   i,
           lv_bin_pdfx           TYPE                   xstring,
           lt_pdf_data           TYPE STANDARD TABLE OF solix.


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

    IF sy-subrc <> 0.

      RETURN.

    ENDIF.

    ls_control_parameters-no_dialog = 'X'.
    ls_control_parameters-getotf = 'X'.


    CALL FUNCTION lv_fm_name
      EXPORTING
        control_parameters = ls_control_parameters
      IMPORTING
        job_output_info    = ls_job_output_info
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.

    IF  sy-subrc <> 0.

      RETURN.

    ENDIF.


    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format       = 'PDF'
      IMPORTING
        bin_filesize = lv_bin_filesize
        bin_file     = lv_bin_pdfx
      TABLES
        otf          = ls_job_output_info-otfdata "smartform functiondan dönen değer
        lines        = lv_bin_tline.


    IF sy-subrc <> 0.

      RETURN.

    ENDIF.



    CALL FUNCTION 'HR_KR_XSTRING_TO_STRING'
      EXPORTING
        in_xstring = lv_bin_pdfx
      IMPORTING
        out_string = ev_pdf.



    IF  sy-subrc <> 0.

      RETURN.

    ENDIF.


  ENDMETHOD.

Artık classımızı servisimizin işleyici listesine ekleyebiliriz.


Kaydettikten sonra servisi etkinleştirmemiz gerekmekte , servisimize sağ tıklayıp content menu den Srv.etkinleştir seçeneğini seçelim.


Şimdi servisimizi test edelim. Aşağıdaki url i sizlerde hostname ve port bilgilerinizle browser ınızda çalıştırın.

http://<hostname:port>/zui502/?method=get_smartform



Görüldüğü gibi servisimiz doğru çalışmakta ve bize smartformu pdf e çevirerek geri döndermekte.

Artık yeni bir SAPUI5 projesi oluşturup dönen veriyi sayfamıza kaynak olarak verebiliriz.Yeni bir SAPUI5 projesi oluşturma ile ilgili link deki yayını inceleyebilirsiniz.

Projemizi oluşturduk isek view ımız ve contoller sayfamızı aşağıdaki kodlar ile şekillendirelim.






 
sap.ui.jsview("zui5_smartform.main", {

 /** Specifies the Controller belonging to this View. 
 * In the case that it is not implemented, or that "null" is returned, this View does not have a Controller.
 * @memberOf zui5_smartform.main
 */ 
 getControllerName : function() {
  return "zui5_smartform.main";
 },

 /** Is initially called once after the Controller has been instantiated. It is the place where the UI is constructed. 
 * Since the Controller is given to this method, its event handlers can be attached right away. 
 * @memberOf zui5_smartform.main
 */ 
 createContent : function(oController) {
  
  var oHTML = new sap.ui.core.HTML("iFRM");  
  
   return new sap.m.Page({
   title: "Smartform pdf olarak görüntüleme",
   content: [
             oHTML
   
   ]
  });
 }

});


 
sap.ui.controller("zui5_smartform.main", {

 onInit: function() {
  
  
  var oHTML = sap.ui.getCore().byId("iFRM");
  var srcURL = "/ZUI502/?method=get_smartform";
  oHTML.setContent( "");
       

  
 }



});


Projemizi SAP web server ımıza yükleyebiliriz. linkden SAPUI5 projesini SAP web server a nasıl yükleneceğine dair yayını inceleyebilirsiniz.

Projemizi SAP web server ımıza yüklediğmize göre , artık browser üzerinde test edebiliriz. Aşağıdaki URL i sizde hostname, port , proje adı bilgilerinizle güncelleyip browser da çalıştırabilirsiniz.

http://<hostname:port>/sap/bc/ui5_ui5/sap/<proje adı>/


Hiç yorum yok :

Yorum Gönder