前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAP ABAP 在线预览文档对象的开发实现

SAP ABAP 在线预览文档对象的开发实现

原创
作者头像
matinal
修改2021-01-12 10:22:11
1.2K0
修改2021-01-12 10:22:11
举报
文章被收录于专栏:SAP TechnicalSAP Technical

应用场景:有些定制化开发(报表/功能增强等)完成之后,客户需要将其操作手册或者相关文档放在某个报表的初始画面,供实际操作者在线查阅,当然这个功能也同样类似于模板的下载,这里就以在线预览(直接打开)为例进行说明。

就比如上图所示,点击“事务操作手册”按钮即弹出PPT画面。

前提是PPT模板已经通过事务代码SMW0上传。

主要实现代码:

代码语言:javascript
复制
************************************************************************
* AT SELECTION-SCREEN
************************************************************************
AT SELECTION-SCREEN.
  CASE SSCRFIELDS-UCOMM.
    WHEN 'FC01'.
      DATA: LV_OBJECT_ID(20),
            LV_TITLE(40).
 
      LV_TITLE     = '操作手册'.
      LV_OBJECT_ID = 'ZFI_MODEL'.
 
      CALL FUNCTION 'Z_USE_OLE'
        EXPORTING
          I_OBJECT_ID = LV_OBJECT_ID
          I_TITLE     = LV_TITLE.
    WHEN 'FC02'.
    WHEN 'CLI1'.
      PERFORM SELECT_SCREEN.
    WHEN OTHERS.
  ENDCASE.

FM:Z_USE_OLE的介绍。

代码语言:javascript
复制
* regenerated at 2017.06.22 10:04:56
FUNCTION-POOL ZTEST                      MESSAGE-ID SV.
 
* INCLUDE LZTESTD...                         " Local class definition
INCLUDE LSVIMDAT                                . "general data decl.
INCLUDE LZTESTT00                               . "view rel. data dcl.
INCLUDE OLE2INCL.
INCLUDE OFFICEINTEGRATIONINCLUDE.
DATA : FACTORY TYPE REF TO I_OI_DOCUMENT_FACTORY.
DATA : DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY.
DATA : RETCODE TYPE T_OI_RET_STRING.
DATA : DOC_TABLE LIKE W3MIME OCCURS 0.
DATA : DOC_SIZE TYPE I.
DATA : DOC_TYPE(80) VALUE SOI_DOCTYPE_WORD97_DOCUMENT.
DATA : DOC_FORMAT(80) TYPE C.
DATA : LINK_SERVER TYPE REF TO I_OI_LINK_SERVER.
DATA : IS_CLOSED TYPE I.
代码语言:javascript
复制
FUNCTION Z_USE_OLE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_OBJECT_ID)
*"     VALUE(I_TITLE) OPTIONAL
*"  TABLES
*"      T_HEADER OPTIONAL
*"      T_ITEM OPTIONAL
*"----------------------------------------------------------------------
  IF I_OBJECT_ID IS INITIAL.
    RAISE OBJECT_ID_ERROR.
  ENDIF.
  PERFORM INIT_FACTORY  USING  I_TITLE.
  PERFORM OPEN_DOC      TABLES T_HEADER
                               T_ITEM
                        USING  I_OBJECT_ID.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Form INIT_FACTORY
*&---------------------------------------------------------------------*
FORM INIT_FACTORY USING P_TITLE.
  IF FACTORY IS INITIAL.
    CALL METHOD C_OI_FACTORY_CREATOR=>GET_DOCUMENT_FACTORY
      IMPORTING
        FACTORY = FACTORY
        RETCODE = RETCODE.
    IF RETCODE NE C_OI_ERRORS=>RET_OK.
      EXIT.
    ENDIF.
 
    CALL METHOD FACTORY->START_FACTORY
      EXPORTING
        R3_APPLICATION_NAME = P_TITLE
      IMPORTING
        RETCODE             = RETCODE.
 
    CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
      EXPORTING
        TYPE = 'E'.
 
    CALL METHOD FACTORY->GET_LINK_SERVER
      IMPORTING
        LINK_SERVER = LINK_SERVER
        RETCODE     = RETCODE.
 
    CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
      EXPORTING
        TYPE = 'E'.
 
    CALL METHOD LINK_SERVER->START_LINK_SERVER
      EXPORTING
        LINK_SERVER_MODE = 3
      IMPORTING
        RETCODE          = RETCODE.
 
    CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
      EXPORTING
        TYPE = 'E'.
  ENDIF.                               "factory IS INITIAL.
