快速复制用户并邮件通知


  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.