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.
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.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.
Original Article:
https://blogs.sap.com/2020/05/22/upload-download-attachments-in-dispute-managementfscm/