İş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.
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