TABLES: zesa_issue_hdr.
PARAMETER: id LIKE zesa_issue_hdr-id OBLIGATORY DEFAULT 1.
PARAMETER: ifile TYPE file_table-filename OBLIGATORY
DEFAULT 'c:issue.xml'.
*———————————————————————-*
* VARIABLES *
*———————————————————————-*
****List of possible filenames.
DATA: ifile_tab TYPE filetable.
****Filetable work area
DATA: ifile_tab_line LIKE LINE OF ifile_tab.
****File Open Return Code
DATA: rc TYPE i.
****Temp File name for function module call.
DATA: ifilename TYPE string.
DATA: issue TYPE REF TO zcl_es_asap_issue_object.
*———————————————————————-*
* SELECTION SCREEN – VALUE REQUES FOR FILENAME *
*———————————————————————-*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR ifile.
DATA: window_title TYPE string.
DATA: path TYPE string.
DATA: filename TYPE string.
DATA: fullpath TYPE string.
MOVE 'Download XML File Location'(001) TO window_title.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = window_title
default_extension = 'xml'
CHANGING
filename = filename
path = path
fullpath = fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.
IF sy-subrc <> 0.
ELSE.
MOVE fullpath TO ifile.
ENDIF.
START-OF-SELECTION.
MOVE ifile TO ifilename.
CREATE OBJECT issue
EXPORTING
id = id
create_mode = abap_false.
DATA: g_ixml TYPE REF TO if_ixml,
g_stream_factory TYPE REF TO if_ixml_stream_factory,
xslt_err TYPE REF TO cx_xslt_exception,
g_encoding TYPE REF TO if_ixml_encoding,
ostream TYPE REF TO if_ixml_ostream.
CONSTANTS: line_length TYPE i VALUE 4096.
TYPES: line_t(line_length) TYPE x,
table_t TYPE STANDARD TABLE OF line_t.
DATA: restab TYPE table_t.
CONSTANTS:
* encoding for download of XML files
encoding TYPE string VALUE 'utf-8'.
DATA: ressize TYPE i.
TRY.
g_ixml = cl_ixml=>create( ).
g_stream_factory = g_ixml->create_stream_factory( ).
g_encoding = g_ixml->create_encoding(
character_set = encoding
byte_order = 0 ).
REFRESH restab.
ostream = g_stream_factory->create_ostream_itable( table = restab ).
ostream->set_encoding( encoding = g_encoding ).
CALL TRANSFORMATION id_indent
SOURCE
asap_issue = issue
RESULT XML restab.
ressize = ostream->get_num_written_raw( ).
CATCH cx_xslt_exception INTO xslt_err.
DATA: s TYPE string.
s = xslt_err->get_text( ).
ENDTRY.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = ressize
filename = ifilename
filetype = 'BIN'
TABLES
data_tab = restab
EXCEPTIONS
OTHERS = 1.
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
document = ifilename
* APPLICATION =
* PARAMETER =
* DEFAULT_DIRECTORY =
* MAXIMIZED =
* MINIMIZED =
* SYNCHRONOUS =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
OTHERS = 8.
REPORT zesu_00_persistance.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETER: p_carrid TYPE sbook-carrid,
p_connid TYPE sbook-connid,
p_fldate TYPE sbook-fldate.
SELECTION-SCREEN END OF BLOCK b1.
DATA: my_flight TYPE REF TO zcl_bc620_00_persist,
seatsocc TYPE sflight-seatsocc,
seatsmax TYPE sflight-seatsmax,
seatsfree TYPE sflight-seatsocc,
ierr TYPE REF TO cx_os_object_not_found,
ierr2 TYPE REF TO cx_os_system_error,
ierr3 TYPE REF TO cx_os_error.
DATA: text TYPE string.
CLASS: zca_bc620_00_persist DEFINITION LOAD.
TRY.
****Use the Agent Class to create an instance of our Persistent Class
my_flight = zca_bc620_00_persist=>agent->get_persistent(
i_carrid = p_carrid
i_connid = p_connid
i_fldate = p_fldate ).
****Perform Calculations using our Get Methods instead of the attributes directly
seatsfree = my_flight->get_seatsmax( ) - my_flight->get_seatsocc( ).
seatsmax = my_flight->get_seatsmax( ).
seatsocc = my_flight->get_seatsocc( ).
WRITE: / 'Seats Free: '(001), seatsfree.
WRITE: / 'Seats Max: '(002), seatsmax.
WRITE: / 'Seats Occupied: '(003), seatsocc.
IF seatsfree > 0.
WRITE: / 'Now Booking a new Person'(004).
seatsocc = my_flight->get_seatsocc( ) + 1.
my_flight->set_seatsocc( seatsocc ).
COMMIT WORK AND WAIT.
CLEAR my_flight.
my_flight = zca_bc620_00_persist=>agent->get_persistent(
i_carrid = p_carrid
i_connid = p_connid
i_fldate = p_fldate ).
seatsfree = my_flight->get_seatsmax( ) - my_flight->get_seatsocc( ).
seatsmax = my_flight->get_seatsmax( ).
seatsocc = my_flight->get_seatsocc( ).
WRITE: / 'Seats Free: '(001), seatsfree.
WRITE: / 'Seats Max: '(002), seatsmax.
WRITE: / 'Seats Occupied: '(003), seatsocc.
ENDIF.
CATCH cx_os_object_not_found INTO ierr.
text = ierr->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_os_system_error INTO ierr2.
text = ierr2->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_os_error INTO ierr3.
text = ierr3->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
REPORT zesu_00_persistance.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETER: p_carrid TYPE sbook-carrid,
p_connid TYPE sbook-connid.
* p_fldate TYPE sbook-fldate.
SELECTION-SCREEN END OF BLOCK b1.
DATA: BEGIN OF isflight1 OCCURS 0,
carrid TYPE sbook-carrid,
connid TYPE sbook-connid,
fldate TYPE sbook-fldate,
END OF isflight1.
DATA: BEGIN OF isflight OCCURS 0,
carrid TYPE sbook-carrid,
connid TYPE sbook-connid,
fldate TYPE sbook-fldate,
my_flight TYPE REF TO zcl_bc620_00_persist,
END OF isflight.
DATA: isflight_line LIKE LINE OF isflight.
DATA: seatsocc TYPE sflight-seatsocc,
seatsmax TYPE sflight-seatsmax,
seatsfree TYPE sflight-seatsocc,
ierr TYPE REF TO cx_os_object_not_found,
ierr2 TYPE REF TO cx_os_system_error,
ierr3 TYPE REF TO cx_os_error.
DATA: text TYPE string.
CLASS: zca_bc620_00_persist DEFINITION LOAD.
TRY.
SELECT carrid connid fldate FROM sflight
INTO TABLE isflight1
WHERE carrid = p_carrid
AND connid = p_connid.
LOOP AT isflight1.
CLEAR isflight_line.
MOVE-CORRESPONDING isflight1 TO isflight_line.
APPEND isflight_line TO isflight.
ENDLOOP.
LOOP AT isflight INTO isflight_line.
isflight_line-my_flight = zca_bc620_00_persist=>agent->get_persistent(
i_carrid = isflight_line-carrid
i_connid = isflight_line-connid
i_fldate = isflight_line-fldate ).
MODIFY isflight FROM isflight_line.
ENDLOOP.
LOOP AT isflight INTO isflight_line.
seatsfree = isflight_line-my_flight->get_seatsmax( )
- isflight_line-my_flight->get_seatsocc( ).
seatsmax = isflight_line-my_flight->get_seatsmax( ).
seatsocc = isflight_line-my_flight->get_seatsocc( ).
WRITE: / isflight_line-carrid, isflight_line-connid, isflight_line-fldate.
WRITE: / 'Seats Free: '(001), seatsfree.
WRITE: / 'Seats Max: '(002), seatsmax.
WRITE: / 'Seats Occupied: '(003), seatsocc.
ENDLOOP.
CATCH cx_os_object_not_found INTO ierr.
text = ierr->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_os_system_error INTO ierr2.
text = ierr2->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_os_error INTO ierr3.
text = ierr3->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
REPORT zesu_00_persistance.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETER: p_carrid TYPE sbook-carrid,
p_connid TYPE sbook-connid,
p_fldate TYPE sbook-fldate.
SELECTION-SCREEN END OF BLOCK b1.
DATA: my_flight TYPE REF TO zcl_bc620_00_persist,
seatsocc TYPE sflight-seatsocc,
seatsmax TYPE sflight-seatsmax,
seatsfree TYPE sflight-seatsocc,
ierr TYPE REF TO cx_os_object_not_found,
ierr2 TYPE REF TO cx_os_system_error,
ierr3 TYPE REF TO cx_os_error,
exc TYPE REF TO cx_root.
DATA: text TYPE string.
CLASS: zca_bc620_00_persist DEFINITION LOAD,
cl_os_system DEFINITION LOAD.
DATA: transaction_manager TYPE REF TO if_os_transaction_manager.
DATA: transaction TYPE REF TO if_os_transaction.
*———————————————————————*
* CLASS transaction_handler DEFINITION
*———————————————————————*
*
*———————————————————————*
CLASS transaction_handler DEFINITION.
PUBLIC SECTION.
METHODS handle FOR EVENT finished OF if_os_transaction
IMPORTING status.
ENDCLASS. "transaction_handler definition
*———————————————————————*
* CLASS transaction_handler IMPLEMENTATION
*———————————————————————*
*
*———————————————————————*
CLASS transaction_handler IMPLEMENTATION.
METHOD handle.
DATA:
my_flight TYPE REF TO zcl_bc620_00_persist.
IF status = oscon_tstatus_fin_success.
MESSAGE 'Update commited' TYPE 'I'.
my_flight = zca_bc620_00_persist=>agent->get_persistent(
i_carrid = p_carrid
i_connid = p_connid
i_fldate = p_fldate ).
seatsfree = my_flight->get_seatsmax( ) - my_flight->get_seatsocc( ).
seatsmax = my_flight->get_seatsmax( ).
seatsocc = my_flight->get_seatsocc( ).
WRITE: / 'Seats Free: '(001), seatsfree.
WRITE: / 'Seats Max: '(002), seatsmax.
WRITE: / 'Seats Occupied: '(003), seatsocc.
ENDIF.
ENDMETHOD. "handle
ENDCLASS. "transaction_handler implementation
DATA handler TYPE REF TO transaction_handler.
LOAD-OF-PROGRAM.
cl_os_system=>init_and_set_modes(
i_external_commit = oscon_false
i_update_mode = oscon_dmode_default ).
START-OF-SELECTION.
transaction_manager = cl_os_system=>get_transaction_manager( ).
transaction = transaction_manager->create_transaction( ).
CREATE OBJECT handler.
SET HANDLER handler->handle FOR transaction.
TRY.
transaction->start( ).
my_flight = zca_bc620_00_persist=>agent->get_persistent(
i_carrid = p_carrid
i_connid = p_connid
i_fldate = p_fldate ).
seatsfree = my_flight->get_seatsmax( ) - my_flight->get_seatsocc( ).
seatsmax = my_flight->get_seatsmax( ).
seatsocc = my_flight->get_seatsocc( ).
WRITE: / 'Seats Free: '(001), seatsfree.
WRITE: / 'Seats Max: '(002), seatsmax.
WRITE: / 'Seats Occupied: '(003), seatsocc.
IF seatsfree > 0.
WRITE: / 'Now Booking a new Person'(004).
seatsocc = my_flight->get_seatsocc( ) + 1.
my_flight->set_seatsocc( seatsocc ).
transaction->end( ).
ENDIF.
CATCH cx_os_object_not_found INTO ierr.
text = ierr->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_os_system_error INTO ierr2.
text = ierr2->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_os_error INTO ierr3.
text = ierr3->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
CATCH cx_root INTO exc.
text = exc->get_text( ).
MESSAGE text TYPE 'I' DISPLAY LIKE 'E'.
ENDTRY.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
25 | |
5 | |
4 | |
2 | |
2 | |
2 | |
2 | |
2 | |
2 | |
2 |