FM - ZXXX_READ_FILE_RECORD
Source code
TYPES : BEGIN OF types_tvarvc,
low TYPE tvarvc-low,
END OF types_tvarvc.
DATA: s_data TYPE zpts2_data, "
v_filedir TYPE char120,
v_file TYPE string,
v_msg TYPE string,
v_exit TYPE char1,
v_text TYPE string, "
v_count TYPE i,
v_count1 TYPE i, " File Header)
v_no_record TYPE char8,
v_count2 TYPE i,
v_len_name TYPE i,
v_action TYPE char6,
v_pos TYPE i,
v_dummy TYPE char4,
v_scenario TYPE char6,
v_scenario_val TYPE char9,
v_error_txt TYPE string,
v_pos1 TYPE i, "
v_plant TYPE werks_d, "
v_matkl TYPE matkl,
v_error TYPE c,
v_scenario1 TYPE char6,
v_scenario_val1 TYPE char9, "
s_error_log TYPE zpts2_data,
t_error_temp TYPE zpts2_t_data.
DATA: v_ref TYPE REF TO cx_root. DATA: v_error1 TYPE char1,
v_lines TYPE char20,
tb_data1 TYPE STANDARD TABLE OF zpts2_data,
s_data1 TYPE zpts2_data,
v_string TYPE char6,
v_string1 TYPE char20,
v_string2 TYPE char20,
v_total TYPE char20.
DATA : t_tvarvc TYPE TABLE OF types_tvarvc,
v_var TYPE xstring,
v_col_head TYPE string,
v_head_file TYPE string,
v_space TYPE string,
v_flag TYPE c.
FIELD-SYMBOLS : <fs_tvarvc> TYPE types_tvarvc.
CONSTANTS : c_pchg1 TYPE tvarvc-name VALUE 'ZXXX_CHANGE_PLNORD1',
c_pchg2 TYPE tvarvc-name VALUE 'ZXXX_CHANGE_PLNORD2',
c_pcrt1 TYPE tvarvc-name VALUE 'ZXXX_CREATE_PLNORD1',
c_pcrt2 TYPE tvarvc-name VALUE 'ZXXX_CREATE_PLNORD2',
c_pr_crt1 TYPE tvarvc-name VALUE 'ZXXX_CREATE_PREQ1',
c_pr_crt2 TYPE tvarvc-name VALUE 'ZXXX_CREATE_PREQ2',
c_cplnord TYPE char15 VALUE 'CHANGE_PLNORD',
c_crplnord TYPE char15 VALUE 'CREATE_PLNORD',
c_prplnord TYPE char15 VALUE 'CREATE_PREQ',
c_hash TYPE char1 VALUE '#'.
CONSTANTS: c_global TYPE char6 VALUE 'GLOBAL',
c_all TYPE char3 VALUE 'ALL'.
IF NOT im_file_dir IS INITIAL AND
NOT im_filename IS INITIAL.
CLEAR v_count.
v_len_name = strlen( im_filename ).
v_count2 = v_len_name - 4.
SPLIT im_filename+0(v_count2) AT c_sep1 INTO v_action v_dummy v_scenari
o v_scenario_val.
v_filedir = im_file_dir.
CONCATENATE v_filedir im_filename INTO v_file.
OPEN DATASET v_file FOR INPUT IN TEXT MODE
ENCODING UTF-8
MESSAGE v_msg.
IF sy-subrc <> 0.
s_error_log-data = v_msg. "Message
APPEND s_error_log TO t_error_temp.
CLEAR: s_error_log.
ELSE.
DO.
TRY.
READ DATASET v_file INTO s_data-data.
IF sy-subrc EQ c_0
AND s_data-data IS NOT INITIAL.
IF v_flag IS INITIAL.
v_flag = c_x.
MOVE s_data-data TO v_head_file.
IF im_filename CS c_cplnord.
SELECT low
FROM tvarvc
INTO TABLE t_tvarvc
WHERE name = c_pchg1
OR name = c_pchg2.
ELSEIF im_filename CS c_crplnord.
SELECT low
FROM tvarvc
INTO TABLE t_tvarvc
WHERE name = c_pcrt1
OR name = c_pcrt2.
ELSEIF im_filename CS c_prplnord.
SELECT low
FROM tvarvc
INTO TABLE t_tvarvc
WHERE name = c_pr_crt1
OR name = c_pr_crt2.
ENDIF.
IF t_tvarvc IS NOT INITIAL.
LOOP AT t_tvarvc ASSIGNING <fs_tvarvc>.
CONCATENATE v_col_head <fs_tvarvc>-low INTO v_col_head.
CONDENSE v_col_head NO-GAPS.
ENDLOOP.
CONDENSE v_head_file NO-GAPS.
IF v_head_file+0(1) NE v_col_head+0(1).
v_space = v_head_file+0(1).
SHIFT v_head_file BY 1 PLACES LEFT.
ENDIF.
IF sy-subrc EQ 0 AND v_head_file IS NOT INITIAL.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizo
ntal_tab IN v_head_file WITH c_space.
CONDENSE v_head_file NO-GAPS.
REPLACE ALL OCCURRENCES OF c_hash IN v_col_head WITH c_sp
ace.
CONDENSE v_col_head NO-GAPS.
IF v_head_file NE v_col_head.
s_error_log-data = text-009.
APPEND s_error_log TO t_error_temp.
CLEAR: s_error_log.
EXIT.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF im_rr_opt = c_pur_req AND sy-index = c_1.
IF s_data-data CA '0123456789'.
v_error1 = c_x.
EXIT.
ENDIF.
ELSEIF im_rr_opt = c_pln_ord AND sy-index = c_1.
IF s_data-data CA '0123456789'.
v_error1 = c_x.
EXIT.
ENDIF.
ENDIF.
IF im_rr_opt = c_pur_req AND sy-index GT '1'.
v_count = v_count + 1.
APPEND s_data TO tb_data.
CLEAR s_data.
ELSEIF im_rr_opt = c_pln_ord AND sy-index GT '1'.
v_count = v_count + 1.
APPEND s_data TO tb_data.
CLEAR s_data.
ENDIF.
ELSE.
IF sy-subrc EQ c_0.
v_error = c_x.
ENDIF.
EXIT.
ENDIF.
CATCH cx_sy_file_authority INTO v_ref.
v_text = v_ref->get_text( ).
CATCH cx_sy_file_io INTO v_ref.
v_text = v_ref->get_text( ).
IF NOT v_text IS INITIAL.
v_exit = c_x.
EXIT.
ENDIF.
ENDTRY.
ENDDO.
CLOSE DATASET v_file.
IF im_rr_opt = c_pur_req
OR im_rr_opt = c_pln_ord.
tb_data1[] = tb_data[].
DESCRIBE TABLE tb_data1 LINES v_lines.
READ TABLE tb_data1 INTO s_data1 INDEX v_lines.
IF sy-subrc = 0.
CONDENSE v_lines NO-GAPS.
SPLIT s_data1-data AT c_tab INTO v_string1 v_string2.
v_total = v_lines - 1.
CONDENSE v_total NO-GAPS.
CONDENSE v_string1 NO-GAPS.
IF v_total <> v_string1.
v_error_txt = 'Record count mismatch'(010).
s_error_log-data = v_error_txt.
APPEND s_error_log TO t_error_temp.
CLEAR: v_error_txt,
s_error_log.
REFRESH: tb_data[].
ENDIF.
ENDIF.
IF v_error1 IS NOT INITIAL.
v_error_txt = 'Incorrect File Format'(009).
s_error_log-data = v_error_txt.
APPEND s_error_log TO t_error_temp.
CLEAR: v_error_txt,
s_error_log.
REFRESH: tb_data[].
ELSE.
IF ( v_scenario <> c_plant AND v_scenario <> c_matgp AND v_scenario
<> c_global ).
s_error_log-data = text-008.
APPEND s_error_log TO t_error_temp.
CLEAR: s_error_log.
REFRESH: tb_data[].
ELSEIF ( v_scenario EQ c_global AND v_scenario_val <> c_all )
s_error_log-data = text-008.
APPEND s_error_log TO t_error_temp.
CLEAR: s_error_log.
REFRESH: tb_data[].
ENDIF.
IF v_scenario = c_matgp.
SELECT SINGLE matkl
FROM t023 INTO v_matkl
WHERE matkl = v_scenario_val.
IF sy-subrc NE c_0.
s_error_log-data = text-008.
APPEND s_error_log TO t_error_temp.
CLEAR: s_error_log.
REFRESH: tb_data[].
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF
IF v_exit = c_x.
s_error_log-data = v_text.
APPEND s_error_log TO t_error_temp.
CLEAR: s_error_log.
ENDIF.
ENDIF.
IF NOT t_error_temp[] IS INITIAL.
APPEND LINES OF t_error_temp TO tb_error_log.
ENDIF.
CLEAR: s_data,
v_filedir,
v_file,
v_msg,
v_exit,
v_text,
v_count,
v_count1,
v_no_record,
v_count2,
v_len_name,
v_action,
v_dummy,
v_scenario,
v_scenario_val,
v_error_txt,
v_pos1,
v_plant,
v_matkl,
v_error, "
v_scenario1, "
v_scenario_val1, "
s_error_log.
REFRESH: t_error_temp.
ENDFUNCTION.
FM - ZXXX_DELETE_PR_RECORD
Code
DATA: v_preq_no TYPE banfn,
s_delete_preq TYPE zpts2_eban,
s_item_delete TYPE zpts2_item_delete,
s_return TYPE zpts2_return,
s_error_log TYPE zpts2_data,
t_delete_preq TYPE zpts2_t_eban,
t_item_delete TYPE zpts2_t_item_delete,
t_return TYPE zpts2_t_return.
t_delete_preq[] = tb_delete_preq[].
LOOP AT t_delete_preq INTO s_delete_preq.
v_preq_no = s_delete_preq-banfn.
s_item_delete-preq_item = s_delete_preq-bnfpo.
s_item_delete-delete_ind = c_x.
APPEND s_item_delete TO t_item_delete.
CALL FUNCTION 'BAPI_REQUISITION_DELETE'
EXPORTING
number = v_preq_no
TABLES
requisition_items_to_delete = t_item_delete
return = t_return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
IF NOT t_return[] IS INITIAL.
LOOP AT t_return INTO s_return.
IF s_return-type = c_e. "Message Type -> Error
CONCATENATE s_return-message v_preq_no
INTO s_error_log-data SEPARATED BY c_space.
APPEND s_error_log TO tb_error_log.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR: v_preq_no,
s_error_log,
s_delete_preq,
s_item_delete,
s_return,
t_item_delete[],
t_return[].
ENDLOOP.
FM - ZXXX_VALIDATION_PR_LOAD
Code
DATA: v_name TYPE rvari_vnam,
v_name1 TYPE rvari_vnam,
v_name2 TYPE rvari_vnam,
v_error_txt TYPE string,
s_record TYPE zpts2_data,
s_error_log TYPE zpts2_data,
t_error_log TYPE zpts2_t_data,
t_var_value TYPE zpts2_t_rr_var,
t_create_preq TYPE zpts2_t_create_preq.
IF NOT tb_create_preq[] IS INITIAL .
t_create_preq[] = tb_create_preq[].
t_var_value[] = tb_var_value[].
SORT t_create_preq BY material
rec_plant
sup_plant.
v_name = c_mmsta.
v_name1 = c_dismm.
v_name2 = c_beskz.
PERFORM check_data_create USING v_name
v_name1
v_name2
t_var_value
CHANGING t_create_preq
t_error_log.
IF NOT t_create_preq[] IS INITIAL.
tb_create_preq[] = t_create_preq[].
ELSE.
REFRESH: tb_create_preq[].
ENDIF.
IF NOT t_error_log[] IS INITIAL.
APPEND LINES OF t_error_log TO tb_error_log.
ENDIF.
ENDIF.
CLEAR: v_name,
v_name1,
v_name2,
v_error_txt,
s_record,
s_error_log.
REFRESH: t_error_log[],
t_var_value[],
t_create_preq[].
FM - ZXXX_LOAD_PR_RECORD
Source code:
DATA: v_preq_no TYPE banfn,
s_create_preq TYPE zpts2_create_preq,
s_req_item TYPE zpts2_req_item,
s_return TYPE zpts2_return,
s_error_log TYPE zpts2_data,
t_create_preq TYPE zpts2_t_create_preq,
t_req_item TYPE zpts2_t_req_item,
t_return TYPE zpts2_t_return.
DATA: v_int TYPE c,
v_revlv TYPE revlv.
DATA : s_pr_head TYPE bapimereqheader,
s_pr_headx TYPE bapimereqheaderx,
s_pr_item TYPE bapimereqitemimp,
s_pr_itemx TYPE bapimereqitemx,
s_pr_outpt TYPE bapimereqheader,
t_pr_item TYPE TABLE OF bapimereqitemimp,
t_pr_itemx TYPE TABLE OF bapimereqitemx,
t_retrn TYPE TABLE OF bapiret2.
FIELD-SYMBOLS : <fs_retrn> TYPE bapiret2.
DATA: v_check TYPE c.
CONSTANTS: c_x TYPE c VALUE 'X',
c_memory TYPE char7 VALUE 'ZINT311'.
t_create_preq[] = tb_create_preq[].
LOOP AT t_create_preq INTO s_create_preq.
CLEAR : t_retrn,
t_pr_item,
t_pr_itemx,
s_pr_head,
s_pr_headx,
s_pr_outpt.
s_pr_head-pr_type = c_nb.
s_pr_headx-pr_type = c_x.
s_pr_item-material = s_create_preq-material. "Material Number
s_pr_item-plant = s_create_preq-rec_plant. "Plant
s_pr_item-store_loc = s_create_preq-loc. "Storage location
s_pr_item-suppl_plnt = s_create_preq-
sup_plant. "Supplying (issuing) plant
s_pr_item-quantity = s_create_preq-
quantity. "Purchase requisition quantity
s_pr_item-unit = s_create_preq-
uom. "Purchase requisition unit of measure
s_pr_item-deliv_date = s_create_preq-req_date. "Item delivery date
s_pr_item-preq_name = sy-uname. "User Name
s_pr_item-gr_ind = c_x.
APPEND s_pr_item TO t_pr_item.
s_pr_itemx-material = c_x.
s_pr_itemx-plant = c_x.
s_pr_itemx-store_loc = c_x.
s_pr_itemx-suppl_plnt = c_x.
s_pr_itemx-quantity = c_x.
s_pr_itemx-unit = c_x.
s_pr_itemx-deliv_date = c_x.
s_pr_itemx-preq_name = c_x.
s_pr_itemx-gr_ind = c_x.
APPEND s_pr_itemx TO t_pr_itemx.
CLEAR: v_check.
v_check = c_x.
FREE MEMORY ID c_memory.
EXPORT v_check FROM v_check TO MEMORY ID c_memory.
CALL FUNCTION 'BAPI_PR_CREATE'
EXPORTING
prheader = s_pr_head
prheaderx = s_pr_headx
IMPORTING
number = s_pr_outpt-preq_no
prheaderexp = s_pr_outpt
TABLES
return = t_retrn
pritem = t_pr_item
pritemx = t_pr_itemx.
IF sy-subrc EQ 0 AND s_pr_outpt-preq_no IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
IF NOT t_retrn[] IS INITIAL.
LOOP AT t_retrn ASSIGNING <fs_retrn>.
IF <fs_retrn>-type = c_e.
s_error_log-data = <fs_retrn>-message.
APPEND s_error_log TO tb_error_log.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
FREE MEMORY ID c_memory.
CLEAR: v_preq_no,
s_error_log,
s_create_preq,
s_req_item,
s_return,
t_return[],
t_req_item[].
ENDLOOP.
FM - Z_PTS_GET_VARIANT_TVARVC
Code :
IF NOT im_name IS INITIAL.
SELECT name
type
numb
sign
opti
low
high
FROM tvarvc
INTO TABLE tb_variant_values
WHERE name IN im_name
AND type = c_s.
IF sy-subrc = 0.
SORT tb_variant_values BY name
numb
low.
ENDIF.
ENDIF.
FM - ZXXX_MOVE_FILES
Code
DATA : v_params TYPE btcxpgpar,
CONSTANTS : c_cmd_value TYPE sxpglogcmd VALUE 'ZSSPMOVE'.
CONCATENATE src_file_path orig_file_name INTO v_src_file_path.
CONDENSE v_src_file_path.
CONCATENATE dest_file_path copy_file_name INTO v_dest_file_path.
CONDENSE v_dest_file_path.
CONCATENATE v_src_file_path v_dest_file_path INTO v_params SEPARATED BY spa
ce.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
commandname = c_cmd_value
additional_parameters = v_params
TABLES
exec_protocol = err_message
EXCEPTIONS
no_permission = 1
command_not_found = 2
parameters_too_long = 3
security_risk = 4
wrong_check_call_interface = 5
program_start_error = 6
program_termination_error = 7
x_error = 8
parameter_expected = 9
too_many_parameters = 10
illegal_command = 11
wrong_asynchronous_parameters = 12
cant_enq_tbtco_entry = 13
jobcount_generation_error = 14
OTHERS = 15.
IF sy-subrc <> 0.
ENDIF.
FM- ZXXX_WRITE_ERROR_LOG
Code:
DATA: s_error_data TYPE zpts2_data, "Work area for file data
s_logtab TYPE zpts2_data, "Error log during processing
v_filedir TYPE char120, "File path
v_file TYPE string, "File path + file name
v_msg TYPE string, "Message during accessing a file
v_exit TYPE char1, "Flag variable
v_text TYPE string. "Messages for exceptions
DATA: v_ref TYPE REF TO cx_root.
IF NOT tb_error_data[] IS INITIAL AND
NOT im_file_dir IS INITIAL AND
NOT im_filename IS INITIAL.
v_filedir = im_file_dir.
CONCATENATE v_filedir im_filename INTO v_file.
OPEN DATASET v_file FOR OUTPUT IN TEXT MODE
ENCODING UTF-8
MESSAGE v_msg.
IF sy-subrc <> 0.
CONCATENATE v_msg im_filename INTO s_logtab-data
SEPARATED BY c_tab.
ELSE.
LOOP AT tb_error_data INTO s_error_data.
TRY.
TRANSFER s_error_data-data TO v_file.
CATCH cx_sy_file_authority INTO v_ref.
v_text = v_ref->get_text( ).
CATCH cx_sy_file_io INTO v_ref.
v_text = v_ref->get_text( ).
IF NOT v_text IS INITIAL.
v_exit = c_x.
EXIT.
ENDIF.
ENDTRY.
CLEAR s_error_data.
ENDLOOP.
CLOSE DATASET v_file.
IF v_exit = c_x.
CONCATENATE v_text im_filename INTO s_logtab-data
SEPARATED BY c_tab.
ENDIF.
ENDIF.
ENDIF.
CLEAR: s_error_data,
s_logtab,
v_filedir,
v_file,
v_msg,
v_exit,
v_text.
FM- ZXXX_MAIL_TO_DIST_LIST
DATA: t_mailid TYPE zpts2_t_mailid,
t_receiver TYPE STANDARD TABLE OF somlreci1,
t_content TYPE STANDARD TABLE OF solisti1,
t_packlst TYPE STANDARD TABLE OF sopcklsti1,
t_objhead TYPE STANDARD TABLE OF solisti1,
s_mailid TYPE zpts2_mailid,
s_receiver TYPE somlreci1,
s_content TYPE solisti1,
s_packlst TYPE sopcklsti1,
s_objhead TYPE solisti1,
s_docdata TYPE sodocchgi1.
DATA: v_email TYPE so_recname,
v_line TYPE char255,
v_des TYPE char50,
v_lines_txt TYPE i.
CONSTANTS: c_name TYPE rvari_vnam VALUE 'ZPTS_RR_INBOUND',
c_raw TYPE char3 VALUE 'RAW',
c_255 TYPE char3 VALUE '255',
c_s TYPE char1 VALUE 'S',
c_o TYPE char1 VALUE 'O',
c_1 TYPE char1 VALUE '1',
c_0 TYPE char1 VALUE '0',
c_x TYPE char1 VALUE 'X',
c_u TYPE char1 VALUE 'U'.
IF NOT im_file_dir IS INITIAL AND
NOT im_filename IS INITIAL.
SELECT low
FROM tvarvc INTO TABLE t_mailid
WHERE name = c_name
AND type = c_s.
IF sy-subrc EQ c_0.
LOOP AT t_mailid INTO s_mailid.
v_email = s_mailid-val.
s_receiver-receiver = v_email.
s_receiver-rec_type = c_u.
APPEND s_receiver TO t_receiver.
CLEAR: v_email,
s_mailid,
s_receiver.
ENDLOOP.
REFRESH: t_content.
CLEAR: v_line,
s_content.
CONCATENATE text-006 im_file_dir INTO v_line SEPARATED BY space.
s_content-line = v_line.
APPEND s_content TO t_content.
IF NOT t_content IS INITIAL.
DESCRIBE TABLE t_content LINES v_lines_txt.
READ TABLE t_content INTO s_content INDEX v_lines_txt.
CONCATENATE text-007 im_filename INTO v_des SEPARATED BY space.
s_docdata-obj_descr = v_des.
s_docdata-
sensitivty = c_o. " 'O' : Standard, normal sensitivity
s_docdata-doc_size = ( v_lines_txt -
c_1 ) * c_255 + STRLEN( s_content ).
CLEAR s_packlst-transf_bin.
s_packlst-head_start = c_1.
s_packlst-head_num = c_0.
s_packlst-body_start = c_1.
s_packlst-body_num = v_lines_txt.
s_packlst-doc_type = c_raw.
APPEND s_packlst TO t_packlst.
CLEAR s_packlst.
s_objhead-line = text-007.
APPEND s_objhead TO t_objhead.
CLEAR s_objhead.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = s_docdata
put_in_outbox = c_x
commit_work = c_x
TABLES
packing_list = t_packlst
object_header = t_objhead
contents_txt = t_content
receivers = t_receiver
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
ENDIF.
ENDIF.
ENDIF.
CLEAR: s_mailid,
s_receiver,
s_content,
s_packlst,
s_objhead,
s_docdata,
v_email,
v_line,
v_des,
v_lines_txt.
REFRESH: t_mailid,
t_receiver,
t_content,
t_packlst,
t_objhead.