ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:48.28KB ,
资源ID:5072046      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5072046.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ABAP中DOI的实现.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ABAP中DOI的实现.docx

1、ABAP中DOI的实现我们再做复杂报表或是特定格式的报表时,ALV往往不能满足我们的需求,这时我们可以用DIO来做,DIO的原理是我们首先上载一个EXCEL模板,然后根据我们的模板定义特定格式的内表,然后将内表中的数据填充至模板显示,DIO具有极大的灵活性,可以满足我们对任何复杂报表的需求。上载EXCEL模板的TCODE是OAOR.假如我们上载了如下格式的模板:然后代码如下:*&-*& Report Z_Rocky_TEST*&*&-*& Rocky Wang*& RockyTech (AT) *& RockT*&-*REPORT Z_ROCKY_TEST.TABLES: T001.TYPE-

2、POOLS: SLIS,VRM, SBDST, SOI.引入必要的类型组CONSTANTS DOCUMENT_NAME(30) VALUE TEMP.模板名字CONSTANTS INPLACE VALUE X.控制参数,在GUI中显示ExcelDATA: 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 TY

3、PE REF TO I_OI_SPREADSHEET,分隔符对象 ERROR TYPE REF TO I_OI_ERROR,错误信息 ERRORS TYPE REF TO I_OI_ERROR OCCURS 0 WITH HEADER LINE.错误信息* spreadsheet interface structures for Excel data inputDATA: RANGEITEM TYPE SOI_RANGE_ITEM.DATA: RANGES TYPE SOI_RANGE_LIST.DATA: EXCEL_INPUT TYPE SOI_GENERIC_TABLE.DATA: EX

4、CEL_INPUT_WA TYPE SOI_GENERIC_ITEM.DATA: INITIALIZED(1), RETCODE TYPE SOI_RET_STRING.DATA: ITEM_URL(256).存放模板的UrlDATA DOCUMENT_TYPE(80).文档类型DATA: EXCEL(80) VALUE Excel.Sheet.DATA: LINE_COUNT TYPE I, COLUMN_COUNT TYPE I.DATA: OK_CODE TYPE SY-UCOMM, SAVE_OK TYPE SY-UCOMM.CLASS C_OI_ERRORS DEFINITION L

5、OAD.DATA: BEGIN OF ITAB OCCURS 0.INCLUDE STRUCTURE T001.DATA: END OF ITAB.SELECT-OPTIONS BUKRS FOR T001-BUKRS.START-OF-SELECTION.PERFORM GETDATA.CALL SCREEN 100.*&-*& Form getdata*&-* text*-* - p1 text* CLOSE_DOCUMENT.关闭文档FREE DOCUMENT.ENDIF.IF NOT CONTROL IS INITIAL.CALL METHOD CONTROL-DESTROY_CONT

6、ROL.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 programset screen 1000.ENDCASE.ENDMODULE. USER_COMMAND_0100 INPUT

7、*&-*& 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.* 获取SAP DOI的控制器接口CALL METHOD C_OI_CONTAINER_CONTR

8、OL_CREATOR=GET_CONTAINER_CONTROLIMPORTINGCONTROL = CONTROL ERROR = ERROR.* check no errors occuredCALL METHOD ERROR-RAISE_MESSAGEEXPORTINGTYPE = E.实例化容器实例CREATE OBJECT CONTAINEREXPORTING CONTAINER_NAME = CONTAINER.DATA L_APP_NAME(200).IF P_APP_NAME IS INITIAL. L_APP_NAME = TEST.ELSE. L_APP_NAME = P_

9、APP_NAME.ENDIF.初始化控制器的接口CALL METHOD CONTROL-INIT_CONTROLEXPORTING R3_APPLICATION_NAME = L_APP_NAME INPLACE_ENABLED = INPLACE INPLACE_SCROLL_DOCUMENTS = X PARENT = CONTAINER REGISTER_ON_CLOSE_EVENT = X REGISTER_ON_CUSTOM_EVENT = X NO_FLUSH = XIMPORTING ERROR = ERRORS.* save error object in collection

10、APPEND ERRORS.CLEAR ITEM_URL.定义BDS实例变量,用于设置文档信息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.*以下三个值为Tcode:OAOR里

11、面新建模板文件的参数DATA: DOC_CLASSNAME TYPE SBDST_CLASSNAME VALUE HRFPM_EXCEL_STANDARD, DOC_CLASSTYPE TYPE SBDST_CLASSTYPE VALUE OT, DOC_OBJECT_KEY TYPE SBDST_OBJECT_KEY VALUE TEMP. WA_DOC_SIGNATURE-PROP_NAME = DESCRIPTION. DOCUMENT_TYPE = EXCEL. WA_DOC_SIGNATURE-PROP_VALUE = P_DOCNAME.赋给文档名字APPEND WA_DOC_SI

