SAPABAPDOI技术的优化与说明.docx

上传人:b****5 文档编号:4436826 上传时间:2022-12-01 格式:DOCX 页数:11 大小:20.25KB
下载 相关 举报
SAPABAPDOI技术的优化与说明.docx_第1页
第1页 / 共11页
SAPABAPDOI技术的优化与说明.docx_第2页
第2页 / 共11页
SAPABAPDOI技术的优化与说明.docx_第3页
第3页 / 共11页
SAPABAPDOI技术的优化与说明.docx_第4页
第4页 / 共11页
SAPABAPDOI技术的优化与说明.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

SAPABAPDOI技术的优化与说明.docx

《SAPABAPDOI技术的优化与说明.docx》由会员分享,可在线阅读,更多相关《SAPABAPDOI技术的优化与说明.docx(11页珍藏版)》请在冰豆网上搜索。

SAPABAPDOI技术的优化与说明.docx

SAPABAPDOI技术的优化与说明

应以前一个公司的邀请,对ABAP程序使用DOI技术输出EXCEL文件的程序进行优化处理。

此公司的问题是,DOI输出的EXCEL太难看了。

X系列的THINKPAD看程序要来回滚动,而现在的大屏幕的台式机上的EXCEL又局限在一个小小的角落。

从我的角度来看,那批程序也是太难看了。

  DOI技术的优点,就不用说了!

速度快,可定制EXCEL模板。

缺点呢,缺点是我们ABAP顾问都太懒了,直接在网上搜到相关的程序,搞个例程下来,修理修理就成自己的了。

我也在网上搜了一下,N个人的博客写的程序大同小异,甚至就是直接把别人的东西挂到自己的博客上。

声讨一下,然后挂出我本人优化后的一个程序。

优化如下:

1、创建一个空屏幕上,只在屏幕上激活PAI、PBO事件下的FUNCTIONMOUDLE。

干嘛非要在屏幕上放一个CONTAINER组件呢,固定后那么难看。

完全可以动态创建吗?

动态创建使用CL_GUI_CONTAINER这个类。

动态创建的好处在于,CONTAINER的大小不是固定的,完全随着屏幕的大小而创建。

2、本人发发善心,把夹杂在代码中的乱七八糟的内表与变量统统移到外面,定义成全局变量。

在程序中随意定义代码的缺点都知道,就是没有人来给整理一下。

本人还给这部分全局变量统计了命名规则,内表、变量、工作区分别用不同的前导符做区分。

3、把代码重新划分到不同的子程序里。

通常XX出来的代码真是太乱了,我受不了。

在我的项目中,非把他们开掉不可(哦,我只是一个小兵,没这个权力)。

4、OAOR上传模版这些基本知识就说了,不知道的请XX一下。

  说明一下,我在程序指定了固定的区域输出数据时,不带边框;除去这一部分外,其他的部分数据输出时都加了边框,请各位兄弟姐妹们使用时注意。

具体位置请搜索“CALLMETHODcl_spreadsheet->set_frame”。

 

  废说少说,上代码:

*&--------------------------------------------------------------*

*&Report  ZTRAINING26事件的使用与说明                                *

*&--------------------------------------------------------------*

REPORT  ztraining26NOSTANDARDPAGEHEADING.

*****************************************************************

**  声明数据库表Declarationofdatabase                              **

*****************************************************************

TABLES:

mara.     "物料主数据

*****************************************************************

**  定义结构类型Definethestructure'stype                          **

*****************************************************************

*     结果内表结构

TYPES:

BEGINOFtyp_result,

        matnrTYPEmatnr,      "物料编号

        werksTYPEwerks_d,    "工厂

        lgortTYPElgort_d,    "库存地点

        chargTYPEcharg_d,    "批次

        box   TYPEc,

      ENDOFtyp_result.

*****************************************************************

**  定义变量与内表DefinethevariantsandInternaltables            **

*****************************************************************

DATA:

gt_resultTYPETABLEOFtyp_resultWITHHEADERLINE.     "结果内表

*@--------------------------------------------------------------*

*调用相关对象使用的变量

TYPE-POOLS:

vrm,sbdst,soi.

*     定位EXCEL的单元格,

TYPES:

BEGINOFtyp_excel,

        row   TYPEkcd_ex_row_n,

        col   TYPEkcd_ex_col_n,

        valueTYPEchar50,

      ENDOFtyp_excel.

DATA:

gt_tabcontentTYPETABLEOFtyp_excel.

DATA:

wa_tabcontentTYPEtyp_excel.

