Vous êtes sur la page 1sur 4

DATA:

LR_ALV TYPE REF TO CL_SALV_TABLE,


LR_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS,
LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST,
LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE,
LR_COLUMN TYPE REF TO CL_SALV_COLUMN,
LR_LAYOUT TYPE REF TO CL_SALV_LAYOUT,
LR_MESSAGE TYPE REF TO CX_SALV_MSG,
LS_KEY TYPE SALV_S_LAYOUT_KEY,
LV_TITLE TYPE LVC_TITLE,
LV_XML TYPE XSTRING.

LV_TITLE = SY-TITLE.
IF P_TEST EQ 'X'.
CONCATENATE LV_TITLE '(Test)'(008) INTO LV_TITLE SEPARATED BY ''.
ENDIF.

TRY.
CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = LR_ALV
CHANGING T_TABLE = GIT_ALV ).

LR_FUNCTIONS = LR_ALV->GET_FUNCTIONS( ).
LR_FUNCTIONS->SET_ALL( ABAP_TRUE ).

LR_DISPLAY = LR_ALV->GET_DISPLAY_SETTINGS( ).
LR_DISPLAY->SET_STRIPED_PATTERN( CL_SALV_DISPLAY_SETTINGS=>TRUE ).
LR_DISPLAY->SET_LIST_HEADER( LV_TITLE ).

