OOPS Program Example
OOPS Program Example
OOPS Program Example
char4,
char8,
char10,
char18,
char15,
char5,
char8,
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
char4,
char8,
char10,
char8,
mara-matnr,
bapivbeln-vbeln,
c,
CONSTANTS: c_comma(1)
*----------------------------------------------------------------------*
*
CLASS lcl_sales_order_alta DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_sales_order_alta DEFINITION.
PUBLIC SECTION.
METHODS: f4_help_pc CHANGING path
TYPE ibipparms-path,
modify_screen,
*
chk_app_file IMPORTING path
TYPE char250, " Commented -- KUMJ
X005 -- 10 May 2016
chk_app_file CHANGING path
TYPE char250, " Added -- KUMJX005
-- 10 May 2016
auth_chk_app IMPORTING path
TYPE char250,
upd_file_pc IMPORTING path
TYPE ibipparms-path,
create_so
CHANGING t_data LIKE gt_data
t_output LIKE gt_output,
send_email CHANGING t_output LIKE gt_output,
alv_output CHANGING t_output LIKE gt_output,
upd_file_app IMPORTING path
TYPE char250,
archieve_file_app IMPORTING path
TYPE char250.
ENDCLASS.
"lcl_sales_order_alta DEFINITION
************************************************************************
*&---------------------------------------------------------------------*
*& Include
ZC2C_SALES_ORDER_CREATE_F01
*&---------------------------------------------------------------------*
CLASS lcl_sales_order_alta IMPLEMENTATION.
METHOD f4_help_pc.
"f4_help_pc
METHOD modify_screen.
LOOP AT SCREEN.
IF rb1 = 'X'.
CLEAR p_file_x.
IF screen-name CS 'P_FILE'.
screen-input = 1.
MODIFY SCREEN.
ENDIF.
IF screen-name CS 'P_FILE_X'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
IF rb2 = 'X'.
IF screen-name CS 'P_FILE'.
screen-input = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name CS 'P_FILE_X'.
screen-input = 1.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
IF rb1 <> 'X'.
CLEAR: p_file_x.
ENDIF.
ENDMETHOD.
"modify_screen
METHOD chk_app_file.
** Begin of additions -- KUMJX005 -- 10 May2016
DATA: lv_path TYPE string,
lv_result TYPE abap_bool.
DATA : dir_list TYPE TABLE OF epsfili,
wa_list LIKE LINE OF dir_list.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
dir_name
= '/interfaces/Alta/In/'
file_mask
= 'DPS*'
TABLES
dir_list
= dir_list
EXCEPTIONS
invalid_eps_subdir
= 1
sapgparam_failed
= 2
build_directory_failed = 3
no_authorization
= 4
read_directory_failed
too_many_read_errors
empty_directory_list
OTHERS
=
=
=
=
5
6
7
8.
.
IF sy-subrc EQ 0.
SORT dir_list BY name DESCENDING.
READ TABLE dir_list INTO wa_list INDEX 1.
CONCATENATE '/interfaces/Alta/In/' wa_list-name INTO path.
MOVE path TO lv_path.
CONDENSE : lv_path , path.
ENDIF.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file
= lv_path
RECEIVING
result
= lv_result
EXCEPTIONS
cntl_error
= 1
error_no_gui
= 2
wrong_parameter
= 3
not_supported_by_gui = 4
OTHERS
= 5.
IF lv_result NE space.
MESSAGE 'File not found' TYPE 'E'.
ENDIF.
** End of additions -- KUMJX005 -- 10 May2016
** Begin of comment -- KUMJX005 -- 10 May2016
**
DATA: lv_path TYPE string,
**
lv_result TYPE abap_bool.
**
**
lv_path = path.
**
**
CALL METHOD cl_gui_frontend_services=>file_exist
**
EXPORTING
**
file
= lv_path
**
RECEIVING
**
result
= lv_result
**
EXCEPTIONS
**
cntl_error
= 1
**
error_no_gui
= 2
**
wrong_parameter
= 3
**
not_supported_by_gui = 4
**
OTHERS
= 5.
**
**
IF lv_result NE space.
**
MESSAGE 'File not found' TYPE 'E'.
**
ENDIF.
** End of comment -- KUMJX005 -- 10 May2016
ENDMETHOD.
"chk_app_file
METHOD auth_chk_app.
DATA: lv_msg TYPE string.
OPEN DATASET path FOR INPUT IN TEXT MODE ENCODING DEFAULT
MESSAGE lv_msg.
IF sy-subrc <> 0.
MESSAGE e002 WITH path lv_msg.
ENDIF.
CLOSE DATASET path.
ENDMETHOD.
"auth_chk_app
METHOD upd_file_pc.
DATA lv_filename TYPE string.
lv_filename = path.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename
= lv_filename
filetype
= 'ASC'
CHANGING
data_tab
= gt_tab
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.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF NOT gt_tab[] IS INITIAL.
DELETE gt_tab[] INDEX 1.
LOOP AT gt_tab INTO gw_tab.
CLEAR gw_data.
SPLIT gw_tab AT c_comma INTO gw_data-bb_order
gw_data-location_id
gw_data-cust_number
gw_data-item_num
gw_data-qty
gw_data-uom
gw_data-rdd.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gw_data-cust_number
IMPORTING
output = gw_data-cust_number.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input
= gw_data-item_num
IMPORTING
output
= gw_data-item_num
EXCEPTIONS
length_error = 1
OTHERS
= 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
APPEND gw_data TO gt_data.
ENDLOOP.
ENDIF.
ENDMETHOD.
"upd_file_pc
METHOD create_so.
DATA: lw_hdr
lw_hdrx
lt_return
lw_return
lt_item
lw_item
lt_itemx
lw_itemx
lt_partner
lw_partner
lt_schdl
lw_schdl
lt_schdlx
lw_schdlx
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
DATA: sales_doc
lv_index
lw_data
lv_itemno
lv_schline
TYPE
TYPE
TYPE
TYPE
TYPE
STANDARD TABLE OF
STANDARD TABLE OF
STANDARD TABLE OF
STANDARD TABLE OF
STANDARD TABLE OF
STANDARD TABLE OF
bapisdhd1,
bapisdhd1x,
bapiret2,
bapiret2,
bapisditm,
bapisditm,
bapisditmx,
bapisditmx,
bapiparnr,
bapiparnr,
bapischdl,
bapischdl,
bapischdlx,
bapischdlx.
bapivbeln-vbeln,
sy-tabix,
ty_data,
posnr_va,
etenr.
ty_knvp,
ty_knvp.
AND gw_data-bb_order
= lw_data-bb_order.
CONTINUE.
ENDIF.
*&--HEADER
** Begin of change -- KUMJX005 -- May 5, 2016.
*
lw_hdr-doc_type = 'Z3QT'.
lw_hdr-doc_type = 'ZTQT'.
** End of change -- KUMJX005 -- May 5, 2016.
lw_hdr-req_date_h = gw_data-rdd.
lw_hdr-ref_1
= gw_data-bb_order.
*&--HEADERX
lw_hdrx-updateflag
lw_hdrx-doc_type
lw_hdrx-req_date_h
lw_hdrx-ref_1
= 'I'.
= abap_true.
= abap_true.
= abap_true.
*&--PARTNER
CLEAR lw_knvp.
READ TABLE lt_knvp INTO lw_knvp WITH KEY kunnr = gw_data-cust_number.
IF sy-subrc = 0.
lw_partner-partn_role = 'WE'.
lw_partner-partn_numb = lw_knvp-kunn2.
APPEND lw_partner TO lt_partner.
CLEAR lw_partner.
ENDIF.
lw_partner-partn_role = 'AG'.
lw_partner-partn_numb = gw_data-cust_number.
APPEND lw_partner TO lt_partner.
CLEAR lw_partner.
CLEAR gw_output.
MOVE-CORRESPONDING gw_data TO gw_output.
*&--Call BAPI to create Quotation
CALL FUNCTION 'BAPI_QUOTATION_CREATEFROMDATA2'
EXPORTING
quotation_header_in
= lw_hdr
quotation_header_inx
= lw_hdrx
IMPORTING
salesdocument
= sales_doc
TABLES
return
= lt_return
quotation_items_in
= lt_item
quotation_items_inx
= lt_itemx
quotation_partners
= lt_partner
quotation_schedules_in = lt_schdl
quotation_schedules_inx = lt_schdlx.
READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
gw_output-sales_doc = sales_doc.
APPEND gw_output TO t_output.
CLEAR: gw_output, sales_doc.
ELSE.
ROLLBACK WORK.
LOOP AT lt_return INTO lw_return WHERE type = 'E'.
CLEAR lw_item.
READ TABLE lt_item INTO lw_item WITH KEY itm_number = lw_return-messag
e_v2+0(6).
IF sy-subrc = 0.
gw_output-material = lw_item-material.
ELSE.
READ TABLE lt_item INTO lw_item WITH KEY itm_number = lw_return-mess
age_v1+0(6).
IF sy-subrc = 0.
gw_output-material = lw_item-material.
ENDIF.
ENDIF.
gw_output-msg = lw_return-message.
APPEND gw_output TO gt_output.
CLEAR gw_output-material.
ENDLOOP.
CLEAR gw_output.
ENDIF.
REFRESH: lt_return[], lt_item[], lt_itemx[],
lt_partner[], lt_schdl[], lt_schdlx[].
CLEAR: lw_hdr, lw_hdrx, lv_itemno, lv_schline.
ENDLOOP.
ENDMETHOD.
"create_so
METHOD send_email.
CONSTANTS:
gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab,
gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf.
DATA
DATA
DATA
DATA
send_request
document
recipient
bcs_exception
TYPE
TYPE
TYPE
TYPE
REF
REF
REF
REF
TO
TO
TO
TO
cl_bcs.
cl_document_bcs.
if_recipient_bcs.
cx_bcs.
DATA
DATA
DATA
DATA
main_text
binary_content
size
sent_to_all
TYPE
TYPE
TYPE
TYPE
bcsy_text.
solix_tab.
so_obj_len.
os_boolean.
DATA lv_string
TYPE string.
DATA: lw_email
LIKE LINE OF s_email,
lv_subject TYPE so_obj_des.
CONCATENATE text-001 gc_tab text-002 gc_tab text-003 gc_tab text-004
gc_tab text-005 gc_tab text-006 gc_tab text-007 gc_crlf
INTO lv_string.
CLEAR gw_output.
LOOP AT t_output INTO gw_output.
CONCATENATE lv_string gw_output-bb_order
gc_tab
gw_output-location_id gc_tab
gw_output-cust_number
gw_output-rdd
gw_output-material
gw_output-sales_doc
gw_output-msg
INTO lv_string.
gc_tab
gc_tab
gc_tab
gc_tab
gc_crlf
ENDLOOP.
TRY.
cl_bcs_convert=>string_to_solix(
EXPORTING
iv_string = lv_string
iv_codepage = '4103' "suitable for MS Excel, leave empty
iv_add_bom = 'X'
"for other doc types
IMPORTING
et_solix = binary_content
ev_size = size ).
CATCH cx_bcs.
MESSAGE e445(so).
ENDTRY.
TRY.
*
*
*
-------- create and set document with attachment --------------create document object from internal table with text
APPEND text-031 TO main_text.
lv_subject = text-025.
document = cl_document_bcs=>create_document(
i_type
= 'RAW'
i_text
= main_text
i_subject = lv_subject ).
*
).
*
*
IF sent_to_all IS INITIAL.
MESSAGE i500(sbcoms) WITH lw_email-low.
ELSE.
MESSAGE s022(so).
ENDIF.
* ------------ exception handling ---------------------------------* replace this rudimentary exception handling with your own one !!!
CATCH cx_bcs INTO bcs_exception.
MESSAGE i865(so) WITH bcs_exception->error_type.
ENDTRY.
ENDMETHOD.
"send_email
METHOD alv_output.
DATA: gr_table
gr_functions
gr_disp_settings
gr_columns_tab
gr_column_tab
gr_sorts
gr_sort
gr_aggregations
gr_layout
DATA: lw_key
DATA: l_message
l_exclass
l_excoll
l_exexit
l_exdata
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
REF
REF
REF
REF
REF
REF
REF
REF
REF
TO
TO
TO
TO
TO
TO
TO
TO
TO
cl_salv_table,
cl_salv_functions,
cl_salv_display_settings,
cl_salv_columns_table,
cl_salv_column_table,
cl_salv_sorts,
cl_salv_sort,
cl_salv_aggregations,
cl_salv_layout.
salv_s_layout_key.
string,
REF TO cx_salv_msg,
REF TO cx_salv_not_found,
REF TO cx_salv_existing,
REF TO cx_salv_data_error.
TRY.
CALL METHOD cl_salv_table=>factory
EXPORTING
list_display = if_salv_c_bool_sap=>false
IMPORTING
r_salv_table = gr_table
CHANGING
t_table
= t_output.
IF sy-subrc <> 0.
TRY.
RAISE EXCEPTION TYPE cx_salv_msg
EXPORTING
textid = cx_salv_msg=>cx_root.
CATCH cx_salv_msg INTO l_exclass.
l_message = l_exclass->get_text( ).
MESSAGE l_message TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDTRY.
ENDIF.
CATCH cx_salv_msg INTO l_exclass.
l_message = l_exclass->get_text( ).
MESSAGE l_message TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDTRY.
* Functions
gr_functions = gr_table->get_functions( ).
gr_functions->set_all( abap_true ).
* Display settings
gr_disp_settings = gr_table->get_display_settings( ).
gr_disp_settings->set_striped_pattern( abap_true ).
TRY.
* Columns
gr_columns_tab = gr_table->get_columns( ).
gr_columns_tab->set_optimize( abap_true ).
gr_column_tab ?= gr_columns_tab->get_column( 'BB_ORDER' ).
gr_column_tab->set_medium_text( 'BB_ORDER' ).
gr_column_tab->set_long_text( 'BB_ORDER' ).
gr_column_tab ?= gr_columns_tab->get_column( 'LOCATION_ID' ).
gr_column_tab->set_short_text( 'LOCATION' ).
gr_column_tab->set_medium_text( 'LOCATION_ID' ).
gr_column_tab->set_long_text( 'LOCATION_ID' ).
gr_column_tab ?= gr_columns_tab->get_column( 'CUST_NUMBER' ).
gr_column_tab->set_medium_text( 'CUSTOMER_NUM' ).
gr_column_tab->set_long_text( 'CUSTOMER_NUMBER' ).
gr_column_tab ?= gr_columns_tab->get_column( 'RDD' ).
gr_column_tab->set_short_text( 'ReqDelDate' ).
gr_column_tab->set_medium_text( 'REQ_DEL_DATE' ).
gr_column_tab->set_long_text( 'REQUIRED_DELIVERY_DATE' ).
gr_column_tab ?= gr_columns_tab->get_column( 'MATERIAL' ).
gr_column_tab->set_short_text( 'ITEM_NUM' ).
gr_column_tab->set_medium_text( 'ITEM_NUMBER' ).
gr_column_tab->set_long_text( 'ITEM_NUMBER' ).
gr_column_tab ?= gr_columns_tab->get_column( 'SALES_DOC' ).
gr_column_tab->set_short_text( 'QUOTATION' ).
gr_column_tab->set_medium_text( 'QUOTATION_NUM' ).
gr_column_tab->set_long_text( 'QUOTATION_NUM' ).
gr_column_tab ?= gr_columns_tab->get_column( 'MSG' ).
gr_column_tab->set_medium_text( 'ERROR_MESSAGE' ).
gr_column_tab->set_long_text( 'ERROR_MESSAGE' ).
gr_column_tab->set_output_length( '50' ).
* Sorting and sub-total
gr_sorts = gr_table->get_sorts( ).
gr_sorts->add_sort( columnname = 'BB_ORDER' ).
* Layout
gr_layout = gr_table->get_layout( ).
lw_key-report = sy-repid.
gr_layout->set_key( lw_key ).
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
gr_table->display( ).
CATCH cx_salv_not_found INTO l_excoll.
CALL METHOD l_excoll->if_message~get_longtext
RECEIVING
result = l_message.
"alv_output
METHOD upd_file_app.
DATA: lv_msg TYPE string,
lv_file TYPE string,
lv_count TYPE i.
CLEAR lv_msg.
OPEN DATASET path FOR INPUT IN TEXT MODE ENCODING DEFAULT
MESSAGE lv_msg.
IF sy-subrc = 0.
DO.
READ DATASET path INTO lv_file.
IF sy-subrc = 0.
IF lv_count GE 1.
SPLIT lv_file AT c_comma INTO gw_data-bb_order
gw_data-location_id
gw_data-cust_number
gw_data-item_num
gw_data-qty
gw_data-uom
gw_data-rdd.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gw_data-cust_number
IMPORTING
output = gw_data-cust_number.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input
= gw_data-item_num
IMPORTING
output
= gw_data-item_num
EXCEPTIONS
length_error = 1
OTHERS
= 2.
IF sy-subrc <> 0.
"upd_file_app
METHOD archieve_file_app.
DATA : lv_sourcepath TYPE sapb-sappfad,
lv_targetpath TYPE sapb-sappfad.
CLEAR: lv_sourcepath,
lv_targetpath.
MOVE path TO lv_sourcepath.
lv_targetpath = '/interfaces/Alta/archive/'.
CONCATENATE lv_targetpath lv_sourcepath+20(22) INTO lv_targetpath. " Becaus
e filename will always be of fiexd length
CONDENSE lv_targetpath.
CALL FUNCTION 'ARCHIVFILE_SERVER_TO_SERVER'
EXPORTING
sourcepath = lv_sourcepath
targetpath = lv_targetpath
EXCEPTIONS
error_file = 1
OTHERS
= 2.
IF sy-subrc EQ 0.
DELETE DATASET lv_sourcepath.
ENDIF.
ENDMETHOD.
"archieve_file_app
ENDCLASS.
"lcl_sales_order_alta IMPLEMENTATION