Вы находитесь на странице: 1из 7

*&---------------------------------------------------------------------* *& Report ZV_TS_FRESH_COPY_EXTRACT_PRG *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* *ABSTRACT : This prg is used to upload a ADOBE

OFFLINE FORM which is saved on de sktop * and then then read the PDF Form data and convert them into XML and then into * Abap format so that Adobe Form data will be uploaded into DB Table . REPORT zv_ts_fresh_upload_adobe_form. TYPES: BEGIN OF t_xml_line, data(700) TYPE x, END OF t_xml_line. DATA : lt_file_table TYPE filetable . DATA : lv_rc TYPE i. DATA : lv_filename TYPE string, lv_filelength TYPE i, lt_rawtab TYPE TABLE OF t_xml_line. DATA: pdf_data TYPE xstring. DATA : input_length TYPE i.

*Upload the PDF Form CALL METHOD cl_gui_frontend_services=>file_open_dialog CHANGING file_table = lt_file_table rc = lv_rc * USER_ACTION = * FILE_ENCODING = EXCEPTIONS file_open_dialog_failed = 1 cntl_error = 2 error_no_gui = 3 not_supported_by_gui = 4 OTHERS = 5. . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. READ TABLE lt_file_table INTO lv_filename INDEX 1.

cl_gui_frontend_services=>gui_upload( EXPORTING filename = lv_filename filetype = 'BIN' "Binary

IMPORTING filelength = lv_filelength CHANGING data_tab = lt_rawtab EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 not_supported_by_gui = 17 error_no_gui = 18 OTHERS = 19 ).

*Convert the PDF DATA(WHICH is in Binary Format) to XSTRING CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_filelength * FIRST_LINE = 0 * LAST_LINE = 0 IMPORTING buffer = pdf_data TABLES binary_tab = lt_rawtab * EXCEPTIONS * FAILED = 1 * OTHERS = 2 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.

* Get FP reference DATA: lo_fp TYPE REF TO if_fp VALUE IS INITIAL. lo_fp = cl_fp=>get_reference( ). * For handling exceptions DATA: lo_fpex TYPE REF TO cx_fp_runtime VALUE IS INITIAL. TRY. * Create PDF Object using destination 'ADS' (<-- this is how it is * defined in SM59) DATA: lo_pdfobj TYPE REF TO if_fp_pdf_object VALUE IS INITIAL. lo_pdfobj = lo_fp->create_pdf_object( connection = 'ADS' ).

* Set document lo_pdfobj->set_document( EXPORTING pdfdata = pdf_data ). * Tell PDF object to extract data *this method extracts data is in XML format lo_pdfobj->set_extractdata( ). * Execute the call to ADS lo_pdfobj->execute( ). **************************************************************** ** Get the PDF Form data. * DATA: pdf_form_data TYPE xstring. * lo_pdfobj->get_data( IMPORTING formdata = pdf_form_data ). ** Convert the xstring form data to string so it can be ** processed using the iXML classes. * * DATA: converter TYPE REF TO cl_abap_conv_in_ce. * DATA : formxml TYPE string. * converter = cl_abap_conv_in_ce=>create( input = pdf_form_data ). * converter->read( IMPORTING data = formxml ). * ** process the XML DATA ** Pull in the iXML type group. * TYPE-POOLS: ixml. * ** Get a reference to iXML object. * DATA: l_ixml TYPE REF TO if_ixml. * l_ixml = cl_ixml=>create( ). * ** Get iStream object from StreamFactory * DATA: streamfactory TYPE REF TO if_ixml_stream_factory. * DATA: istream TYPE REF TO if_ixml_istream. * * streamfactory = l_ixml->create_stream_factory( ). * * istream = * streamfactory->create_istream_string( formxml ). ** Create an XML Document class that will be used to process the XML * DATA: document TYPE REF TO if_ixml_document. * document = l_ixml->create_document( ). * ** Create the Parser class * DATA: parser TYPE REF TO if_ixml_parser. * parser = l_ixml->create_parser( stream_factory = streamfactory * istream = istream * document = document ). ** Parse the XML * parser->parse( ). * * * ** Define XML Node type object * DATA: node TYPE REF TO if_ixml_node. * DATA: wa_wa_activity_01 TYPE ztimesheet ."VALUE IS INITIAL, *node = document->find_from_name( name = 'WA_ACTIVITY_01' ). * wa_wa_activity_01 = node->get_value( ).

