SAP培训

赛跑网

 找回密码
 注册

QQ登录

只需一步,快速开始

快捷登录

查看: 1285|回复: 12

赛跑网-DOI技术源代码

[复制链接]
发表于 2012-11-27 13:35:14 | 显示全部楼层 |阅读模式
*DOI技术是调用上传到SAP的EXCEL模板,然后通过行列控制输出数据的,下面共享一段源代码
REPORT  Z_DOI.

*使用到相关类型池
TYPE-POOLS:  vrm,sbdst, soi.

"document_name为通过TCODE:OAER上传到SAP的EXCEL模板,该模板中可以设置格式。

*CONSTANTS document_name(30) VALUE 'TEST-SPC汇总新增需求'.   客户帐龄分析表   "
CONSTANTS document_name(30) VALUE '客户帐龄分析表'.
DATA: doc_classname  TYPE sbdst_classname    VALUE 'PICTURES',  "oaer中的class name
      doc_classtype  TYPE sbdst_classtype    VALUE 'OT',        "oaer中的class type
      doc_object_key TYPE sbdst_object_key   VALUE 'ZEXCEL'.    "oaer中的object key 该key值用户可以指定

*以下变量声明部分无需改动
*--------------------------------------------------------------------*>>
DATA: flag .
DATA: container   TYPE REF TO cl_gui_custom_container,
      control     TYPE REF TO i_oi_container_control,
      document    TYPE REF TO i_oi_document_proxy,
      spreadsheet TYPE REF TO i_oi_spreadsheet,
      error       TYPE REF TO i_oi_error,
      errors TYPE REF TO i_oi_error OCCURS 0 WITH HEADER LINE.

CONTROLS:    exceldata TYPE TABLEVIEW USING SCREEN 0100.
DATA:        okcode(15).

* spreadsheet interface structures for Excel data input
DATA: rangeitem TYPE soi_range_item.
DATA: ranges TYPE soi_range_list.
DATA: excel_input TYPE soi_generic_table.
DATA: excel_input_wa TYPE soi_generic_item.
DATA: initialized(1), retcode TYPE soi_ret_string.
DATA: item_url(256), already_done, newname(40).
DATA  document_type(80).
DATA: app TYPE vrm_id, applist TYPE vrm_values.
DATA: excel(80) VALUE 'Excel.Sheet'.
*--------------------------------------------------------------------*<<
**选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK block1
                         WITH FRAME
                         TITLE text-001.

PARAMETERS: p_input1 TYPE i  .

SELECTION-SCREEN END OF BLOCK block1.


START-OF-SELECTION.

**取数据
  PERFORM getdata.

  CALL SCREEN 100."需创建屏幕号为100的屏幕 并在屏幕中拖出一个名称为CONTAINER的容器

*----------------------------------------------------------------------*
*  MODULE OUTPUT_TO_EXCEL OUTPUT
*----------------------------------------------------------------------*
* SCREEN 100 PBO MODULE
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATS100'."需创建,设置工具条
  IF flag = space .
   "根据文档的描述名称,加载文档
    PERFORM create_basic_objects USING ''  '' '' '' document_name.
   "通过行 列控制excel输出
    PERFORM output_to_excel.
  ENDIF.
ENDMODULE.                    "OUTPUT_TO_EXCEL OUTPUT

*----------------------------------------------------------------------*
*  MODULE EXIT INPUT
*----------------------------------------------------------------------*
* SCREEN 100 PAI MODULE
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  flag = 'X'.
  CASE okcode.
    WHEN 'EXIT' .
      IF NOT document IS INITIAL.
        CALL METHOD document->close_document.
        FREE document.
      ENDIF.
      IF NOT control IS INITIAL.
        CALL METHOD control->destroy_control.
        FREE control.
      ENDIF.
      LEAVE PROGRAM.
    WHEN 'BACK' .
      IF NOT document IS INITIAL.
        CALL METHOD document->close_document.
        FREE document.
      ENDIF.
      IF NOT control IS INITIAL.
        CALL METHOD control->destroy_control.
        FREE control.
      ENDIF.
      SET SCREEN 0.  " quit the program
  ENDCASE.
ENDMODULE.                 " EXIT  INPUT


*&---------------------------------------------------------------------*
*&      Form  create_basic_objects
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_APP_NAME   text
*      -->P_CLASSNAME  text
*      -->P_CLASSTYPE  text
*      -->P_OBJ_KEY    text
*      -->P_DOCNAME    text
*----------------------------------------------------------------------*
FORM  create_basic_objects USING p_app_name
                                 p_classname
                                 p_classtype
                                 p_obj_key
                                 p_docname.

  CHECK initialized IS INITIAL.
* first get the SAP DOI i_oi_container_control interface
  CALL METHOD
    c_oi_container_control_creator=>get_container_control
    IMPORTING
      control = control
      error   = error.
* check no errors occured
  CALL METHOD error->raise_message
    EXPORTING
      type = 'E'.
  CREATE OBJECT container
    EXPORTING
      container_name = 'CONTAINER' .   "CONTAINER 容器名称

  DATA l_app_name(200).
  IF p_app_name IS INITIAL.
    l_app_name = document_name.
  ELSE.
    l_app_name = p_app_name.
  ENDIF.
  CALL METHOD control->init_control
    EXPORTING
      r3_application_name      = l_app_name
      inplace_enabled          = 'X'
      inplace_scroll_documents = 'X'
      parent                   = container
      register_on_close_event  = 'X'
      register_on_custom_event = 'X'
      no_flush                 = 'X'
    IMPORTING
      error                    = errors.
