新版的ERP已经支持二维码,但是未升级的ERP需要借助二维码API来生成二维码,一般网络上都是一段固定的代码,下面我就来说明SAP生成二维码的方法。若有不太明白的地方欢迎留言或邮件 wangcmboy@qq.com
最下端是SAP端的源码程序,此中运用了Smartforms,关于smartforms你可以参考https://blog.csdn.net/charmean/article/details/78135632介绍了smartforms的用法
CONCATENATE 'http://172.16.0.150/api.php?text=' qr_text INTO url.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0.
http_client->send( ).
http_client->receive( ).
content = http_client->response->get_data( ).
http_client->close( ).
l_str_length = xstrlen( content ).
CALL FUNCTION 'RSFO_XSTRING_TO_MIME'
EXPORTING
c_xstring = content
i_length = l_str_length
TABLES
c_t_mime = mime.
ENDIF.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc = 0.
http_client->send( ).
http_client->receive( ).
content = http_client->response->get_data( ).
http_client->close( ).
l_str_length = xstrlen( content ).
CALL FUNCTION 'RSFO_XSTRING_TO_MIME'
EXPORTING
c_xstring = content
i_length = l_str_length
TABLES
c_t_mime = mime.
ENDIF.
以上这段代码是SAP从API接口获得16进制数据,可以是文字和图片,图片是要先放入SE78然后才能显示
gi_name = 'ERWEIMA'. "name of the qrcode will be in se78 after one time running this program
gi_object = 'GRAPHICS'.
gi_id = 'BMAP'.
gi_btype = 'BMON'. "If u want black and white pass BMON
gi_resident = '二维码'.
gi_autoheight = 'X'.
gi_bmcomp = 'X'.
l_extension = 'BMP'.
"importing the image into se78 before displaying it in the smartform.
perform import_bitmap_bds using blob
gi_name
gi_object
gi_id
gi_btype
l_extension
' '
gi_resident
gi_autoheight
gi_bmcomp
changing l_docid
gi_resolution.
gi_object = 'GRAPHICS'.
gi_id = 'BMAP'.
gi_btype = 'BMON'. "If u want black and white pass BMON
gi_resident = '二维码'.
gi_autoheight = 'X'.
gi_bmcomp = 'X'.
l_extension = 'BMP'.
"importing the image into se78 before displaying it in the smartform.
perform import_bitmap_bds using blob
gi_name
gi_object
gi_id
gi_btype
l_extension
' '
gi_resident
gi_autoheight
gi_bmcomp
changing l_docid
gi_resolution.
此代码是将数据放在SAP系统图片:注意SAP只支持BMP的图片格式,而一般网络API接口中的二维码图片的PNG格式会比较多,所以SAP中有专门的图片转换程序
FORM convert_image .
CREATE OBJECT i_igs_image_converter .
i_igs_image_converter->input = 'image/png'.
i_igs_image_converter->output = 'image/bmp'.
i_igs_image_converter->width = 200.
i_igs_image_converter->height = 200.
CALL METHOD i_igs_image_converter->set_image
EXPORTING
blob = mime
blob_size = l_content_length.
CALL METHOD i_igs_image_converter->execute
EXCEPTIONS
communication_error = 1
internal_error = 2
external_error = 3
OTHERS = 4.
IF sy-subrc = 0.
CALL METHOD i_igs_image_converter->get_image
IMPORTING
blob = blob
blob_size = blob_size
blob_type = blob_type.
ENDIF.
IF sy-subrc = 0.
PERFORM show_smart_form. "calling the smartform for qrcode display
ELSE.
WRITE:'convert failed! please wait a minute or cheack your Internet'.
ENDIF.
ENDFORM.
CREATE OBJECT i_igs_image_converter .
i_igs_image_converter->input = 'image/png'.
i_igs_image_converter->output = 'image/bmp'.
i_igs_image_converter->width = 200.
i_igs_image_converter->height = 200.
CALL METHOD i_igs_image_converter->set_image
EXPORTING
blob = mime
blob_size = l_content_length.
CALL METHOD i_igs_image_converter->execute
EXCEPTIONS
communication_error = 1
internal_error = 2
external_error = 3
OTHERS = 4.
IF sy-subrc = 0.
CALL METHOD i_igs_image_converter->get_image
IMPORTING
blob = blob
blob_size = blob_size
blob_type = blob_type.
ENDIF.
IF sy-subrc = 0.
PERFORM show_smart_form. "calling the smartform for qrcode display
ELSE.
WRITE:'convert failed! please wait a minute or cheack your Internet'.
ENDIF.
ENDFORM.
当然你也可以自己生成的png格式图片在API接口端进行转换,然后系统直接获取的是BMP的图片格式,这样就可以不用经过此程序进行图片格式的转换了。
REPORT ZPPT0021 .
************************************************************************
*&---------------------------------------------------------------------*
*& Report : ZPPT0021
*& Creat Date : 20170712
*& Author : wangcm
*& Reference resources : Internet
*& Purpose :
*& Suitable for inner label printing of Nanjing Dingzheng IMD.
*&---------------------------------------------------------------------*
************************************************************************
DATA : usersettings TYPE TDBOOL .
DATA : fname TYPE RS38L_FNAM .
DATA : bds_description like bapisignat -prop_value .
DATA : qr_text TYPE char200 .
DATA MAKTX TYPE MAKTX .
data :maktx1 type maktx .
DATA : MATNR TYPE MATNR ,
AUFNR TYPE AUFNR ,
MANDT TYPE MANDT .
data : E_AUFNR type AUFNR ,
E_BUDAT LIKE AFRU -BUDAT ,
E_FENQIE TYPE CHAR10 ,
E_QUANTITY TYPE CHAR10 ,
liushui ( 12 ) TYPE C ,
E_xuhao ( 6 ) TYPE C ,
E_PCS TYPE char10 .
data : mdate type sy -datum ,
date type char8 .
DATA : ctrl_param TYPE ssfctrlop ,
out_option1 TYPE ssfcompop .
* BDS handling
constants :
* c_bds_classname type sbdst_classname value 'DEVC_STXD_BITMAP',
c_bds_classname TYPE bapibds01 -classname value 'DEVC_STXD_BITMAP' ,
* c_bds_classtype type sbdst_classtype value 'OT', " others
c_bds_classtype type bapibds01 -classtype value 'OT' , " others
* c_bds_mimetype type bds_mimetp value 'application/octet-stream',
c_bds_mimetype type bds_mimetp value 'application/octet-stream' ,
* c_bds_original type sbdst_doc_var_tg value 'OR'.
c_bds_original type bapibds01 -doc_var_tg value 'OR' .
TABLES ZIMD_WEIYIMA .
DATA : BEGIN OF WEIYIMA OCCURS 0 .
INCLUDE STRUCTURE ZIMD_WEIYIMA .
DATA END OF WEIYIMA .
* Graphic handling
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' .
DATA : gi_filename type rlgrap -filename ,
gi_name type stxbitmaps -tdname ,
gi_object type stxbitmaps -tdobject ,
gi_id type stxbitmaps -tdid ,
gi_btype type stxbitmaps -tdbtype ,
gi_resident type stxbitmaps -resident ,
gi_autoheight type stxbitmaps -autoheight ,
gi_bmcomp type stxbitmaps -bmcomp ,
gi_resolution type stxbitmaps -resolution ,
l_extension type rlgrap -filename ,
l_docid type stxbitmaps -docid .
"Picture Control
DATA : picture_container TYPE REF TO cl_gui_custom_container ,
picture_control TYPE REF TO cl_gui_picture .
DATA : l_img_url TYPE w3url .
DATA :l_img_subtype TYPE w3param -cont_type .
DATA : l_str_length TYPE i .
DATA : url TYPE string .
DATA : l_content_length TYPE i .
DATA : mime TYPE w3mimetabtype .
DATA : blob TYPE w3mimetabtype ,
blob_size TYPE w3param -cont_len ,
blob_type TYPE w3param -cont_type .
DATA : i_igs_image_converter TYPE REF TO cl_igs_image_converter .
DATA : content TYPE xstring .
DATA : http_client TYPE REF TO if_http_client .
data time type sy -uzeit .
TYPES : BEGIN OF ty_binary ,
binary_field ( 1000 ) TYPE c ,
END OF ty_binary .
DATA : hex_tab1 TYPE TABLE OF ty_binary WITH HEADER LINE .
DATA : EXCEL_DATA TYPE ALSMEX_TABLINE OCCURS 20 WITH HEADER LINE . "表结构
SELECTION-SCREEN : BEGIN OF BLOCK INPUT3 WITH FRAME TITLE TEXT - 003 .
*PARAMETERS: P_WERKS LIKE T001W-WERKS MEMORY ID WRK OBLIGATORY.
PARAMETERS :
EXCEL TYPE C RADIOBUTTON GROUP GP1 ,
SCREEN TYPE C RADIOBUTTON GROUP GP1 .
SELECTION-SCREEN : END OF BLOCK INPUT3 .
SELECTION-SCREEN : BEGIN OF BLOCK INPUT4 WITH FRAME TITLE TEXT - 004 .
PARAMETERS :
print TYPE C RADIOBUTTON GROUP GP2 ,
times ( 1 ) type n DEFAULT 2 ,
scan TYPE C RADIOBUTTON GROUP GP2 .
SELECTION-SCREEN : END OF BLOCK INPUT4 .
SELECTION-SCREEN : BEGIN OF BLOCK INPUT1 WITH FRAME TITLE TEXT - 001 .
PARAMETERS :P_FILE LIKE RLGRAP -FILENAME MEMORY ID F_DIR2 VISIBLE LENGTH 100 . "OBLIGATORY.
SELECTION-SCREEN : END OF BLOCK INPUT1 .
SELECTION-SCREEN : BEGIN OF BLOCK INPUT2 WITH FRAME TITLE TEXT - 002 .
PARAMETERS :NAME_NUM TYPE AUFNR .
PARAMETERS :FENQIE TYPE CHAR10 .
PARAMETERS :QUANTITY TYPE CHAR10 .
PARAMETERS :S_BUDAT type char8 .
PARAMETERS :xuhao ( 6 ) type c .
PARAMETERS :PCS type char10 .
SELECTION-SCREEN : END OF BLOCK INPUT2 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE .
PERFORM SELECT_FILE . "选择需要上载的文件
START-OF-SELECTION .
PERFORM PRINT_PTION .
PERFORM input_information .
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_QRCODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM search_MANDT .
SELECT MATNR FROM afPO
INTO MATNR
WHERE AFPO ~AUFNR = E_AUFNR .
ENDSELECT .
ENDFORM .
FORM PRINT_PTION .
IF scan = 'X' .
ctrl_param -preview = 'X' .
out_option1 -tddest = 'LP01' . " in your case it is LOCL
ctrl_param -no_dialog = 'X' .
ELSE .
ctrl_param -NO_DIALOG = 'X' .
out_option1 -TDNEWID = 'X' . "New Spool
out_option1 -TDIMMED = 'X' .
out_option1 -TDDELETE = 'X' . "Delete Spool After Print
out_option1 -TDFINAL = 'X' .
out_option1 -TDIEXIT = 'X' . "Exit after printing in print preview
out_option1 -TDDEST = 'ZSAP' .
usersettings = '' .
ENDIF .
ENDFORM .
FORM input_information .
if SCREEN = 'X' .
E_AUFNR = NAME_NUM .
E_BUDAT = S_BUDAT .
E_FENQIE = FENQIE .
E_QUANTITY = QUANTITY .
E_xuhao = xuhao .
E_PCS = PCS .
if E_AUFNR = '' .
MESSAGE i192 (YB ) WITH '请维护基本数据!' .
exit .
else .
PERFORM search_MANDT .
PERFORM SearchMAKTX .
PERFORM download_qrcode .
PERFORM convert_image .
endif .
ELSE .
if P_FILE = '' .
MESSAGE i192 (YB ) WITH '请维护基本数据!' .
exit .
else .
PERFORM GET_EXCEL_DATA . "处理excel中上载的数据
PERFORM PROCESS_EXCEL .
endif .
ENDIF .
ENDFORM .
FORM GET_EXCEL_DATA .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
*导入EXCEL数据到内表
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = '2'
I_BEGIN_ROW = '2'
I_END_COL = '8'
I_END_ROW = '9999'
TABLES
INTERN = EXCEL_DATA .
SORT EXCEL_DATA BY ROW COL .
ENDFORM .
FORM PROCESS_EXCEL .
CLEAR : E_AUFNR ,
E_BUDAT ,
E_FENQIE ,
E_QUANTITY ,
E_xuhao ,
liushui .
LOOP AT EXCEL_DATA .
CASE EXCEL_DATA -COL .
WHEN 1 .
E_AUFNR = EXCEL_DATA - VALUE .
WHEN 2 .
E_FENQIE = EXCEL_DATA - VALUE .
WHEN 3 .
E_QUANTITY = EXCEL_DATA - VALUE .
WHEN 4 .
E_BUDAT = EXCEL_DATA - VALUE .
WHEN 5 .
E_xuhao = EXCEL_DATA - VALUE .
when 6 .
E_PCS = EXCEL_DATA - VALUE .
ENDCASE .
* AT END OF ROW."每行结束就执行bapi更新
AT END OF ROW .
PERFORM add_zero_aufnr CHANGING E_AUFNR E_AUFNR .
PERFORM search_MANDT .
PERFORM SearchMAKTX .
WAIT UP TO '1' SECONDS .
PERFORM download_qrcode .
PERFORM convert_image .
ENDAT .
*PERFORM OUT_MESSAGE."输出信息
CLEAR :EXCEL_DATA .
ENDLOOP .
ENDFORM . " PROCESS_EXCEL
FORM add_zero_aufnr CHANGING a b .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "去除大订单号的前导0
EXPORTING
input = a
IMPORTING
output = b .
ENDFORM .
FORM SELECT_FILE .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',Excel Files,*.xls,All Files,*.*.' ( 101 )
TITLE = '选择文件' ( 100 )
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5 .
IF SY -SUBRC <> 0 AND SY -SUBRC <> 3 .
MESSAGE E100 (ZDEV ) WITH '选择文件出错!' ( 007 ) .
ENDIF .
ENDFORM .
FORM download_qrcode .
* qr_text = '123456789ABCDEF'.
PERFORM Creat_liushui .
PERFORM del_zero_aufnr CHANGING E_AUFNR AUFNR .
maktx1 = maktx .
REPLACE ALL OCCURRENCES OF '+' IN MAKTX1 WITH '%2B' .
CONCATENATE AUFNR ',"' MAKTX1 '" ,' E_BUDAT ',' E_FENQIE ',' E_QUANTITY ',' E_PCS ',PASS,PASS,PASS,N00' liushui INTO qr_text .
CONCATENATE 'http://172.16.0.150/api.php?text=' qr_text INTO url .
CALL METHOD cl_http_client =>create_by_url
EXPORTING
url = url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 .
IF sy -subrc = 0 .
http_client ->send ( ) .
http_client -> receive ( ) .
content = http_client ->response ->get_data ( ) .
http_client -> close ( ) .
l_str_length = xstrlen ( content ) .
CALL FUNCTION 'RSFO_XSTRING_TO_MIME'
EXPORTING
c_xstring = content
i_length = l_str_length
TABLES
c_t_mime = mime .
ENDIF .
ENDFORM . " DOWNLOAD_QRCODE
*&---------------------------------------------------------------------*
*& Form CONVERT_IMAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM del_zero_aufnr CHANGING a b .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "去除大订单号的前导0
EXPORTING
input = a
IMPORTING
output = b .
ENDFORM .
FORM convert_image .
CREATE OBJECT i_igs_image_converter .
i_igs_image_converter -> input = 'image/png' .
i_igs_image_converter -> output = 'image/bmp' .
i_igs_image_converter ->width = 200 .
i_igs_image_converter ->height = 200 .
CALL METHOD i_igs_image_converter ->set_image
EXPORTING
blob = mime
blob_size = l_content_length .
CALL METHOD i_igs_image_converter ->execute
EXCEPTIONS
communication_error = 1
internal_error = 2
external_error = 3
OTHERS = 4 .
IF sy -subrc = 0 .
CALL METHOD i_igs_image_converter ->get_image
IMPORTING
blob = blob
blob_size = blob_size
blob_type = blob_type .
ENDIF .
IF sy -subrc = 0 .
PERFORM show_smart_form . "calling the smartform for qrcode display
ELSE .
WRITE : 'convert failed! please wait a minute or cheack your Internet' .
ENDIF .
ENDFORM . " CONVERT_IMAGE
FORM Creat_liushui .
clear liushui .
time = sy -uzeit .
mdate = sy -datum .
date = mdate .
date = date+2 ( 6 ) .
CONCATENATE date time INTO liushui .
ENDFORM .
FORM Cunchu_liushui .
weiyima -aufnr = E_AUFNR .
weiyima -xuhao = E_xuhao .
weiyima -liushui = liushui .
INSERT INTO ZIMD_WEIYIMA VALUES weiyima .
CLEAR weiyima .
endform .
FORM show_smart_form .
gi_name = 'ERWEIMA' . "name of the qrcode will be in se78 after one time running this program
gi_object = 'GRAPHICS' .
gi_id = 'BMAP' .
gi_btype = 'BMON' . "If u want black and white pass BMON
gi_resident = '二维码' .
gi_autoheight = 'X' .
gi_bmcomp = 'X' .
l_extension = 'BMP' .
"importing the image into se78 before displaying it in the smartform.
perform import_bitmap_bds using blob
gi_name
gi_object
gi_id
gi_btype
l_extension
' '
gi_resident
gi_autoheight
gi_bmcomp
changing l_docid
gi_resolution .
IF sy -subrc = 0 .
" PERFORM Cunchu_liushui.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZBARCODE_IMD_IN'
IMPORTING
fm_name = fname .
DO times TIMES .
CALL FUNCTION fname
EXPORTING
CONTROL_PARAMETERS = ctrl_param
OUTPUT_OPTIONS = out_option1
USER_SETTINGS = usersettings
AUFNR = E_AUFNR
FENQIE = E_FENQIE
DATA = E_BUDAT
QUANTITY = E_QUANTITY
MAKTX = MAKTX
LIUSHUI = LIUSHUI
PCS = E_PCS .
ENDDO .
CLEAR liushui .
ELSE .
WRITE : 'import_bitmap_bds failed' .
ENDIF .
ENDFORM . " SHOW_SMART_FORM
*&---------------------------------------------------------------------*
*& Form IMPORT_BITMAP_BDS (Copied from standard program and modified it as per the requirement)
*&---------------------------------------------------------------------*
form import_bitmap_bds
using p_blob type w3mimetabtype
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_object_key type bapibds01 -objkey .
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 .
* Bitmap conversion
call function 'SAPSCRIPT_CONVERT_BITMAP_BDS'
exporting
color = 'X'
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 = p_blob
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 .
*&---------------------------------------------------------------------*
*& Form ENQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
* Enqueue of graphics stored in BDS
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
*& Form DEQUEUE_GRAPHIC
*&---------------------------------------------------------------------*
* Dequeue of graphics stored in BDS
*----------------------------------------------------------------------*
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 SearchMAKTX .
SELECT MAKTX
FROM MAKT
INTO MAKTX
WHERE MAKT ~MATNR = MATNR .
ENDSELECT .
ENDFORM .