********************************************************************** *Extract the Data *Now that we have a PDF object we can extract the data by the simple *call of a method. *The extracted data is in XML format. We can do a transformation to *convert the data to ABAP internal table. *In this example the standard identity transformation has been used *which needs a few additional steps of replacing the XML namespace. *But a custom transformation can be used instead and these additional *steps can be avoided. DATA: xml_data TYPE xstring, lt_xml_data TYPE STANDARD TABLE OF xstring. APPEND xml_data TO lt_xml_data. lo_pdfobj->get_data( IMPORTING formdata = xml_data ). * Convert XML data from XSTRING format to STRING format DATA: lv_xml_data_string TYPE string. CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING' EXPORTING im_xstring = xml_data IMPORTING ex_string = lv_xml_data_string. * Remove NEW-LINE character from XML data in STRING format CLASS cl_abap_char_utilities DEFINITION LOAD. REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_xml_data_string WITH ''. * REPLACE ALL OCCURENCES OF cl_abap_char_utilities=>newline IN * lv_xml_data_string WITH ''. * Make the XML envelope compliant with identity transform REPLACE '<?xml version="1.0" encoding="UTF-8"?><data>' IN lv_xml_data_string W ITH '<?xml version="1.0" encoding="iso-8859-1"?><asx:abap xmlns:asx="http://www. sap.com/abapxml" version="1.0"><asx:values>'. REPLACE '</data>' IN lv_xml_data_string WITH '</asx:values></asx:abap>'. REPLACE ALL OCCURRENCES OF 'xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/ " xfa:dataNode="dataGroup"' IN lv_xml_data_string WITH ''. * Apply the identity transform and convert XML into ABAP in one step BREAK-POINT. TYPES : BEGIN OF ty_header_data, empid TYPE y1atl_weekly_ts-empid, begda TYPE y1atl_weekly_ts-begda, endda TYPE y1atl_weekly_ts-endda, END OF ty_header_data. * TYPES : BEGIN OF ty_y1atl_weekly_ts, zps_pspid TYPE y1atl_weekly_ts-zps_pspid, zactivity TYPE y1atl_weekly_ts-zactivity, monday TYPE y1atl_weekly_ts-monday, tuesday TYPE y1atl_weekly_ts-tuesday, wednesday TYPE y1atl_weekly_ts-wednesday, thursday TYPE y1atl_weekly_ts-thursday, friday TYPE y1atl_weekly_ts-friday,

