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

REPORT z_user_logon_180_days .

********************************************

* TABLES

********************************************

TABLES:usr02,
usr21,
adrp,
adr6.

********************************************

* TYPES

********************************************

TYPES:
BEGIN OF ty_final,
bname TYPE usr02-bname,
name_first TYPE adrp-name_first,
name_last TYPE adrp-name_last,
smtp_addr(60),
trdat TYPE usr02-trdat,
period TYPE i,
email_found TYPE c,
END OF ty_final,

BEGIN OF ty_final_temp,
bname(20),
name_first(40),
name_last(40),
smtp_addr(60),
trdat(15),
period(10),
email_found(1),
END OF ty_final_temp,

BEGIN OF ty_adrp,
persnumber TYPE adrp-persnumber,
name_first TYPE adrp-name_first,
name_last TYPE adrp-name_last,
END OF ty_adrp,

BEGIN OF ty_adr6,
addrnumber TYPE adr6-addrnumber,
persnumber TYPE adr6-persnumber,
smtp_addr TYPE adr6-smtp_addr,
END OF ty_adr6,

BEGIN OF ty_usr02,
bname TYPE usr02-bname,
trdat TYPE usr02-trdat,
END OF ty_usr02.

***********************************************

* INTERNAL TABLES

***********************************************

* internal tables to send data to users.


DATA: doc_chng LIKE sodocchgi1,
it_objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
it_objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
it_reclist LIKE somlreci1 OCCURS 5 WITH HEADER LINE.

* internal tables to send data to basis.


DATA:it_upload
TYPE STANDARD TABLE OF solisti1 WITH HEADER LINE,
it_objpack_basis LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE,
it_reclist_basis LIKE somlreci1 OCCURS 5 WITH HEADER LINE,
wa_doc_chng LIKE sodocchgi1,
it_objbin_basis TYPE STANDARD TABLE OF solisti1,
wa_objbin_basis LIKE LINE OF it_objbin_basis,
it_objtxt_basis LIKE solisti1 OCCURS 10 WITH HEADER LINE,
l_cline TYPE solisti1.

*internal table to store fieldnames(header) in excel sheet


DATA: BEGIN OF it_fieldnames OCCURS 0,
string(30),
END OF it_fieldnames.

DATA:
it_final TYPE STANDARD TABLE OF ty_final,
wa_final TYPE ty_final,
it_final_temp TYPE STANDARD TABLE OF ty_final_temp,
wa_final_temp TYPE ty_final_temp,
it_adrp TYPE STANDARD TABLE OF ty_adrp,
wa_adrp TYPE ty_adrp,
it_adr6 TYPE STANDARD TABLE OF ty_adr6,
wa_adr6 TYPE ty_adr6,
it_usr02 TYPE STANDARD TABLE OF ty_usr02,
wa_usr02 TYPE ty_usr02,
it_usr21 TYPE STANDARD TABLE OF usr21,
wa_usr21 TYPE usr21.

**********************************************

* SIMPLE DATA

**********************************************

DATA:w_tab_line TYPE i,
w_subject(255).

*************************************************
* START-OF-SELECTION

*************************************************

START-OF-SELECTION.

*gets user list who have not logged on for


* past 180 days or more
PERFORM get_user_list.
*get mail ids of users to send the mail
PERFORM get_mail_ids.
*send mail to all the users who have not
* logged on for 180 days or maore
PERFORM send_mail.
*send mail to basis with the list of users
PERFORM send_mail_to_basis.

*&------------------------------------

*& Form get_user_list


*&------------------------------------

* gets the list of users with their mail ids


* who have not logged on
* for the past 180 days or more
*--------------------------------------

FORM get_user_list .

DATA:l_date TYPE sy-datum.

l_date = sy-datum - 180.

*selects username and last logon date


*who have not logged on for the
*past 180 days or more
CLEAR it_usr02.
SELECT bname
trdat
FROM usr02
INTO TABLE it_usr02
WHERE trdat LE l_date.