12、GNATURE TO DOC_SIGNATURE.DOC_SIGNATURE存储了文档信息CREATE OBJECT BDS_INSTANCE.CALL METHOD BDS_INSTANCE-GET_INFO获取文档信息EXPORTING CLASSNAME = DOC_CLASSNAME CLASSTYPE = DOC_CLASSTYPE OBJECT_KEY = DOC_OBJECT_KEYCHANGING COMPONENTS = DOC_COMPONENTS SIGNATURE = DOC_SIGNATURE.CALL METHOD BDS_INSTANCE-GET_WITH_URL

13、获取文档的url地址放到DOC_URIS中EXPORTING CLASSNAME = DOC_CLASSNAME CLASSTYPE = DOC_CLASSTYPE OBJECT_KEY = DOC_OBJECT_KEYCHANGING URIS = DOC_URIS SIGNATURE = DOC_SIGNATURE.FREE BDS_INSTANCE.释放该对象READ TABLE DOC_URIS INTO WA_DOC_URIS INDEX 1. ITEM_URL = WA_DOC_URIS-URI.获取对象的地址* 告诉SAP DOI容器开辟一个Excel策略CALL METHOD

14、CONTROL-GET_DOCUMENT_PROXYEXPORTING DOCUMENT_TYPE = Excel.Sheet NO_FLUSH = XIMPORTING DOCUMENT_PROXY = DOCUMENT ERROR = ERRORS.APPEND ERRORS.* 根据模板地址打开Excel文件CALL METHOD DOCUMENT-OPEN_DOCUMENTEXPORTING OPEN_INPLACE = INPLACE DOCUMENT_URL = ITEM_URL.DATA: HAS TYPE I.CALL METHOD DOCUMENT-HAS_SPREADSHE

15、ET_INTERFACEEXPORTING NO_FLUSH = IMPORTING IS_AVAILABLE = HAS ERROR = ERRORS.APPEND ERRORS.获取模板文档的表格分割器接口给SPREADSHEETCALL METHOD DOCUMENT-GET_SPREADSHEET_INTERFACEEXPORTING NO_FLUSH = IMPORTING SHEET_INTERFACE = SPREADSHEET ERROR = ERRORS.APPEND ERRORS.*激活第一个sheetCALL METHOD SPREADSHEET-SELECT_SHEET

16、EXPORTING NAME = 表整理* NO_FLUSH = IMPORTING ERROR = ERRORS.* RETCODE =.APPEND ERRORS. LOOP AT ERRORS. CALL METHOD ERRORS-RAISE_MESSAGE EXPORTING TYPE = E.ENDLOOP.FREE ERRORS. INITIALIZED = X.ENDFORM. CREATE_BASIC_OBJECTS*&-*& Form output_to_excel*&-* fill the EXCEL sheet*-*FORM OUTPUT_TO_EXCEL.DATA N

17、UM TYPE I VALUE 0.LOOP AT ITAB. NUM = SY-TABIX + 2.PERFORM FILL_CELL USING NUM 1 ITAB-BUKRS.行列值PERFORM FILL_CELL USING NUM 2 ITAB-SPRAS.PERFORM FILL_CELL USING NUM 3 ITAB-BUTXT.ENDLOOP.ENDFORM. output_to_excel*&-*& Form FILL_CELL*&-* text*-* -I text* -J text* -VAL text*-*FORM FILL_CELL USING I J VAL

18、.DATA: COLUMNS_NUMBER TYPE I, ROWS_NUMBER TYPE I. COLUMNS_NUMBER = 1. ROWS_NUMBER = 1.CALL METHOD SPREADSHEET-INSERT_RANGE_DIMEXPORTING NAME = cell NO_FLUSH = X TOP = ILEFT = JROWS = ROWS_NUMBER COLUMNS = COLUMNS_NUMBERIMPORTING ERROR = ERRORS.APPEND ERRORS.REFRESH: RANGES, EXCEL_INPUT. RANGEITEM-NA

19、ME = 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 dataCALL METHOD SPREADSHEET-SET_RANGES_DATAEXPORTINGRANGES = RANGES CONTENTS = EXCEL_INPUT NO_FLUSH = XIMPORTING ERROR = ERRORS.APPEND ERRORS.CALL METHOD SPREADSHEET-FIT_WIDESTEXPORTING NAME = SPACE NO_FLUSH = X.REFRESH: RANGES, EXCEL_INPUT.ENDFORM. fill_cellDOI必须放在自定义屏幕的一个Container中。最终的运行结果如图:

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

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