saturday TYPE y1atl_weekly_ts-saturday, sunday TYPE y1atl_weekly_ts-sunday, total TYPE y1atl_weekly_ts-total, END OF ty_y1atl_weekly_ts. TYPES : BEGIN OF ty_dd1, zps_pspid TYPE y1atl_weekly_ts-zps_pspid, END OF ty_dd1. TYPES : BEGIN OF ty_dd2, zps_pspid TYPE y1atl_weekly_ts-zps_pspid, END OF ty_dd2. TYPES : BEGIN OF ty_dd3, zps_pspid TYPE y1atl_weekly_ts-zps_pspid, END OF ty_dd3. DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA : : : : : : : : : : : : : : : : : : : : : : : wa_header_data TYPE ty_header_data . i_y1atl_weekly_ts TYPE TABLE OF ty_y1atl_weekly_ts. wa_y1atl_weekly_ts TYPE ty_y1atl_weekly_ts. i_dd1 TYPE TABLE OF ty_dd1. wa_dd1 TYPE ty_dd1. i_dd2 TYPE TABLE OF ty_dd2. wa_dd2 TYPE ty_dd2. i_dd3 TYPE TABLE OF ty_dd3. wa_dd3 TYPE ty_dd3. i_dd4 TYPE TABLE OF ty_dd1. wa_dd4 TYPE ty_dd1. i_dd5 TYPE TABLE OF ty_dd1. wa_dd5 TYPE ty_dd1. i_dd6 TYPE TABLE OF ty_dd1. wa_dd6 TYPE ty_dd1. i_dd7 TYPE TABLE OF ty_dd1. wa_dd7 TYPE ty_dd1. i_dd8 TYPE TABLE OF ty_dd1. wa_dd8 TYPE ty_dd1. i_dd9 TYPE TABLE OF ty_dd1. wa_dd9 TYPE ty_dd1. i_dd10 TYPE TABLE OF ty_dd1. wa_dd10 TYPE ty_dd1.

DATA : i_final TYPE TABLE OF y1atl_weekly_ts. DATA : wa_final TYPE y1atl_weekly_ts.

CALL TRANSFORMATION id SOURCE XML lv_xml_data_string RESULT header_data = wa_header_data i_y1atl_weekly_ts = i_y1atl_weekly_ts i_dd1 = i_dd1 i_dd2 = i_dd2 i_dd3 = i_dd3 i_dd4 = i_dd4 i_dd5 = i_dd5 i_dd6 = i_dd6 i_dd7 = i_dd7 i_dd8 = i_dd8 i_dd9 = i_dd9

i_dd10 = i_dd10 .

*DATA IS AVAILABLE IN ABAP FORMAT NOW DELETE i_y1atl_weekly_ts WHERE zactivity = space . READ READ READ READ READ READ READ READ READ READ TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE TABLE i_dd1 INTO wa_dd1 INDEX 1. i_dd2 INTO wa_dd2 INDEX 1. i_dd3 INTO wa_dd3 INDEX 1. i_dd4 INTO wa_dd4 INDEX 1. i_dd5 INTO wa_dd5 INDEX 1. i_dd6 INTO wa_dd6 INDEX 1. i_dd7 INTO wa_dd7 INDEX 1. i_dd8 INTO wa_dd8 INDEX 1. i_dd9 INTO wa_dd9 INDEX 1. i_dd10 INTO wa_dd10 INDEX 1.

wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd1-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd2-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd3-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd4-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd5-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd6-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd7-zps_pspid .

APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd8-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd9-zps_pspid . APPEND wa_final TO i_final. wa_final-empid = wa_header_data-empid. wa_final-begda = wa_header_data-begda. wa_final-endda = wa_header_data-endda. wa_final-zps_pspid = wa_dd10-zps_pspid . APPEND wa_final TO i_final. LOOP AT i_y1atl_weekly_ts INTO wa_y1atl_weekly_ts. READ TABLE i_final INTO wa_final INDEX sy-tabix. wa_final-zactivity = wa_y1atl_weekly_ts-zactivity. wa_final-monday = wa_y1atl_weekly_ts-monday. wa_final-tuesday = wa_y1atl_weekly_ts-tuesday. wa_final-wednesday = wa_y1atl_weekly_ts-wednesday. wa_final-thursday = wa_y1atl_weekly_ts-thursday. wa_final-friday = wa_y1atl_weekly_ts-friday. wa_final-saturday = wa_y1atl_weekly_ts-saturday. wa_final-sunday = wa_y1atl_weekly_ts-sunday. wa_final-total = wa_y1atl_weekly_ts-total. MODIFY i_final FROM wa_final INDEX sy-tabix. ENDLOOP. **************************************************************** MODIFY y1atl_weekly_ts FROM TABLE i_final . ENDTRY.

Вам также может понравиться