相关事务码 cc01/cc02/cc03
增强内容:1,屏幕增加一些客制化字段,(填各个负责部门的邮箱地址)
2,创建时发邮件给相关负责人
工程变更的主表是AENR,表中有一个结构CI_AENR,客制化字段就加到这个结构中
屏幕增强smod【PCCD0001】
cmod实现上面增强:
///ZXCCATOP
DATA:gs_enhance TYPE ci_aenr,
g_ctrl TYPE cctsd01. "增H改V查A状态控制
///ZXCCAU01 上图EXIT_SAPMC29C_001
MOVE-CORRESPONDING userdata TO gs_enhance.
MOVE-CORRESPONDING ctrldata TO g_ctrl.
///ZXCCAU02 上图EXIT_SAPMC29C_002
MOVE-CORRESPONDING gs_enhance TO userdata.
双击上图屏幕出口,创建1000屏幕
PROCESS BEFORE OUTPUT.
MODULE status_1000. ///屏幕编辑控制
PROCESS AFTER INPUT.
CHAIN.
FIELD:gs_enhance-zecnjh,
gs_enhance-zecntx,
gs_enhance-zecnyl2.
MODULE mod_check ON CHAIN-INPUT. ///输入内容检查
ENDCHAIN.
MODULE user_command_1000. ///本例未实现
MODULE status_1000 OUTPUT.
LOOP AT SCREEN.
IF screen-group1 EQ 'Z1' AND g_ctrl-aktyp EQ 'A'.
screen-input = 'X'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMODULE.
MODULE mod_check INPUT.
PERFORM frm_check_email USING gs_enhance-zecnjh '计划'.
PERFORM frm_check_email USING gs_enhance-zecntx '预留1'.
PERFORM frm_check_email USING gs_enhance-zecnyl2 '预留2'.
ENDMODULE.
FORM frm_check_email USING p_str p_msg.
IF p_str IS INITIAL.
RETURN.
ENDIF.
DATA matcher TYPE REF TO cl_abap_matcher.
DATA match TYPE c LENGTH 1.
matcher = cl_abap_matcher=>create( pattern = '^[a-zA-Z0-9_-|\.]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$'
ignore_case = 'X'
text = p_str ).
match = matcher->match( ) .
IF match IS INITIAL. "返回X表示匹配
MESSAGE |{ p_msg }邮箱地址不合规| TYPE 'E'.
ENDIF.
ENDFORM.
第二部分,创建ECN保存时发邮件,注意更改时不发邮件
se18 BADI 【ECM_UPDATE】
change_at_save触发时编号还没生成
我们在change_before_update处做,(不知道change_in_update里面怎么样,调试没进去,也许是update模式的所以不进)
METHOD if_ex_ecm_update~change_before_update.
READ TABLE delta_aenrb INTO DATA(l_row) INDEX 1.
IF sy-subrc EQ 0 AND l_row-vbkz EQ 'I' ///I创建,cc02好像是U
AND l_row-aennr IS NOT INITIAL ///编号已经生成
AND l_row-zecntx IS NOT INITIAL. ///邮箱已填
DATA:lt_mailbody TYPE bcsy_text,
lv_text TYPE soli.
DATA:l_addr TYPE ad_smtpadr.
DATA:gv_title TYPE so_obj_des. "邮件抬头
l_addr = l_row-zecntx.
lv_text-line = |{ l_row-aennr } { l_row-aetxt } 已创建|.
APPEND lv_text TO lt_mailbody.
gv_title = |ECN变更创建邮件提醒|.
///发邮件需要commit,但此处上下文不能commit【在perform on commit中间】 只能另启一个线程
CALL FUNCTION 'ZFM_ECN_MAIL' STARTING NEW TASK 'ZPRO_ECNMAIL'
EXPORTING
iv_addr = l_addr ///email地址
iv_title = gv_title ///标题
lt_content = lt_mailbody. ///邮件正文
ENDIF.
ENDMETHOD.