欢迎使用CSDN-markdown编辑器

来源:互联网 发布:约束最优化方法 编辑:程序博客网 时间:2024/06/10 05:35

ABAP DOI详解(1)

原创 2016年12月16日 14:42:12

1471

.

什么是 DOI?

DOI 是Desktop Office Integration的缩写,,是 SAP 提供的解决与 Office 集成的开发技术。早期 SAP 用于解决 Office 集成,使用的是 OLE 技术。OLE 有两个比较大的缺点,一是语法参照 VBA,在 ABAP 中使用各种 VBA 的方法 (method),语法的友好性差;二是数据写入到 Excel 中,速度特别慢,慢得难以接受。
DOI 是 SAP 提供的 OLE 的替代品,用面向对象的方式实现。很好的解决了上面所说的两个问题。

请参考:Desktop Office Integration官方帮助

DOI开发的要点

涉及的关对象

SAP和Office集成,可以通过代码创建Excel文档,也可以将Excel模板文档放在应用程序服务器上。DOI打开这个文档,然后对文档进行操作。我们先介绍创建Excel文档的方式。

为了操作Excel文档,至少需要四个对象:

•container: 存放excel电子表格(spreadsheet)的容器。这个开发人员应该比较容易理解,展示spreadsheet肯定需要一个容器来存放。这个容器一般在dialog screen中定义,也可以直接使用ABAP程序默认的screen(即screen号码为1000的屏幕)

•container control: 容器中用于创建和管理其他Office集成所需要的对象。container control是一个接口,类型是i_oi_container_control。

•document proxy: 每一个document proxy的实例代表用office application打开的文档,可以是excel,也可以是word。如果想打开多个文档,需要定义多个实例。document proxy是一个接口,类型为i_oi_document_proxy。

•spreadsheet: spreadsheet接口,代表最终要操作的excel文档。spreadhseet的类型是i_oi_spreadsheet

如果读取服务器上的文档模板,需要cl_bds_document_set类:
•business document set: bds是business document set的缩写。business document set用于管理后续要操作的文档,可以包含一个或多个文档。

DOI操作文档的步骤
•获取container
•创建container control对象实例并初始化
•创建document proxy对象的实例
•打开一个服务器上的模板文档或新建一个excel文档
•操作excel文档,设置excel的属性
•退出时关闭excel文档,释放资源

我们的第一个例子,不使用dialog screen,新建一个excel文档,在屏幕1000中显示。

开始编码

定义公共变量

  • desktop office integration interface
    data: gr_container type ref to cl_gui_container,
    gr_control type ref to i_oi_container_control,
    gr_document type ref to i_oi_document_proxy,
    gr_spreadsheet type ref to i_oi_spreadsheet.1
    2
    3
    4
    5

这些就是我们前面提到的四个必须的对象。

获取container

cl_gui_container类的静态方法screen0获取屏幕1000,并赋值给gr_container。

form get_container.
gr_container = gr_container = cl_gui_container=>screen0.
endform. “get_container1
2
3

创建container control对象实例并初始化

form create_container_control.
* create container control
call method c_oi_container_control_creator=>get_container_control
importing
control = gr_control.

  • initialize control
    call method gr_control->init_control
    exporting
    inplace_enabled = ‘X ’
    inplace_scroll_documents = ‘X’
    register_on_close_event = ‘X’
    register_on_custom_event = ‘X’
    r3_application_name = ‘DOI demo by Stone Wang’
    parent = gr_container.
    endform. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

代码比较直观,不多说。

创建document proxy对象的实例

form create_excel_document.
call method gr_control->get_document_proxy
exporting
document_type = ‘Excel.Sheet’
no_flush = ‘X’
importing
document_proxy = gr_document.

call method gr_document->create_document
exporting
document_title = ‘DOI test by Stone Wang ’
no_flush = ‘X ’
open_inplace = ‘X’.
endform. “create_excel_document1
2
3
4
5
6
7
8
9
10
11
12
13
14

open_inplace参数控制excel文档是独立显示还是在SAP GUI中嵌入显示。如果嵌入显示,gr_control的init_control方法中,inplace_enabled参数要设为X。

将以上代码综合在一起:

form main.
skip 1.

perform get_container.
perform create_container_control.
perform create_excel_document.
endform.1
2
3
4
5
6
7

注意第一句skip 1必须,否则不能创建屏幕。

完整代码

report zdoi_hello.

type-pools: soi.

data: gr_container type ref to cl_gui_container,
gr_control type ref to i_oi_container_control,
gr_document type ref to i_oi_document_proxy,
gr_spreadsheet type ref to i_oi_spreadsheet.

start-of-selection.
perform main.

form get_container.
gr_container = gr_container = cl_gui_container=>screen0.
endform. “get_container

form create_container_control.
* create container control
call method c_oi_container_control_creator=>get_container_control
importing
control = gr_control.

  • initialize control
    call method gr_control->init_control
    exporting
    inplace_enabled = ‘X ’
    inplace_scroll_documents = ‘X’
    register_on_close_event = ‘X’
    register_on_custom_event = ‘X’
    r3_application_name = ‘DOI demo by Stone Wang’
    parent = gr_container.
    endform. “create_container_control

form create_excel_document.
call method gr_control->get_document_proxy
exporting
document_type = ‘Excel.Sheet’
no_flush = ‘X’
importing
document_proxy = gr_document.

call method gr_document->create_document
exporting
document_title = ‘DOI test by Stone Wang ’
no_flush = ‘X ’
open_inplace = ‘X’.
endform. “create_excel_document

form main.
skip 1.

perform get_container.
perform create_container_control.
perform create_excel_document.
endform.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

操作excel文档以及获取模板文档放在下一节,以降低学习和理解的难度。

原创粉丝点击