一段程序:SAP使用ODI方法为WORD填充数据
来源:互联网 发布:比特币 闪电网络 编辑:程序博客网 时间:2024/05/29 10:38
未做测试, 仅记备查.
原文地址: http://blog.sina.com.cn/s/blog_3eefd36c01008cmz.html
原理:
通过 CALL METHOD DOCUMENT->GET_MAIL_MERGE_INTERFACE 方法获取邮件合并的一个实例并对该实例进行操作。
优点:
一般的ODI方法为word填充数据需要通过方法 CALL METHOD DOCUMENT->EXECUTE_MACRO 调用宏,此时用户需要将宏的优先级设为低,存在安全风险。该方法避免了宏安全性的设置。
核心代码:
CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
EXPORTING
object_id = object_id
IMPORTING
data_size = doc_size
document_format = doc_format
document_type = doc_type
TABLES
data_table = doc_table
EXCEPTIONS
object_not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF doc_size NE 0.
doc_type = 'Word.Document.8'.
call method document->open_document_from_table
exporting
document_size = doc_size
document_table = doc_table[]
* open_inplace = 'X'
* startup_macro = macro.
.
CALL METHOD document->play_document_from_table
EXPORTING
document_table = doc_table[]
document_size = doc_size
no_flush = 'X'
* STARTUP_MACRO = macro
IMPORTING
retcode = retcode.
CALL METHOD DOCUMENT->GET_MAIL_MERGE_INTERFACE
* EXPORTING
* NO_FLUSH = ' '
IMPORTING
* ERROR =
MM_INTERFACE = mail_object
* RETCODE =
.
CALL METHOD MAIL_OBJECT->SET_DATA_SOURCE
* EXPORTING
* DATE =
* DDIC_NAME =
* DESCRIPTION = ''
* NO_FLUSH = ' '
* TIME =
* IMPORTING
* ERROR =
* RETCODE =
CHANGING
DATA_TABLE = tab_data
FIELDS_TABLE = tab_field
* PROPERTIES =
.
DATA: l_lines TYPE i.
DESCRIBE TABLE tab_data LINES l_lines.
CALL METHOD MAIL_OBJECT->MERGE_RANGE
EXPORTING
FIRST = 1
LAST = l_lines
* NO_FLUSH = ' '
* IMPORTING
* ERROR =
* RETCODE =
.
CALL METHOD MAIL_OBJECT->VIEW
* EXPORTING
* NO_FLUSH = ' '
* IMPORTING
* ERROR =
* RETCODE =
.
CALL METHOD document->save_copy_as
EXPORTING
file_name = 'c:/sss.doc'
no_flush = 'X'
prompt_user = ' '
IMPORTING
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
PERFORM close_doc.
PERFORM close_factory.
ELSE.
MESSAGE 'No document selected' TYPE 'E'.
ENDIF.
EXPORTING
object_id = object_id
IMPORTING
data_size = doc_size
document_format = doc_format
document_type = doc_type
TABLES
data_table = doc_table
EXCEPTIONS
object_not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
IF doc_size NE 0.
doc_type = 'Word.Document.8'.
call method document->open_document_from_table
exporting
document_size = doc_size
document_table = doc_table[]
* open_inplace = 'X'
* startup_macro = macro.
.
CALL METHOD document->play_document_from_table
EXPORTING
document_table = doc_table[]
document_size = doc_size
no_flush = 'X'
* STARTUP_MACRO = macro
IMPORTING
retcode = retcode.
CALL METHOD DOCUMENT->GET_MAIL_MERGE_INTERFACE
* EXPORTING
* NO_FLUSH = ' '
IMPORTING
* ERROR =
MM_INTERFACE = mail_object
* RETCODE =
.
CALL METHOD MAIL_OBJECT->SET_DATA_SOURCE
* EXPORTING
* DATE =
* DDIC_NAME =
* DESCRIPTION = ''
* NO_FLUSH = ' '
* TIME =
* IMPORTING
* ERROR =
* RETCODE =
CHANGING
DATA_TABLE = tab_data
FIELDS_TABLE = tab_field
* PROPERTIES =
.
DATA: l_lines TYPE i.
DESCRIBE TABLE tab_data LINES l_lines.
CALL METHOD MAIL_OBJECT->MERGE_RANGE
EXPORTING
FIRST = 1
LAST = l_lines
* NO_FLUSH = ' '
* IMPORTING
* ERROR =
* RETCODE =
.
CALL METHOD MAIL_OBJECT->VIEW
* EXPORTING
* NO_FLUSH = ' '
* IMPORTING
* ERROR =
* RETCODE =
.
CALL METHOD document->save_copy_as
EXPORTING
file_name = 'c:/sss.doc'
no_flush = 'X'
prompt_user = ' '
IMPORTING
retcode = retcode.
CALL METHOD c_oi_errors=>show_message
EXPORTING
type = 'E'.
PERFORM close_doc.
PERFORM close_factory.
ELSE.
MESSAGE 'No document selected' TYPE 'E'.
ENDIF.
- 一段程序:SAP使用ODI方法为WORD填充数据
- 用程序把word模板中的一个表格复制为多个表格然后填充数据(工资单的例子)
- Excel中使用填充命令填充数据的方法
- java word 模板 数据填充
- 一个程序:SAP调用WORD,不使用宏
- Phoenix Framework中为Tree对象填充数据的方法
- Android:不使用布局文件,为Listview填充数据
- 在使用echart时使用异步方法来填充数据
- C#也能动态生成Word文档并填充数据, 导出EXCEL 方法
- 填充数据到word模板中
- domino下拉框列表数据使用公式填充的方法
- MVC5中根据word模板填充数据生成word
- ODI使用MDX导出Essbase数据中文乱码问题
- excel中整列填充数据方法
- 按小时统计数据,无数据的时间点填充为0的实现方法
- 使用XML模板填充数据
- laravel使用faker填充数据
- 如何利用ADODatasetCommand为DataSet填充数据
- 七月初的计划
- Spring发送电子邮件
- ar 命令的用法
- 2
- 一个程序:SAP调用WORD,不使用宏
- 一段程序:SAP使用ODI方法为WORD填充数据
- Spring声明式事务管理
- 学生成绩管理系统
- td内增加滚动条
- c:/WINDOWS/system32/drivers/etc/hosts
- 匈牙利命名法收藏
- CN域名成标配 门户微博开打“短域名”之战
- DLL导出类的问题
- For Linux Mysql Udf