Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 3165

Regarding emailing password protected PDF using smartform

$
0
0

Hi all,

 

My requirement is to sent email a password protected PDF that is generated from a smartform.

 

I have gone through many posts and made the development, however the pdf is mailed but not opening and giving the error "The file is damaged and could not be opened".

 

The steps the followed as as below

 

1.     Go to SM69  and create a new external system.

2.     Generated the FM name using "SSF_FUNCTION_MODULE_NAME"

3.     Called the above generated FM with options and imported the OTFDATA table.

4.     Converted the OTF data Tab to Lines using FM "CONVERT_OTF".

5.     Stored the file to in server using read dataset. (I have downloaded the file and it is opening properly, may be issue is from the below steps)

6.     Executed the FM's SXPG_COMMAND_LIST_GET, SXPG_COMMAND_CHECK and SXPG_COMMAND_EXECUTE to make the pdf password protected.

7.     Finally sent the pdf as mail attachment using FM "SO_NEW_DOCUMENT_ATT_SEND_API1".

 

 

The mail is sent but the pdf is not opening.

 

Please find the code attached.

 

 

*****************************************************************************************************************************************************************

REPORT ZSDS_PGI_PRINT.

 

TABLES : EKPO.

 

************************************************************************

*****  I-N-T-E-R-N-A-L  T-A-B-L-E-S  D-E-C-L-A-R-A-T-I-O-N  A-R-E-A ****

************************************************************************

DATA : T_DATA      TYPE STANDARD TABLE OF EKPO.

 

************************************************************************

**********      W-O-R-K--A-R-E-A  D-E-C-L-A-R-A-T-I-O-N      ***********

************************************************************************

DATA :    WA_DATA     TYPE EKPO.

 

************************************************************************

******    V-A-R-I-A-B-L-E-S   D-E-C-L-A-R-A-T-I-O-N   A-R-E-A    *******

************************************************************************

DATA : FM_NAME         TYPE RS38L_FNAM,

       CONTROL         TYPE SSFCTRLOP,

       OUTPUT_OPTIONS  TYPE SSFCOMPOP,

       XSFPARAM_LINE   TYPE SSFXSFP.

 

DATA : GS_OTFDATA TYPE SSFCRESCL,

       GT_OTF TYPE TABLE OF ITCOO.

 

DATA : GT_LINES TYPE STANDARD  TABLE OF TLINE,

GS_LINES TYPE TLINE.

 

DATA : BIN_FILE TYPE XSTRING.

 

DATA : GS_DOCDATA TYPE SODOCCHGI1.

 

DATA : GS_RECLIST      TYPE SOMLRECI1,

GT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1.

 

DATA : GT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1,

GS_OBJBIN TYPE SOLISTI1.

 

DATA :  GS_OBJPACK TYPE SOPCKLSTI1,

GT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1.

 

DATA : ITAB_ATTACH TYPE  XSTRING  .

 

DATA : T_ATTACHMENT TYPE  SOLIX_TAB.

 

************************************************************************

********           S-E-L-E-C-T-I-O-N    S-C-R-E-E-N         ************

************************************************************************

SELECTION-SCREEN   : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-099.

SELECT-OPTIONS     : S_EBELN FOR EKPO-EBELN.

SELECTION-SCREEN   : END OF BLOCK B1.

 

************************************************************************

********           S-T-A-R-T O-F S-E-L-E-C-T-I-O-N          ************

************************************************************************

START-OF-SELECTION.

 

  PERFORM GET_DATA.

  IF NOT T_DATA IS INITIAL.

    PERFORM PRINTER_SETTINGS.

    PERFORM SMART_FORM.

  ELSE.

    MESSAGE 'No Entries Found' TYPE 'I'.

    LEAVE LIST-PROCESSING.

  ENDIF.

 

*&---------------------------------------------------------------------*

*&      Form  GET_DATA

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM GET_DATA .

 

  SELECT * FROM EKPO INTO TABLE T_DATA

  UP TO 10 ROWS.

 

ENDFORM.                    " GET_DATA

 

*&---------------------------------------------------------------------*

*&      Form  printer_settings

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM PRINTER_SETTINGS .

 

