如何通过代码将生成的二维码上传至SE78图形库?
二维码上传SE78的代码实现解答
问题1:能否通过代码将生成的二维码上传至SE78?
可以完全通过ABAP代码实现二维码到SE78图形库的自动上传,无需手动操作SE78事务码。
问题2:如何通过代码上传生成的二维码至SE78?
基于你已有的二维码生成逻辑,只需补充调用标准上传函数的代码即可完成自动上传。以下是完整的实现方案:
实现步骤
- 保留你原有的二维码生成代码,获取二维码的XSTRING格式数据
- 将XSTRING转换为SE78要求的MIME内表格式
- 调用标准函数完成上传,指定图形的关键属性
完整代码示例
* 原有二维码生成逻辑 DATA: lv_qrcode_link TYPE string VALUE 'https://your-target-url.com', lv_qrcode TYPE xstring, lv_xstrlen TYPE i, lv_mime TYPE solix_tab. CALL METHOD cl_rstx_barcode_renderer=>qr_code EXPORTING i_module_size = 120 i_error_correction = 'L' i_barcode_text = lv_qrcode_link IMPORTING e_bitmap = lv_qrcode. lv_xstrlen = xstrlen( lv_qrcode ). CALL FUNCTION 'RSFO_XSTRING_TO_MIME' EXPORTING c_xstring = lv_qrcode i_length = lv_xstrlen TABLES c_t_mime = lv_mime. IF sy-subrc <> 0. MESSAGE '二维码转MIME格式失败' TYPE 'E'. ENDIF. * 新增:上传至SE78图形库 DATA: lv_graphic_name TYPE tdobname VALUE 'ZQR_MY_LINK', " 自定义图形名称 lv_object TYPE tdobject VALUE 'GRAPHICS', lv_id TYPE tdid VALUE 'BMAP', lv_type TYPE tdtype VALUE 'COL'. " COL=彩色,BW=黑白 CALL FUNCTION 'SAPCRIPT_GRAPHIC_UPLOAD' EXPORTING filename = lv_graphic_name filetype = 'BMP' " 二维码生成的是BMP格式 object = lv_object id = lv_id type = lv_type overwrite = 'X' " 允许覆盖已存在的同名图形 TABLES mime_table = lv_mime EXCEPTIONS graphic_file_not_found = 1 wrong_file_format = 2 graphic_too_big = 3 wrong_graphic_type = 4 others = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. WRITE: '二维码已成功上传至SE78,图形名称:', lv_graphic_name.
关键参数说明
- lv_graphic_name:自定义图形名称,需使用Z/Y开头的自定义命名空间,避免与SAP标准图形冲突
- lv_object:固定为
GRAPHICS,对应SE78中的图形对象类型 - lv_id:固定为
BMAP,表示上传的是位图类型 - lv_type:
COL对应彩色位图,BW对应黑白位图,根据你的二维码生成格式选择 - overwrite:设为
X时,若已有同名图形则直接覆盖;若设为空,则上传会因图形已存在报错
注意事项
- 确保当前用户拥有SE78图形库的修改权限(需权限对象
S_SCRP的相关权限) - 二维码生成的是BMP格式,因此
filetype必须指定为BMP,否则会报格式错误 - 若上传失败,可根据SY-SUBRC对应的异常代码排查问题,比如图形尺寸过大、权限不足等
内容的提问来源于stack exchange,提问作者Mannat Singh
相关产品推荐
相关产品推荐

