ECN变更屏幕增强

相关事务码 cc01/cc02/cc03

 

增强内容:1,屏幕增加一些客制化字段,(填各个负责部门的邮箱地址)

                  2,创建时发邮件给相关负责人

 

工程变更的主表是AENR,表中有一个结构CI_AENR,客制化字段就加到这个结构中

屏幕增强smod【PCCD0001】

cmod实现上面增强:

ECN变更屏幕增强_第1张图片

///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变更屏幕增强_第2张图片

 

第二部分,创建ECN保存时发邮件,注意更改时不发邮件

se18 BADI 【ECM_UPDATE】

ECN变更屏幕增强_第3张图片

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.

 

 

 

 

你可能感兴趣的:(SAP,sap)