TYPES:

typ_urlLIKEbapiuri-uri.

TYPES:

BEGINOFtyp_docu_descr,

          document_name(40),

          document_id(64),

       ENDOFtyp_docu_descr.

TYPES:

BEGINOFtyp_area_excel,

        areano

(2)TYPEn,

        tabcontentLIKEgt_tabcontent,

      ENDOFtyp_area_excel.

*SAPDesktopOfficeIntegrationInterfaces

DATA:

cl_container   TYPEREFTOcl_gui_container,

      cl_splitter    TYPEREFTOcl_gui_splitter_container,

      cl_control     TYPEREFTOi_oi_container_control,

      cl_docu_proxy  TYPEREFTOi_oi_document_proxy,

      cl_spreadsheetTYPEREFTOi_oi_spreadsheet,

      cl_error       TYPEREFTOi_oi_error,

      cl_errors      TYPEREFTOi_oi_errorOCCURS0WITHHEADERLINE.

*spreadsheetinterfacestructuresforExceldatainput

DATA:

wa_cellitem    TYPEsoi_generic_item,

     wa_rangeitem   TYPEsoi_range_item,

     gt_ranges      TYPEsoi_range_list,

     gt_excel_inputTYPEsoi_generic_table,

     wa_excel_inputTYPEsoi_generic_item,

     g_initialized  typec,

     g_retcode      TYPEsoi_ret_string,

     gt_excel_formatTYPEsoi_format_table,

     wa_format      LIKELINEOFgt_excel_format.

DATA:

gt_itab     TYPETABLEOFalsmex_tablineWITHHEADERLINE,

     gt_imt_tab  TYPETABLEOFtyp_area_excel,

     wa_imt_tab  LIKELINEOFgt_imt_tab,

     g_macro     TYPEtext100,

     g_sheet(10)TYPEc,

     g_cell_fit  TYPEc.

DATA:

cl_bds_instance   TYPEREFTOcl_bds_document_set,

     gt_doc_signature  TYPEsbdst_signature,

     wa_doc_signature  LIKELINEOFgt_doc_signature,

     gt_doc_componentsTYPEsbdst_components,

     gt_doc_uris       TYPEsbdst_uri,

     wa_doc_uris       LIKELINEOFgt_doc_uris.

DATA:

g_app      TYPEvrm_id,

     gt_applistTYPEvrm_values,

     g_excel    TYPEtext80VALUE'Excel.Sheet',       "EXCEL的表单

     g_docu_typeTYPEtext80,

     g_url(256)  TYPEc,

     g_has_activexTYPEc,

     g_colTYPEi,         "字段所在的列数

     g_rowTYPEi.         "字段所在的行数

*以下三个值为Tcode:

OAOR里面新建模板文件的参数

DATA:

g_classname  TYPEsbdst_classnameVALUE'HRFPM_EXCEL_STANDARD',

      g_classtype  TYPEsbdst_classtypeVALUE'OT',

      g_object_keyTYPEsbdst_object_keyVALUE'ZMB51_FZ'.

*****************************************************************

**  宏定义Definethemacro                                           **

*****************************************************************

DEFINEm_value.

  clear&1.

  &1-key=&2.

  &1-text=&3.

  append&1.

END-OF-DEFINITION.

*将数据对应到EXCEL的单元格,并添加到内表中

DEFINEm_excel_cell.

  clearwa_tabcontent.

  g_col=g_col+1.

  wa_tabcontent-row  =g_row.

  wa_tabcontent-col  =g_col.

  wa_tabcontent-value=&1.

  shiftwa_tabcontent-valueleftdeletingleadingspace.

  appendwa_tabcontenttogt_tabcontent.

END-OF-DEFINITION.

*****************************************************************

**  选择屏幕Customizetheselection-screen                           **

*****************************************************************

SELECTION-SCREENBEGINOFBLOCKxaveryWITHFRAMETITLEtext-001.

SELECT-OPTIONS:

s_matnrFORmara-matnrMEMORYIDmat.   "物料编号

SELECTION-SCREENENDOFBLOCKxavery.

*****************************************************************

**  执行程序事件Executingtheprogram'sevents                       **

*****************************************************************

INITIALIZATION.

START-OF-SELECTION.

  PERFORMsub_query_mara.

END-OF-SELECTION.

  PERFORMsub_process_excel.

  CALLSCREEN0100.

*&---------------------------------------------------------------*

*&      Form  sub_query_mara

*&---------------------------------------------------------------*