*    activate XSF Output Mode

  OUTPUT_OPTIONS-XSF        = ' '.      " XSF Output active

  OUTPUT_OPTIONS-XSFCMODE   = 'X'.      " Get XSF params from program

  OUTPUT_OPTIONS-XSFOUTMODE = 'S'.      " Application

  CLEAR OUTPUT_OPTIONS-XSFOUTDEV.

  OUTPUT_OPTIONS-XSFACTION  = 'http://www.sap.com'.

 

  OUTPUT_OPTIONS-XSFFORMAT  = 'X'.      " Formatting ON

 

  XSFPARAM_LINE-NAME  = 'GRAPHICS'.

  XSFPARAM_LINE-VALUE = 'EXTRACT'.

  APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.

  XSFPARAM_LINE-NAME  = 'GRAPHICS-DIRECTORY'.

*  xsfparam_line-value = c_gr_dir.

  APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.

  XSFPARAM_LINE-NAME  = 'CONTENT-ID'.

  XSFPARAM_LINE-VALUE = 'ENABLE'.

  APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.

 

  OUTPUT_OPTIONS-TDIMMED = 'X'.

  OUTPUT_OPTIONS-TDNEWID = ' '.

  OUTPUT_OPTIONS-TDNOPRINT = ' '.

  OUTPUT_OPTIONS-TDDEST = 'LOCL'.

 

* silent mode ON

  CONTROL-NO_DIALOG = 'X'.

  CONTROL-PREVIEW   = ''.

  CONTROL-GETOTF    = 'X'.

 

ENDFORM.                    " printer_settings

 

 

*&---------------------------------------------------------------------*

*&      Form  smart_form

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM SMART_FORM .

 

  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

    EXPORTING

      FORMNAME           = 'ZPDF_PWD'

    IMPORTING

      FM_NAME            = FM_NAME

    EXCEPTIONS

      NO_FORM            = 1

      NO_FUNCTION_MODULE = 2

      OTHERS             = 3.

 

  IF SY-SUBRC <> 0.

    WRITE: / 'ERROR 1'.

  ENDIF.

 

 

  CALL FUNCTION FM_NAME

    EXPORTING

      CONTROL_PARAMETERS = CONTROL

      OUTPUT_OPTIONS     = OUTPUT_OPTIONS

      USER_SETTINGS      = SPACE  "'X'

    IMPORTING

      JOB_OUTPUT_INFO    = GS_OTFDATA

    TABLES

      T_DATA             = T_DATA

    EXCEPTIONS

      FORMATTING_ERROR   = 1

      INTERNAL_ERROR     = 2

      SEND_ERROR         = 3

      USER_CANCELED      = 4

      OTHERS             = 5.

 

 

  IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

 

  CLEAR GT_OTF.

  GT_OTF[] = GS_OTFDATA-OTFDATA[].

 

  CLEAR GT_LINES.

  CALL FUNCTION 'CONVERT_OTF'

    EXPORTING

      FORMAT                = 'PDF'

      MAX_LINEWIDTH         = 132

    IMPORTING

      BIN_FILESIZE          = BIN_FILE

    TABLES

      OTF                   = GT_OTF

      LINES                 = GT_LINES

    EXCEPTIONS

      ERR_MAX_LINEWIDTH     = 1

      ERR_FORMAT            = 2

      ERR_CONV_NOT_POSSIBLE = 3

      ERR_BAD_OTF           = 4

      OTHERS                = 5.

  IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

 

 

  DATA L_FILE TYPE STRING  .

  CONCATENATE  'c:\usr\sap\IDS\Attendance_record\work' '.PDF' INTO L_FILE.

  OPEN DATASET L_FILE FOR OUTPUT IN BINARY MODE  .

  IF  SY-SUBRC = 0 .

    LOOP AT GT_LINES INTO GS_LINES .

      TRANSFER GS_LINES TO L_FILE .

    ENDLOOP.

    CLOSE DATASET L_FILE .

  ELSE.

    WRITE : / 'operating system could not open file' .

  ENDIF.

 

**&******************************************************************

*      ASSIGNING THE DESCRIPTION OF THE OBJECT SENT IN MAIL

*&******************************************************************

  CLEAR GS_DOCDATA.

  GS_DOCDATA-OBJ_NAME = 'SAPRPT'.

  GS_DOCDATA-OBJ_DESCR = 'test'.

  GS_DOCDATA-OBJ_LANGU = SY-LANGU.

*&******************************************************************************

*        ASSIGNING THE EMAIL-ID TO STRUCTURE OF API RECIPIENT LIST TABLE

*&******************************************************************************

  CLEAR : GT_RECLIST,GS_RECLIST.

***IF INTERNAL MAIL-ID

