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来设置