2024年6月14日发(作者:)
ABAP调用OCX插件
在实际项目中,有时候需要SAP调用OCX插件或者DLL(例如打印、摄像头、扫描枪、磅秤
之类的),下面的代码供参考。
1. 注册OCX到SAP, t-code SOLE.(这里要说明一下,本次测试代码并没有将OCX插件在系
统中注册,只是将其放在system32(64)、SysWOW64(32)下,然后通过regsvr32进行
注册就可以调用了。有些OCX或者DLL没法在系统中进行注册,这类的可能需要在SAP
中进行注册了(有待研究))。
2. 创建自定义程序,为了能够调用ocx,我们需要自定义一个class继承自cl_gui_control.
REPORT
ZTEST_ZYZ_010
.
“定义custom container
DATA:
cont
TYPE REF TO
cl_gui_custom_container
.
“类声明
CLASS
cl_flash
DEFINITION
DEFERRED
.
“类定义
CLASS
cl_flash
DEFINITION INHERITING FROM
cl_gui_control
.
PUBLIC SECTION.
METHODS:
constructor
IMPORTING
VALUE(
shellstyle
) TYPE i OPTIONAL
VALUE(
disp_mode
) TYPE i OPTIONAL
VALUE(
life_time
) TYPE i OPTIONAL
VALUE(
name
) TYPE
string
OPTIONAL
EXCEPTIONS
cntl_error
cntl_install_error
,
“本例子测试调用打印ocx,该方法调用实际打印
print_abc
EXPORTING
ev_data
TYPE ANY
EXCEPTIONS
error_found
,
“获取错误消息内容
get_error_info
EXPORTING
ev_data
TYPE
CHAR100
EXCEPTIONS
error_found
,
ENDCLASS.
“类实现
CLASS
cl_flash
IMPLEMENTATION.
“构造方法
METHOD
constructor
.
DATA:
ctrl_name
(80) TYPE c,
wf_clsid
(100) TYPE c.
”OCX CLSID
DATA:
lt_fields
TYPE TABLE OF
ztest_field_map
,
ls_fields
TYPE
ztest_field_map
,
lv_value
TYPE
string
,
lv_fieldname
TYPE
sychar32
.
“这里需要注意
这里
需要注意,
需要注意
,如果property字
段名称是动态指定
段名称是动态
指定的话
指定
的话,
的话
,则实参类型必须是
实参
类型必须是SYCHAR32
“读取业务数据,测试目的,业务数据处理直接放在构造函数里了,实际使用时建议重新设计该类
DATA:
ls_data
TYPE
ztest_data
.
SELECT SINGLE
*
INTO
CORRESPONDING
FIELDS OF
ls_data
FROM
ztest_data
WHERE
clsbdh
= 'ABC'.
”指定OCX CLSID
IF NOT
cl_gui_object
=>
activex
IS INITIAL.
wf_clsid
= ''.
”ocx name/CLSID
ELSE.
RAISE
cntl_error
.
ENDIF.
“调用父类构造函数
CALL METHOD
super
->
constructor
EXPORTING
clsid
=
wf_clsid
“OCX CLSID
parent
=
cont
“指定container
shellstyle
= 0
lifetime
=
life_time
name
=
name
EXCEPTIONS
cntl_system_error
= 1
OTHERS = 2.
CASE
sy
-
subrc
.
WHEN 1.
RAISE
cntl_install_error
.
WHEN 2.
RAISE
cntl_error
.
ENDCASE.
“设置属性,通过直接指定属性和和value来设置
发布评论