Upload & Download Attachments in Dispute Management(FSCM)

0


In this blog, I am going to explain how to work with Attachments in the Dispute management module(FSCM) through the ABAP code.

There is a requirement where we need to Upload & Download the attachments for the Dispute case in our custom Applications I search for Different blogs to find any function modules or classes that can serve this purpose.

PROCEDURE:

Below is the Step-by-Step Process of how to create/Display Dispute case Attachment

DOWNLOAD DISPUTE CASE ATTACHMENT 

STEP 1: get the CASE_GUID from SCMG_T_CASE_ATTR table and pass to the Function Module

Functi UDM_DC_CASE_READ to get the attachment details.

STEP 2: For each attachment, a Unique GUID will be generated this is DOC_GUID and DOC_CLASS will show Storage Location of Document in SRM (Content Model), these two attributes data we can get from above Function module so loop the LT_ATTACH internal table and get attachment data for each DOC_GUID by calling function module SRM_DOCUMENT_CHECKOUT_CONT_TAB.

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

STEP 3: Convert the Mime Type of Attachment into file type  by calling function module ‘SA_KW_RFC_FILENAME_EXT_GET’

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

STEP 4: Finally pass the binary content fetching from SRM_DOCUMENT_CHECKOUT_CONT_TAB to Function module GUI_DOWNLOAD and download the file to whichever Location you want, here we are downloading the file to Desktop directory.

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

Below is complete code

REPORT ZCASE_GET_ATTACHMENTS.

PARAMETERS: P_EXTKEY TYPE SCMG_EXT_KEY.

DATA: LV_GUID     TYPE SCMG_CASE_GUID,

LV_PATH     TYPE STRING,

LV_FILENAME TYPE STRING,

LV_DOCTYP   TYPE CHAR10,

LT_ATTACH   TYPE UDM_T_CASE_DOCUMENT_LIST.

*FETCH CASE GUID BASED ON CASE NO

SELECT SINGLE CASE_GUID

FROM   SCMG_T_CASE_ATTR

INTO LV_GUID

WHERE EXT_KEY = P_EXTKEY.

“TO READ THE ATTACHMENT BASED ON GUID

CALL FUNCTION ‘UDM_DC_CASE_READ’

EXPORTING

I_CASE_GUID   = LV_GUID

IMPORTING

ET_ATTACHMENT = LT_ATTACH.

DATA: LT_COMPONENT TYPE STANDARD TABLE OF BAPIDOCCOMP,

LT_BIN       TYPE STANDARD TABLE OF BAPICONTENT255.

LOOP AT LT_ATTACH ASSIGNING FIELD-SYMBOL (<LS_ATTACH>).

REFRESH:LT_COMPONENT,LT_BIN.

“COVERT DATA INTO BINARY FORMAT

CALL FUNCTION ‘SRM_DOCUMENT_CHECKOUT_CONT_TAB’

EXPORTING

OBJECTID        = <LS_ATTACH>-DOC_GUID

DOCUMENTCLASS   = <LS_ATTACH>-DOC_CLASS

TABLES

COMPONENTS      = LT_COMPONENT

BIN_CONTENT     = LT_BIN

EXCEPTIONS

INTERNAL_ERROR  = 1

PARAMETER_ERROR = 2

NOT_AUTHORIZED  = 3

DOC_NOT_FOUND   = 4.

“TO CONVERT MIMETYPE TO DOCTYPE

CLEAR: LV_DOCTYP.

CALL FUNCTION ‘SA_KW_RFC_FILENAME_EXT_GET’

EXPORTING

MIMETYPE  = <LS_ATTACH>-MIMETYPE

IMPORTING

EXTENSION = LV_DOCTYP.

“TO READ DESKTOP PATH

CLEAR: LV_PATH, LV_FILENAME.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY

CHANGING

DESKTOP_DIRECTORY    = LV_PATH

EXCEPTIONS

CNTL_ERROR           = 1

ERROR_NO_GUI         = 2

NOT_SUPPORTED_BY_GUI = 3

OTHERS               = 4.

CALL METHOD CL_GUI_CFW=>UPDATE_VIEW.

“PREPARE THE FILE NAME ALONG WITH PATH

LV_FILENAME = LV_PATH && ” && LV_GUID  && ”

&& <LS_ATTACH>-DESCRIPTION && ‘.’ && LV_DOCTYP.

“DOWNLOAD THE FILE TO DESKTOP PATH

CALL FUNCTION ‘GUI_DOWNLOAD’

EXPORTING

FILENAME                = LV_FILENAME

FILETYPE                = ‘BIN’

TABLES

DATA_TAB                = LT_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 <> 0.

* IMPLEMENT SUITABLE ERROR HANDLING HERE

ENDIF.

ENDLOOP.

CREATE DISPUTE CASE ATTACHMENT:

STEP 1:  Upload the file and convert it into Binary data by using function module GUI_UPLOAD as below.

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

STEP 2: convert this binary data to XSTRING.

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

STEP 3: get the Mime type bypassing the file name to by Calling Function module CV120_GET_MIME_TYPE and convert the xstring to RAW DATA.

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

STEP 4: Prepare File class and File content internal table and Pass to the Function Module UDM_DC_ATTRIBUTES_SET.

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

Pass the File content to UDM_DC_ATTRIBUTES_SET Function module to create attachment

SAP ABAP Tutorial and Material, SAP ABAP Guides, SAP ABAP Learning, SAP ABAP Exam Prep

Below is complete code

DATA: RES_TAB        TYPE TABLE OF BAPICONTEN,

LV_CSTRING     TYPE        XSTRING,

I_FILELENGTH   TYPE        I,