* save error object in collection
  APPEND errors.
  CLEAR item_url.
  DATA: bds_instance TYPE REF TO cl_bds_document_set.
  DATA: doc_signature TYPE sbdst_signature,
        wa_doc_signature LIKE LINE OF doc_signature,
        doc_components TYPE sbdst_components,
        doc_uris TYPE sbdst_uri,
        wa_doc_uris LIKE LINE OF doc_uris.

  wa_doc_signature-prop_name = 'DESCRIPTION'.

  app = 'excel'.
  IF app = 'excel'.
    document_type = excel.
    wa_doc_signature-prop_value = p_docname.
  ELSE.
  ENDIF.
  APPEND wa_doc_signature TO doc_signature.
  CREATE OBJECT bds_instance.
  CALL METHOD bds_instance->get_info
    EXPORTING
      classname  = doc_classname
      classtype  = doc_classtype
      object_key = doc_object_key
    CHANGING
      components = doc_components
      signature  = doc_signature.

  CALL METHOD bds_instance->get_with_url
    EXPORTING
      classname  = doc_classname
      classtype  = doc_classtype
      object_key = doc_object_key
    CHANGING
      uris       = doc_uris
      signature  = doc_signature.

  FREE bds_instance.

游客,如果您要查看本帖隐藏内容请回复

* open a document saved in business document service.
  CALL METHOD document->open_document
    EXPORTING
      open_inplace = 'X'
      document_url = item_url.

  DATA: has TYPE i.
  CALL METHOD document->has_spreadsheet_interface
    EXPORTING
      no_flush     = ''
    IMPORTING
      is_available = has
      error        = errors.
  APPEND errors.

  CALL METHOD document->get_spreadsheet_interface
    EXPORTING
      no_flush        = ' '
    IMPORTING
      sheet_interface = spreadsheet
      error           = errors.
  APPEND errors.
* Activate  sheet 1
  CALL METHOD spreadsheet->select_sheet
    EXPORTING
      name     =  'Sheet1'
*    NO_FLUSH = ' '
    IMPORTING
      error    = errors.
*    RETCODE  =
  .
  APPEND errors.

游客,如果您要查看本帖隐藏内容请回复


*&---------------------------------------------------------------------*
*&      Form  getdata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM getdata.

ENDFORM.                    "getdata


*&---------------------------------------------------------------------*
*&      Form  output_to_excel
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM output_to_excel.


  PERFORM fill_cell USING 2 2 p_input1.

  PERFORM fill_cell USING 2 11 p_input1.


ENDFORM.                    "output_to_excel

*&---------------------------------------------------------------------*
*&      Form  fill_cell
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I          text
*      -->J          text
*      -->VAL        text
*----------------------------------------------------------------------*
FORM fill_cell  USING i j val.
  DATA: columns_number TYPE i,
        rows_number    TYPE i.

  columns_number = 1.
  rows_number = 1.

  CALL METHOD spreadsheet->insert_range_dim
    EXPORTING
      name     = 'cell'
      no_flush = 'X'
      top      = i
      left     = j
      rows     = rows_number
      columns  = columns_number
    IMPORTING
      error    = errors.
  APPEND errors.

  REFRESH: ranges, excel_input.
  rangeitem-name = 'cell'.
  rangeitem-columns = 1.
  rangeitem-rows = 1.
  APPEND rangeitem TO ranges.

  excel_input_wa-column = 1.
  excel_input_wa-row = 1.
  excel_input_wa-value = val.
  APPEND excel_input_wa TO excel_input.

* set data
  CALL METHOD spreadsheet->set_ranges_data
    EXPORTING
      ranges   = ranges
      contents = excel_input
      no_flush = 'X'
    IMPORTING
      error    = errors.
  APPEND errors.

  CALL METHOD spreadsheet->fit_widest
    EXPORTING
      name     = space
      no_flush = 'X'.

  REFRESH: ranges, excel_input.

ENDFORM.                    "fill_cell

该贴已经同步到 SAPOK_ABAP的微博

帖子的最近访客查看更多↓





上一篇:赛跑网-表类型的创建
下一篇:赛跑网-SMARTFORM中常有的控制参数
本楼点评(0) 收起
推广排名:
回复

使用道具 举报

发表于 2013-1-18 11:46:42 | 显示全部楼层
学习

本楼点评(0) 收起
发表于 2013-1-22 21:44:50 | 显示全部楼层
学习

本楼点评(0) 收起
发表于 2013-1-31 13:47:51 | 显示全部楼层
加油

本楼点评(0) 收起
发表于 2013-2-28 15:11:19 | 显示全部楼层
顶一个!!!

本楼点评(0) 收起
发表于 2013-2-28 15:12:15 | 显示全部楼层
学习了!!!!

本楼点评(0) 收起
发表于 2013-4-28 01:46:12 | 显示全部楼层

thanks

cx楼主辛苦啦,这个问题对我很重要

本楼点评(0) 收起
发表于 2013-10-31 17:14:11 | 显示全部楼层
路过 帮顶 嘿嘿

本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 注册

本版积分规则

SAP培训

QQ|手机版|联系我们|赛跑网 ( QQ:108519493 ) QQfsq

GMT+8, 2019-6-19 01:06 , Processed in 0.447456 second(s), 56 queries .

Powered by Discuz! X3.2

© 2001-2014

快速回复 返回顶部 返回列表