什么是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中显示。
开始编码
定义公共变量
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
这些就是我们前面提到的四个必须的对象。
获取container
cl_gui_container
类的静态方法screen0
获取屏幕1000,并赋值给gr_container。
- 1
- 2
- 3
- 1
- 2
- 3
创建container control对象实例并初始化
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
代码比较直观,不多说。
创建document proxy对象的实例
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 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
。
将以上代码综合在一起:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注意第一句skip 1必须,否则不能创建屏幕。
完整代码
- 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
- 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文档以及获取模板文档放在下一节,以降低学习和理解的难度。