2007 Jun 25 12:45 PM
2007 Jun 25 12:47 PM
Hi,
Check out this sample code for BDC in HR abap..
REPORT zcmr_022_bdc_eor_it9024 .
----
Types : TY_ *
----
*--> Upload data from the flat file.
TYPES : BEGIN OF ty_9024,
pernr TYPE p9024-pernr, "Personnel Number
begda(10) TYPE c, "Start date
endda(10) TYPE c, "End date
zrtgscl2 TYPE p9024-zrtgscl2, "Rating scale
ZPSCLS TYPE p9024-ZPSCLS , "Position Class
END OF ty_9024.
----
INTERNAL TABLE : IT_ *
----
DATA : it_9024 TYPE TABLE OF ty_9024 , "Uploaded Data
it_files TYPE filetable , "File Name
it_bdcdata TYPE TABLE OF bdcdata , "Insert BDC data
----
WORK AREA : WA_ *
----
wa_9024 TYPE ty_9024 , "Uploaded Data
wa_file TYPE file_table , "File Name
wa_bdcdata TYPE bdcdata , "Insert BDC data
----
DATA : W_ *
----
w_title TYPE string , "Title for the File selection window.
w_rc TYPE i . "Return code for the class
----
SELECTION SCREEN *
----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS : pr_file TYPE localfile OBLIGATORY. "File Name
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
PARAMETERS : pr_sess TYPE d0100_mapn OBLIGATORY, "Session Name
pr_keep TYPE c AS CHECKBOX DEFAULT text-001.
"Session kept in SM35
SELECTION-SCREEN END OF BLOCK b2.
----
AT SELECTION-SCREEN ON VALUE REQUEST *
----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_file.
w_title = text-t03.
*--> Function module to fetch the file name
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = w_title
CHANGING
file_table = it_files
rc = w_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc = 0.
READ TABLE it_files INTO wa_file INDEX 1.
IF sy-subrc IS INITIAL.
MOVE wa_file TO pr_file.
ELSE.
CLEAR pr_file.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
----
START-OF-SELECTION *
----
START-OF-SELECTION.
*--> Upload the flat file
PERFORM f001_upload_it9024.
*--> Insert through transaction
PERFORM f002_insert_it9024.
----
END-OF-SELECTION *
----
END-OF-SELECTION.
&----
*& Form F001_UPLOAD_IT9024
&----
uploads the flatfile to the final internal table.
----
FORM f001_upload_it9024.
DATA : lw_file TYPE string.
MOVE pr_file TO lw_file.
*--> Function Module to fetch the data form flat file to internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lw_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_9024
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
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "F001_UPLOAD_IT9024
&----
*& Form F002_INSERT_IT9024
&----
Insert data to info type 9024
----
FORM f002_insert_it9024.
*--> Opens the session
PERFORM f003_open_group.
LOOP AT it_9024 INTO wa_9024.
PERFORM: f005_bdc_dynpro USING 'SAPMP50A' '1000',
f006_bdc_field USING 'BDC_OKCODE' '=INS',
f006_bdc_field USING 'RP50G-PERNR' wa_9024-pernr,
f006_bdc_field USING 'RP50G-TIMR6' 'X',
f006_bdc_field USING 'RP50G-CHOIC' '9024',
f005_bdc_dynpro USING 'MP902400' '2000',
f006_bdc_field USING 'BDC_OKCODE' '=UPD',
f006_bdc_field USING 'P9024-BEGDA' wa_9024-begda,
f006_bdc_field USING 'P9024-ENDDA' wa_9024-endda,
f006_bdc_field USING 'P9024-ZRTGSCL2' wa_9024-zrtgscl2,
f006_bdc_field USING 'P9024-ZPSCLS' wa_9024-ZPSCLS.
CLEAR wa_9024.
PERFORM f007_bdc_insert USING 'PA30'.
ENDLOOP.
PERFORM f004_close_group.
CALL TRANSACTION 'SM35'.
ENDFORM. "f002_insert_it9024
&----
*& Form f003_open_group
&----
Opens the session
----
FORM f003_open_group.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = pr_sess
keep = pr_keep
user = sy-uname.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "f003_open_group
&----
*& Form F004_CLOSE_GROUP
&----
Closes the BDC group
----
FORM f004_close_group.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "f004_close_group
&----
*& Form F005_BDC_DYNPRO
&----
Uploads the program and screen no to it_bdcdata
----
FORM f005_bdc_dynpro USING program type any dynpro type any.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = dynpro.
wa_bdcdata-dynbegin = 'X'.
APPEND wa_bdcdata TO it_bdcdata.
CLEAR wa_bdcdata.
ENDFORM. "f005_bdc_dynpro
&----
*& Form F006_bdc_field
&----
Uploads field name and field values to it_bdcdata
----
FORM f006_bdc_field USING fnam type any fval type any.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
CLEAR wa_bdcdata.
ENDFORM. "F006_bdc_field
&----
*& Form F007_BDC_INSERT
&----
Uploads the tcode to it_bdcdata
----
FORM f007_bdc_insert USING tcode type any.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = it_bdcdata.
REFRESH it_bdcdata.
ENDFORM. "F007_BDC_INSERT
Hope this helps u.
****Reward points if so.
can you call a bdc program from report program?give exp code?
2007 Jun 25 12:47 PM
Hi,
Check out this sample code for BDC in HR abap..
REPORT zcmr_022_bdc_eor_it9024 .
----
Types : TY_ *
----
*--> Upload data from the flat file.
TYPES : BEGIN OF ty_9024,
pernr TYPE p9024-pernr, "Personnel Number
begda(10) TYPE c, "Start date
endda(10) TYPE c, "End date
zrtgscl2 TYPE p9024-zrtgscl2, "Rating scale
ZPSCLS TYPE p9024-ZPSCLS , "Position Class
END OF ty_9024.
----
INTERNAL TABLE : IT_ *
----
DATA : it_9024 TYPE TABLE OF ty_9024 , "Uploaded Data
it_files TYPE filetable , "File Name
it_bdcdata TYPE TABLE OF bdcdata , "Insert BDC data
----
WORK AREA : WA_ *
----
wa_9024 TYPE ty_9024 , "Uploaded Data
wa_file TYPE file_table , "File Name
wa_bdcdata TYPE bdcdata , "Insert BDC data
----
DATA : W_ *
----
w_title TYPE string , "Title for the File selection window.
w_rc TYPE i . "Return code for the class
----
SELECTION SCREEN *
----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS : pr_file TYPE localfile OBLIGATORY. "File Name
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02.
PARAMETERS : pr_sess TYPE d0100_mapn OBLIGATORY, "Session Name
pr_keep TYPE c AS CHECKBOX DEFAULT text-001.
"Session kept in SM35
SELECTION-SCREEN END OF BLOCK b2.
----
AT SELECTION-SCREEN ON VALUE REQUEST *
----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_file.
w_title = text-t03.
*--> Function module to fetch the file name
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = w_title
CHANGING
file_table = it_files
rc = w_rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc = 0.
READ TABLE it_files INTO wa_file INDEX 1.
IF sy-subrc IS INITIAL.
MOVE wa_file TO pr_file.
ELSE.
CLEAR pr_file.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
----
START-OF-SELECTION *
----
START-OF-SELECTION.
*--> Upload the flat file
PERFORM f001_upload_it9024.
*--> Insert through transaction
PERFORM f002_insert_it9024.
----
END-OF-SELECTION *
----
END-OF-SELECTION.
&----
*& Form F001_UPLOAD_IT9024
&----
uploads the flatfile to the final internal table.
----
FORM f001_upload_it9024.
DATA : lw_file TYPE string.
MOVE pr_file TO lw_file.
*--> Function Module to fetch the data form flat file to internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = lw_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_9024
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
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "F001_UPLOAD_IT9024
&----
*& Form F002_INSERT_IT9024
&----
Insert data to info type 9024
----
FORM f002_insert_it9024.
*--> Opens the session
PERFORM f003_open_group.
LOOP AT it_9024 INTO wa_9024.
PERFORM: f005_bdc_dynpro USING 'SAPMP50A' '1000',
f006_bdc_field USING 'BDC_OKCODE' '=INS',
f006_bdc_field USING 'RP50G-PERNR' wa_9024-pernr,
f006_bdc_field USING 'RP50G-TIMR6' 'X',
f006_bdc_field USING 'RP50G-CHOIC' '9024',
f005_bdc_dynpro USING 'MP902400' '2000',
f006_bdc_field USING 'BDC_OKCODE' '=UPD',
f006_bdc_field USING 'P9024-BEGDA' wa_9024-begda,
f006_bdc_field USING 'P9024-ENDDA' wa_9024-endda,
f006_bdc_field USING 'P9024-ZRTGSCL2' wa_9024-zrtgscl2,
f006_bdc_field USING 'P9024-ZPSCLS' wa_9024-ZPSCLS.
CLEAR wa_9024.
PERFORM f007_bdc_insert USING 'PA30'.
ENDLOOP.
PERFORM f004_close_group.
CALL TRANSACTION 'SM35'.
ENDFORM. "f002_insert_it9024
&----
*& Form f003_open_group
&----
Opens the session
----
FORM f003_open_group.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = pr_sess
keep = pr_keep
user = sy-uname.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "f003_open_group
&----
*& Form F004_CLOSE_GROUP
&----
Closes the BDC group
----
FORM f004_close_group.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "f004_close_group
&----
*& Form F005_BDC_DYNPRO
&----
Uploads the program and screen no to it_bdcdata
----
FORM f005_bdc_dynpro USING program type any dynpro type any.
wa_bdcdata-program = program.
wa_bdcdata-dynpro = dynpro.
wa_bdcdata-dynbegin = 'X'.
APPEND wa_bdcdata TO it_bdcdata.
CLEAR wa_bdcdata.
ENDFORM. "f005_bdc_dynpro
&----
*& Form F006_bdc_field
&----
Uploads field name and field values to it_bdcdata
----
FORM f006_bdc_field USING fnam type any fval type any.
wa_bdcdata-fnam = fnam.
wa_bdcdata-fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
CLEAR wa_bdcdata.
ENDFORM. "F006_bdc_field
&----
*& Form F007_BDC_INSERT
&----
Uploads the tcode to it_bdcdata
----
FORM f007_bdc_insert USING tcode type any.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = it_bdcdata.
REFRESH it_bdcdata.
ENDFORM. "F007_BDC_INSERT
Hope this helps u.
****Reward points if so.
2007 Jun 25 12:48 PM
Hi
Yes, You can call a BDC program from Report.
see the sample report in which it is used
REPORT zm_reservation_alert
NO STANDARD PAGE HEADING
MESSAGE-ID zm_msg.
************************************************************************
D A T A B A S E T A B L E S D E C L A R A T I O N
************************************************************************
T Y P E S D E C L A R A T I O N S
************************************************************************
Reservations Main Structure
TYPES: BEGIN OF s_res,
rsnum TYPE rsnum, " Reservation No
rspos TYPE rspos, " Item No
usnam TYPE usnam, " User Name
bwart TYPE bwart, " Movement Type
aufnr TYPE aufnr, " Order Number
rsart TYPE rsart, " Record Type
bdart TYPE bdart, " Reservation Type
matnr TYPE matnr, " Material No
bdter TYPE bdter, " Req Date
menge TYPE menge_d, " Quantity
kostl TYPE kostl, " Cost Center
usrid TYPE sysid, " User ID
END OF s_res.
Output Main Structure
TYPES: BEGIN OF s_rep,
usnam TYPE usnam, " User Name
rsnum TYPE rsnum, " Reservation No
rspos TYPE rspos, " Item No
matnr TYPE matnr, " Material No
bdter TYPE bdter, " Req Date
menge TYPE menge_d, " Quantity
kostl TYPE kostl, " Cost Center
aufnr TYPE aufnr, " Order Number
END OF s_rep.
User Dept Details
TYPES: BEGIN OF s_dept,
pernr TYPE persno, " Personal No
usrid TYPE sysid, " User ID
orgeh TYPE orgeh, " Orgn Unit
orgtx TYPE orgtx, " Dept Name
END OF s_dept.
For Send Mail Purpose
DATA : i_doc_data LIKE sodocchgi1.
DATA : BEGIN OF i_pack_list OCCURS 0.
INCLUDE STRUCTURE sopcklsti1.
DATA : END OF i_pack_list.
DATA : BEGIN OF i_receivers OCCURS 0.
INCLUDE STRUCTURE somlreci1.
DATA : END OF i_receivers.
DATA : BEGIN OF i_contents OCCURS 0.
INCLUDE STRUCTURE solisti1.
DATA : END OF i_contents.
DATA : BEGIN OF i_header OCCURS 0.
INCLUDE STRUCTURE solisti1.
DATA : END OF i_header.
DATA : BEGIN OF i_att OCCURS 0.
INCLUDE STRUCTURE solisti1.
DATA : END OF i_att.
Internal table for bdcdata
DATA : it_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
Internal table to handle messages
DATA : it_messages LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
************************************************************************
D A T A D E C L A R A T I O N S
************************************************************************
DATA: gv_lines TYPE sy-index, " Total Lines int Table
gv_days TYPE i, " Difference Days
gv_date TYPE sy-datum, " Date
gv_date1 TYPE sy-datum, " Date
gv_date2 TYPE sy-datum, " Date
gv_text(85), " Text Field
gv_mesg(70), " Error Messages
gv_bdc, " BDC Flag
gv_flag TYPE i, " Flag
gv_ernam TYPE ernam. " User ID
************************************************************************
C O N S T A N T S D E C L A R A T I O N S
************************************************************************
CONSTANTS: c_x VALUE 'X', " Flag
c_endda TYPE endda VALUE '99991231'. " Date
************************************************************************
I N T E R N A L T A B L E S D E C L A R A T I O N S
************************************************************************
DATA: i_res TYPE STANDARD TABLE OF s_res WITH HEADER LINE, " Reservns
i_dept TYPE STANDARD TABLE OF s_dept WITH HEADER LINE, " Dept
i_rep TYPE STANDARD TABLE OF s_rep WITH HEADER LINE. " Output
************************************************************************
S T A R T - O F - S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
Fetch main data
PERFORM fetch_data.
Process data
PERFORM process_data.
&----
*& Form fetch_data
&----
Fetching the Reservations related data from Database Tables
----
FORM fetch_data .
CLEAR: gv_date, gv_date1, gv_date2.
gv_date = sy-datum.
gv_date1 = sy-datum - 10.
gv_date2 = sy-datum + 10.
CLEAR i_res.
REFRESH i_res.
SELECT a~rsnum " Reservation No.
b~rspos " Reservation Item
a~usnam " User Name
a~bwart " Movement Type
a~aufnr " Order Number
b~rsart " Record Type
b~bdart " Reservation Type
b~matnr " Material No
b~bdter " Req Date
INTO TABLE i_res
FROM rkpf AS a JOIN resb AS b
ON arsnum = brsnum
WHERE ( b~bdter BETWEEN gv_date1 AND gv_date2 ) AND
b~xloek EQ ' '.
SORT i_res BY rsnum rspos.
DELETE ADJACENT DUPLICATES FROM i_res COMPARING matnr.
Add userid into the i_usr int table
LOOP AT i_res.
i_res-usrid = i_res-usnam.
MODIFY i_res INDEX sy-tabix.
ENDLOOP.
IF NOT i_res[] IS INITIAL.
Get the User Dept Name
CLEAR i_dept.
REFRESH i_dept.
SELECT a~pernr " Personal No
a~usrid " User ID
b~orgeh " Orgn Unit
c~orgtx " Dept Name
INTO TABLE i_dept
FROM pa0105 AS a JOIN pa0001 AS b
ON apernr = bpernr JOIN t527x AS c
ON borgeh = corgeh
FOR ALL ENTRIES IN i_res
WHERE a~usrid = i_res-usrid AND
a~endda EQ c_endda AND
b~endda EQ c_endda.
ENDIF.
SORT i_dept BY pernr.
DELETE ADJACENT DUPLICATES FROM i_dept COMPARING pernr.
Move the Creator of Reservation to a diff table
LOOP AT i_res.
MOVE-CORRESPONDING i_res TO i_rep.
APPEND i_rep.
CLEAR i_rep.
ENDLOOP.
SORT i_rep BY usnam rsnum rspos.
ENDFORM. " Fetch_Data
&----
*& Form process_data
&----
Process the Reservations related data for Expiry Date
----
FORM process_data .
DATA: lv_date1 LIKE sy-datum,
lv_date2 LIKE sy-datum,
lv_date3(10),
lv_menge(13),
lv_tabix LIKE sy-tabix.
LOOP AT i_rep.
CLEAR: gv_days, gv_text, lv_date1, lv_date2,lv_date3.
lv_tabix = sy-tabix.
AT NEW usnam.
Populate the Contents Table
CLEAR i_att.
REFRESH i_att.
i_att = 'Reservations Reminder'(014).
APPEND i_att.
i_att = '----
'.
APPEND i_att.
i_att-line = ' '.
APPEND i_att.
READ TABLE i_dept WITH KEY usrid = i_rep-usnam.
CONCATENATE 'Name:'(003) i_rep-usnam 'Dept:'(015) i_dept-orgtx
INTO i_att-line SEPARATED BY space.
APPEND i_att.
i_att-line = ' '.
APPEND i_att.
i_att = 'Please find the List of expiring Reservations'(004).
APPEND i_att.
i_att-line = ' '.
APPEND i_att.
CONCATENATE '--
'
'--
' INTO
i_att-line SEPARATED BY space.
APPEND i_att.
CONCATENATE 'Reservation #'(006) 'Material #'(007) ' Quantity'(002)
'Due Date'(008) 'Work Center/CC'(005) INTO
i_att-line SEPARATED BY space.
APPEND i_att.
CONCATENATE '--
'
'--
' INTO
i_att-line SEPARATED BY space.
APPEND i_att.
i_att-line = ' '.
APPEND i_att.
ENDAT.
gv_days = i_rep-bdter - gv_date.
lv_date1 = i_rep-bdter + 5.
lv_date2 = i_rep-bdter + 10.
MOVE i_rep-menge TO lv_menge.
WRITE i_rep-bdter TO lv_date3.
IF gv_days = 10.
IF i_rep-aufnr <> space.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-aufnr 'is due for 10 days. Please collect'(009)
INTO gv_text SEPARATED BY space.
ELSE.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-kostl 'is due for 10 days. Please collect'(009)
INTO gv_text SEPARATED BY space.
ENDIF.
i_att-line = gv_text.
APPEND i_att.
CLEAR i_att.
CLEAR gv_text.
ENDIF.
IF gv_days = 5.
IF i_rep-aufnr <> space.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-aufnr 'is due for 5 days. Please collect'(010)
INTO gv_text SEPARATED BY space.
ELSE.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-kostl 'is due for 5 days. Please collect'(010)
INTO gv_text SEPARATED BY space.
ENDIF.
i_att-line = gv_text.
APPEND i_att.
CLEAR i_att.
CLEAR gv_text.
ENDIF.
IF gv_date = lv_date1.
IF i_rep-aufnr <> space.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-aufnr 'is getting cancelled on'(011) lv_date2
INTO gv_text SEPARATED BY space.
ELSE.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-kostl 'is getting cancelled on'(011) lv_date2
INTO gv_text SEPARATED BY space.
ENDIF.
i_att-line = gv_text.
APPEND i_att.
CLEAR i_att.
CLEAR gv_text.
ENDIF.
IF gv_date = lv_date2.
IF i_rep-aufnr <> space.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-aufnr 'is being cancelled'(012)
INTO gv_text SEPARATED BY space.
ELSE.
CONCATENATE i_rep-rsnum i_rep-matnr lv_menge lv_date3
i_rep-kostl 'is being cancelled'(012)
INTO gv_text SEPARATED BY space.
ENDIF.
i_att-line = gv_text.
APPEND i_att.
CLEAR i_att.
CLEAR gv_text.
Mark the Reservation Item 'DELETED' using BDC.
UPDATE resb SET xloek = c_x.
PERFORM delete_item_resb.
ENDIF.
AT END OF usnam.
IF ( gv_days = 10 OR gv_days = 5 OR gv_date = lv_date1 OR
gv_date = lv_date2 ).
Read the User who creates the Reservn and send a mail alert to him
CLEAR : i_receivers,gv_ernam.
REFRESH: i_receivers.
READ TABLE i_rep INDEX lv_tabix.
gv_ernam = i_rep-usnam.
IF gv_ernam <> space.
Send mail Alert to PR Creator(SAP inbox)
PERFORM send_alert_data.
Send Mail to External Mail ID of the SAP USER
PERFORM send_mail_external.
ENDIF.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " Process_data
&----
*& Form delete_item_resb
&----
Set the Deletion Indicator for the Res. Item in RESB
----
FORM delete_item_resb.
gv_bdc = 'N'.
Perform to fill it_bdcdata.
PERFORM fill_it_bdcdata.
Call the Transaction MB22
CALL TRANSACTION 'MB22' USING it_bdcdata MODE 'A' UPDATE 'S'
MESSAGES INTO it_messages.
IF sy-subrc <> 0.
gv_flag = 1.
If error occurs in transaction mode run bdc session for that data
PERFORM bdc_process.
ENDIF.
Handles error messages
PERFORM error_messages.
CLEAR : it_bdcdata, it_messages.
REFRESH : it_bdcdata, it_messages.
IF gv_bdc = 'O'.
close bdc if it is open
PERFORM close_bdc.
ENDIF.
ENDFORM. "delete_item_resb
&----
*& Form FILL_IT_BDCDATA
&----
Filling Bdcdata structure with data
----
FORM fill_it_bdcdata.
PERFORM bdc_dynpro USING 'SAPMM07R' '0560'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RM07M-RSPOS'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RM07M-RSNUM'
i_rep-rsnum.
PERFORM bdc_field USING 'RM07M-RSPOS'
i_rep-rspos.
PERFORM bdc_dynpro USING 'SAPMM07R' '0510'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RESB-XLOEK'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RESB-XLOEK'
c_x.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR'
'COBL-KOSTL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
PERFORM bdc_dynpro USING 'SAPMM07R' '0510'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RESB-ERFMG'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_dynpro USING 'SAPLKACB' '0002'.
PERFORM bdc_field USING 'BDC_CURSOR'
'COBL-KOSTL'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ENTE'.
ENDFORM. " FILL_IT_BDCDATA
&----
*& Form BDC_DYNPRO
&----
Filling the it_bdcdata table with program name & screen number
----
FORM bdc_dynpro USING program LIKE bdcdata-program
dynpro LIKE bdcdata-dynpro.
it_bdcdata-program = program.
it_bdcdata-dynpro = dynpro.
it_bdcdata-dynbegin = 'X'.
APPEND it_bdcdata.
CLEAR it_bdcdata.
ENDFORM. " BDC_DYNPRO
&----
*& Form BDC_FIELD
&----
Filling it_bdcdata with field name and field value
----
FORM bdc_field USING fnam LIKE bdcdata-fnam
fval.
it_bdcdata-fnam = fnam.
it_bdcdata-fval = fval.
APPEND it_bdcdata.
CLEAR it_bdcdata.
ENDFORM. " BDC_FIELD
&----
*& Form ERROR_MESSAGES
&----
Displaying error messages
----
FORM error_messages.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = sy-msgid
lang = sy-langu
IMPORTING
msg = gv_mesg
EXCEPTIONS
not_found = 1
OTHERS = 2.
LOOP AT it_messages WHERE msgtyp = 'E'.
WRITE : / 'Message :'(001) ,gv_mesg.
CLEAR it_messages.
ENDLOOP.
ENDFORM. " ERROR_MESSAGES
&----
*& Form BDC_PROCESS
&----
Open bdc session if call transaction fails
----
FORM bdc_process.
IF gv_bdc = 'N'.
open bdc session
PERFORM open_bdc.
gv_bdc = 'O'.
ENDIF.
IF gv_bdc = 'O'.
insert data into bdc session
PERFORM insert_bdc.
ENDIF.
ENDFORM. " BDC_PROCESS
&----
*& Form OPEN_BDC
&----
Calling function module to open bdc session
----
FORM open_bdc.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = 'ZMM'
keep = 'X'
user = sy-uname
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
ENDFORM. " OPEN_BDC
&----
*& Form INSERT_BDC
&----
Insert it_bdcdata into bdc by calling function module bdc_insert
----
FORM insert_bdc.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'MB22'
TABLES
dynprotab = it_bdcdata
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7.
ENDFORM. " INSERT_BDC
&----
*& Form CLOSE_BDC
&----
Closing bdc session
----
FORM close_bdc.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
ENDFORM. " CLOSE_BDC
&----
*& Form send_alert_data
&----
Send Alert for the Expired Contract
----
FORM send_alert_data .
CLEAR: gv_lines,i_receivers, i_header, i_contents,i_doc_data.
REFRESH : i_receivers,i_header,i_contents.
DESCRIBE TABLE i_att LINES gv_lines.
i_receivers-receiver = gv_ernam.
i_receivers-receiver = 'SSHEIK'.
i_receivers-rec_type = 'B'.
i_receivers-rec_date = sy-datum.
i_receivers-express = 'X'.
i_receivers-com_type = 'INT'.
i_receivers-notif_del = 'X'.
APPEND i_receivers.
i_doc_data-obj_name = 'SAPoffice'(013).
i_doc_data-obj_descr = 'Reservations Reminder'(014).
i_doc_data-obj_langu = 'E'.
i_doc_data-no_change = c_x.
i_doc_data-obj_prio = 1.
i_doc_data-priority = 1.
i_doc_data-doc_size = ( gv_lines - 1 ) * 255 + 135.
i_pack_list-transf_bin = c_x.
i_pack_list-head_start = '1'.
i_pack_list-head_num = '1'.
i_pack_list-body_start = '1'.
i_pack_list-body_num = gv_lines.
i_pack_list-doc_type = 'DOC'.
i_pack_list-obj_name = 'SAPoffice'(013).
i_pack_list-obj_descr = 'Reservations Reminder'(014).
i_pack_list-obj_langu = 'E'.
i_pack_list-doc_size = ( gv_lines - 1 ) * 255 + 135.
APPEND i_pack_list.
i_header-line = 'Header'. APPEND i_header.
Data for contents
i_contents-line = 'Please find the Reservations Due List'(016).
APPEND i_contents.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = i_doc_data
PUT_IN_OUTBOX = 'X'
IMPORTING
SENT_TO_ALL =
NEW_OBJECT_ID =
TABLES
packing_list = i_pack_list
object_header = i_header
contents_bin = i_att
contents_txt = i_contents
receivers = i_receivers
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.
IF sy-subrc = 0.
MESSAGE i000 WITH 'Mail Sucessfully sent'(017).
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " send_alert_data
&----
*& Form send_mail_external
&----
Send mail to External MAIL ID of the PR Creator
----
FORM send_mail_external.
DATA : lv_str(24), lv_str1(40),
lv_pernr LIKE adr6-persnumber,
lv_adrnr LIKE adr6-addrnumber,
lv_usrid LIKE pa0105-usrid,
lv_mail LIKE adr6-smtp_addr,
lv_sendor TYPE syuname,
lv_receiver TYPE string,
lv_header TYPE string,
lv_body TYPE string.
CLEAR: lv_pernr, lv_usrid, lv_adrnr,
lv_mail, lv_sendor, lv_receiver,
lv_header, lv_body .
lv_usrid = gv_ernam.
SELECT SINGLE persnumber addrnumber FROM usr21
INTO (lv_pernr,lv_adrnr)
WHERE bname = lv_usrid.
IF sy-subrc = 0.
SELECT SINGLE smtp_addr INTO lv_mail FROM adr6
WHERE addrnumber = lv_adrnr AND
persnumber = lv_pernr.
IF sy-subrc <> 0.
CONCATENATE lv_usrid '@anc.com' INTO lv_mail.
lv_receiver = lv_mail.
ELSE.
lv_receiver = lv_mail.
ENDIF.
lv_receiver = '[email protected]'.
lv_sendor = 'JALKHATAM'.
lv_header = 'Reservations Reminder'(014).
lv_str = 'Pls check your SAP Inbox'(019).
lv_str1 = 'for the status of Reservations Due List'(020).
CONCATENATE lv_str lv_str1 INTO lv_body
SEPARATED BY space.
Call Function Module To send mail
CALL FUNCTION 'UWSP_SEND_MAIL_TO_WEB'
EXPORTING
id_header = lv_header
id_body = lv_body
id_receiver = lv_receiver
id_sender = lv_sendor
ID_HTML_MAIL =
id_commit_work = 'X'
EXCEPTIONS
error = 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.
ENDIF.
ENDFORM. " send_mail_external
Reward points for useful Answers
Regards
Anji
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |