*&---------------------------------------------------------------------*
*& Report Z02FIUPNOTE
*&
*&---------------------------------------------------------------------*
*& FI Batch Document Note
*&
*&---------------------------------------------------------------------*
REPORT Z02FIUPNOTE .
TYPES : BEGIN OF TP_OUT ,
BUKRS LIKE BKPF -BUKRS ,
GJAHR LIKE BKPF -GJAHR ,
BELNR LIKE BKPF -BELNR ,
TITLE TYPE SO_OBJ_DES ,
CONTENT TYPE CHAR255 ,
END OF TP_OUT .
DATA : GT_OUT TYPE TABLE OF TP_OUT ,
GS_OUT TYPE TP_OUT .
DATA : L_EXCEL_TAB TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE .
FIELD-SYMBOLS : <FS> .
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT - 001 .
PARAMETERS :
INPATH TYPE RLGRAP -FILENAME .
SELECTION-SCREEN END OF BLOCK B1 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR INPATH .
PERFORM GET_PC_FILENAME USING INPATH .
START-OF-SELECTION .
PERFORM FRM_UPLOAD_DATA .
PERFORM FRM_PROCESS_DATA .
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = INPATH
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 5
I_END_ROW = 65535
TABLES
INTERN = L_EXCEL_TAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
MESSAGE ID SY -MSGID TYPE SY -MSGTY NUMBER SY -MSGNO
WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
SORT L_EXCEL_TAB BY ROW COL .
LOOP AT L_EXCEL_TAB .
ASSIGN COMPONENT L_EXCEL_TAB -COL OF STRUCTURE GS_OUT TO <FS> .
MOVE L_EXCEL_TAB - VALUE TO <FS> .
AT END OF ROW .
APPEND GS_OUT TO GT_OUT .
CLEAR GS_OUT .
ENDAT .
ENDLOOP .
IF GT_OUT IS INITIAL .
MESSAGE 'No data found' TYPE 'I' .
STOP .
ENDIF .
ENDFORM . " FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form GET_PC_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_INPATH text
*----------------------------------------------------------------------*
FORM GET_PC_FILENAME USING P_INPATH .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
DEF_PATH = ' '
MASK = ',*.* ,*.*. '
MODE = 'O'
TITLE = ' '
IMPORTING
FILENAME = INPATH
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5 .
ENDFORM . " GET_PC_FILENAME
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
DATA MSG TYPE STRING .
DATA ANSWER .
DATA LINES TYPE STRING .
DATA FOLDER_ID TYPE SOFDK .
DATA LT_OBJHEAD TYPE STANDARD TABLE OF SOLI .
DATA LT_OBJCONT TYPE STANDARD TABLE OF SOLI WITH HEADER LINE .
DATA L_OBJ_ID TYPE SOODK .
DATA L_OBJ_DATA TYPE SOOD1 .
DATA DOCUMENT_ID TYPE SOFMK .
DATA REL_DOC TYPE BORIDENT .
DATA IS_OBJECT TYPE BORIDENT .
DATA L_INDEX TYPE SY - INDEX .
CLEAR :MSG ,ANSWER , LINES ,FOLDER_ID ,LT_OBJHEAD ,LT_OBJCONT ,LT_OBJCONT[] ,L_OBJ_ID ,L_OBJ_DATA ,DOCUMENT_ID ,IS_OBJECT ,REL_DOC ,L_INDEX .
LINES = LINES ( GT_OUT ) .
CONCATENATE LINES 'lines of FI Document Note will be updated' INTO MSG SEPARATED BY SPACE .
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TEXT_QUESTION = MSG
IMPORTING
ANSWER = ANSWER .
IF SY -SUBRC <> 0 .
ENDIF .
IF ANSWER NE '1' .
STOP .
ENDIF .
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
REGION = 'B'
IMPORTING
FOLDER_ID = FOLDER_ID
EXCEPTIONS
OTHERS = 1 .
LOOP AT GT_OUT INTO GS_OUT .
L_INDEX = SY -TABIX .
IF GS_OUT - TITLE IS INITIAL .
WRITE :/ 'Line ' , L_INDEX , 'title is blank, skip' .
CLEAR GS_OUT .
CONTINUE .
ENDIF .
IF GS_OUT -CONTENT IS INITIAL .
WRITE :/ 'Line ' , L_INDEX , 'content is blank, skip' .
CLEAR GS_OUT .
CONTINUE .
ENDIF .
LT_OBJCONT - LINE = GS_OUT -CONTENT .
APPEND LT_OBJCONT .
L_OBJ_DATA -OBJSNS = 'O' .
L_OBJ_DATA -OBJLA = SY -LANGU .
L_OBJ_DATA -OBJDES = GS_OUT - TITLE .
L_OBJ_DATA -FILE_EXT = 'TXT' .
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_TYPE = 'RAW'
OBJECT_HD_CHANGE = L_OBJ_DATA
IMPORTING
OBJECT_ID = L_OBJ_ID
TABLES
OBJHEAD = LT_OBJHEAD
OBJCONT = LT_OBJCONT
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 35
FOLDER_NOT_EXIST = 6
OBJECT_TYPE_NOT_EXIST = 17
OWNER_NOT_EXIST = 22
PARAMETER_ERROR = 23
OTHERS = 1000 .
IF SY -SUBRC = 0 .
DOCUMENT_ID -FOLTP = FOLDER_ID -FOLTP .
DOCUMENT_ID -FOLYR = FOLDER_ID -FOLYR .
DOCUMENT_ID -FOLNO = FOLDER_ID -FOLNO .
DOCUMENT_ID -DOCTP = L_OBJ_ID -OBJTP .
DOCUMENT_ID -DOCYR = L_OBJ_ID -OBJYR .
DOCUMENT_ID -DOCNO = L_OBJ_ID -OBJNO .
CLEAR REL_DOC .
REL_DOC -OBJKEY = DOCUMENT_ID .
REL_DOC -OBJTYPE = 'MESSAGE' .
CONCATENATE GS_OUT -BUKRS GS_OUT -BELNR GS_OUT -GJAHR INTO IS_OBJECT -OBJKEY .
IS_OBJECT -OBJTYPE = 'BKPF' .
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
OBJ_ROLEA = IS_OBJECT
OBJ_ROLEB = REL_DOC
RELATIONTYPE = 'NOTE'
EXCEPTIONS
OTHERS = 1 .
IF SY -SUBRC = 0 .
WRITE :/ 'Line ' , L_INDEX , 'updated FI Document Note successfully' .
COMMIT WORK .
ELSE .
WRITE :/ 'Line ' , L_INDEX , 'updated FI Document Note unsuccessfully' .
ROLLBACK WORK .
ENDIF .
ELSE .
WRITE :/ 'Line ' , L_INDEX , 'updated FI Document Note successfully' .
ENDIF .
CLEAR :LT_OBJHEAD ,LT_OBJCONT ,LT_OBJCONT[] ,L_OBJ_ID ,L_OBJ_DATA ,DOCUMENT_ID ,IS_OBJECT ,REL_DOC ,L_INDEX .
CLEAR GS_OUT .
ENDLOOP .
ENDFORM . " FRM_PROCESS_DATA
*& Report Z02FIUPNOTE
*&
*&---------------------------------------------------------------------*
*& FI Batch Document Note
*&
*&---------------------------------------------------------------------*
REPORT Z02FIUPNOTE .
TYPES : BEGIN OF TP_OUT ,
BUKRS LIKE BKPF -BUKRS ,
GJAHR LIKE BKPF -GJAHR ,
BELNR LIKE BKPF -BELNR ,
TITLE TYPE SO_OBJ_DES ,
CONTENT TYPE CHAR255 ,
END OF TP_OUT .
DATA : GT_OUT TYPE TABLE OF TP_OUT ,
GS_OUT TYPE TP_OUT .
DATA : L_EXCEL_TAB TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE .
FIELD-SYMBOLS : <FS> .
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT - 001 .
PARAMETERS :
INPATH TYPE RLGRAP -FILENAME .
SELECTION-SCREEN END OF BLOCK B1 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR INPATH .
PERFORM GET_PC_FILENAME USING INPATH .
START-OF-SELECTION .
PERFORM FRM_UPLOAD_DATA .
PERFORM FRM_PROCESS_DATA .
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = INPATH
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 5
I_END_ROW = 65535
TABLES
INTERN = L_EXCEL_TAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3 .
IF SY -SUBRC <> 0 .
MESSAGE ID SY -MSGID TYPE SY -MSGTY NUMBER SY -MSGNO
WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF .
SORT L_EXCEL_TAB BY ROW COL .
LOOP AT L_EXCEL_TAB .
ASSIGN COMPONENT L_EXCEL_TAB -COL OF STRUCTURE GS_OUT TO <FS> .
MOVE L_EXCEL_TAB - VALUE TO <FS> .
AT END OF ROW .
APPEND GS_OUT TO GT_OUT .
CLEAR GS_OUT .
ENDAT .
ENDLOOP .
IF GT_OUT IS INITIAL .
MESSAGE 'No data found' TYPE 'I' .
STOP .
ENDIF .
ENDFORM . " FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form GET_PC_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_INPATH text
*----------------------------------------------------------------------*
FORM GET_PC_FILENAME USING P_INPATH .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
DEF_PATH = ' '
MASK = ',*.* ,*.*. '
MODE = 'O'
TITLE = ' '
IMPORTING
FILENAME = INPATH
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5 .
ENDFORM . " GET_PC_FILENAME
*&---------------------------------------------------------------------*
*& Form FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
DATA MSG TYPE STRING .
DATA ANSWER .
DATA LINES TYPE STRING .
DATA FOLDER_ID TYPE SOFDK .
DATA LT_OBJHEAD TYPE STANDARD TABLE OF SOLI .
DATA LT_OBJCONT TYPE STANDARD TABLE OF SOLI WITH HEADER LINE .
DATA L_OBJ_ID TYPE SOODK .
DATA L_OBJ_DATA TYPE SOOD1 .
DATA DOCUMENT_ID TYPE SOFMK .
DATA REL_DOC TYPE BORIDENT .
DATA IS_OBJECT TYPE BORIDENT .
DATA L_INDEX TYPE SY - INDEX .
CLEAR :MSG ,ANSWER , LINES ,FOLDER_ID ,LT_OBJHEAD ,LT_OBJCONT ,LT_OBJCONT[] ,L_OBJ_ID ,L_OBJ_DATA ,DOCUMENT_ID ,IS_OBJECT ,REL_DOC ,L_INDEX .
LINES = LINES ( GT_OUT ) .
CONCATENATE LINES 'lines of FI Document Note will be updated' INTO MSG SEPARATED BY SPACE .
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TEXT_QUESTION = MSG
IMPORTING
ANSWER = ANSWER .
IF SY -SUBRC <> 0 .
ENDIF .
IF ANSWER NE '1' .
STOP .
ENDIF .
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
REGION = 'B'
IMPORTING
FOLDER_ID = FOLDER_ID
EXCEPTIONS
OTHERS = 1 .
LOOP AT GT_OUT INTO GS_OUT .
L_INDEX = SY -TABIX .
IF GS_OUT - TITLE IS INITIAL .
WRITE :/ 'Line ' , L_INDEX , 'title is blank, skip' .
CLEAR GS_OUT .
CONTINUE .
ENDIF .
IF GS_OUT -CONTENT IS INITIAL .
WRITE :/ 'Line ' , L_INDEX , 'content is blank, skip' .
CLEAR GS_OUT .
CONTINUE .
ENDIF .
LT_OBJCONT - LINE = GS_OUT -CONTENT .
APPEND LT_OBJCONT .
L_OBJ_DATA -OBJSNS = 'O' .
L_OBJ_DATA -OBJLA = SY -LANGU .
L_OBJ_DATA -OBJDES = GS_OUT - TITLE .
L_OBJ_DATA -FILE_EXT = 'TXT' .
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_TYPE = 'RAW'
OBJECT_HD_CHANGE = L_OBJ_DATA
IMPORTING
OBJECT_ID = L_OBJ_ID
TABLES
OBJHEAD = LT_OBJHEAD
OBJCONT = LT_OBJCONT
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 35
FOLDER_NOT_EXIST = 6
OBJECT_TYPE_NOT_EXIST = 17
OWNER_NOT_EXIST = 22
PARAMETER_ERROR = 23
OTHERS = 1000 .
IF SY -SUBRC = 0 .
DOCUMENT_ID -FOLTP = FOLDER_ID -FOLTP .
DOCUMENT_ID -FOLYR = FOLDER_ID -FOLYR .
DOCUMENT_ID -FOLNO = FOLDER_ID -FOLNO .
DOCUMENT_ID -DOCTP = L_OBJ_ID -OBJTP .
DOCUMENT_ID -DOCYR = L_OBJ_ID -OBJYR .
DOCUMENT_ID -DOCNO = L_OBJ_ID -OBJNO .
CLEAR REL_DOC .
REL_DOC -OBJKEY = DOCUMENT_ID .
REL_DOC -OBJTYPE = 'MESSAGE' .
CONCATENATE GS_OUT -BUKRS GS_OUT -BELNR GS_OUT -GJAHR INTO IS_OBJECT -OBJKEY .
IS_OBJECT -OBJTYPE = 'BKPF' .
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
OBJ_ROLEA = IS_OBJECT
OBJ_ROLEB = REL_DOC
RELATIONTYPE = 'NOTE'
EXCEPTIONS
OTHERS = 1 .
IF SY -SUBRC = 0 .
WRITE :/ 'Line ' , L_INDEX , 'updated FI Document Note successfully' .
COMMIT WORK .
ELSE .
WRITE :/ 'Line ' , L_INDEX , 'updated FI Document Note unsuccessfully' .
ROLLBACK WORK .
ENDIF .
ELSE .
WRITE :/ 'Line ' , L_INDEX , 'updated FI Document Note successfully' .
ENDIF .
CLEAR :LT_OBJHEAD ,LT_OBJCONT ,LT_OBJCONT[] ,L_OBJ_ID ,L_OBJ_DATA ,DOCUMENT_ID ,IS_OBJECT ,REL_DOC ,L_INDEX .
CLEAR GS_OUT .
ENDLOOP .
ENDFORM . " FRM_PROCESS_DATA