CHECK NOT it_usr02[] IS INITIAL.


*selects address no and person number
CLEAR it_usr21.
SELECT *
FROM usr21
INTO TABLE it_usr21
FOR ALL ENTRIES IN it_usr02
WHERE bname EQ it_usr02-bname.

*selects smtp address for the users


IF NOT it_usr21[] IS INITIAL.
CLEAR it_adr6.
SELECT addrnumber
persnumber
smtp_addr
FROM adr6
INTO TABLE it_adr6
FOR ALL ENTRIES IN it_usr21
WHERE addrnumber EQ it_usr21-addrnumber AND
persnumber EQ it_usr21-persnumber.

*selects first name and last name for the users


CLEAR it_adrp.
SELECT persnumber
name_first
name_last
FROM adrp
INTO TABLE it_adrp
FOR ALL ENTRIES IN it_usr21
WHERE persnumber EQ it_usr21-persnumber.
ENDIF.

SORT it_usr02 BY bname.


SORT it_usr21 BY bname.
SORT it_adr6 BY addrnumber persnumber.
SORT it_adrp BY persnumber.

*populate final table


CLEAR :it_final , wa_final , wa_usr02 , wa_usr21,
wa_adr6 , wa_adrp.

LOOP AT it_usr02 INTO wa_usr02.


READ TABLE it_usr21 INTO wa_usr21
WITH KEY bname = wa_usr02-bname
BINARY SEARCH.
IF sy-subrc EQ 0.
READ TABLE it_adr6 INTO wa_adr6 WITH KEY
addrnumber = wa_usr21-addrnumber
persnumber = wa_usr21-persnumber
BINARY SEARCH.
IF sy-subrc EQ 0.
wa_final-smtp_addr = wa_adr6-smtp_addr.
IF NOT wa_adr6-smtp_addr IS INITIAL.
wa_final-email_found = 'X'.
ELSE.
wa_final-email_found = space.
ENDIF.
ENDIF.

READ TABLE it_adrp INTO wa_adrp WITH KEY


persnumber = wa_usr21-persnumber
BINARY SEARCH.

IF sy-subrc EQ 0.
wa_final-name_first = wa_adrp-name_first.
wa_final-name_last = wa_adrp-name_last.
ENDIF.

wa_final-bname = wa_usr02-bname.
wa_final-trdat = wa_usr02-trdat.
wa_final-period = sy-datum - wa_usr02-trdat.

ENDIF.

APPEND wa_final TO it_final.


CLEAR : wa_final,wa_usr02,wa_usr21,wa_adr6,wa_adrp.
ENDLOOP.

ENDFORM. " get_user_list

*&--------------------------------------

*& Form get_mail_ids


*&--------------------------------------

* stores the mail ids of the users


* who have not logged on for 180
* days or more
*---------------------------------------

FORM get_mail_ids .

CLEAR it_reclist.
REFRESH it_reclist.
LOOP AT it_final INTO wa_final.
IF wa_final-email_found = 'X'.
it_reclist-receiver = wa_final-smtp_addr.
it_reclist-rec_type = 'U'.
APPEND it_reclist.
CLEAR:it_reclist,wa_final.
ENDIF.
ENDLOOP.

ENDFORM. " get_mail_ids

*&----------------------------------------

*& Form send_mail


*&----------------------------------------

* sends mail to the users


*-----------------------------------------

FORM send_mail .

CLEAR :doc_chng,w_subject.
CONCATENATE 'You have not logged on for 180 days for client'
sy-mandt
INTO w_subject SEPARATED BY space.
doc_chng-obj_descr = w_subject.

it_objtxt-line = w_subject.
APPEND it_objtxt.
CLEAR it_objtxt.
it_objtxt-line = text-001.
APPEND it_objtxt.
CLEAR it_objtxt.
it_objtxt-line = text-002.
APPEND it_objtxt.
CLEAR it_objtxt.
it_objtxt-line = text-003.
APPEND it_objtxt.
CLEAR it_objtxt.