LV_FNAME       TYPE        STRING,

LV_LOCAL       TYPE        DRAW-FILEP,

LV_GUID        TYPE        SCMG_T_CASE_ATTR-CASE_GUID,

LT_ATTRIBUTE   TYPE        BDM_T_ATTRIBUTE,

LT_FILECONTENT TYPE        BDM_T_FILECONTENT,

LR_FILECONTENT TYPE REF TO BDM_FILECONTENT,

LT_FILECLASS   TYPE        BDM_T_FILECLASS,

LR_FILECLASS   TYPE REF TO BAPI_DISPUTE_FILECLASS,

LT_CONTENT     TYPE STANDARD TABLE OF BAPIRMDATX255,

LR_CONTENT     TYPE REF TO BAPIRMDATX255,

LV_SIZE        TYPE        BDM_COMP_SIZE,

LV_FILENAME    TYPE        BDM_DOCID,

LV_EXT         TYPE STRING,

LV_MIMETYPE    TYPE        W3CONTTYPE,

LT_DOCUMENT    TYPE        UDM_T_CASE_DOCUMENT_LIST,

LR_DOCUMENT    TYPE REF TO UDM_CASE_DOCUMENT_LIST,

ES_RETURN      TYPE BAPIRET2.

LV_FNAME = LV_ATTACH.

CALL FUNCTION ‘GUI_UPLOAD’

EXPORTING

FILENAME                = LV_FNAME

FILETYPE                = ‘BIN’

READ_BY_LINE            = ‘X’

IMPORTING

FILELENGTH              = I_FILELENGTH

TABLES

DATA_TAB                = RES_TAB

EXCEPTIONS

FILE_OPEN_ERROR         = 1

FILE_READ_ERROR         = 2

NO_BATCH                = 3

GUI_REFUSE_FILETRANSFER = 4

INVALID_TYPE            = 5

NO_AUTHORITY            = 6

UNKNOWN_ERROR           = 7

BAD_DATA_FORMAT         = 8

HEADER_NOT_ALLOWED      = 9

SEPARATOR_NOT_ALLOWED   = 10

HEADER_TOO_LONG         = 11

UNKNOWN_DP_ERROR        = 12

ACCESS_DENIED           = 13

DP_OUT_OF_MEMORY        = 14

DISK_FULL               = 15

DP_TIMEOUT              = 16

OTHERS                  = 17.

IF SY-SUBRC <> 0.

MESSAGE TEXT-118 TYPE ‘S’ DISPLAY LIKE ‘E’.

EXIT.

ENDIF.

LOOP AT RES_TAB ASSIGNING FIELD-SYMBOL(<FS_RAW>).

CONCATENATE LV_CSTRING <FS_RAW>-LINE INTO LV_CSTRING IN BYTE MODE.

ENDLOOP.

LV_LOCAL = LV_FNAME.

CALL FUNCTION ‘CV120_GET_MIME_TYPE’

EXPORTING

*       PF_DAPPL     =

PF_FILE      = LV_LOCAL

IMPORTING

PFX_MIMETYPE = LV_MIMETYPE.

CALL METHOD CL_SWF_UTL_CONVERT_XSTRING=>XSTRING_TO_TABLE

EXPORTING

I_STREAM      = LV_CSTRING

IMPORTING

E_TABLE       = LT_CONTENT

EXCEPTIONS

INVALID_INPUT = 1

INVALID_TABLE = 2

OTHERS        = 3.

IF SY-SUBRC <> 0.

ENDIF.

CALL FUNCTION ‘CH_SPLIT_FILENAME’

EXPORTING

COMPLETE_FILENAME = LV_FNAME

IMPORTING

NAME              = LV_FILENAME.

LV_SIZE = XSTRLEN( LV_CSTRING ).” LENGTH LV_SIZE IN CHARACTER MODE.

LOOP AT LT_CONTENT REFERENCE INTO LR_CONTENT.

CREATE DATA LR_FILECONTENT.

LR_FILECONTENT->FILE_ID      = 1.

LR_FILECONTENT->CONTENT_LINE = LR_CONTENT->*.

LR_FILECONTENT->COMP_ID      = LV_FILENAME.

LR_FILECONTENT->MIMETYPE     = LV_MIMETYPE.

LR_FILECONTENT->COMP_SIZE    = LV_SIZE.

APPEND LR_FILECONTENT->* TO LT_FILECONTENT.

ENDLOOP.

CREATE DATA LR_FILECLASS.

LR_FILECLASS->FILE_ID = 1.

LR_FILECLASS->NEW_CLASS = ‘INFO’. “This class varies based on requirement

APPEND LR_FILECLASS->* TO LT_FILECLASS.

CALL METHOD /KFINAPP/CL_DM_CONVERSIONS=>GET_EXISTING_ATTRIBUTES(

EXPORTING

IM_CASE_GUID  = LV_CASE

IMPORTING

ET_ATTRIBUTES = LT_ATTRIBUTE

).

CALL FUNCTION ‘UDM_DC_ATTRIBUTES_SET’

EXPORTING

I_CASE_GUID       = LV_CASE

IT_ATTRIBUTE      = LT_ATTRIBUTE

IT_FILECONTENT    = LT_FILECONTENT

IT_FILECLASS      = LT_FILECLASS

I_ENQUEUE         = ‘X’

I_NO_FREE_OBJECTS = ‘ ‘ “‘X’

IMPORTING

ES_RETURN         = ES_RETURN.

IF ES_RETURN IS INITIAL.

COMMIT WORK.

CLEAR LV_ATTACH.

MESSAGE TEXT-119 TYPE ‘S’.

ENDIF.





Source link

Share.

Leave A Reply