一段程序:SAP使用ODI方法为WORD填充数据

未做测试, 仅记备查.

 

原文地址: 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.

你可能感兴趣的:(properties,object,table,SAP,interface,merge)