*       从物料主数据表MARA中取数

*---------------------------------------------------------------*

FORMsub_query_mara.

*取物料主数据

  SELECTmatnr

      FROMmara

      INTOCORRESPONDINGFIELDSOFTABLEgt_result

      WHEREmatnrINs_matnr.

ENDFORM.                    "sub_query_mara

*****************************************************************

**DialogModulesPBOandPAI

*****************************************************************

MODULEstatus_0100OUTPUT.

  DATA:

wa_tabTYPEtyp_area_excel.

  DATA:

its_tabTYPETABLEOFtyp_excel.

  SETPF-STATUS'XAVERY_HSUEH'.

  SETTITLEBAR'TIT_100'WITH'活动界面示例'.

  PERFORMsub_create_basic_object.

  LOOPATgt_imt_tabINTOwa_tab.

    REFRESHgt_itab.

    gt_itab[]=wa_tab-tabcontent[].

    PERFORMsub_set_cell.

  ENDLOOP.

  IFg_cell_fit='X'.

    CALLMETHODcl_spreadsheet->fit_widest

      EXPORTING

        name     =space

        no_flush='X'.

  ENDIF.

*修改WORKSHEET的名字

  CALLMETHODcl_spreadsheet->set_sheet_name

    EXPORTING

      newname='物料主数据清单'

      oldname='Sheet1'

    IMPORTING

      error   =cl_errors.

*宏执行

  IFNOTg_macroISINITIAL.

*    CALLMETHODDOCUMENT->EXECUTE_MACRO

*      EXPORTING

*        g_macro=g_macro

**      SCRIPT_NAME  ='Open_text'

**      NO_FLUSH     =''

*      IMPORTING

*        cl_error        =cl_errorS.

**    CALLMETHODC_OI_ERRORS=>SHOW_MESSAGE

**      EXPORTING

**        TYPE='E'.

*    APPENDcl_errorS.

  ENDIF.

ENDMODULE.                    "status_0100OUTPUT

*&--------------------------------------------------------------*

*&DialogModulesPAI

*&--------------------------------------------------------------*

MODULEuser_command_0100INPUT.

  LEAVETOSCREEN0.

ENDMODULE.                    "USER_COMMAND_0100INPUT

*&--------------------------------------------------------------*

*&      Form  SUB_CREATE_BASIC_OBJECT

*&--------------------------------------------------------------*

*       创建相关的对象

*---------------------------------------------------------------*

FORMsub_create_basic_object.

  CHECKg_initializedISINITIAL.

  CALLFUNCTION'GUI_HAS_ACTIVEX'

    IMPORTING

      return=g_has_activex.

  IFg_has_activexISINITIAL.

    MESSAGEe007(demoofficeintegratio).

  ENDIF.

*firstgettheSAPDOIi_oi_container_controlinterface

  CALLMETHOD

    c_oi_container_control_creator=>get_container_control

    IMPORTING

      control=cl_control

      error   =cl_error.

*checknoerrorsoccured

  CALLMETHODcl_error->raise_message

    EXPORTING

      type='E'.

*创建CONTIANER

  CREATEOBJECTcl_splitter

    EXPORTING

      parent  =cl_gui_container=>screen0

      rows    =1

      columns=1.

  CALLMETHODcl_splitter->set_border

    EXPORTING

      border=cl_gui_cfw=>false.

  cl_container  =cl_splitter->get_container(row=1column=1).

*initializetheSAPDOIContainer,tellittoruninthecontainer

*specifiedaboveandtellittorunExcelin-place

  CALLMETHODcl_control->init_control

    EXPORTING

      r3_application_name      ='RBasis'                   "#ECNOTEXT

      inplace_enabled          ='X'

      inplace_scroll_documents='X'

      parent                   =cl_container

      register_on_close_event  ='X'

      register_on_custom_event='X'

      no_flush                 ='X'

    IMPORTING

      error                    =cl_errors.

*saveerrorobjectincollection

  APPENDcl_errors.

  CALLMETHODcl_gui_cfw=>dispatch.

  wa_doc_signature-prop_name='DESCRIPTION'.

  g_app='excel'.                                       "

  IFg_app='excel'.

    g_docu_type=g_excel.

    wa_doc_signature-prop_value='PP_REPORT'.

  ELSE.

  ENDIF.

  APPENDwa_doc_signatureTOgt_doc_signature.

  CREATEOBJECTcl_bds_instance.

  CALLMETHODcl_bds_instance->get_info

    EXPORTING

      classname       =g_classname

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1