How to use BDC in programs.
5:13 PM
Do not be afraid to use bdc. It is just as easy as ABC.
Pre. Req: - Know how, Get the user, functional or test on the transaction that you want to create.
Step 1
1. Transaction code : SHDB (Transaction Recorder: Recording Overview)
- Click on "New Recording". Example below.
2. Start the recording. And after doin the FB01 transaction within this sample it will show the screen below.
Press the button save.
3.Then go back to the main screen. shdb. Find the recorded coding and click. Function module.
- create the function group if it havent exist. in this example i will be using a local copy just to copy out the codes.
4. Go to se37. copy the codings out.
------------
From the line starting
perform open_group
.
.
.
.
perform bdc_transaction
Please do remember to copy the sub routine ( double click into it )
* notes to remeber. in the
it will consist of putting the bdc in batch or direct processing
IF P_CTU <> 'X'. "batch processing
CALL FUNCTION 'BDC_INSERT'
EXPORTING TCODE = P_TCODE
TABLES DYNPROTAB = BDCDATA
EXCEPTIONS OTHERS = 1.
ELSE. "direct processing
CALL TRANSACTION P_TCODE USING BDCDATA
MODE P_MODE
UPDATE P_UPDATE
MESSAGES INTO P_MESSTAB.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING TCODE = P_TCODE
TABLES DYNPROTAB = BDCDATA
EXCEPTIONS OTHERS = 1.
ELSE. "direct processing
CALL TRANSACTION P_TCODE USING BDCDATA
MODE P_MODE
UPDATE P_UPDATE
MESSAGES INTO P_MESSTAB.
ENDIF.
TIPS: - If you are having problem saving debug using MODE 'L'. It will show you where is going wrong during BDC.
CALL TRANSACTION CN_FB01 USING TA_bdcdata MODE 'N' UPDATE 'S' MESSAGES INTO lt_messtab.
* the value you can check in the function module example
*"*"Local Interface:*" IMPORTING*" VALUE(CTU) LIKE APQI-PUTACTIVE DEFAULT 'X'*" VALUE(MODE) LIKE APQI-PUTACTIVE DEFAULT 'N'*" VALUE(UPDATE) LIKE APQI-PUTACTIVE DEFAULT 'L'*" VALUE(GROUP) LIKE APQI-GROUPID OPTIONAL*" VALUE(USER) LIKE APQI-USERID OPTIONAL*" VALUE(KEEP) LIKE APQI-QERASE OPTIONAL*" VALUE(HOLDDATE) LIKE APQI-STARTDATE OPTIONAL*" VALUE(NODATA) LIKE APQI-PUTACTIVE DEFAULT '/'*" VALUE(BLDAT_001) LIKE BDCDATA-FVAL DEFAULT '28.11.2014'*" VALUE(BLART_002) LIKE BDCDATA-FVAL DEFAULT 'SA'*" VALUE(BUKRS_003) LIKE BDCDATA-FVAL DEFAULT 'A100'*" VALUE(BUDAT_004) LIKE BDCDATA-FVAL DEFAULT '05.12.2014'*" VALUE(MONAT_005) LIKE BDCDATA-FVAL DEFAULT ''*" VALUE(WAERS_006) LIKE BDCDATA-FVAL DEFAULT 'RM'*" VALUE(XBLNR_007) LIKE BDCDATA-FVAL DEFAULT 'awdadreversechar'*" VALUE(DOCID_008) LIKE BDCDATA-FVAL DEFAULT '*'*" VALUE(NEWBS_009) LIKE BDCDATA-FVAL DEFAULT '40'*" VALUE(NEWKO_010) LIKE BDCDATA-FVAL DEFAULT '0015201050'*" VALUE(WRBTR_011) LIKE BDCDATA-FVAL DEFAULT '60'*" VALUE(FWBAS_012) LIKE BDCDATA-FVAL DEFAULT '1000'*" VALUE(MWSKZ_013) LIKE BDCDATA-FVAL DEFAULT 'I1'*" VALUE(NEWBS_014) LIKE BDCDATA-FVAL DEFAULT '50'*" VALUE(NEWKO_015) LIKE BDCDATA-FVAL DEFAULT '0020201290'*" VALUE(WRBTR_016) LIKE BDCDATA-FVAL DEFAULT '60'*" VALUE(FWBAS_017) LIKE BDCDATA-FVAL DEFAULT '1000'*" VALUE(MWSKZ_018) LIKE BDCDATA-FVAL DEFAULT 'O1'*" EXPORTING*" VALUE(SUBRC) LIKE SYST-SUBRC*" TABLES*" MESSTAB STRUCTURE BDCMSGCOLL OPTIONAL
Messaging th_popup with the capability to detect who is online (protoype)
3:00 AM
Ever wanted to send message and checking your friends online on that particular day?
The coding below is a prototype which only detect on a particular day the system user online but not the time which needs to be enhanced.
Which uses the search help technology which is similar to matchcode.
-----------------------------------------------------------------------------------------------
REPORT Z_send_message.
PARAMETERS : CLIENT LIKE SY-MANDT.
PARAMETERS : USER LIKE SY-UNAME.
PARAMETERS : MESSAGE LIKE SM04DIC-POPUPMSG.
PARAMETERS : MSG_LEN LIKE SY-INDEX."MESSAGE_LEN LIKE SY-INDEX.
PARAMETERS : CUT_BLKS LIKE SY-LANGU."CUT_BLANKS LIKE SY-LANGU.
INITIALIZATION.
CLIENT = SY-MANDT.
USER = SY-UNAME.
MESSAGE = 'TYPE your message here'.
MSG_LEN = SY-INDEX."MESSAGE_LEN LIKE SY-INDEX.
CUT_BLKS = SY-LANGU."CUT_BLANKS LIKE SY-LANGU.
at selection-screen on value-request for USER.
PERFORM F_SEARCHHELP.
START-OF-SELECTION.
CALL FUNCTION 'TH_POPUP'
EXPORTING
CLIENT = CLIENT
USER = USER
MESSAGE = MESSAGE
* MESSAGE_LEN = 0
* CUT_BLANKS = ' '
* EXCEPTIONS
* USER_NOT_FOUND = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form F_SEARCHHELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_SEARCHHELP .
TABLES: usr02.
data:
begin of t_BNAME occurs 0,
BNAME like USR02-BNAME,
"maktx like makt-maktx,
end of t_BNAME,
t_values type DYNPREAD occurs 0 WITH HEADER LINE,
v_prog like D020S-PROG.
TYPES: BEGIN OF X_RETURN .
INCLUDE STRUCTURE DDSHRETVAL. "Search help structure
TYPES: END OF X_RETURN.
data: l_dynpprog type sy-repid,
l_dynnr type sy-dynnr,
l_dynprofld TYPE help_info-dynprofld.
data: RETURN_TAB TYPE STANDARD TABLE OF X_RETURN WITH HEADER LINE.
v_prog = sy-repid.
REFRESH: t_values.
CLEAR: t_values.
t_values-fieldname = 'USER'.
APPEND t_VALUES.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = v_prog
dynumb = '1000'
TRANSLATE_TO_UPPER = ' '
REQUEST = ' '
PERFORM_CONVERSION_EXITS = ' '
PERFORM_INPUT_CONVERSION = ' '
DETERMINE_LOOP_INDEX = ' '
tables
dynpfields = t_values.
IF sy-subrc = 0.
READ TABLE T_VALUES INDEX 1.
IF SY-SUBRC = 0.
SELECT BNAME FROM usr02 INTO t_BNAME
where USTYP = 'A' AND
TRDAT = SY-DATUM.
APPEND T_BNAME.
ENDSELECT.
"==================
if sy-subrc = 0.
l_dynpprog = sy-repid.
l_dynnr = sy-dynnr.
l_dynprofld = 'BNAME' .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BNAME'
DYNPPROG = l_dynpprog
DYNPNR = l_dynnr
DYNPROFIELD = l_dynprofld
VALUE_ORG = 'S'
tables
value_tab = t_BNAME
RETURN_TAB = RETURN_TAB.
IF sy-subrc = 0.
IF NOT RETURN_TAB[] IS INITIAL.
READ TABLE RETURN_TAB INDEX 1.
IF SY-SUBRC = 0.
T_BNAME = RETURN_TAB-FIELDVAL.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
"==================
ENDIF.
ENDIF.
ENDFORM. " F_SEARCHHELP
The coding below is a prototype which only detect on a particular day the system user online but not the time which needs to be enhanced.
Which uses the search help technology which is similar to matchcode.
-----------------------------------------------------------------------------------------------
REPORT Z_send_message.
PARAMETERS : CLIENT LIKE SY-MANDT.
PARAMETERS : USER LIKE SY-UNAME.
PARAMETERS : MESSAGE LIKE SM04DIC-POPUPMSG.
PARAMETERS : MSG_LEN LIKE SY-INDEX."MESSAGE_LEN LIKE SY-INDEX.
PARAMETERS : CUT_BLKS LIKE SY-LANGU."CUT_BLANKS LIKE SY-LANGU.
INITIALIZATION.
CLIENT = SY-MANDT.
USER = SY-UNAME.
MESSAGE = 'TYPE your message here'.
MSG_LEN = SY-INDEX."MESSAGE_LEN LIKE SY-INDEX.
CUT_BLKS = SY-LANGU."CUT_BLANKS LIKE SY-LANGU.
at selection-screen on value-request for USER.
PERFORM F_SEARCHHELP.
START-OF-SELECTION.
CALL FUNCTION 'TH_POPUP'
EXPORTING
CLIENT = CLIENT
USER = USER
MESSAGE = MESSAGE
* MESSAGE_LEN = 0
* CUT_BLANKS = ' '
* EXCEPTIONS
* USER_NOT_FOUND = 1
* OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form F_SEARCHHELP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM F_SEARCHHELP .
TABLES: usr02.
data:
begin of t_BNAME occurs 0,
BNAME like USR02-BNAME,
"maktx like makt-maktx,
end of t_BNAME,
t_values type DYNPREAD occurs 0 WITH HEADER LINE,
v_prog like D020S-PROG.
TYPES: BEGIN OF X_RETURN .
INCLUDE STRUCTURE DDSHRETVAL. "Search help structure
TYPES: END OF X_RETURN.
data: l_dynpprog type sy-repid,
l_dynnr type sy-dynnr,
l_dynprofld TYPE help_info-dynprofld.
data: RETURN_TAB TYPE STANDARD TABLE OF X_RETURN WITH HEADER LINE.
v_prog = sy-repid.
REFRESH: t_values.
CLEAR: t_values.
t_values-fieldname = 'USER'.
APPEND t_VALUES.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = v_prog
dynumb = '1000'
TRANSLATE_TO_UPPER = ' '
REQUEST = ' '
PERFORM_CONVERSION_EXITS = ' '
PERFORM_INPUT_CONVERSION = ' '
DETERMINE_LOOP_INDEX = ' '
tables
dynpfields = t_values.
IF sy-subrc = 0.
READ TABLE T_VALUES INDEX 1.
IF SY-SUBRC = 0.
SELECT BNAME FROM usr02 INTO t_BNAME
where USTYP = 'A' AND
TRDAT = SY-DATUM.
APPEND T_BNAME.
ENDSELECT.
"==================
if sy-subrc = 0.
l_dynpprog = sy-repid.
l_dynnr = sy-dynnr.
l_dynprofld = 'BNAME' .
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'BNAME'
DYNPPROG = l_dynpprog
DYNPNR = l_dynnr
DYNPROFIELD = l_dynprofld
VALUE_ORG = 'S'
tables
value_tab = t_BNAME
RETURN_TAB = RETURN_TAB.
IF sy-subrc = 0.
IF NOT RETURN_TAB[] IS INITIAL.
READ TABLE RETURN_TAB INDEX 1.
IF SY-SUBRC = 0.
T_BNAME = RETURN_TAB-FIELDVAL.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
"==================
ENDIF.
ENDIF.
ENDFORM. " F_SEARCHHELP
how to add a sap menu short cut
4:33 AM
First
1.
Transaction code = su01
2.
Key in Pfnumber or sap id (then F7 – to display)
check
under defaults tab :-
copy
the value in the field box “Start menu”
Then
3.
Transaction code = se43
maintain
the area menu
SAP: ABAP How to send email that can have underline bold text, table and pictures using html via class CL_BCS
8:26 PM
snippet..
FORM SEND_EMAIL_OFFLN TABLES PT_PDF_BIN
USING PV_SENDER
PV_RECIPIENT
PV_SUBJECT.
USING PV_SENDER
PV_RECIPIENT
PV_SUBJECT.
CONSTANTS: LC_TYPE TYPE SO_OBJ_TP VALUE 'HTM'.
DATA: LO_MESSENGER TYPE REF TO CL_BCS,
LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LO_SENDER TYPE REF TO CL_SAPUSER_BCS,
LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
LO_DELIVERY TYPE OS_BOOLEAN,
LO_ERR_MSG TYPE SY-MSGV1.
LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LO_SENDER TYPE REF TO CL_SAPUSER_BCS,
LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
LO_DELIVERY TYPE OS_BOOLEAN,
LO_ERR_MSG TYPE SY-MSGV1.
DATA: LT_SOLIX TYPE SOLIX_TAB,
LS_SOLIX LIKE LINE OF LT_SOLIX.
DATA: LV_ATTCH_SUBJECT TYPE SOOD-OBJDES.
"LOOP AT PT_PDF_BIN.
" CLEAR LS_SOLIX.
" LS_SOLIX-LINE = PT_PDF_BIN.
" APPEND LS_SOLIX TO LT_SOLIX.
"ENDLOOP.
LS_SOLIX LIKE LINE OF LT_SOLIX.
DATA: LV_ATTCH_SUBJECT TYPE SOOD-OBJDES.
"LOOP AT PT_PDF_BIN.
" CLEAR LS_SOLIX.
" LS_SOLIX-LINE = PT_PDF_BIN.
" APPEND LS_SOLIX TO LT_SOLIX.
"ENDLOOP.
"THIS IS THE PART WHICH YOU CAN DO HTML CODINGS ß----------------------------------------------------------------PART TO
PLAY AROUND
CLEAR LS_MESSAGE. LS_MESSAGE = '<html>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
CLEAR LS_MESSAGE. LS_MESSAGE = '<body>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
CLEAR LS_MESSAGE. LS_MESSAGE = '<body>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
CLEAR LS_MESSAGE. LS_MESSAGE = 'Dear Sir/Madam,<br>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
CLEAR LS_MESSAGE. LS_MESSAGE = '<u><b>Underline and bold</b></u> <br><br>'. APPEND LS_MESSAGE TO LT_DOCUMENT. " underline and bold
CLEAR LS_MESSAGE. LS_MESSAGE = '<u><b>Underline and bold</b></u> <br><br>'. APPEND LS_MESSAGE TO LT_DOCUMENT. " underline and bold
CLEAR LS_MESSAGE. LS_MESSAGE = '</body>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
CLEAR LS_MESSAGE. LS_MESSAGE = '</html>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
CLEAR LS_MESSAGE. LS_MESSAGE = '</html>'. APPEND LS_MESSAGE TO LT_DOCUMENT.
"-----PDF RSU-----"
"LV_ATTCH_SUBJECT = 'Notification of Vesting.pdf'.
"LV_ATTCH_SUBJECT = 'Notification of Vesting.pdf'.
TRY .
"-------- create persistent send request ------------------------
LO_MESSENGER = CL_BCS=>CREATE_PERSISTENT( ).
“ Create Document Object
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = LC_TYPE
I_SUBJECT = PV_SUBJECT
I_TEXT = LT_DOCUMENT ).
" Add attachment
"CALL METHOD LO_DOCUMENT->ADD_ATTACHMENT
" EXPORTING
" I_ATTACHMENT_TYPE = 'BIN'
" I_ATTACHMENT_SUBJECT = LV_ATTCH_SUBJECT
" I_ATT_CONTENT_HEX = LT_SOLIX.
"****** Create Sender
" note: this is necessary only if you want to set the sender
" different from actual user (SY-UNAME). Otherwise sender is
“ set automatically with actual user.
LO_SENDER = CL_SAPUSER_BCS=>CREATE( PV_SENDER ).
"Create Recipient
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( PV_RECIPIENT ).
"Setup BCS Object
LO_MESSENGER->SET_DOCUMENT( LO_DOCUMENT ).
LO_MESSENGER->SET_SENDER( LO_SENDER ).
LO_MESSENGER->ADD_RECIPIENT( LO_RECIPIENT ).
"Send the Mail via BCS Object
LO_DELIVERY = LO_MESSENGER->SEND( I_WITH_ERROR_SCREEN = 'X' ).
IF NOT LO_DELIVERY IS INITIAL.
LV_MSG = 'SUCCESS: Email successfully send.'.
COMMIT WORK.
ELSE.
LO_ERR_MSG = 'ERROR: Failed to send email.'.
ENDIF.
CATCH CX_DOCUMENT_BCS. " cl_document_bcs=>create_document()
"LV_MSG = 'ERROR: Failed to create BCS document.'.
CATCH CX_ADDRESS_BCS. " cl_sapuser_bcs=>create()
"LV_MSG = 'ERROR: Failed to create BCS sender'.
CATCH CX_SEND_REQ_BCS. " cl_bcs=>create_persistent(), cl_bcs->set_sender(), etc.
"LV_MSG = 'ERROR: Failed while setting up BCS object.'.
ENDTRY.
ENDFORM. " SEND_EMAIL_OFFLN
"-------- create persistent send request ------------------------
LO_MESSENGER = CL_BCS=>CREATE_PERSISTENT( ).
“ Create Document Object
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = LC_TYPE
I_SUBJECT = PV_SUBJECT
I_TEXT = LT_DOCUMENT ).
" Add attachment
"CALL METHOD LO_DOCUMENT->ADD_ATTACHMENT
" EXPORTING
" I_ATTACHMENT_TYPE = 'BIN'
" I_ATTACHMENT_SUBJECT = LV_ATTCH_SUBJECT
" I_ATT_CONTENT_HEX = LT_SOLIX.
"****** Create Sender
" note: this is necessary only if you want to set the sender
" different from actual user (SY-UNAME). Otherwise sender is
“ set automatically with actual user.
LO_SENDER = CL_SAPUSER_BCS=>CREATE( PV_SENDER ).
"Create Recipient
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( PV_RECIPIENT ).
"Setup BCS Object
LO_MESSENGER->SET_DOCUMENT( LO_DOCUMENT ).
LO_MESSENGER->SET_SENDER( LO_SENDER ).
LO_MESSENGER->ADD_RECIPIENT( LO_RECIPIENT ).
"Send the Mail via BCS Object
LO_DELIVERY = LO_MESSENGER->SEND( I_WITH_ERROR_SCREEN = 'X' ).
IF NOT LO_DELIVERY IS INITIAL.
LV_MSG = 'SUCCESS: Email successfully send.'.
COMMIT WORK.
ELSE.
LO_ERR_MSG = 'ERROR: Failed to send email.'.
ENDIF.
CATCH CX_DOCUMENT_BCS. " cl_document_bcs=>create_document()
"LV_MSG = 'ERROR: Failed to create BCS document.'.
CATCH CX_ADDRESS_BCS. " cl_sapuser_bcs=>create()
"LV_MSG = 'ERROR: Failed to create BCS sender'.
CATCH CX_SEND_REQ_BCS. " cl_bcs=>create_persistent(), cl_bcs->set_sender(), etc.
"LV_MSG = 'ERROR: Failed while setting up BCS object.'.
ENDTRY.
ENDFORM. " SEND_EMAIL_OFFLN
"---------------------
just incase you want to add pdf
FORM DOWNLOAD_PDF_n_send.
DATA: LS_OUTPUTPARAMS TYPE SFPOUTPUTPARAMS.
DATA: LS_FORMOUTPUT TYPE FPFORMOUTPUT.
DATA: LV_FM_NAME TYPE RS38L_FNAM.
DATA: LS_DOCPARAMS TYPE SFPDOCPARAMS.
DATA: LS_ZESOS_RSUGL_PDF TYPE ZESOS_RSUGL_PDF.
DATA: LV_MSG TYPE STRING.
CLEAR LS_ZESOS_RSUGL_PDF.
LS_ZESOS_RSUGL_PDF-PERNR = PERNR-PERNR.
LS_ZESOS_RSUGL_PDF-BEGDA = PN-BEGDA.
LS_ZESOS_RSUGL_PDF-ENDDA = PN-ENDDA.
LS_ZESOS_RSUGL_PDF-CPLAN = P_CPLAN.
LS_ZESOS_RSUGL_PDF-CITEM = P_CITEM.
"Get name of the generated function module
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
EXPORTING
I_NAME = 'Z_PDF_FROM_TCODE_SFP'
IMPORTING
E_FUNCNAME = LV_FM_NAME.
"Set the output parameters.
LS_OUTPUTPARAMS-NODIALOG = 'X'.
LS_OUTPUTPARAMS-PREVIEW = ''.
LS_OUTPUTPARAMS-GETPDF = 'X'.
"Open print job
CALL FUNCTION 'FP_JOB_OPEN'
CHANGING
IE_OUTPUTPARAMS = LS_OUTPUTPARAMS
EXCEPTIONS
OTHERS = 1.
"Set the PDF to be dynamic and interactive.
LS_DOCPARAMS-FILLABLE = ''.
LS_DOCPARAMS-DYNAMIC = 'X'.
"Generate the PDF.
CLEAR LS_FORMOUTPUT.
CALL FUNCTION LV_FM_NAME
EXPORTING
/1BCDWB/DOCPARAMS = LS_DOCPARAMS
ZESOS_RSUGL_PDF = LS_ZESOS_RSUGL_PDF
IMPORTING
/1BCDWB/FORMOUTPUT = LS_FORMOUTPUT
EXCEPTIONS
USAGE_ERROR = 1
SYSTEM_ERROR = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
LV_MSG = 'Failed to generate PDF.'.
PERFORM FILL_MSG USING LV_MSG
CHANGING GS_OUTREP.
MODIFY GT_OUTREP FROM GS_OUTREP INDEX GV_TABIX.
ENDIF.
CHECK SY-SUBRC = 0.
"Close print job.
CALL FUNCTION 'FP_JOB_CLOSE'.
*--------------------------------------------------------------------*
DATA: LT_PDF_BIN TYPE TABLE OF X255.
DATA: LV_PDF_NAME TYPE STRING.
CONCATENATE P_FOLDER '\PDF_TITLE'.pdf' INTO LV_PDF_NAME.
REFRESH: LT_PDF_BIN.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LS_FORMOUTPUT-PDF
TABLES
BINARY_TAB = LT_PDF_BIN.
IF P_OFFLN IS NOT INITIAL AND P_FOLDER IS NOT INITIAL AND P_TEST IS INITIAL." AND P_ATTCH IS INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_PDF_NAME
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_PDF_BIN
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC NE 0.
LV_MSG = 'Failed to download Vesting PDF.'.
DATA: LS_OUTPUTPARAMS TYPE SFPOUTPUTPARAMS.
DATA: LS_FORMOUTPUT TYPE FPFORMOUTPUT.
DATA: LV_FM_NAME TYPE RS38L_FNAM.
DATA: LS_DOCPARAMS TYPE SFPDOCPARAMS.
DATA: LS_ZESOS_RSUGL_PDF TYPE ZESOS_RSUGL_PDF.
DATA: LV_MSG TYPE STRING.
CLEAR LS_ZESOS_RSUGL_PDF.
LS_ZESOS_RSUGL_PDF-PERNR = PERNR-PERNR.
LS_ZESOS_RSUGL_PDF-BEGDA = PN-BEGDA.
LS_ZESOS_RSUGL_PDF-ENDDA = PN-ENDDA.
LS_ZESOS_RSUGL_PDF-CPLAN = P_CPLAN.
LS_ZESOS_RSUGL_PDF-CITEM = P_CITEM.
"Get name of the generated function module
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
EXPORTING
I_NAME = 'Z_PDF_FROM_TCODE_SFP'
IMPORTING
E_FUNCNAME = LV_FM_NAME.
"Set the output parameters.
LS_OUTPUTPARAMS-NODIALOG = 'X'.
LS_OUTPUTPARAMS-PREVIEW = ''.
LS_OUTPUTPARAMS-GETPDF = 'X'.
"Open print job
CALL FUNCTION 'FP_JOB_OPEN'
CHANGING
IE_OUTPUTPARAMS = LS_OUTPUTPARAMS
EXCEPTIONS
OTHERS = 1.
"Set the PDF to be dynamic and interactive.
LS_DOCPARAMS-FILLABLE = ''.
LS_DOCPARAMS-DYNAMIC = 'X'.
"Generate the PDF.
CLEAR LS_FORMOUTPUT.
CALL FUNCTION LV_FM_NAME
EXPORTING
/1BCDWB/DOCPARAMS = LS_DOCPARAMS
ZESOS_RSUGL_PDF = LS_ZESOS_RSUGL_PDF
IMPORTING
/1BCDWB/FORMOUTPUT = LS_FORMOUTPUT
EXCEPTIONS
USAGE_ERROR = 1
SYSTEM_ERROR = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC NE 0.
LV_MSG = 'Failed to generate PDF.'.
PERFORM FILL_MSG USING LV_MSG
CHANGING GS_OUTREP.
MODIFY GT_OUTREP FROM GS_OUTREP INDEX GV_TABIX.
ENDIF.
CHECK SY-SUBRC = 0.
"Close print job.
CALL FUNCTION 'FP_JOB_CLOSE'.
*--------------------------------------------------------------------*
DATA: LT_PDF_BIN TYPE TABLE OF X255.
DATA: LV_PDF_NAME TYPE STRING.
CONCATENATE P_FOLDER '\PDF_TITLE'.pdf' INTO LV_PDF_NAME.
REFRESH: LT_PDF_BIN.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LS_FORMOUTPUT-PDF
TABLES
BINARY_TAB = LT_PDF_BIN.
IF P_OFFLN IS NOT INITIAL AND P_FOLDER IS NOT INITIAL AND P_TEST IS INITIAL." AND P_ATTCH IS INITIAL.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = LV_PDF_NAME
FILETYPE = 'BIN'
TABLES
DATA_TAB = LT_PDF_BIN
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6
HEADER_NOT_ALLOWED = 7
SEPARATOR_NOT_ALLOWED = 8
FILESIZE_NOT_ALLOWED = 9
HEADER_TOO_LONG = 10
DP_ERROR_CREATE = 11
DP_ERROR_SEND = 12
DP_ERROR_WRITE = 13
UNKNOWN_DP_ERROR = 14
ACCESS_DENIED = 15
DP_OUT_OF_MEMORY = 16
DISK_FULL = 17
DP_TIMEOUT = 18
FILE_NOT_FOUND = 19
DATAPROVIDER_EXCEPTION = 20
CONTROL_FLUSH_ERROR = 21
OTHERS = 22.
IF SY-SUBRC NE 0.
LV_MSG = 'Failed to download Vesting PDF.'.
ELSE.
LV_MSG = 'Successfully download RSU Notification of Vesting PDF.'.
LV_MSG = 'Successfully download RSU Notification of Vesting PDF.'.
ENDIF.
ENDIF." IF P_OFFLN IS NOT INITIAL AND P_FOLDER IS NOT INITIAL AND P_TEST IS INITIAL." AND P_ATTCH IS INITIAL.
*--------------------------------------------------------------------*
DATA: LV_RECIPIENT TYPE AD_SMTPADR,
* LV_SUBJECT TYPE SO_OBJ_DES VALUE 'RSU Notification of Vesting',
LV_SUBJECT TYPE SO_OBJ_DES VALUE 'Subject title',
* LV_SUBJECT TYPE SO_OBJ_DES VALUE 'Notification of Vesting of the First Performance-Based Restricted Share Unit Scheme ("RSU")',
LV_SENDER TYPE SY-UNAME VALUE 'USERNAME'.
LV_RECIPIENT = 'email@email.com'.
PERFORM SEND_EMAIL_OFFLN TABLES LT_PDF_BIN USING SY-UNAME LV_RECIPIENT LV_SUBJECT.
ENDFORM. " DOWNLOAD_PDF_RS_VESTING
ENDIF." IF P_OFFLN IS NOT INITIAL AND P_FOLDER IS NOT INITIAL AND P_TEST IS INITIAL." AND P_ATTCH IS INITIAL.
*--------------------------------------------------------------------*
DATA: LV_RECIPIENT TYPE AD_SMTPADR,
* LV_SUBJECT TYPE SO_OBJ_DES VALUE 'RSU Notification of Vesting',
LV_SUBJECT TYPE SO_OBJ_DES VALUE 'Subject title',
* LV_SUBJECT TYPE SO_OBJ_DES VALUE 'Notification of Vesting of the First Performance-Based Restricted Share Unit Scheme ("RSU")',
LV_SENDER TYPE SY-UNAME VALUE 'USERNAME'.
LV_RECIPIENT = 'email@email.com'.
PERFORM SEND_EMAIL_OFFLN TABLES LT_PDF_BIN USING SY-UNAME LV_RECIPIENT LV_SUBJECT.
ENDFORM. " DOWNLOAD_PDF_RS_VESTING


