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.

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





Read On 0 comments

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 .
TABLESusr02.
data:
     begin of t_BNAME occurs 0,
           BNAME like USR02-BNAME,
           "maktx like makt-maktx,
     end   of t_BNAME,
     t_values type DYNPREAD occurs WITH HEADER LINE,
     v_prog like D020S-PROG.
TYPESBEGIN OF X_RETURN .
        INCLUDE STRUCTURE DDSHRETVAL"Search help structure
TYPESEND OF X_RETURN.
datal_dynpprog       type sy-repid,
      l_dynnr          type sy-dynnr,
      l_dynprofld      TYPE help_info-dynprofld.
dataRETURN_TAB   TYPE STANDARD TABLE OF X_RETURN WITH HEADER LINE.





   v_prog sy-repid.
   REFRESHt_values.
   CLEARt_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
Read On 0 comments

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


Read On 0 comments

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
.

  CONSTANTSLC_TYPE TYPE SO_OBJ_TP VALUE 'HTM'.
  DATALO_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.

  DATALT_SOLIX     TYPE SOLIX_TAB,
        LS_SOLIX     
LIKE LINE OF LT_SOLIX.

  
DATALV_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_MESSAGELS_MESSAGE '<html>'APPEND LS_MESSAGE TO LT_DOCUMENT.
  
CLEAR LS_MESSAGELS_MESSAGE '<body>'APPEND LS_MESSAGE TO LT_DOCUMENT.
  CLEAR LS_MESSAGELS_MESSAGE 'Dear Sir/Madam,<br>'.   APPEND LS_MESSAGE TO LT_DOCUMENT.
  
CLEAR LS_MESSAGELS_MESSAGE '<u><b>Underline and bold</b></u> <br><br>'.         APPEND LS_MESSAGE TO LT_DOCUMENT. " underline and bold
  CLEAR LS_MESSAGELS_MESSAGE '</body>'.   APPEND LS_MESSAGE TO LT_DOCUMENT.
  
CLEAR LS_MESSAGELS_MESSAGE '</html>'.   APPEND LS_MESSAGE TO LT_DOCUMENT.
  "-----PDF RSU-----"
  
"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=>CREATEPV_SENDER ).

     "Create Recipient
      LO_RECIPIENT 
CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESSPV_RECIPIENT ).

      "Setup BCS Object
      LO_MESSENGER
->SET_DOCUMENTLO_DOCUMENT ).
      LO_MESSENGER
->SET_SENDERLO_SENDER ).
      LO_MESSENGER
->ADD_RECIPIENTLO_RECIPIENT ).

      "Send the Mail via BCS Object
      LO_DELIVERY 
LO_MESSENGER->SENDI_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.

  
DATALS_OUTPUTPARAMS           TYPE SFPOUTPUTPARAMS.
  
DATALS_FORMOUTPUT             TYPE FPFORMOUTPUT.
  
DATALV_FM_NAME                TYPE RS38L_FNAM.
  
DATALS_DOCPARAMS              TYPE SFPDOCPARAMS.
  
DATALS_ZESOS_RSUGL_PDF        TYPE ZESOS_RSUGL_PDF.

  
DATALV_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'.

*--------------------------------------------------------------------*
  
DATALT_PDF_BIN            TYPE TABLE OF X255.
  
DATALV_PDF_NAME           TYPE STRING.

  
CONCATENATE P_FOLDER '\PDF_TITLE'.pdf' INTO LV_PDF_NAME.


  
REFRESHLT_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.'.
  ENDIF.
ENDIF." IF P_OFFLN IS NOT INITIAL AND P_FOLDER IS NOT INITIAL AND P_TEST IS INITIAL." AND P_ATTCH IS INITIAL.
*--------------------------------------------------------------------*
  
DATALV_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
Read On 0 comments

message

Labels

NuffNang

Search google

Blog Archive

My Blog List

Twitter

Message

Followers