代码开发
1)先调用smartform函数获取OTF格式数据
2)后调用函数CONVERT_OTF转换成PDF格式数据
3)再调用GUI_DOWNLOAD函数下载并邮件发送给采购员 ,涉及表
*&---------------------------------------------------------------------*
*& 包含 ZNMMX037FA
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
*modify by songjiaru 20200519 SQL 性能优化 及 更改收件人邮箱取数逻辑 这里默认的是一个PO 只会存在一个工厂的数据
*不然没办法按照采购部的供应商+采购组织+工厂取ZNMMT037A来取数了
SELECT EKKO~EBELN , EKKO~BEDAT , EKKO~EKGRP , EKKO~LIFNR , EKKO~BUKRS ,
NAST~SPRAS , EKKO~EKORG , EKPO~WERKS
INTO CORRESPONDING FIELDS OF TABLE @GT_DATA
FROM EKKO INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN
JOIN NAST ON NAST~OBJKY = EKKO~EBELN
WHERE EKKO~EBELN IN @S_EBELN
AND EKKO~LIFNR IN @S_LIFNR
AND EKKO~EKORG IN @S_EKORG
AND EKKO~EKGRP IN @S_EKGRP
AND EKKO~BSART IN @S_BSART
AND EKKO~BEDAT IN @S_BEDAT
AND EKPO~WERKS IN @S_WERKS1
AND EKKO~FRGKE = '7'
AND NAST~SPRAS IN @S_SPRAS.
SORT GT_DATA BY EBELN.
DELETE ADJACENT DUPLICATES FROM GT_DATA COMPARING EBELN.
* LOOP AT GT_DATA INTO GS_DATA .
* SELECT SINGLE * FROM ZNMMT037
* WHERE EBELN = GS_DATA-EBELN.
* IF SY-SUBRC = 0.
* IF CK_WFS = 'X'.
* DELETE GT_DATA.
* CONTINUE.
* ENDIF.
* GS_DATA-ICON = '@08@'.
* GS_DATA-MESSAGE = '已有发送记录'.
* GS_DATA-ERDAT = ZNMMT037-ERDAT.
* ENDIF.
*
* SELECT SINGLE NAME1 MCOD1 ADRNR
* INTO (GS_DATA-NAME1,GS_DATA-MCOD1,GS_DATA-ADRNR)
* FROM LFA1
* WHERE LIFNR = GS_DATA-LIFNR.
*
* READ TABLE GT_MAIL INTO GS_MAIL WITH KEY ADRNR = GS_DATA-ADRNR BINARY SEARCH.
* IF SY-SUBRC NE 0.
* SELECT ADDRNUMBER SMTP_ADDR APPENDING TABLE GT_MAIL
* FROM ADR6
* WHERE ADDRNUMBER = GS_DATA-ADRNR.
* SORT GT_MAIL BY ADRNR.
* ENDIF.
*
* LOOP AT GT_MAIL INTO GS_MAIL WHERE ADRNR = GS_DATA-ADRNR.
* IF GS_DATA-SMTP_ADDR IS INITIAL.
* GS_DATA-SMTP_ADDR = GS_MAIL-SMTP_ADDR.
* ELSE.
* GS_DATA-SMTP_ADDR = GS_DATA-SMTP_ADDR && ';' && GS_MAIL-SMTP_ADDR.
* ENDIF.
* ENDLOOP.
*
* MODIFY GT_DATA FROM GS_DATA.
* ENDLOOP.
DATA : LV_TABIX LIKE SY-TABIX.
IF GT_DATA IS INITIAL.
MESSAGE S322(ZMM) DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
SELECT * FROM ZNMMT037 FOR ALL ENTRIES IN @GT_DATA
WHERE ZNMMT037~EBELN = @GT_DATA-EBELN
INTO TABLE @DATA(LT_ZNMMT037).
SORT LT_ZNMMT037 BY EBELN.
DATA : LS_ZNMMT037 LIKE LINE OF LT_ZNMMT037.
SELECT LFA1~LIFNR , LFA1~NAME1 , LFA1~MCOD1
FROM LFA1
WHERE LFA1~LIFNR IN @S_LIFNR
INTO TABLE @DATA(LT_LFA1).
SORT LT_LFA1 BY LIFNR.
DATA : LS_LFA1 LIKE LINE OF LT_LFA1.
SELECT ZNMMT037A~LIFNR , ZNMMT037A~EKORG , ZNMMT037A~WERKS ,ZNMMT037A~EKGRP,ZNMMT037A~EMAIL
FROM ZNMMT037A FOR ALL ENTRIES IN @GT_DATA
WHERE ZNMMT037A~LIFNR = @GT_DATA-LIFNR
AND ZNMMT037A~EKORG = @GT_DATA-EKORG
INTO TABLE @DATA(LT_ZNMMT037A) .
SORT LT_ZNMMT037A BY LIFNR EKORG WERKS EKGRP .
DATA : LS_ZNMMT037A LIKE LINE OF LT_ZNMMT037A.
LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<LFS_DATA>).
*------------填充发送记录---------------*
CLEAR LS_ZNMMT037.
READ TABLE LT_ZNMMT037 INTO LS_ZNMMT037 WITH KEY EBELN = <LFS_DATA>-EBELN BINARY SEARCH.
IF SY-SUBRC = 0.
IF CK_WFS = 'X'.
<LFS_DATA>-FLAG = 'X'.
CONTINUE.
ENDIF.
<LFS_DATA>-ICON = '@08@'.
<LFS_DATA>-MESSAGE = TEXT-002.
<LFS_DATA>-ERDAT = LS_ZNMMT037-ERDAT.
ENDIF.
*-----------填充供应商信息名字等等--------*
CLEAR LS_LFA1.
READ TABLE LT_LFA1 INTO LS_LFA1 WITH KEY LIFNR = <LFS_DATA>-LIFNR BINARY SEARCH.
IF SY-SUBRC = 0.
<LFS_DATA>-NAME1 = LS_LFA1-NAME1.
<LFS_DATA>-MCOD1 = LS_LFA1-MCOD1.
ENDIF.
*--------填充供应商对应的邮件地址---------*
*先根据供应商采购组织工厂采购员找,再根据供应商采购组织工厂找,如果找不到,就根据供应商采购组织找
CLEAR LS_ZNMMT037A.
READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A
WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = <LFS_DATA>-WERKS EKGRP = <LFS_DATA>-EKGRP BINARY SEARCH.
IF SY-SUBRC = 0.
LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX.
IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR
AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = <LFS_DATA>-WERKS AND LS_ZNMMT037A-EKGRP = <LFS_DATA>-EKGRP.
IF <LFS_DATA>-SMTP_ADDR IS INITIAL.
<LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'.
ELSE.
CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ELSE.
READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A
WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = <LFS_DATA>-WERKS BINARY SEARCH.
IF SY-SUBRC = 0.
LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX.
IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR
AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = <LFS_DATA>-WERKS.
IF <LFS_DATA>-SMTP_ADDR IS INITIAL.
<LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'.
ELSE.
CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ELSE.
CLEAR LS_ZNMMT037A.
READ TABLE LT_ZNMMT037A INTO LS_ZNMMT037A
WITH KEY LIFNR = <LFS_DATA>-LIFNR EKORG = <LFS_DATA>-EKORG WERKS = '' BINARY SEARCH.
IF SY-SUBRC = 0.
LOOP AT LT_ZNMMT037A INTO LS_ZNMMT037A FROM SY-TABIX.
IF LS_ZNMMT037A-LIFNR = <LFS_DATA>-LIFNR
AND LS_ZNMMT037A-EKORG = <LFS_DATA>-EKORG AND LS_ZNMMT037A-WERKS = ''.
IF <LFS_DATA>-SMTP_ADDR IS INITIAL.
<LFS_DATA>-SMTP_ADDR = LS_ZNMMT037A-EMAIL && '/'.
ELSE.
CONCATENATE <LFS_DATA>-SMTP_ADDR LS_ZNMMT037A-EMAIL '/' INTO <LFS_DATA>-SMTP_ADDR.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
*end modify
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_OUTPUT_DATA .
DEFINE MAC_FCAT.
CLEAR gs_fcat.
gs_fcat-fieldname = &1.
gs_fcat-coltext = &2.
gs_fcat-key = &3.
gs_fcat-ref_field = &4.
gs_fcat-ref_table = &5.
gs_fcat-just = &6.
* IF &6 = 'R'.
* gs_fcat-no_zero = 'X'.
* ENDIF.
if &1 = 'ICON'.
gs_fcat-icon = 'X'.
endif.
APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION.
CLEAR GT_FCAT.
IF SY-LANGU EQ '1'.
MAC_FCAT 'EBELN' '采购订单号' '' 'EBELN' 'EKKO' ''.
MAC_FCAT 'LIFNR' '供应商' '' 'LIFNR' 'LFA1' ''..
MAC_FCAT 'NAME1' '供应商名称' '' '' '' ''..
MAC_FCAT 'BEDAT' '凭证日期' ' ' '' '' ''.
MAC_FCAT 'EKGRP' '采购组' ' ' '' '' ''.
MAC_FCAT 'MCOD1' '简称' ' ' '' '' ''.
MAC_FCAT 'SPRAS' '语言' ' ' 'SPRAS' 'NAST' ''.
MAC_FCAT 'SMTP_ADDR' '供应商邮件' ' ' '' '' ''.
MAC_FCAT 'ICON' '发送状态' ' ' '' '' ''.
MAC_FCAT 'ERDAT' '发送日期' ' ' '' '' ''.
MAC_FCAT 'MESSAGE' '消息' ' ' '' '' ''.
ELSE.
MAC_FCAT 'EBELN' 'PO' '' 'EBELN' 'EKKO' ''.
MAC_FCAT 'LIFNR' 'Supplier' '' 'LIFNR' 'LFA1' ''..
MAC_FCAT 'NAME1' 'Supplier Name' '' '' '' ''..
MAC_FCAT 'BEDAT' 'Date' ' ' '' '' ''.
MAC_FCAT 'EKGRP' 'Purchase Group' ' ' '' '' ''.
MAC_FCAT 'MCOD1' 'Name For Short' ' ' '' '' ''.
MAC_FCAT 'SPRAS' 'Language' ' ' 'SPRAS' 'NAST' ''.
MAC_FCAT 'SMTP_ADDR' 'Email' ' ' '' '' ''.
MAC_FCAT 'ICON' 'Status' ' ' '' '' ''.
MAC_FCAT 'ERDAT' 'Send Date' ' ' '' '' ''.
MAC_FCAT 'MESSAGE' 'Message' ' ' '' '' ''.
ENDIF.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-BOX_FNAME = 'BOX'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FCAT
I_SAVE = 'U'
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
TABLES
T_OUTTAB = GT_DATA
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA:LV_ANSWER TYPE C.
DATA LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_CLSS TYPE C . "X 代表发送给供应商和采购员 ''代表发送给采购员
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "
IMPORTING
E_GRID = LR_GRID.
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
CASE R_UCOMM.
WHEN 'EMAIL'. "保存事件
LV_CLSS = 'X'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X' AND ICON NE '@08@'.
IF GS_DATA-SMTP_ADDR IS NOT INITIAL.
PERFORM FRM_SEND_MAIL USING GS_DATA-EBELN
GS_DATA-SPRAS
GS_DATA-EKGRP
GS_DATA-MCOD1
GS_DATA-BUKRS
GS_DATA-SMTP_ADDR
LV_CLSS
CHANGING GS_DATA-ICON
GS_DATA-MESSAGE
GS_DATA-ERDAT.
ELSE.
GS_DATA-ICON = '@0A@'.
GS_DATA-MESSAGE = TEXT-003 ."
ENDIF.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
*ADD BY SONGJIARU 20200519 增加只发送给采购员
WHEN 'EMAIL1'.
LV_CLSS = ''.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X' AND ICON NE '@08@'.
* IF GS_DATA-SMTP_ADDR IS NOT INITIAL.
PERFORM FRM_SEND_MAIL USING GS_DATA-EBELN
GS_DATA-SPRAS
GS_DATA-EKGRP
GS_DATA-MCOD1
* GS_DATA-ADRNR
GS_DATA-BUKRS
GS_DATA-SMTP_ADDR
LV_CLSS
CHANGING GS_DATA-ICON
GS_DATA-MESSAGE
GS_DATA-ERDAT.
* ELSE.
* GS_DATA-ICON = '@0A@'.
* GS_DATA-MESSAGE = '邮件为空,不能发送' ."
* ENDIF.
MODIFY GT_DATA FROM GS_DATA.
ENDLOOP.
WHEN 'DOWN'.
LOOP AT GT_DATA INTO GS_DATA WHERE BOX = 'X'.
PERFORM FRM_DOWN_PDF USING GS_DATA-EBELN
GS_DATA-SPRAS.
ENDLOOP.
WHEN '&IC1'.
IF RS_SELFIELD-FIELDNAME = 'EBELN'.
READ TABLE GT_DATA INTO GS_DATA INDEX RS_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
SET PARAMETER ID 'BES' FIELD GS_DATA-EBELN.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
RS_SELFIELD-REFRESH = 'X'."刷新ALV报表
RS_SELFIELD-COL_STABLE = 'X'.
RS_SELFIELD-ROW_STABLE = 'X'.
ENDFORM. "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form frm_set_pf_status2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'PF_STATUS'.
ENDFORM. "FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*& Form FRM_SEND_MAIL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GS_DATA_EBELN
*& --> GS_DATA_SPRAS
*& <-- GS_DATA_ICON
*& <-- GS_DATA_MESSAGE
*& <-- ELSE
*&---------------------------------------------------------------------*
FORM FRM_SEND_MAIL USING P_EBELN
P_SPRAS
P_EKGRP
P_MCOD1
P_BUKRS
P_EMAIL
P_CLSS
CHANGING P_ICON
P_MESSAGE
P_ERDAT.
DATA:LS_ZT37 LIKE ZNMMT037.
DATA:LV_BUTXT LIKE T001-BUTXT.
DATA:LT_CONTENT_BIN TYPE SOLIX_TAB.
DATA: CL_SEND_REQUEST TYPE REF TO CL_BCS,
CL_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
CL_BCS_EXCEPTION TYPE REF TO CX_BCS,
CL_SENDER TYPE REF TO IF_SENDER_BCS,
CL_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA:
LT_MAIN_TEXT TYPE BCSY_TEXT,
LS_MAIN_TEXT LIKE LINE OF LT_MAIN_TEXT,
LV_TITLE TYPE SO_OBJ_DES,
LV_BOOL TYPE OS_BOOLEAN.
DATA:LV_PATH TYPE STRING.
DATA:LT_BIN TYPE TABLE OF TBL1024.
DATA LV_CONTENT TYPE XSTRING.
DATA LV_VLINE TYPE I.
DATA : BEGIN OF LS_RECIEVE,
EMAIL TYPE AD_SMTPADR,
END OF LS_RECIEVE.
DATA : LT_RECIEVE LIKE TABLE OF LS_RECIEVE.
DATA : LV_INDEX1 TYPE I.
DATA : LV_INDEX2 TYPE I.
DATA : LV_INDEX3 TYPE I.
LV_PATH = 'C:\PO\' && P_EBELN && '_' && SY-UZEIT && '.PDF'.
PERFORM FRM_GET_PDF USING P_EBELN P_SPRAS LV_PATH CHANGING P_ICON P_MESSAGE.
IF P_ICON IS INITIAL.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = LV_PATH
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = LV_VLINE
TABLES
DATA_TAB = LT_BIN[].
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
INPUT_LENGTH = LV_VLINE
IMPORTING
BUFFER = LV_CONTENT
TABLES
BINARY_TAB = LT_BIN
EXCEPTIONS
FAILED = 1
OTHERS = 2.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_CONTENT
IMPORTING
OUTPUT_LENGTH = LV_VLINE
TABLES
BINARY_TAB = LT_CONTENT_BIN.
TRY.
* 创建发送请求
CL_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
SELECT SINGLE BUTXT INTO LV_BUTXT
FROM T001
WHERE BUKRS = P_BUKRS.
**处理标题头内容
CONCATENATE LV_BUTXT P_EBELN P_MCOD1 P_EKGRP INTO LV_TITLE SEPARATED BY SPACE.
**处理邮件内容
*DG01 要求加上客制化描述
* IF P_BUKRS EQ 'DG01'.
* IF SY-LANGU EQ '1'.
* LS_MAIN_TEXT =
* '附件是东莞长城开发新订单,请收到订单后邮件回复确认给采购员,并于3个工作日内在供应商平台上确认订单交期。供应商平台网址:https://sp.kaifa.cn '.
* ELSE.
* DATA(LV_STR) = 'The attachment is the new PO of Dongguan Kaifa Technology Co.,Ltd,'
* && 'Please reply to the buyer after receiving the PO, and confirm the order delivery date on the supplier portal within 3 working days.'
* && 'Supplier portal website(URL): https://sp.kaifa.cn '.
* LS_MAIN_TEXT = LV_STR.
* ENDIF.
* APPEND LS_MAIN_TEXT TO LT_MAIN_TEXT.
* ENDIF.
* 创建整理发送内容
CL_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_TEXT = LT_MAIN_TEXT
I_SUBJECT = LV_TITLE ).
* 添加附件
DATA:L_OBJTP TYPE SOODK-OBJTP.
DATA:L_OBJDES TYPE SOOD-OBJDES.
L_OBJTP = 'PDF'.
* l_objdes = p_ebeln && p_mcod1.
CONCATENATE LV_BUTXT P_EBELN P_MCOD1 P_EKGRP INTO L_OBJDES SEPARATED BY SPACE.
CALL METHOD CL_DOCUMENT->ADD_ATTACHMENT
EXPORTING
I_ATTACHMENT_TYPE = L_OBJTP
I_ATTACHMENT_SUBJECT = L_OBJDES
I_ATT_CONTENT_HEX = LT_CONTENT_BIN.
* 添加邮件内容到发送请求
CL_SEND_REQUEST->SET_DOCUMENT( CL_DOCUMENT ).
* 指定邮件发件人为采购员邮箱
* data:lv_sendtype type SX_ADDRTYP value '*',
* lv_address_string type string value 'yuli@kaifa.cn',
* lv_address_name type string value 'Yuli'.
* cl_sender->ADDRESS_TYPE( lv_sendtype ).
* cl_sender->ADDRESS_STRING( EXPORTING result = lv_address_string ).
* cl_sender->ADDRESS_NAME( EXPORTING result = lv_address_name ).
* cl_send_request->set_sender( cl_sender ).
* data: sender type ref to cl_sapuser_bcs,
* lv_uname type sy-uname value 'DTANG.IS'.
* sender = cl_sapuser_bcs=>create( lv_uname ).
* call method cl_send_request->set_sender
* exporting
* i_sender = sender.
*modify by songjiaru 20200519
*----------------指定发件人----------------------------*
CLEAR GS_MAIL-SMTP_ADDR.
SELECT SINGLE SMTP_ADDR INTO GS_MAIL-SMTP_ADDR
FROM T024
WHERE EKGRP = P_EKGRP.
DATA(LO_SENDER) = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
I_ADDRESS_STRING = GS_MAIL-SMTP_ADDR
I_ADDRESS_NAME = GS_MAIL-SMTP_ADDR ).
CALL METHOD CL_SEND_REQUEST->SET_SENDER
EXPORTING
I_SENDER = LO_SENDER.
* "指定邮件接收人
* LOOP AT GT_MAIL INTO GS_MAIL WHERE ADRNR = P_ADRNR.
* CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GS_MAIL-SMTP_ADDR ).
* CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ).
* ENDLOOP.
IF GS_MAIL-SMTP_ADDR IS NOT INITIAL.
CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GS_MAIL-SMTP_ADDR ).
CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ).
ENDIF.
IF P_CLSS = 'X'.
* CLEAR GS_MAIL-SMTP_ADDR.
* SELECT SINGLE SMTP_ADDR INTO GS_MAIL-SMTP_ADDR
* FROM T024
* WHERE EKGRP = P_EKGRP.
LV_INDEX1 = 0.
LV_INDEX2 = 0.
LV_INDEX3 = 1.
CLEAR LT_RECIEVE.
WHILE ( LV_INDEX3 <= STRLEN( P_EMAIL ) ).
LV_INDEX2 = LV_INDEX2 + 1.
LV_INDEX3 = LV_INDEX3 + 1.
IF P_EMAIL+LV_INDEX1(LV_INDEX2) CA '/'.
LV_INDEX2 = LV_INDEX2 - 1 .
LS_RECIEVE-EMAIL = P_EMAIL+LV_INDEX1(LV_INDEX2).
APPEND LS_RECIEVE TO LT_RECIEVE.
CLEAR LS_RECIEVE.
LV_INDEX1 = LV_INDEX3 - 1.
LV_INDEX2 = 0.
ENDIF.
ENDWHILE.
LOOP AT LT_RECIEVE INTO LS_RECIEVE.
CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_RECIEVE-EMAIL ).
CL_SEND_REQUEST->ADD_RECIPIENT( CL_RECIPIENT ).
ENDLOOP.
ENDIF.
** 正式发送并提交作业
CLEAR LV_BOOL.
"将邮件置于发件箱,可以在工作台outbox查看邮件的发送状态及内容
CL_SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ).
CALL METHOD CL_SEND_REQUEST->SEND_REQUEST->SETU_REQUESTED_STATUS
EXPORTING
I_REQUESTED_STATUS = 'N'.
CALL METHOD CL_SEND_REQUEST->SEND_REQUEST->SETU_STATUS_MAIL
EXPORTING
I_STATUS_MAIL = 'A'.
CL_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).
LV_BOOL = CL_SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X').
IF LV_BOOL = 'X'.
COMMIT WORK.
* submit rsconn01 with mode = 'INT' and return.
IF LT_CONTENT_BIN IS INITIAL.
P_ICON = '@0A@'.
P_MESSAGE = TEXT-004. "默认导入成功
ELSE.
P_ICON = '@08@'.
P_MESSAGE = TEXT-005. "默认导入成功
P_ERDAT = SY-DATUM.
CLEAR LS_ZT37.
LS_ZT37-EBELN = P_EBELN.
LS_ZT37-ERDAT = SY-DATUM.
LS_ZT37-ERTIM = SY-UZEIT.
LS_ZT37-ERNAM = SY-UNAME.
MODIFY ZNMMT037 FROM LS_ZT37.
ENDIF.
ELSE.
P_ICON = '@0A@'.
P_MESSAGE = TEXT-006. "默认导入成功
ROLLBACK WORK.
ENDIF.
CATCH CX_BCS INTO CL_BCS_EXCEPTION.
P_ICON = '@0A@'.
P_MESSAGE = TEXT-006 && CL_BCS_EXCEPTION->ERROR_TYPE.. "默认导入成功
ENDTRY.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWN_PDF
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> GS_DATA_EBELN
*& --> GS_DATA_SPRAS
*& --> GS_DATA_TDSPOOLID
*&---------------------------------------------------------------------*
FORM FRM_DOWN_PDF USING P_EBELN
P_SPRAS.
DATA:LV_ICON TYPE ICON-NAME,
LV_MESSAGE TYPE C LENGTH 120.
PERFORM FRM_GET_PDF USING P_EBELN P_SPRAS '' CHANGING LV_ICON LV_MESSAGE.
IF LV_ICON NE ''.
LV_MESSAGE = P_EBELN && LV_MESSAGE.
MESSAGE LV_MESSAGE TYPE 'E' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_PDF
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_EBELN
*& --> P_SPRAS
*& <-- P_ICON
*& <-- P_MESSAGE
*&---------------------------------------------------------------------*
FORM FRM_GET_PDF USING P_EBELN
P_SPRAS
P_PATH
CHANGING P_ICON
P_MESSAGE.
DATA:LT_PDF LIKE TLINE OCCURS 0 WITH HEADER LINE,
LS_PDF LIKE TLINE.
DATA:LS_NAST LIKE NAST,
LV_SUBRC TYPE SY-SUBRC,
LV_VLINE TYPE I,
LV_SMARTFORM_NAME TYPE RS38L_FNAM VALUE 'ZPO_FORM', " 请替换为实际的Smart Form名称
LV_TEMPLATE TYPE STXH-TDNAME VALUE 'ZPO_FORM'. " 请替换为实际的模板名称
FIELD-SYMBOLS <FS_VALUE> TYPE ITCPP.
SELECT SINGLE * INTO LS_NAST
FROM NAST
WHERE OBJKY = P_EBELN
AND SPRAS = P_SPRAS.
CALL FUNCTION 'WFMC_MESSAGE_SINGLE'
EXPORTING
PI_NAST = LS_NAST
IMPORTING
PE_RCODE = LV_SUBRC.
IF LV_SUBRC = 0.
ASSIGN ('(SAPLMEDRUCK)RESULT') TO <FS_VALUE>.
IF <FS_VALUE>-TDSPOOLID IS NOT INITIAL.
CLEAR LT_PDF.
" 使用Smart Forms函数替代原函数
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = ZPO_FORM
IMPORTING
FM_NAME = LV_FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
P_ICON = '@0A@'.
P_MESSAGE = '获取Smart Forms函数失败'.
EXIT.
ENDIF.
" 动态调用Smart Forms函数
CALL FUNCTION LV_FM_NAME
EXPORTING
EXPORTING = 'X'
TEMPLATE = LV_TEMPLATE
OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS
IMPORTING
JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO
TABLES
LINES = LT_PDF
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
P_ICON = '@0A@'.
P_MESSAGE = '执行ZPO_FORM函数失败'.
EXIT.
ENDIF.
" 计算PDF字节数
LV_VLINE = LINES( LT_PDF ).
IF LT_PDF[] IS NOT INITIAL.
"先下载到本地,再上载做为附件
IF P_PATH IS NOT INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = LV_VLINE
FILENAME = P_PATH
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_PDF
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6.
ELSE.
DATA:LV_FILE TYPE STRING.
PERFORM FRM_GET_PATH USING LV_FILE.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = LV_VLINE
FILENAME = LV_FILE
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_PDF
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6.
ENDIF.
ELSE.
P_ICON = '@0A@'.
P_MESSAGE = TEXT-007. "默认导入成功
ENDIF.
ELSE.
P_ICON = '@0A@'.
P_MESSAGE = TEXT-008. "默认导入成功
ENDIF.
ELSE.
P_ICON = '@0A@'.
P_MESSAGE = TEXT-009. "默认导入成功
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_PATH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_PATH
*&---------------------------------------------------------------------*
FORM FRM_GET_PATH USING P_FILE.
DATA: L_V_FILE_FILTER TYPE STRING.
DATA: L_V_FILETABLE TYPE FILE_TABLE,
L_T_FILETABLE TYPE FILETABLE.
DATA: L_V_RC TYPE I.
DATA: L_V_USER_ACTION TYPE I.
* l_v_file_filter = '(*.xlsx;*.xls)|*.xlsx;*.xls|'.
L_V_FILE_FILTER = '(*.PDF)|*.PDF|'.
CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(
EXPORTING WINDOW_TITLE = '选择文件'
FILE_FILTER = L_V_FILE_FILTER
CHANGING FILE_TABLE = L_T_FILETABLE
RC = L_V_RC
USER_ACTION = L_V_USER_ACTION ).
CHECK L_V_USER_ACTION EQ 0.
CHECK L_T_FILETABLE[] IS NOT INITIAL.
READ TABLE L_T_FILETABLE INTO L_V_FILETABLE INDEX 1.
P_FILE = L_V_FILETABLE-FILENAME.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MOD_SCREEN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_MOD_SCREEN .
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'M1'.
IF R1 = 'X'.
SCREEN-ACTIVE = 1.
ELSE.
SCREEN-ACTIVE = 0.
ENDIF.
ENDIF.
IF SCREEN-GROUP1 = 'M2'.
IF R2 = 'X'.
SCREEN-ACTIVE = 1.
ELSE.
SCREEN-ACTIVE = 0.
ENDIF.
ENDIF.
IF SCREEN-GROUP1 = 'M3'.
IF R3 = 'X'.
SCREEN-ACTIVE = 1.
ELSE.
SCREEN-ACTIVE = 0.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DOWN_TEMPLATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DOWN_TEMPLATE .
CREATE OBJECT V_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF V_EXCEL 'VISIBLE' = 1.
CALL METHOD OF V_EXCEL 'WORKBOOKS' = V_BOOK .
CALL METHOD OF V_BOOK 'ADD'.
IF SY-LANGU EQ '1'.
PERFORM FRM_FILL_CELL USING: 1 1 '供应商代码(必填)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸"
1 2 '采购组织(必填)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸"
1 3 '工厂(选填)' 40 0 10,
1 4 '采购员(选填)' 40 0 10,
1 5 '订单发送邮箱(必填)' 40 0 10.
ELSE.
PERFORM FRM_FILL_CELL USING: 1 1 'Vendor Code(Required)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸"
1 2 'Purchase Organization(Required)' 40 0 10, "行号,列号,值,单元格颜色,是否加粗,字体尺寸"
1 3 'Plant' 40 0 10,
1 4 'Buyer.Code' 40 0 10, " add buyer code 20210413 wahkenlee
1 5 'Email' 40 0 10.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_CELL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> P_1
*& --> P_1
*& --> P_
*& --> P_40
*& --> P_0
*& --> P_10
*&---------------------------------------------------------------------*
FORM FRM_FILL_CELL USING FU_ROW FU_COLUMN FU_VALUE FU_COLOR FU_BOLD FU_SIZE.
DATA: L_CELL TYPE OLE2_OBJECT,
L_COLOR TYPE OLE2_OBJECT,
L_BOLD TYPE OLE2_OBJECT,
L_COLUMN TYPE OLE2_OBJECT.
CALL METHOD OF V_EXCEL 'CELLS' = L_CELL
EXPORTING
#1 = FU_ROW
#2 = FU_COLUMN.
SET PROPERTY OF L_CELL 'Value' = FU_VALUE. "赋值。"
* call method of L_CELL 'INTERIOR' = int.
GET PROPERTY OF L_CELL 'Interior' = L_COLOR.
SET PROPERTY OF L_COLOR 'ColorIndex' = FU_COLOR. "根据值 显示对应的颜色。
GET PROPERTY OF L_CELL 'Font' = L_BOLD.
SET PROPERTY OF L_BOLD 'Bold' = FU_BOLD. "1是加粗,0是不加粗"
SET PROPERTY OF L_BOLD 'SIZE' = FU_SIZE. "设置字体大小。"
CALL METHOD OF V_EXCEL 'Columns' = L_COLUMN " 选定列
EXPORTING
#1 = FU_COLUMN .
SET PROPERTY OF L_COLUMN 'ColumnWidth' = 20. " 定义列宽
SET PROPERTY OF L_COLUMN 'rowheight' = 24.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MAINTAIN_EMAIL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_MAINTAIN_EMAIL .
PERFORM FRM_CHECK_AUTH.
PERFORM FRM_UPLOAD_DATA.
PERFORM FRM_CHECK_DATA.
PERFORM FRM_UPDATE_DATA.
PERFORM FRM_ALV.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
CLEAR : GS_ITEM ,GT_ITEM.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = GV_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 5
I_END_ROW = 65535
TABLES
INTERN = GT_ALSM
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE S000(ZMM) WITH TEXT-010 DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
* 转换数据
LOOP AT GT_ALSM.
ASSIGN COMPONENT GT_ALSM-COL OF STRUCTURE GS_ITEM TO <GFS_DATA>.
TRANSLATE GT_ALSM-VALUE TO UPPER CASE.
<GFS_DATA> = GT_ALSM-VALUE.
AT END OF ROW.
APPEND GS_ITEM TO GT_ITEM.
CLEAR GS_ITEM.
ENDAT.
ENDLOOP.
LOOP AT GT_ITEM ASSIGNING FIELD-SYMBOL(<LFS_ITEM>).
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = <LFS_ITEM>-LIFNR
IMPORTING
OUTPUT = <LFS_ITEM>-LIFNR.
ENDLOOP.
IF GT_ITEM IS INITIAL.
MESSAGE S000(ZMM) WITH TEXT-011 DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATA .
DATA LV_NAME TYPE STRING .
data:ls_email_stru type SX_ADDRESS,
ls_email_stru_out type SX_ADDRESS.
*前面已经判断过gt_item 不为空
SELECT LFA1~LIFNR , LFA1~NAME1 INTO TABLE @GT_LFA1
FROM LFA1 FOR ALL ENTRIES IN @GT_ITEM
WHERE LFA1~LIFNR = @GT_ITEM-LIFNR.
SORT GT_LFA1 BY LIFNR .
SELECT T024E~EKORG , T001K~BWKEY
FROM T024E
INNER JOIN T001K ON T024E~BUKRS = T001K~BUKRS
FOR ALL ENTRIES IN @GT_ITEM
WHERE T024E~EKORG = @GT_ITEM-EKORG
INTO TABLE @DATA(LT_T024E).
SELECT T024~EKGRP FROM T024
FOR ALL ENTRIES IN @GT_ITEM
WHERE T024~EKGRP = @GT_ITEM-EKGRP
INTO TABLE @DATA(LT_T024).
SORT LT_T024E BY EKORG BWKEY.
SORT LT_T024 BY EKGRP.
DATA LS_T024E LIKE LINE OF LT_T024E.
DATA LS_T024 LIKE LINE OF LT_T024.
LOOP AT GT_ITEM INTO GS_ITEM.
MOVE-CORRESPONDING GS_ITEM TO GS_MESSAGE.
CLEAR GS_LFA1.
READ TABLE GT_LFA1 INTO GS_LFA1 WITH KEY LIFNR = GS_ITEM-LIFNR BINARY SEARCH .
IF SY-SUBRC <> 0.
GS_MESSAGE-MESSAGE = TEXT-012.
GS_MESSAGE-FLAG = 'X'.
ELSE.
GS_MESSAGE-NAME1 = GS_LFA1-NAME1.
ENDIF.
IF GS_ITEM-EKORG IS INITIAL.
CONCATENATE GS_MESSAGE-MESSAGE TEXT-013 INTO GS_MESSAGE-MESSAGE.
GS_MESSAGE-FLAG = 'X'.
ENDIF.
IF GS_ITEM-WERKS IS NOT INITIAL AND GS_ITEM-EKORG IS NOT INITIAL.
CLEAR LS_T024E.
READ TABLE LT_T024E INTO LS_T024E WITH KEY EKORG = GS_ITEM-EKORG BWKEY = GS_ITEM-WERKS BINARY SEARCH.
IF SY-SUBRC <> 0.
CONCATENATE GS_MESSAGE-MESSAGE TEXT-014 INTO GS_MESSAGE-MESSAGE.
GS_MESSAGE-FLAG = 'X'.
ENDIF.
ENDIF.
IF GS_ITEM-EMAIL IS INITIAL.
CONCATENATE GS_MESSAGE-MESSAGE '' INTO GS_MESSAGE-MESSAGE.
GS_MESSAGE-FLAG = 'X'.
ELSE.
"校验导入邮箱的格式
ls_email_stru-type = 'INT'.
ls_email_stru-address = gs_item-email.
CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL'
EXPORTING
ADDRESS_UNSTRUCT = ls_email_stru
IMPORTING
ADDRESS_NORMAL = ls_email_stru_out
EXCEPTIONS
ERROR_ADDRESS_TYPE = 1
ERROR_ADDRESS = 2
ERROR_GROUP_ADDRESS = 3
OTHERS = 4.
if ls_email_stru is INITIAL.
CONCATENATE GS_MESSAGE-MESSAGE TEXT-025 INTO GS_MESSAGE-MESSAGE.
GS_MESSAGE-FLAG = 'X'.
endif.
ENDIF.
CALL FUNCTION 'ZMM_GET_DOMAIN'
IMPORTING
DOMAIN_NAME = LV_NAME.
IF LV_NAME IS INITIAL.
CONCATENATE GS_MESSAGE-MESSAGE TEXT-016 INTO GS_MESSAGE-MESSAGE.
GS_MESSAGE-FLAG = 'X'.
ELSE.
GS_MESSAGE-UNAME = LV_NAME.
ENDIF.
IF GS_ITEM-EKGRP IS NOT INITIAL.
CLEAR:LS_T024.
READ TABLE LT_T024 INTO LS_T024 WITH KEY EKGRP = GS_ITEM-EKGRP.
IF SY-SUBRC <> 0.
CONCATENATE GS_MESSAGE-MESSAGE TEXT-024 INTO GS_MESSAGE-MESSAGE.
GS_MESSAGE-FLAG = 'X'.
ENDIF.
ENDIF.
IF GS_MESSAGE-FLAG <> 'X'.
CONCATENATE TEXT-017 SY-DATUM+0(4) '/' SY-DATUM+4(2) '/' SY-DATUM+6(2)
TEXT-018 SYST-UZEIT+0(2) ':' SYST-UZEIT+2(2) ':' SYST-UZEIT+4(2) INTO GS_MESSAGE-MESSAGE.
ENDIF.
APPEND GS_MESSAGE TO GT_MESSAGE.
CLEAR GS_MESSAGE.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_UPDATE_DATA .
DATA : LT_ZNMMT037A TYPE TABLE OF ZNMMT037A.
DATA : LS_ZNMMT037A LIKE LINE OF LT_ZNMMT037A.
LOOP AT GT_MESSAGE INTO GS_MESSAGE WHERE FLAG <> 'X'.
MOVE-CORRESPONDING GS_MESSAGE TO LS_ZNMMT037A.
APPEND LS_ZNMMT037A TO LT_ZNMMT037A.
CLEAR LS_ZNMMT037A.
ENDLOOP.
IF LT_ZNMMT037A IS NOT INITIAL.
MODIFY ZNMMT037A FROM TABLE LT_ZNMMT037A.
IF SY-DBCNT <> 0.
COMMIT WORK.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_ALV .
CLEAR GT_FIELDCAT.
CLEAR GS_FIELDCAT.
CLEAR GT_EVENTS.
CLEAR GS_EVENTS.
CLEAR GS_LAYOUT1.
MOVE-CORRESPONDING GT_MESSAGE TO GT_EMAIL_ALV.
IF SY-LANGU EQ '1'.
GMRC_INITIAL_FIELD '供应商代码' 'LIFNR' 'X'.
GMRC_INITIAL_FIELD '供应商名称' 'NAME1' 'X'.
GMRC_INITIAL_FIELD '采购组织' 'EKORG' 'X'.
GMRC_INITIAL_FIELD '工厂' 'WERKS' 'X'.
GMRC_INITIAL_FIELD '采购员' 'EKGRP' 'X'.
GMRC_INITIAL_FIELD '订单发送邮箱' 'EMAIL' 'X'.
GMRC_INITIAL_FIELD '用户域名' 'UNAME' 'X'.
GMRC_INITIAL_FIELD '信息' 'MESSAGE' ''.
ELSE.
GMRC_INITIAL_FIELD 'Supplier Code' 'LIFNR' 'X'.
GMRC_INITIAL_FIELD 'Supplier Name' 'NAME1' 'X'.
GMRC_INITIAL_FIELD 'Purchase Organization' 'EKORG' 'X'.
GMRC_INITIAL_FIELD 'Plant' 'WERKS' 'X'.
GMRC_INITIAL_FIELD 'Buyer.Code' 'EKGRP' 'X'.
GMRC_INITIAL_FIELD 'Email' 'EMAIL' 'X'.
GMRC_INITIAL_FIELD 'Domain' 'UNAME' 'X'.
GMRC_INITIAL_FIELD 'Message' 'MESSAGE' ''.
ENDIF.
GS_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT1-ZEBRA = 'X'.
MOVE 'PF_STATUS_SET' TO GS_EVENTS-NAME.
MOVE 'FRM_SET_PF_STATUS1' TO GS_EVENTS-FORM.
APPEND GS_EVENTS TO GT_EVENTS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-REPID
* I_CALLBACK_PF_STATUS_SET = ''
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND2'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT1
IT_FIELDCAT = GT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
I_DEFAULT = 'X'
* I_SAVE = 'A '
* IS_VARIANT =
IT_EVENTS = GT_EVENTS
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = GT_EMAIL_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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.
FORM FRM_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS'0100' .
ENDFORM.
FORM FRM_SET_PF_STATUS1 USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS'0200' .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_QUERY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_QUERY .
CLEAR : GT_QUERY_ALV.
CLEAR : GS_QUERY_ALV.
CLEAR GT_FIELDCAT.
CLEAR GS_FIELDCAT.
CLEAR GT_EVENTS.
CLEAR GS_EVENTS.
CLEAR GS_LAYOUT1.
SELECT ZNMMT037A~LIFNR , ZNMMT037A~NAME1 ,
ZNMMT037A~EKORG , ZNMMT037A~WERKS ,
ZNMMT037A~EMAIL , ZNMMT037A~UNAME ,
ZNMMT037A~MESSAGE , ZNMMT037A~EKGRP
FROM ZNMMT037A
WHERE ZNMMT037A~LIFNR IN @S_LIFNR1 AND ZNMMT037A~EKORG IN @S_EKORG1 AND ZNMMT037A~WERKS IN @S_WERKS
INTO TABLE @DATA(LT_ZNMMT037A) .
MOVE-CORRESPONDING LT_ZNMMT037A TO GT_QUERY_ALV.
IF SY-LANGU EQ '1'.
GMRC_INITIAL_FIELD '供应商代码' 'LIFNR' 'X'.
GMRC_INITIAL_FIELD '供应商名称' 'NAME1' 'X'.
GMRC_INITIAL_FIELD '采购组织' 'EKORG' 'X'.
GMRC_INITIAL_FIELD '工厂' 'WERKS' 'X'.
GMRC_INITIAL_FIELD '采购员' 'EKGRP' 'X'.
GMRC_INITIAL_FIELD '订单发送邮箱' 'EMAIL' 'X'.
GMRC_INITIAL_FIELD '用户域名' 'UNAME' 'X'.
GMRC_INITIAL_FIELD '信息' 'MESSAGE' ''.
ELSE.
GMRC_INITIAL_FIELD 'Supplier Code' 'LIFNR' 'X'.
GMRC_INITIAL_FIELD 'Supplier Name' 'NAME1' 'X'.
GMRC_INITIAL_FIELD 'Purchase Organization' 'EKORG' 'X'.
GMRC_INITIAL_FIELD 'Plant' 'WERKS' 'X'.
GMRC_INITIAL_FIELD 'Buyer.Code' 'EKGRP' 'X'.
GMRC_INITIAL_FIELD 'Email' 'EMAIL' 'X'.
GMRC_INITIAL_FIELD 'DOMAIN_NAME' 'UNAME' 'X'.
GMRC_INITIAL_FIELD 'Message' 'MESSAGE' ''.
ENDIF.
GS_LAYOUT1-COLWIDTH_OPTIMIZE = 'X'.
GS_LAYOUT1-ZEBRA = 'X'.
GS_LAYOUT1-BOX_FIELDNAME = 'BOX'.
MOVE 'PF_STATUS_SET' TO GS_EVENTS-NAME.
MOVE 'FRM_SET_PF_STATUS' TO GS_EVENTS-FORM.
APPEND GS_EVENTS TO GT_EVENTS.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-REPID
* I_CALLBACK_PF_STATUS_SET = ''
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND1'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT1
IT_FIELDCAT = GT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
I_DEFAULT = 'X'
* I_SAVE = 'A '
* IS_VARIANT =
IT_EVENTS = GT_EVENTS
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* O_PREVIOUS_SRAL_HANDLER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = GT_QUERY_ALV
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
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.
FORM FRM_USER_COMMAND1 USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
DATA : LV_SELTAB TYPE TABLE OF RSPARAMS.
CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS' "获取当前的选择屏幕元素
EXPORTING
CURR_REPORT = SY-REPID
* IMPORTING
* SP =
TABLES
SELECTION_TABLE = LV_SELTAB
* SELECTION_TABLE_255 =
EXCEPTIONS
NOT_FOUND = 1
NO_REPORT = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
"使用获取到的屏幕元素跳转初始界面
SUBMIT ZNMMR037 WITH SELECTION-TABLE LV_SELTAB VIA SELECTION-SCREEN.
WHEN 'DELETE'.
IF R2 = 'X'.
PERFORM FRM_DELETE_DATA.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM.
FORM FRM_USER_COMMAND2 USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DELETE_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DELETE_DATA .
DATA : LS_COUNT TYPE I VALUE 0."删除记录的条数
DATA : LT_ZNMMT037A TYPE TABLE OF ZNMMT037A.
DATA : LS_ZNMMT037A TYPE ZNMMT037A.
DATA : LT_ALV LIKE GT_QUERY_ALV.
DATA : LS_ALV LIKE LINE OF LT_ALV.
CLEAR : LT_ZNMMT037A,
LS_ZNMMT037A,
LT_ALV,
LS_ALV.
LOOP AT GT_QUERY_ALV INTO GS_QUERY_ALV.
IF GS_QUERY_ALV-BOX EQ 'X'.
MOVE-CORRESPONDING GS_QUERY_ALV TO LS_ALV.
APPEND LS_ALV TO LT_ALV.
CLEAR LS_ALV.
LS_ZNMMT037A-LIFNR = GS_QUERY_ALV-LIFNR.
LS_ZNMMT037A-EKORG = GS_QUERY_ALV-EKORG.
LS_ZNMMT037A-WERKS = GS_QUERY_ALV-WERKS.
LS_ZNMMT037A-EMAIL = GS_QUERY_ALV-EMAIL.
LS_ZNMMT037A-EKGRP = GS_QUERY_ALV-EKGRP.
APPEND LS_ZNMMT037A TO LT_ZNMMT037A.
CLEAR LS_ZNMMT037A.
ENDIF.
ENDLOOP.
IF LT_ZNMMT037A IS INITIAL.
MESSAGE E322(ZMM) DISPLAY LIKE 'W'.
ENDIF.
DELETE ZNMMT037A FROM TABLE LT_ZNMMT037A.
IF SY-SUBRC EQ 0.
COMMIT WORK AND WAIT.
LOOP AT LT_ALV INTO LS_ALV.
DELETE TABLE GT_QUERY_ALV FROM LS_ALV.
LS_COUNT = LS_COUNT + 1.
ENDLOOP.
MESSAGE S104(ZMM) WITH LS_COUNT.
DATA: LV_REF_GRID TYPE REF TO CL_GUI_ALV_GRID, LV_VALID TYPE C.
IF LV_REF_GRID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LV_REF_GRID.
ENDIF.
IF NOT LV_REF_GRID IS INITIAL.
LV_REF_GRID->CHECK_CHANGED_DATA(
IMPORTING
E_VALID = LV_VALID ).
ENDIF.
IF LV_VALID IS NOT INITIAL.
LV_REF_GRID->REFRESH_TABLE_DISPLAY( ) .
ENDIF.
ELSE.
ROLLBACK WORK.
MESSAGE E105(ZMM).
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CHECK_AUTH .
DATA LV_NAME TYPE STRING .
CALL FUNCTION 'ZMM_GET_DOMAIN'
IMPORTING
DOMAIN_NAME = LV_NAME.
SELECT SINGLE ZNMMT037B~DOMAIN_USER INTO @DATA(LV_DOMAIN)
FROM ZNMMT037B WHERE ZPROGRAM = 'ZNMMR037' AND DOMAIN_USER = @LV_NAME.
SELECT SINGLE ZNMMT037B~UNAME INTO @DATA(LV_UNAME)
FROM ZNMMT037B WHERE ZPROGRAM = 'ZNMMR037' AND UNAME = @SY-UNAME.
IF LV_DOMAIN IS INITIAL AND LV_UNAME IS INITIAL.
MESSAGE S000(ZMM) WITH TEXT-019 DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_CHECK .
DATA: LV_STRING TYPE STRING.
DATA : LV_NAME TYPE STRING.
FIELD-SYMBOLS : <LFS_WERKS> LIKE GS_WERKS.
CLEAR GT_WERKS.
CLEAR GS_WERKS.
IF S_WERKS1[] IS INITIAL.
MESSAGE S000(ZMM) WITH TEXT-023.
LEAVE LIST-PROCESSING.
ELSE.
CALL FUNCTION 'ZMM_GET_DOMAIN'
IMPORTING
DOMAIN_NAME = LV_NAME.
SELECT ZME2M_PLANT~UNAME , ZME2M_PLANT~USER_DOMAIN ,ZME2M_PLANT~WERKS_LIST
FROM ZME2M_PLANT WHERE ZME2M_PLANT~USER_DOMAIN = @LV_NAME
INTO TABLE @DATA(LT_PLANT).
SORT LT_PLANT BY WERKS_LIST.
SELECT T001W~WERKS FROM T001W WHERE T001W~WERKS IN @S_WERKS1 INTO CORRESPONDING FIELDS OF TABLE @GT_WERKS.
SORT GT_WERKS BY WERKS.
IF GT_WERKS IS INITIAL.
MESSAGE S000(ZMM) WITH TEXT-022 DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING.
ENDIF.
IF LT_PLANT IS NOT INITIAL."在单点登录权限里面的用户在需要检查,不在里面的不需要检查
LOOP AT LT_PLANT INTO DATA(LS_PLANT).
READ TABLE GT_WERKS WITH KEY WERKS = LS_PLANT-WERKS_LIST TRANSPORTING NO FIELDS BINARY SEARCH.
IF SY-SUBRC <> 0.
DELETE GT_WERKS WHERE WERKS = LS_PLANT-WERKS_LIST.
ENDIF.
ENDLOOP.
ENDIF.
IF GT_WERKS IS INITIAL.
MESSAGE S000(ZMM) WITH TEXT-021.
LEAVE LIST-PROCESSING .
ENDIF.
LOOP AT GT_WERKS ASSIGNING <LFS_WERKS> .
AUTHORITY-CHECK OBJECT 'M_BEST_WRK' ID 'ACTVT' FIELD '03'
ID 'WERKS' FIELD <LFS_WERKS>-WERKS.
IF SY-SUBRC <> 0.
<LFS_WERKS>-FLAG = 'X'.
ENDIF.
ENDLOOP.
DELETE GT_WERKS WHERE FLAG = 'X'.
IF GT_WERKS IS INITIAL.
MESSAGE S000(ZMM) WITH TEXT-020 DISPLAY LIKE 'W'.
LEAVE LIST-PROCESSING .
ENDIF.
ENDIF.
CLEAR S_WERKS1[].
CLEAR S_WERKS1.
LOOP AT GT_WERKS INTO GS_WERKS.
S_WERKS1-SIGN = 'I'.
S_WERKS1-OPTION = 'EQ'.
S_WERKS1-LOW = GS_WERKS-WERKS.
APPEND S_WERKS1.
CLEAR S_WERKS1.
ENDLOOP.
ENDFORM.
最新发布