*  gs_reclist-receiver = sy-uname.

*  gs_reclist-rec_type = 'B'.

***IF EXTERNAL MAIL-ID

  GS_RECLIST-RECEIVER = 'test1@gmail.com'.

  GS_RECLIST-REC_TYPE = 'U'.

  APPEND GS_RECLIST TO GT_RECLIST.

 

 

*&******************************************************************

*     PASSING THE SAP SCRIPT LINES TO SAP OFFICE

*&******************************************************************

  DATA :  GV_LEN TYPE I,

           GV_POS TYPE I.

 

 

  CLEAR : GS_OBJBIN,GS_LINES.

  LOOP AT GT_LINES INTO GS_LINES.

    GV_POS = 255 - GV_LEN.

    IF GV_POS > 134.

      GV_POS = 134.

    ENDIF.

    GS_OBJBIN+GV_LEN = GS_LINES(GV_POS).

    GV_LEN = GV_LEN + GV_POS.

    IF GV_LEN = 255.

      APPEND GS_OBJBIN TO GT_OBJBIN.

      CLEAR : GS_OBJBIN,GV_LEN.

      IF GV_POS < 134.

        GS_OBJBIN = GS_LINES+GV_POS.

        GV_LEN = 134 - GV_POS.

      ENDIF.

    ENDIF.

  ENDLOOP.

  IF GV_LEN > 0.

    APPEND GS_OBJBIN TO GT_OBJBIN.

  ENDIF.

 

*&******************************************************************

*           FILLING THE DETAILS IN SAP OFFICE

*&******************************************************************

  DATA : GV_TAB_LINES TYPE I.

 

 

  DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.

  CLEAR GS_OBJBIN.

  READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.

  IF SY-SUBRC = 0.

    GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).

    GS_OBJPACK-TRANSF_BIN = 'X'.

    GS_OBJPACK-HEAD_START = 1.

    GS_OBJPACK-HEAD_NUM = 0.

    GS_OBJPACK-BODY_START = 1.

    GS_OBJPACK-BODY_NUM = GV_TAB_LINES.

    GS_OBJPACK-DOC_TYPE = 'PDF'.

    GS_OBJPACK-OBJ_NAME = 'ATTACHMENT'.

    GS_OBJPACK-OBJ_DESCR = 'TEST'.

    APPEND GS_OBJPACK TO GT_OBJPACK.

  ENDIF.

 

 

 

*********************************************************************

*********************************************************************

  DATA: BEGIN OF COMMAND_LIST OCCURS 0.

          INCLUDE STRUCTURE SXPGCOLIST.

  DATA: END OF COMMAND_LIST .

 

  DATA: BEGIN OF EXEC_PROTOCOL OCCURS 0.

          INCLUDE STRUCTURE BTCXPM.

  DATA: END OF EXEC_PROTOCOL.

  DATA: STATUS LIKE BTCXP3-EXITSTAT,

   COMMANDNAME LIKE SXPGCOLIST-NAME VALUE 'ZDJ_ENCRYPTPDF',

 

    SEL_NO LIKE SY-TABIX.

 

* GET LIST OF EXTERNAL COMMANDS

 

  CALL FUNCTION 'SXPG_COMMAND_LIST_GET'

    EXPORTING

      COMMANDNAME     = COMMANDNAME

      OPERATINGSYSTEM = SY-OPSYS

    TABLES

      COMMAND_LIST    = COMMAND_LIST

    EXCEPTIONS

      OTHERS          = 1.

 

  CALL FUNCTION 'SXPG_COMMAND_CHECK'

    EXPORTING

      COMMANDNAME                = COMMAND_LIST-NAME

      OPERATINGSYSTEM            = SY-OPSYS

    EXCEPTIONS

      NO_PERMISSION              = 1

      COMMAND_NOT_FOUND          = 2

      PARAMETERS_TOO_LONG        = 3

      SECURITY_RISK              = 4

      WRONG_CHECK_CALL_INTERFACE = 5

      X_ERROR                    = 6

      TOO_MANY_PARAMETERS        = 7

      PARAMETER_EXPECTED         = 8

      ILLEGAL_COMMAND            = 9

      COMMUNICATION_FAILURE      = 10

      SYSTEM_FAILURE             = 11

      OTHERS                     = 12.

 

 

  CLEAR COMMAND_LIST.

  REFRESH COMMAND_LIST.

  DATA: V_DIR_INPUT      TYPE SXPGCOLIST-PARAMETERS.

  DATA: V_DIR_INPUT1      TYPE SXPGCOLIST-PARAMETERS.

 

  COMMAND_LIST-NAME = 'ZDJ_ENCRYPTPDF'.

  COMMAND_LIST-OPSYSTEM = 'Windows NT'.

 

  DATA : DOC  TYPE STRING.

 

  DATA : PASS TYPE STRING ,

        NAME(40).

 

  DOC = 'invoice'.

  PASS = '123456'.

 

  CONCATENATE   'cmd/c d:\pdf\encryptpdf.exe' DOC'.PDF' INTO NAME.

  CONCATENATE 'cmd /c d:\pdf\encryptpdf.exe' '-i'  NAME  '-o ' NAME  '-u'  PASS INTO V_DIR_INPUT SEPARATED BY SPACE .

 

  READ TABLE COMMAND_LIST INDEX SEL_NO.

 

  CONCATENATE COMMAND_LIST-OPCOMMAND V_DIR_INPUT INTO COMMAND_LIST-OPCOMMAND SEPARATED BY SPACE.

 