DESCRIBE TABLE it_objtxt LINES w_tab_line.

READ TABLE it_objtxt INDEX w_tab_line.

doc_chng-doc_size = ( w_tab_line - 1 ) * 255 +


STRLEN( it_objtxt ).

CLEAR it_objpack-transf_bin.
it_objpack-head_start = 1.
it_objpack-head_num = 0.
it_objpack-body_start = 1.
it_objpack-body_num = w_tab_line.
it_objpack-doc_type = 'RAW'.
APPEND it_objpack.
CLEAR it_objpack.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'


EXPORTING
document_data = doc_chng
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = it_objpack
contents_txt = it_objtxt
receivers = it_reclist
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 EQ 0.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.

ENDFORM. " send_mail


*&-----------------------------------------

*& Form send_mail_to_basis


*&-----------------------------------------

* downloads the list of users and

* sends mail to ercitbasis@ge.com *


* with the list of users
*---------------------------------------
FORM send_mail_to_basis .

*download all the users to Q drive


PERFORM download_list.
*send mail to basis.
PERFORM send_list_to_basis.

ENDFORM. " send_mail_to_basis


*&----------------------------------------------

*& Form download_list


*&----------------------------------------------

* downloads the list of users to excel sheet


*-----------------------------------------------

FORM download_list .

DATA:l_filename TYPE rlgrap-filename ,


l_filetype TYPE rlgrap-filetype,
l_file(100).

CLEAR it_fieldnames.
REFRESH it_fieldnames.

it_fieldnames-string = 'SSO ID'.


APPEND it_fieldnames.CLEAR it_fieldnames.
it_fieldnames-string = 'First Name'.
APPEND it_fieldnames.CLEAR it_fieldnames.
it_fieldnames-string = 'Last Name'.
APPEND it_fieldnames.CLEAR it_fieldnames.
it_fieldnames-string = 'SMTP Address'.
APPEND it_fieldnames.CLEAR it_fieldnames.
it_fieldnames-string = 'Date of last Logon'.
APPEND it_fieldnames.CLEAR it_fieldnames.
it_fieldnames-string = 'Days not logged on'.
APPEND it_fieldnames.CLEAR it_fieldnames.
it_fieldnames-string = 'Email Sent'.
APPEND it_fieldnames.CLEAR it_fieldnames.

CLEAR it_final_temp.
REFRESH it_final_temp.
LOOP AT it_final INTO wa_final.

wa_final_temp-bname = wa_final-bname.
wa_final_temp-name_first = wa_final-name_first.
wa_final_temp-name_last = wa_final-name_last.
wa_final_temp-smtp_addr = wa_final-smtp_addr.
wa_final_temp-trdat = wa_final-trdat.
wa_final_temp-period = wa_final-period.
wa_final_temp-email_found = wa_final-email_found.

APPEND wa_final_temp TO it_final_temp.


CLEAR :wa_final_temp,wa_final.
ENDLOOP.

CONCATENATE 'C:\' sy-repid '_' sy-datum '.XLS' INTO l_file.


l_filename = l_file.

*using WS_DOWNLOAD instead of


*GUI_DOWNLOAD as the columnnames(header)
*are not appearing in Excel sheet while using GUI_DOWNLOAD
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
filename = l_filename
filetype = 'DAT'
TABLES
data_tab = it_final_temp
fieldnames = it_fieldnames
EXCEPTIONS
file_open_error =1
file_write_error =2
invalid_filesize =3
invalid_type =4
no_batch =5
unknown_error =6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error =9
no_authority = 10
OTHERS = 11.
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. " download_list


*&----------------------------------------

*& Form send_list_to_basis


*&----------------------------------------

* sends mail to ercitbasis.ge.com


*-----------------------------------------

FORM send_list_to_basis .

DATA: w_path LIKE rlgrap OCCURS 0 WITH HEADER LINE,