ENDFORM. " INIT_FACTORY
*&---------------------------------------------------------------------*
*& Form OPEN_DOC
*&---------------------------------------------------------------------*
FORM OPEN_DOC TABLES HEADER
                       ITEM
                USING  P_OBJECT_ID.
 
  DATA : a(8) TYPE C.
 
  DEFINE M_LINK_TAB.
    call method link_server->add_table_item2
      exporting
        item_name  = &1
      importing
        retcode    = retcode
      changing
        data_table = &2.
    call method c_oi_errors=>show_message
      exporting
        type = 'E'.
  END-OF-DEFINITION.
 
  IF NOT LINK_SERVER IS INITIAL.
    M_LINK_TAB 'HEADER'  HEADER[].
    M_LINK_TAB 'ITEM'    ITEM[].
  ENDIF.
 
 
* SAP ### ## EXCEL ## OPEN
 
  CALL FUNCTION 'SAP_OI_LOAD_MIME_DATA'
    EXPORTING
      OBJECT_ID        = P_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.
    CALL METHOD FACTORY->GET_DOCUMENT_PROXY
      EXPORTING
        DOCUMENT_TYPE  = DOC_TYPE
      IMPORTING
        DOCUMENT_PROXY = DOCUMENT
        RETCODE        = RETCODE.
    CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
      EXPORTING
        TYPE = 'E'.
 
 
* Document# Protected Mode# Open## #### ###.
 
    CALL METHOD DOCUMENT->OPEN_DOCUMENT_FROM_TABLE
      EXPORTING
        DOCUMENT_TABLE = DOC_TABLE[]
        DOCUMENT_SIZE  = DOC_SIZE
      IMPORTING
        RETCODE        = RETCODE.
 
    CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
      EXPORTING
        TYPE = 'E'.
  ENDIF.
 
ENDFORM. " OPEN_DOC
*&---------------------------------------------------------------------*
*& Form MACRO
*&---------------------------------------------------------------------*
FORM MACRO .
  CALL METHOD DOCUMENT->EXECUTE_MACRO
    EXPORTING
      MACRO_STRING = 'R3_MACRO1'
    IMPORTING
      RETCODE      = RETCODE.
  CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
    EXPORTING
      TYPE = 'E'.
ENDFORM. " MACRO
*&---------------------------------------------------------------------*
*& Form CLOSE_DOC
*&---------------------------------------------------------------------*
FORM CLOSE_DOC .
 
  IF NOT DOCUMENT IS INITIAL.
 
    CALL FUNCTION 'WS_FILE_DELETE'
      EXPORTING
        FILE = 'C:\PIC.JPG'.
 
    CALL METHOD DOCUMENT->IS_DESTROYED
      IMPORTING
        RET_VALUE = IS_CLOSED.
 
    IF IS_CLOSED IS INITIAL.
      CALL METHOD DOCUMENT->CLOSE_DOCUMENT
        EXPORTING
          DO_SAVE = 'X'
        IMPORTING
          RETCODE = RETCODE.
      CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
        EXPORTING
          TYPE = 'E'.
    ENDIF.
 
    CALL METHOD DOCUMENT->RELEASE_DOCUMENT
      IMPORTING
        RETCODE = RETCODE.
    CALL METHOD C_OI_ERRORS=>SHOW_MESSAGE
      EXPORTING
        TYPE = 'E'.
 
    FREE DOCUMENT.
  ENDIF.
 
ENDFORM. " CLOSE_DOC
*&---------------------------------------------------------------------*
*& Form CLOSE_FACTORY
*&---------------------------------------------------------------------*
FORM CLOSE_FACTORY .
  IF NOT LINK_SERVER IS INITIAL.
    CALL METHOD LINK_SERVER->STOP_LINK_SERVER
      IMPORTING
        RETCODE = RETCODE.
    FREE LINK_SERVER.
  ENDIF.
  IF NOT FACTORY IS INITIAL.
    CALL METHOD FACTORY->STOP_FACTORY
      IMPORTING
        RETCODE = RETCODE.
    FREE FACTORY.
  ENDIF.
ENDFORM. " CLOSE_FACTORY

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档