* CHECK AUTHORIZATION

  COMMAND_LIST-ADDPAR = 'X'.

  APPEND COMMAND_LIST.

  .

CONSTANTS: C_EXTCOM    TYPE SXPGCOLIST-NAME VALUE 'ZDJ_ENCRYPTPDF',

   C_OPER      TYPE SYOPSYS VALUE 'Windows NT'.

 

 

  DATA: T_RESULT         TYPE STANDARD TABLE OF BTCXPM.

  V_DIR_INPUT  =  COMMAND_LIST-OPCOMMAND.

 

 

 

 

 

 

  CALL FUNCTION 'SXPG_COMMAND_EXECUTE'

    EXPORTING

      COMMANDNAME                   = C_EXTCOM

      ADDITIONAL_PARAMETERS         = V_DIR_INPUT

      OPERATINGSYSTEM               = C_OPER

    TABLES

      EXEC_PROTOCOL                 = T_RESULT

    EXCEPTIONS

      NO_PERMISSION                 = 1

      COMMAND_NOT_FOUND             = 2

      PARAMETERS_TOO_LONG           = 3

      SECURITY_RISK                 = 4

      WRONG_CHECK_CALL_INTERFACE    = 5

      PROGRAM_START_ERROR           = 6

      PROGRAM_TERMINATION_ERROR     = 7

      X_ERROR                       = 8

      PARAMETER_EXPECTED            = 9

      TOO_MANY_PARAMETERS           = 10

      ILLEGAL_COMMAND               = 11

      WRONG_ASYNCHRONOUS_PARAMETERS = 12

      CANT_ENQ_TBTCO_ENTRY          = 13

      JOBCOUNT_GENERATION_ERROR     = 14

      OTHERS                        = 15.

 

  OPEN DATASET L_FILE FOR INPUT IN BINARY MODE.

  IF SY-SUBRC = 0.

    READ DATASET L_FILE INTO ITAB_ATTACH.

    CLOSE DATASET L_FILE.

  ENDIF.

 

  CALL METHOD CL_BCS_CONVERT=>XSTRING_TO_SOLIX

    EXPORTING

      IV_XSTRING = ITAB_ATTACH

    RECEIVING

      ET_SOLIX   = T_ATTACHMENT.

 

  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

    EXPORTING

      DOCUMENT_DATA              = GS_DOCDATA

      PUT_IN_OUTBOX              = 'X'

      COMMIT_WORK                = 'X'

    TABLES

      PACKING_LIST               = GT_OBJPACK

      CONTENTS_BIN               = GT_OBJBIN

      CONTENTS_HEX               = T_ATTACHMENT

      RECEIVERS                  = GT_RECLIST

    EXCEPTIONS

      TOO_MANY_RECEIVERS         = 1

      DOCUMENT_NOT_SENT          = 2

      DOCUMENT_TYPE_NOT_EXIST    = 3

      OPERATION_NO_AUTHORIZATION = 4

      PARAMETER_ERROR            = 5

      X_ERROR                    = 6

      ENQUEUE_ERROR              = 7

      OTHERS                     = 8.

  IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

 

  ELSE.

    WRITE 'SENT SUCCESSFULLY'.

  ENDIF.

 

ENDFORM.                    " smart_form

 

*****************************************************************************************************************************************************************

Thanks

Pavan


Viewing all articles
Browse latest Browse all 3165

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>