lt_index TYPE sy-tabix,
doc_type(3) TYPE c,
descr LIKE it_objpack_basis-obj_descr,
temp_data LIKE w_path,
temp1 TYPE string,
tab_lines TYPE i,
langu(15) TYPE c,
expirydate TYPE so_obj_edt,
L_FILE1(100).

CONCATENATE 'C:\' sy-repid '_' sy-datum '.XLS' INTO L_FILE1.


W_PATH-FILENAME = L_FILE1.
APPEND w_path.
CLEAR w_path.

wa_doc_chng-obj_descr = 'User List not logged on for 180 days'.


wa_doc_chng-obj_langu = 'E'.
wa_doc_chng-obj_expdat = sy-datum.

CLEAR w_subject.
CONCATENATE 'Please find attached document with list of users'
'not logged on for 180 days for client' sy-mandt
INTO w_subject SEPARATED BY space.

it_objtxt_basis-line = w_subject.
APPEND it_objtxt_basis.
CLEAR it_objtxt_basis.
it_objtxt_basis-line = text-004.
APPEND it_objtxt_basis.
CLEAR it_objtxt_basis.

CLEAR w_tab_line.
DESCRIBE TABLE it_objtxt_basis LINES w_tab_line.

READ TABLE it_objtxt_basis INDEX w_tab_line INTO l_cline.

wa_doc_chng-doc_size =
( w_tab_line - 1 ) * 255 + STRLEN( l_cline ).

CLEAR it_objpack_basis-transf_bin.
it_objpack_basis-head_start = 1.
it_objpack_basis-head_num = 0.
it_objpack_basis-body_start = 1.
it_objpack_basis-body_num = w_tab_line.
it_objpack_basis-doc_type = 'RAW'.
APPEND it_objpack_basis.
CLEAR it_objpack_basis.

LOOP AT w_path.
temp1 = w_path.
descr = w_path.
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = descr
lang = 'E'
IMPORTING
rstring = descr.
CALL FUNCTION 'STRING_SPLIT'
EXPORTING
delimiter = '\'
string = descr
IMPORTING
head = descr
tail = temp_data.

CALL FUNCTION 'STRING_REVERSE'


EXPORTING
string = descr
lang = 'E'
IMPORTING
rstring = descr.

CALL FUNCTION 'STRING_SPLIT'


EXPORTING
delimiter = '.'
string = descr
IMPORTING
head = temp_data
tail = doc_type.

CALL FUNCTION 'GUI_UPLOAD'


EXPORTING
filename = temp1
filetype = 'BIN'
header_length = 0
read_by_line = 'X'
replacement = '#'
TABLES
data_tab = it_upload.

DESCRIBE TABLE it_upload LINES tab_lines.


DESCRIBE TABLE it_objbin_basis LINES lt_index.
lt_index = lt_index + 1.

LOOP AT it_upload.
wa_objbin_basis-line = it_upload-line.
APPEND wa_objbin_basis TO it_objbin_basis.
CLEAR wa_objbin_basis.
ENDLOOP.

it_objpack_basis-transf_bin = 'X'.
it_objpack_basis-head_start = 0.
it_objpack_basis-head_num = 0.
it_objpack_basis-body_start = lt_index.
it_objpack_basis-body_num = tab_lines.
it_objpack_basis-doc_type = doc_type.
it_objpack_basis-obj_descr = descr.
it_objpack_basis-doc_size = tab_lines * 255.
APPEND it_objpack_basis.
CLEAR it_objpack_basis.

ENDLOOP.

it_reclist_basis-receiver = ‘xyz@xyz.com’.
it_reclist_basis-rec_type = 'U'.
APPEND it_reclist_basis.
CLEAR it_reclist_basis.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'


EXPORTING
document_data = wa_doc_chng
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = it_objpack_basis
contents_txt = it_objtxt_basis
contents_bin = it_objbin_basis
receivers = it_reclist_basis
EXCEPTIONS
too_many_receivers =1
document_not_sent =2
operation_no_authorization = 4
OTHERS = 99.
IF sy-subrc EQ 0.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.

ENDFORM. " send_list_to_basis

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