Skip to Content
Technical Articles

Upload & Download Attachments in Dispute Management(FSCM)

Introduction:

Hi All,

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 

STEP1: 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.

STEP2: 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.

STEP3: Convert the Mime Type of Attachment into file type  by calling function module ‘SA_KW_RFC_FILENAME_EXT_GET’STEP4: 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.

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:

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

STEP2: convert this binary data to XSTRING.

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

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

Pass the File content to UDM_DC_ATTRIBUTES_SET Function module to create attachment

   

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.

Conclusion: Using the above code we can create and download attachments in Dispute management(FSCM) MODULE  using Function modules like UDM_DC_CASE_READ, SRM_DOCUMENT_CHECKOUT_CONT_TAB, UDM_DC_ATTRIBUTES_SET, CV120_GET_MIME_TYPE etc.

Thanks for reading.

Hope this post would be helpful.

Be the first to leave a comment
You must be Logged on to comment or reply to a post.