LR_COLUMNS = LR_ALV->GET_COLUMNS( ).
LR_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN('BUY_CURRENCY').
LR_COLUMN->SET_SHORT_TEXT( ' ' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Buy Currency'(010) ).
LR_COLUMN->SET_LONG_TEXT( 'Buy Currency'(010) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN('BUY_AMOUNT').
LR_COLUMN->SET_SHORT_TEXT('Buy Amount'(011) ).
LR_COLUMN->SET_MEDIUM_TEXT('Buy Amount'(011) ).
LR_COLUMN->SET_LONG_TEXT( 'Buy Amount'(011) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN('SELL_CURRENCY').
LR_COLUMN->SET_SHORT_TEXT( ' ' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Sell Currency'(012) ).
LR_COLUMN->SET_LONG_TEXT( 'Sell Currency'(012) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN( 'SELL_AMOUNT' ).


LR_COLUMN->SET_SHORT_TEXT( ' ' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Sell Amount'(014) ).
LR_COLUMN->SET_LONG_TEXT( 'Sell Amount'(014) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN( 'STATUS' ).


LR_COLUMN->SET_SHORT_TEXT( 'Status'(015) ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Status'(015) ).
LR_COLUMN->SET_LONG_TEXT( 'Status'(015) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN( 'MESSAGE').


LR_COLUMN->SET_SHORT_TEXT( 'Message'(016) ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Message'(016) ).
LR_COLUMN->SET_LONG_TEXT( 'Message'(016) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN( 'ZZFUND').


LR_COLUMN->SET_SHORT_TEXT( 'Fund'(018) ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Fund'(018) ).
LR_COLUMN->SET_LONG_TEXT( 'Fund'(018) ).

LR_COLUMN = LR_COLUMNS->GET_COLUMN( 'ZZCNTRPARTY').


LR_COLUMN->SET_SHORT_TEXT( ' ' ).
LR_COLUMN->SET_MEDIUM_TEXT( 'Counterparty'(019) ).
LR_COLUMN->SET_LONG_TEXT( 'Counterparty'(019) ).

LR_LAYOUT = LR_ALV->GET_LAYOUT( ).
LS_KEY-REPORT = SY-REPID.
LR_LAYOUT->SET_KEY( LS_KEY ).
LR_LAYOUT->SET_SAVE_RESTRICTION( CL_SALV_LAYOUT=>RESTRICT_NONE ).

CATCH CX_SALV_NOT_FOUND.
CATCH CX_SALV_MSG INTO LR_MESSAGE.
ENDTRY.

IF P_SNDMAL = 'X'.
LV_XML = LR_ALV->TO_XML( XML_TYPE = IF_SALV_BS_XML=>C_TYPE_XLSX ).
PERFORM SEND_EMAIL USING LV_XML.
ENDIF.

LR_ALV->DISPLAY( ).
FORM SEND_EMAIL USING PI_XML TYPE XSTRING.

DATA:
LIT_CONTENT TYPE SOLIX_TAB,
LIT_MAIN_TXT TYPE BCSY_TEXT WITH HEADER LINE,
LIT_ATT_HDR TYPE SOLI_TAB,
LR_REC TYPE REF TO IF_RECIPIENT_BCS,
LR_DOC TYPE REF TO CL_DOCUMENT_BCS,
LR_SEND_REQUEST TYPE REF TO CL_BCS,
LR_BCS_EXCEP TYPE REF TO CX_BCS,
LV_C_ADDR TYPE AD_SMTPADR,
LV_XML_LENGTH TYPE I,
LV_ATT_SIZE TYPE SOOD-OBJLEN,
LV_ATT_NAME TYPE STRING,
LV_SENT_TO_ALL TYPE OS_BOOLEAN,
LV_SUBJECT TYPE SO_OBJ_DES,
LWA_ATT_HDR TYPE SOLI.

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'


EXPORTING
BUFFER = PI_XML
IMPORTING
OUTPUT_LENGTH = LV_XML_LENGTH
TABLES
BINARY_TAB = LIT_CONTENT.

LV_ATT_SIZE = XSTRLEN( PI_XML ).


LV_SUBJECT = SY-TITLE.

IF P_TEST EQ 'X'.
CONCATENATE LV_SUBJECT '(Test)'(008) INTO LV_SUBJECT.
ENDIF.
TRY.
* create send request
LR_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

* Prepare message output


CONCATENATE 'Records in file'(006) GV_CNT_ALL INTO LIT_MAIN_TXT SEPARATED BY
''.
APPEND LIT_MAIN_TXT. CLEAR LIT_MAIN_TXT.
CONCATENATE 'Already exists'(017) GV_CNT_EXST INTO LIT_MAIN_TXT SEPARATED BY
''.
APPEND LIT_MAIN_TXT. CLEAR LIT_MAIN_TXT.

IF P_TEST EQ ' '.


CONCATENATE 'Processed'(002) GV_CNT_PROC INTO LIT_MAIN_TXT SEPARATED BY ''.
APPEND LIT_MAIN_TXT. CLEAR LIT_MAIN_TXT.
ELSE.
CONCATENATE 'Test - Success'(020) GV_CNT_PROC INTO LIT_MAIN_TXT SEPARATED
BY ''.
APPEND LIT_MAIN_TXT. CLEAR LIT_MAIN_TXT.
ENDIF.

CONCATENATE 'Error'(005) GV_CNT_ERR INTO LIT_MAIN_TXT SEPARATED BY ''.


APPEND LIT_MAIN_TXT. CLEAR LIT_MAIN_TXT.
CONCATENATE 'Ignored'(004) GV_CNT_IGN INTO LIT_MAIN_TXT SEPARATED BY ''.
APPEND LIT_MAIN_TXT. CLEAR LIT_MAIN_TXT.

* Create Email Object


LR_DOC = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_TEXT = LIT_MAIN_TXT[]
I_SUBJECT = LV_SUBJECT ).

CONCATENATE 'MISYS' '_' SY-DATUM '.xlsx' INTO LV_ATT_NAME.


CONCATENATE '&SO_FILENAME=' LV_ATT_NAME INTO LWA_ATT_HDR.
APPEND LWA_ATT_HDR TO LIT_ATT_HDR.

CALL METHOD LR_DOC->ADD_ATTACHMENT


EXPORTING
I_ATTACHMENT_TYPE = 'XLS'
I_ATTACHMENT_SUBJECT = LV_SUBJECT
I_ATTACHMENT_SIZE = LV_ATT_SIZE
I_ATT_CONTENT_HEX = LIT_CONTENT
I_ATTACHMENT_HEADER = LIT_ATT_HDR.

* Add document object to send request


CALL METHOD LR_SEND_REQUEST->SET_DOCUMENT( LR_DOC ).

* add recipient
LV_C_ADDR = P_EMAIL.
TRY.
LR_REC = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LV_C_ADDR ).
CATCH CX_ADDRESS_BCS.
ENDTRY.

* Add recipient object to send request


CALL METHOD LR_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LR_REC
I_EXPRESS = 'X'.

* set default status delivery/read status ("no status")


TRY.
LR_SEND_REQUEST->SET_STATUS_ATTRIBUTES( I_REQUESTED_STATUS = 'N'
I_STATUS_MAIL = 'N' ).
CATCH CX_SEND_REQ_BCS.
* don't stop sending because of problems with delivery status
ENDTRY.

* Send document
CALL METHOD LR_SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X'
RECEIVING
RESULT = LV_SENT_TO_ALL ).

COMMIT WORK.

* exception handling
CATCH CX_BCS INTO LR_BCS_EXCEP.
* WRITE : LR_BCS_EXCEP->ERROR_TYPE.
* EXIT.
ENDTRY.
endform.

Vous aimerez peut-être aussi