*&---------------------------------------------------------------------*
*& Report YSE78_MASS *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZSE78_MASS
MESSAGE-ID ZX.
DATA: IT_FILES LIKE RLGRAP-FILENAME OCCURS 0 WITH HEADER LINE.
DATA: BDS_DESCRIPTION LIKE BAPISIGNAT-PROP_VALUE.
TYPES: SBDST_CLASSNAME LIKE BAPIBDS01-CLASSNAME,
SBDST_CLASSTYPE LIKE BAPIBDS01-CLASSTYPE,
SBDST_DOC_VAR_TG LIKE BAPIBDS01-DOC_VAR_TG,
SBDST_OBJECT_KEY LIKE BAPIBDS01-OBJKEY.
TYPES:
TY_BOOLEAN(1) TYPE C.
CONSTANTS:
C_STDTEXT LIKE THEAD-TDOBJECT VALUE 'TEXT',
C_GRAPHICS LIKE THEAD-TDOBJECT VALUE 'GRAPHICS',
C_BMON LIKE THEAD-TDID VALUE 'BMON',
C_BCOL LIKE THEAD-TDID VALUE 'BCOL'.
CONSTANTS:
C_TRUE TYPE TY_BOOLEAN VALUE 'X',
C_FALSE TYPE TY_BOOLEAN VALUE SPACE.
CONSTANTS:
C_BDS_CLASSNAME TYPE SBDST_CLASSNAME VALUE 'DEVC_STXD_BITMAP',
C_BDS_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE 'OT', " others
C_BDS_MIMETYPE TYPE BDS_MIMETP VALUE 'application/octet-stream',
C_BDS_ORIGINAL TYPE SBDST_DOC_VAR_TG VALUE 'OR'.
*INCLUDE LSTXBITMAPSF05.
PARAMETERS: P_FILE LIKE IBIPPARMS-PATH.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
DATA: L_LENGTH TYPE I,
L_POS TYPE I.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = P_FILE.
L_LENGTH = STRLEN( P_FILE ).
DO L_LENGTH TIMES.
L_POS = L_LENGTH - SY-INDEX.
IF P_FILE+L_POS(1) = '/'.
EXIT.
ENDIF.
ENDDO.
ADD 1 TO L_POS.
L_LENGTH = L_LENGTH - L_POS.
CLEAR P_FILE+L_POS(L_LENGTH).
START-OF-SELECTION.
CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
EXPORTING
I_PATH = P_FILE
* IMPORTING
* E_PURE_PATH =
TABLES
E_DIRECTORY = IT_FILES
EXCEPTIONS
DOWNLOAD = 1
UPLOAD = 2
EXECUTE = 3
DIRECTORY_NOT_EXIST = 4
DIRECTORY = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT IT_FILES.
TRANSLATE IT_FILES TO UPPER CASE.
CHECK it_files cp '*.BMP' or
it_files cp '*.TIF'.
PERFORM GRAPHICS_IMPORT_BDS.
ENDLOOP.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GRAPHICS_IMPORT_BDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GRAPHICS_IMPORT_BDS .
FIELD-SYMBOLS <L>.
DATA: L_EXTENSION TYPE RLGRAP-FILENAME,
L_LEN TYPE I,
L_QUESTION(400),
L_ANSWER(1),
L_DOCID TYPE STXBITMAPS-DOCID.
DATA: GI_RESOLUTION LIKE STXBITMAPS-RESOLUTION,
GI_FILENAME(128) TYPE C,
GI_NAME LIKE STXBITMAPS-TDNAME.
CONCATENATE P_FILE IT_FILES INTO GI_FILENAME.
REPLACE '.BMP' IN IT_FILES WITH ''.
MOVE IT_FILES TO GI_NAME.
TRANSLATE GI_NAME TO UPPER CASE.
* PERFORM IMPORT_BITMAP_BDS(LSTXBITMAPSF05)
* USING GI_FILENAME
* GI_NAME
* 'GRAPHICS'
* 'BMAP'
* 'BCOL'
* 'BMP'
* ''
* ''
* 'X'
* 'X'
* CHANGING L_DOCID
* GI_RESOLUTION.
PERFORM IMPORT_BITMAP_BDS
USING GI_FILENAME
GI_NAME
'GRAPHICS'
'BMAP'
'BCOL'
'BMP'
''
''
'X'
'X'
CHANGING L_DOCID
GI_RESOLUTION.
ENDFORM. " GRAPHICS_IMPORT_BDS
*&---------------------------------------------------------------------*
*& Form IMPORT_BITMAP_BDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM IMPORT_BITMAP_BDS
USING P_FILENAME TYPE RLGRAP-FILENAME
P_NAME TYPE STXBITMAPS-TDNAME
P_OBJECT TYPE STXBITMAPS-TDOBJECT
P_ID TYPE STXBITMAPS-TDID
P_BTYPE TYPE STXBITMAPS-TDBTYPE
P_FORMAT TYPE C
P_TITLE LIKE BDS_DESCRIPTION
P_RESIDENT TYPE STXBITMAPS-RESIDENT
P_AUTOHEIGHT TYPE STXBITMAPS-AUTOHEIGHT
P_BMCOMP TYPE STXBITMAPS-BMCOMP
CHANGING P_DOCID TYPE STXBITMAPS-DOCID
P_RESOLUTION TYPE STXBITMAPS-RESOLUTION.
DATA: L_OBJECT_KEY TYPE SBDST_OBJECT_KEY.
DATA: L_TAB TYPE DDOBJNAME.
DATA: BEGIN OF L_BITMAP OCCURS 0,
L(64) TYPE X,
END OF L_BITMAP.
DATA: L_FILENAME TYPE STRING,
L_BYTECOUNT TYPE I,
L_BDS_BYTECOUNT TYPE I.
DATA: L_COLOR(1) TYPE C,
L_WIDTH_TW TYPE STXBITMAPS-WIDTHTW,
L_HEIGHT_TW TYPE STXBITMAPS-HEIGHTTW,
L_WIDTH_PIX TYPE STXBITMAPS-WIDTHPIX,
L_HEIGHT_PIX TYPE STXBITMAPS-HEIGHTPIX.
DATA: L_BDS_OBJECT TYPE REF TO CL_BDS_DOCUMENT_SET,
L_BDS_CONTENT TYPE SBDST_CONTENT,
L_BDS_COMPONENTS TYPE SBDST_COMPONENTS,
WA_BDS_COMPONENTS TYPE LINE OF SBDST_COMPONENTS,
L_BDS_SIGNATURE TYPE SBDST_SIGNATURE,
WA_BDS_SIGNATURE TYPE LINE OF SBDST_SIGNATURE,
L_BDS_PROPERTIES TYPE SBDST_PROPERTIES,
WA_BDS_PROPERTIES TYPE LINE OF SBDST_PROPERTIES.
DATA WA_STXBITMAPS TYPE STXBITMAPS.
* Enqueue
PERFORM ENQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
* File transfer
L_FILENAME = P_FILENAME.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = L_BYTECOUNT
TABLES
DATA_TAB = L_BITMAP
EXCEPTIONS
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
NO_BATCH = 1
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.
CASE SY-SUBRC.
WHEN 0.
WHEN 2.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E811 WITH P_FILENAME.
WHEN 3.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E812 WITH P_FILENAME.
WHEN OTHERS.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E813 WITH P_FILENAME.
ENDCASE.
IF P_BTYPE = C_BMON.
L_COLOR = C_FALSE.
ELSE.
L_COLOR = C_TRUE.
ENDIF.
* Bitmap conversion
CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP_BDS'
EXPORTING
COLOR = L_COLOR
FORMAT = P_FORMAT
RESIDENT = P_RESIDENT
BITMAP_BYTECOUNT = L_BYTECOUNT
COMPRESS_BITMAP = P_BMCOMP
IMPORTING
WIDTH_TW = L_WIDTH_TW
HEIGHT_TW = L_HEIGHT_TW
WIDTH_PIX = L_WIDTH_PIX
HEIGHT_PIX = L_HEIGHT_PIX
DPI = P_RESOLUTION
BDS_BYTECOUNT = L_BDS_BYTECOUNT
TABLES
BITMAP_FILE = L_BITMAP
BITMAP_FILE_BDS = L_BDS_CONTENT
EXCEPTIONS
FORMAT_NOT_SUPPORTED = 1
NO_BMP_FILE = 2
BMPERR_INVALID_FORMAT = 3
BMPERR_NO_COLORTABLE = 4
BMPERR_UNSUP_COMPRESSION = 5
BMPERR_CORRUPT_RLE_DATA = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
RAISING CONVERSION_FAILED.
ENDIF.
* Save bitmap in BDS
CREATE OBJECT L_BDS_OBJECT.
WA_BDS_COMPONENTS-DOC_COUNT = '1'.
WA_BDS_COMPONENTS-COMP_COUNT = '1'.
WA_BDS_COMPONENTS-MIMETYPE = C_BDS_MIMETYPE.
WA_BDS_COMPONENTS-COMP_SIZE = L_BDS_BYTECOUNT.
APPEND WA_BDS_COMPONENTS TO L_BDS_COMPONENTS.
IF P_DOCID IS INITIAL. " graphic is new
WA_BDS_SIGNATURE-DOC_COUNT = '1'.
APPEND WA_BDS_SIGNATURE TO L_BDS_SIGNATURE.
CALL METHOD L_BDS_OBJECT->CREATE_WITH_TABLE
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
COMPONENTS = L_BDS_COMPONENTS
CONTENT = L_BDS_CONTENT
CHANGING
SIGNATURE = L_BDS_SIGNATURE
OBJECT_KEY = L_OBJECT_KEY
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
READ TABLE L_BDS_SIGNATURE INDEX 1 INTO WA_BDS_SIGNATURE
TRANSPORTING DOC_ID.
IF SY-SUBRC = 0.
P_DOCID = WA_BDS_SIGNATURE-DOC_ID.
ELSE.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
ELSE. " graphic already exists
********* read object_key for faster access *****
CLEAR L_OBJECT_KEY.
SELECT SINGLE * FROM STXBITMAPS INTO WA_STXBITMAPS
WHERE TDOBJECT = P_OBJECT
AND TDID = P_ID
AND TDNAME = P_NAME
AND TDBTYPE = P_BTYPE.
SELECT SINGLE TABNAME FROM BDS_LOCL INTO L_TAB
WHERE CLASSNAME = C_BDS_CLASSNAME
AND CLASSTYPE = C_BDS_CLASSTYPE.
IF SY-SUBRC = 0.
SELECT SINGLE OBJECT_KEY FROM (L_TAB) INTO L_OBJECT_KEY
WHERE LOIO_ID = WA_STXBITMAPS-DOCID+10(32)
AND CLASSNAME = C_BDS_CLASSNAME
AND CLASSTYPE = C_BDS_CLASSTYPE.
ENDIF.
******** read object_key end ********************
CALL METHOD L_BDS_OBJECT->UPDATE_WITH_TABLE
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
OBJECT_KEY = L_OBJECT_KEY
DOC_ID = P_DOCID
DOC_VER_NO = '1'
DOC_VAR_ID = '1'
CHANGING
COMPONENTS = L_BDS_COMPONENTS
CONTENT = L_BDS_CONTENT
EXCEPTIONS
NOTHING_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 1. " inconsistency STXBITMAPS - BDS; repeat check in
WA_BDS_SIGNATURE-DOC_COUNT = '1'.
APPEND WA_BDS_SIGNATURE TO L_BDS_SIGNATURE.
CALL METHOD L_BDS_OBJECT->CREATE_WITH_TABLE
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
COMPONENTS = L_BDS_COMPONENTS
CONTENT = L_BDS_CONTENT
CHANGING
SIGNATURE = L_BDS_SIGNATURE
OBJECT_KEY = L_OBJECT_KEY
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
READ TABLE L_BDS_SIGNATURE INDEX 1 INTO WA_BDS_SIGNATURE
TRANSPORTING DOC_ID.
IF SY-SUBRC = 0.
P_DOCID = WA_BDS_SIGNATURE-DOC_ID.
ELSE.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
ELSEIF SY-SUBRC = 2.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
ENDIF.
* Save bitmap header in STXBITPMAPS
WA_STXBITMAPS-TDNAME = P_NAME.
WA_STXBITMAPS-TDOBJECT = P_OBJECT.
WA_STXBITMAPS-TDID = P_ID.
WA_STXBITMAPS-TDBTYPE = P_BTYPE.
WA_STXBITMAPS-DOCID = P_DOCID.
WA_STXBITMAPS-WIDTHPIX = L_WIDTH_PIX.
WA_STXBITMAPS-HEIGHTPIX = L_HEIGHT_PIX.
WA_STXBITMAPS-WIDTHTW = L_WIDTH_TW.
WA_STXBITMAPS-HEIGHTTW = L_HEIGHT_TW.
WA_STXBITMAPS-RESOLUTION = P_RESOLUTION.
WA_STXBITMAPS-RESIDENT = P_RESIDENT.
WA_STXBITMAPS-AUTOHEIGHT = P_AUTOHEIGHT.
WA_STXBITMAPS-BMCOMP = P_BMCOMP.
INSERT INTO STXBITMAPS VALUES WA_STXBITMAPS.
IF SY-SUBRC <> 0.
UPDATE STXBITMAPS FROM WA_STXBITMAPS.
IF SY-SUBRC <> 0.
MESSAGE E285 WITH P_NAME 'STXBITMAPS'.
ENDIF.
ENDIF.
* Set description in BDS attributes
WA_BDS_PROPERTIES-PROP_NAME = 'DESCRIPTION'.
WA_BDS_PROPERTIES-PROP_VALUE = P_TITLE.
APPEND WA_BDS_PROPERTIES TO L_BDS_PROPERTIES.
CALL METHOD L_BDS_OBJECT->CHANGE_PROPERTIES
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
OBJECT_KEY = L_OBJECT_KEY
DOC_ID = P_DOCID
DOC_VER_NO = '1'
DOC_VAR_ID = '1'
CHANGING
PROPERTIES = L_BDS_PROPERTIES
EXCEPTIONS
OTHERS = 1.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
ENDFORM. "IMPORT_BITMAP_BDS
*&---------------------------------------------------------------------*
*& Form DEQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_OBJECT text
* -->P_P_NAME text
* -->P_P_ID text
* -->P_P_BTYPE text
*----------------------------------------------------------------------*
FORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
CALL FUNCTION 'DEQUEUE_ESSGRABDS'
EXPORTING
* MODE_STXBITMAPS = 'E'
* X_TDOBJECT = ' '
* X_TDNAME = ' '
* X_TDID = ' '
* X_TDBTYPE = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
TDOBJECT = P_OBJECT
TDNAME = P_NAME
TDID = P_ID
TDBTYPE = P_BTYPE.
ENDFORM. " DEQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
*& Form ENQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_OBJECT text
* -->P_P_NAME text
* -->P_P_ID text
* -->P_P_BTYPE text
*----------------------------------------------------------------------*
FORM ENQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
CALL FUNCTION 'ENQUEUE_ESSGRABDS'
EXPORTING
* MODE_STXBITMAPS = 'E'
TDOBJECT = P_OBJECT
TDNAME = P_NAME
TDID = P_ID
TDBTYPE = P_BTYPE
* X_TDOBJECT = ' '
* X_TDNAME = ' '
* X_TDID = ' '
* X_TDBTYPE = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
RAISING ENQUEUE_FAILED.
ENDIF.
ENDFORM. " ENQUEUE_GRAPHIC
*& Report YSE78_MASS *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*
REPORT ZSE78_MASS
MESSAGE-ID ZX.
DATA: IT_FILES LIKE RLGRAP-FILENAME OCCURS 0 WITH HEADER LINE.
DATA: BDS_DESCRIPTION LIKE BAPISIGNAT-PROP_VALUE.
TYPES: SBDST_CLASSNAME LIKE BAPIBDS01-CLASSNAME,
SBDST_CLASSTYPE LIKE BAPIBDS01-CLASSTYPE,
SBDST_DOC_VAR_TG LIKE BAPIBDS01-DOC_VAR_TG,
SBDST_OBJECT_KEY LIKE BAPIBDS01-OBJKEY.
TYPES:
TY_BOOLEAN(1) TYPE C.
CONSTANTS:
C_STDTEXT LIKE THEAD-TDOBJECT VALUE 'TEXT',
C_GRAPHICS LIKE THEAD-TDOBJECT VALUE 'GRAPHICS',
C_BMON LIKE THEAD-TDID VALUE 'BMON',
C_BCOL LIKE THEAD-TDID VALUE 'BCOL'.
CONSTANTS:
C_TRUE TYPE TY_BOOLEAN VALUE 'X',
C_FALSE TYPE TY_BOOLEAN VALUE SPACE.
CONSTANTS:
C_BDS_CLASSNAME TYPE SBDST_CLASSNAME VALUE 'DEVC_STXD_BITMAP',
C_BDS_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE 'OT', " others
C_BDS_MIMETYPE TYPE BDS_MIMETP VALUE 'application/octet-stream',
C_BDS_ORIGINAL TYPE SBDST_DOC_VAR_TG VALUE 'OR'.
*INCLUDE LSTXBITMAPSF05.
PARAMETERS: P_FILE LIKE IBIPPARMS-PATH.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
DATA: L_LENGTH TYPE I,
L_POS TYPE I.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = P_FILE.
L_LENGTH = STRLEN( P_FILE ).
DO L_LENGTH TIMES.
L_POS = L_LENGTH - SY-INDEX.
IF P_FILE+L_POS(1) = '/'.
EXIT.
ENDIF.
ENDDO.
ADD 1 TO L_POS.
L_LENGTH = L_LENGTH - L_POS.
CLEAR P_FILE+L_POS(L_LENGTH).
START-OF-SELECTION.
CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
EXPORTING
I_PATH = P_FILE
* IMPORTING
* E_PURE_PATH =
TABLES
E_DIRECTORY = IT_FILES
EXCEPTIONS
DOWNLOAD = 1
UPLOAD = 2
EXECUTE = 3
DIRECTORY_NOT_EXIST = 4
DIRECTORY = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT IT_FILES.
TRANSLATE IT_FILES TO UPPER CASE.
CHECK it_files cp '*.BMP' or
it_files cp '*.TIF'.
PERFORM GRAPHICS_IMPORT_BDS.
ENDLOOP.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form GRAPHICS_IMPORT_BDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GRAPHICS_IMPORT_BDS .
FIELD-SYMBOLS <L>.
DATA: L_EXTENSION TYPE RLGRAP-FILENAME,
L_LEN TYPE I,
L_QUESTION(400),
L_ANSWER(1),
L_DOCID TYPE STXBITMAPS-DOCID.
DATA: GI_RESOLUTION LIKE STXBITMAPS-RESOLUTION,
GI_FILENAME(128) TYPE C,
GI_NAME LIKE STXBITMAPS-TDNAME.
CONCATENATE P_FILE IT_FILES INTO GI_FILENAME.
REPLACE '.BMP' IN IT_FILES WITH ''.
MOVE IT_FILES TO GI_NAME.
TRANSLATE GI_NAME TO UPPER CASE.
* PERFORM IMPORT_BITMAP_BDS(LSTXBITMAPSF05)
* USING GI_FILENAME
* GI_NAME
* 'GRAPHICS'
* 'BMAP'
* 'BCOL'
* 'BMP'
* ''
* ''
* 'X'
* 'X'
* CHANGING L_DOCID
* GI_RESOLUTION.
PERFORM IMPORT_BITMAP_BDS
USING GI_FILENAME
GI_NAME
'GRAPHICS'
'BMAP'
'BCOL'
'BMP'
''
''
'X'
'X'
CHANGING L_DOCID
GI_RESOLUTION.
ENDFORM. " GRAPHICS_IMPORT_BDS
*&---------------------------------------------------------------------*
*& Form IMPORT_BITMAP_BDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM IMPORT_BITMAP_BDS
USING P_FILENAME TYPE RLGRAP-FILENAME
P_NAME TYPE STXBITMAPS-TDNAME
P_OBJECT TYPE STXBITMAPS-TDOBJECT
P_ID TYPE STXBITMAPS-TDID
P_BTYPE TYPE STXBITMAPS-TDBTYPE
P_FORMAT TYPE C
P_TITLE LIKE BDS_DESCRIPTION
P_RESIDENT TYPE STXBITMAPS-RESIDENT
P_AUTOHEIGHT TYPE STXBITMAPS-AUTOHEIGHT
P_BMCOMP TYPE STXBITMAPS-BMCOMP
CHANGING P_DOCID TYPE STXBITMAPS-DOCID
P_RESOLUTION TYPE STXBITMAPS-RESOLUTION.
DATA: L_OBJECT_KEY TYPE SBDST_OBJECT_KEY.
DATA: L_TAB TYPE DDOBJNAME.
DATA: BEGIN OF L_BITMAP OCCURS 0,
L(64) TYPE X,
END OF L_BITMAP.
DATA: L_FILENAME TYPE STRING,
L_BYTECOUNT TYPE I,
L_BDS_BYTECOUNT TYPE I.
DATA: L_COLOR(1) TYPE C,
L_WIDTH_TW TYPE STXBITMAPS-WIDTHTW,
L_HEIGHT_TW TYPE STXBITMAPS-HEIGHTTW,
L_WIDTH_PIX TYPE STXBITMAPS-WIDTHPIX,
L_HEIGHT_PIX TYPE STXBITMAPS-HEIGHTPIX.
DATA: L_BDS_OBJECT TYPE REF TO CL_BDS_DOCUMENT_SET,
L_BDS_CONTENT TYPE SBDST_CONTENT,
L_BDS_COMPONENTS TYPE SBDST_COMPONENTS,
WA_BDS_COMPONENTS TYPE LINE OF SBDST_COMPONENTS,
L_BDS_SIGNATURE TYPE SBDST_SIGNATURE,
WA_BDS_SIGNATURE TYPE LINE OF SBDST_SIGNATURE,
L_BDS_PROPERTIES TYPE SBDST_PROPERTIES,
WA_BDS_PROPERTIES TYPE LINE OF SBDST_PROPERTIES.
DATA WA_STXBITMAPS TYPE STXBITMAPS.
* Enqueue
PERFORM ENQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
* File transfer
L_FILENAME = P_FILENAME.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME
FILETYPE = 'BIN'
IMPORTING
FILELENGTH = L_BYTECOUNT
TABLES
DATA_TAB = L_BITMAP
EXCEPTIONS
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
NO_BATCH = 1
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.
CASE SY-SUBRC.
WHEN 0.
WHEN 2.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E811 WITH P_FILENAME.
WHEN 3.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E812 WITH P_FILENAME.
WHEN OTHERS.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E813 WITH P_FILENAME.
ENDCASE.
IF P_BTYPE = C_BMON.
L_COLOR = C_FALSE.
ELSE.
L_COLOR = C_TRUE.
ENDIF.
* Bitmap conversion
CALL FUNCTION 'SAPSCRIPT_CONVERT_BITMAP_BDS'
EXPORTING
COLOR = L_COLOR
FORMAT = P_FORMAT
RESIDENT = P_RESIDENT
BITMAP_BYTECOUNT = L_BYTECOUNT
COMPRESS_BITMAP = P_BMCOMP
IMPORTING
WIDTH_TW = L_WIDTH_TW
HEIGHT_TW = L_HEIGHT_TW
WIDTH_PIX = L_WIDTH_PIX
HEIGHT_PIX = L_HEIGHT_PIX
DPI = P_RESOLUTION
BDS_BYTECOUNT = L_BDS_BYTECOUNT
TABLES
BITMAP_FILE = L_BITMAP
BITMAP_FILE_BDS = L_BDS_CONTENT
EXCEPTIONS
FORMAT_NOT_SUPPORTED = 1
NO_BMP_FILE = 2
BMPERR_INVALID_FORMAT = 3
BMPERR_NO_COLORTABLE = 4
BMPERR_UNSUP_COMPRESSION = 5
BMPERR_CORRUPT_RLE_DATA = 6
OTHERS = 7.
IF SY-SUBRC <> 0.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
RAISING CONVERSION_FAILED.
ENDIF.
* Save bitmap in BDS
CREATE OBJECT L_BDS_OBJECT.
WA_BDS_COMPONENTS-DOC_COUNT = '1'.
WA_BDS_COMPONENTS-COMP_COUNT = '1'.
WA_BDS_COMPONENTS-MIMETYPE = C_BDS_MIMETYPE.
WA_BDS_COMPONENTS-COMP_SIZE = L_BDS_BYTECOUNT.
APPEND WA_BDS_COMPONENTS TO L_BDS_COMPONENTS.
IF P_DOCID IS INITIAL. " graphic is new
WA_BDS_SIGNATURE-DOC_COUNT = '1'.
APPEND WA_BDS_SIGNATURE TO L_BDS_SIGNATURE.
CALL METHOD L_BDS_OBJECT->CREATE_WITH_TABLE
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
COMPONENTS = L_BDS_COMPONENTS
CONTENT = L_BDS_CONTENT
CHANGING
SIGNATURE = L_BDS_SIGNATURE
OBJECT_KEY = L_OBJECT_KEY
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
READ TABLE L_BDS_SIGNATURE INDEX 1 INTO WA_BDS_SIGNATURE
TRANSPORTING DOC_ID.
IF SY-SUBRC = 0.
P_DOCID = WA_BDS_SIGNATURE-DOC_ID.
ELSE.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
ELSE. " graphic already exists
********* read object_key for faster access *****
CLEAR L_OBJECT_KEY.
SELECT SINGLE * FROM STXBITMAPS INTO WA_STXBITMAPS
WHERE TDOBJECT = P_OBJECT
AND TDID = P_ID
AND TDNAME = P_NAME
AND TDBTYPE = P_BTYPE.
SELECT SINGLE TABNAME FROM BDS_LOCL INTO L_TAB
WHERE CLASSNAME = C_BDS_CLASSNAME
AND CLASSTYPE = C_BDS_CLASSTYPE.
IF SY-SUBRC = 0.
SELECT SINGLE OBJECT_KEY FROM (L_TAB) INTO L_OBJECT_KEY
WHERE LOIO_ID = WA_STXBITMAPS-DOCID+10(32)
AND CLASSNAME = C_BDS_CLASSNAME
AND CLASSTYPE = C_BDS_CLASSTYPE.
ENDIF.
******** read object_key end ********************
CALL METHOD L_BDS_OBJECT->UPDATE_WITH_TABLE
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
OBJECT_KEY = L_OBJECT_KEY
DOC_ID = P_DOCID
DOC_VER_NO = '1'
DOC_VAR_ID = '1'
CHANGING
COMPONENTS = L_BDS_COMPONENTS
CONTENT = L_BDS_CONTENT
EXCEPTIONS
NOTHING_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 1. " inconsistency STXBITMAPS - BDS; repeat check in
WA_BDS_SIGNATURE-DOC_COUNT = '1'.
APPEND WA_BDS_SIGNATURE TO L_BDS_SIGNATURE.
CALL METHOD L_BDS_OBJECT->CREATE_WITH_TABLE
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
COMPONENTS = L_BDS_COMPONENTS
CONTENT = L_BDS_CONTENT
CHANGING
SIGNATURE = L_BDS_SIGNATURE
OBJECT_KEY = L_OBJECT_KEY
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC <> 0.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
READ TABLE L_BDS_SIGNATURE INDEX 1 INTO WA_BDS_SIGNATURE
TRANSPORTING DOC_ID.
IF SY-SUBRC = 0.
P_DOCID = WA_BDS_SIGNATURE-DOC_ID.
ELSE.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
ELSEIF SY-SUBRC = 2.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
MESSAGE E285 WITH P_NAME 'BDS'.
ENDIF.
ENDIF.
* Save bitmap header in STXBITPMAPS
WA_STXBITMAPS-TDNAME = P_NAME.
WA_STXBITMAPS-TDOBJECT = P_OBJECT.
WA_STXBITMAPS-TDID = P_ID.
WA_STXBITMAPS-TDBTYPE = P_BTYPE.
WA_STXBITMAPS-DOCID = P_DOCID.
WA_STXBITMAPS-WIDTHPIX = L_WIDTH_PIX.
WA_STXBITMAPS-HEIGHTPIX = L_HEIGHT_PIX.
WA_STXBITMAPS-WIDTHTW = L_WIDTH_TW.
WA_STXBITMAPS-HEIGHTTW = L_HEIGHT_TW.
WA_STXBITMAPS-RESOLUTION = P_RESOLUTION.
WA_STXBITMAPS-RESIDENT = P_RESIDENT.
WA_STXBITMAPS-AUTOHEIGHT = P_AUTOHEIGHT.
WA_STXBITMAPS-BMCOMP = P_BMCOMP.
INSERT INTO STXBITMAPS VALUES WA_STXBITMAPS.
IF SY-SUBRC <> 0.
UPDATE STXBITMAPS FROM WA_STXBITMAPS.
IF SY-SUBRC <> 0.
MESSAGE E285 WITH P_NAME 'STXBITMAPS'.
ENDIF.
ENDIF.
* Set description in BDS attributes
WA_BDS_PROPERTIES-PROP_NAME = 'DESCRIPTION'.
WA_BDS_PROPERTIES-PROP_VALUE = P_TITLE.
APPEND WA_BDS_PROPERTIES TO L_BDS_PROPERTIES.
CALL METHOD L_BDS_OBJECT->CHANGE_PROPERTIES
EXPORTING
CLASSNAME = C_BDS_CLASSNAME
CLASSTYPE = C_BDS_CLASSTYPE
OBJECT_KEY = L_OBJECT_KEY
DOC_ID = P_DOCID
DOC_VER_NO = '1'
DOC_VAR_ID = '1'
CHANGING
PROPERTIES = L_BDS_PROPERTIES
EXCEPTIONS
OTHERS = 1.
PERFORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
ENDFORM. "IMPORT_BITMAP_BDS
*&---------------------------------------------------------------------*
*& Form DEQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_OBJECT text
* -->P_P_NAME text
* -->P_P_ID text
* -->P_P_BTYPE text
*----------------------------------------------------------------------*
FORM DEQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
CALL FUNCTION 'DEQUEUE_ESSGRABDS'
EXPORTING
* MODE_STXBITMAPS = 'E'
* X_TDOBJECT = ' '
* X_TDNAME = ' '
* X_TDID = ' '
* X_TDBTYPE = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
TDOBJECT = P_OBJECT
TDNAME = P_NAME
TDID = P_ID
TDBTYPE = P_BTYPE.
ENDFORM. " DEQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
*& Form ENQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_P_OBJECT text
* -->P_P_NAME text
* -->P_P_ID text
* -->P_P_BTYPE text
*----------------------------------------------------------------------*
FORM ENQUEUE_GRAPHIC USING P_OBJECT
P_NAME
P_ID
P_BTYPE.
CALL FUNCTION 'ENQUEUE_ESSGRABDS'
EXPORTING
* MODE_STXBITMAPS = 'E'
TDOBJECT = P_OBJECT
TDNAME = P_NAME
TDID = P_ID
TDBTYPE = P_BTYPE
* X_TDOBJECT = ' '
* X_TDNAME = ' '
* X_TDID = ' '
* X_TDBTYPE = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4
RAISING ENQUEUE_FAILED.
ENDIF.
ENDFORM. " ENQUEUE_GRAPHIC