*&---------------------------------------------------------------------*
*& 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