多语言展示
当前在线:1169今日阅读:39今日分享:10

ABAP-Dynamic Document的应用

ALV报表输出的抬头部分是HTML格式的文档,看上去挺美观的。经研究发现,他其实是调用的所谓的Dynamic Document。这是SAP系统中定义的一个全局对象,有一个专门用来说明这个东西的帮助文档。其实我们不需要懂那么多,只要了解几个重点,再懂点HTML的语法,就可以做出相应的输出文档。以下是本人做的一个例程,实现了对应的Dynamic document的输出。*&---------------------------------------------------------------------**& Report ZTESTXUE601 测试程序:输出动态文档*&*&---------------------------------------------------------------------**& Created by Xavery Hsueh on 2014-02-26*&*&---------------------------------------------------------------------*REPORT ztestxue601 NO STANDARD PAGE HEADING.************************************************************************** 声明数据库表 Declaration of database **************************************************************************TABLES:t001,tstct. '************************************************************************** 定义结构类型 Define the structure's type **************************************************************************TYPES:BEGIN OF typ_result,tcode TYPE tcode, '事务代码sprsl TYPE spras, '语言代码ttext TYPE ttext_stct, '事务文本pgmna TYPE program_id, '程序名称dypno TYPE dynpronr, '屏幕号码menue TYPE sychar05, 'SYST的CHAR05数据元素cinfo TYPE syhex01, 'SYST 之HEX01 数据元素arbgb TYPE msgid, '消息识别END OF typ_result.************************************************************************** 定义变量与内表 Define the variants and Internal tables **************************************************************************DATA:gt_result TYPE TABLE OF typ_result WITH HEADER LINE.DATA: cl_container TYPE REF TO cl_gui_container,document TYPE REF TO cl_dd_document,doctable TYPE REF TO cl_dd_table_element,column1 TYPE REF TO cl_dd_area,column2 TYPE REF TO cl_dd_area,column3 TYPE REF TO cl_dd_area,column4 TYPE REF TO cl_dd_area,column5 TYPE REF TO cl_dd_area,column6 TYPE REF TO cl_dd_area,column7 TYPE REF TO cl_dd_area,column8 TYPE REF TO cl_dd_area,column9 TYPE REF TO cl_dd_area,columna TYPE REF TO cl_dd_area.DATA: g_position TYPE i,g_string TYPE string,g_width TYPE string.CONSTANTS:con_space TYPE char10 VALUE ' '. ' ' '. '全角空格***********************************************************************@** 宏定义***********************************************************************@DEFINE mcr_td.clear g_width.if &1 is initial.concatenate '' con_space '' into g_width.else.concatenate '' &1 '' into g_width.endif.concatenate g_string g_width into g_string.END-OF-DEFINITION.************************************************************************** 选择屏幕 Customize the selection-screen **************************************************************************SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLE text_001.PARAMETERS: p_sprsl TYPE tstct-sprsl DEFAULT sy-langu.SELECT-OPTIONS s_tcode FOR tstct-tcode.SELECTION-SCREEN END OF BLOCK xavery.************************************************************************** 执行程序事件 Executing the program's events **************************************************************************INITIALIZATION.PERFORM sub_init_cond.START-OF-SELECTION.PERFORM sub_query_tstc.END-OF-SELECTION.PERFORM sub_create_container.*&---------------------------------------------------------------------**& Form SUB_INIT_COND*&---------------------------------------------------------------------** 给选择屏幕加初始值*----------------------------------------------------------------------*FORM sub_init_cond .* 指定固定值text_001 = '查询条件'.* 给选择屏幕加初始值CLEAR s_tcode.s_tcode-sign = 'I'.s_tcode-option = 'CP'.s_tcode-low = 'Z*'.APPEND s_tcode.ENDFORM. ' SUB_INIT_COND*&---------------------------------------------------------------------**& Form SUB_QUERY_TSTC*&---------------------------------------------------------------------** 查询数据*----------------------------------------------------------------------*FORM sub_query_tstc .SELECT tstct~tcodetstct~sprsltstct~ttexttstc~pgmnatstc~dypnotstc~menuetstc~cinfotstc~arbgbFROM tstc INNER JOIN tstct ON tstc~tcode = tstct~tcodeINTO TABLE gt_resultWHERE tstc~tcode IN s_tcode ANDtstct~sprsl EQ p_sprsl.ENDFORM. ' SUB_QUERY_TSTC*&---------------------------------------------------------------------**& Form SUB_PRCOESS_DOCUMENT*&---------------------------------------------------------------------** 给输出的文档添加内容*----------------------------------------------------------------------*FORM sub_prcoess_document .CALL METHOD document->new_line.* CALL METHOD document->underline.PERFORM sub_process_html.SEARCH document->html_table FOR document->cursor.IF sy-subrc EQ 0.g_position = sy-tabix.CALL METHOD document->html_insertEXPORTINGcontents = g_stringCHANGINGposition = g_position.ENDIF.ENDFORM. ' SUB_PRCOESS_DOCUMENT*&---------------------------------------------------------------------**& Form SUB_CREATE_CONTAINER*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM sub_create_container .SKIP 1.CHECK cl_container IS INITIAL.cl_container = cl_gui_container=>screen0.CREATE OBJECT document.PERFORM sub_prcoess_document.* Merge and display documentCALL METHOD document->merge_document.CALL METHOD document->display_documentEXPORTING* reuse_control = cl_control* reuse_registration =container = 'CONTAINER'parent = cl_containerEXCEPTIONShtml_display_error = 1OTHERS = 2.ENDFORM. ' SUB_CREATE_CONTAINER*&---------------------------------------------------------------------**& Form SUB_PROCESS_HTML*&---------------------------------------------------------------------** 处理HTML文件*----------------------------------------------------------------------*FORM sub_process_html .DEFINE mcr_appending.concatenate g_string &1 into g_string.END-OF-DEFINITION.CLEAR g_string.mcr_appending:'
','','事务码与事务描述

'.mcr_appending:'','','','','','','','','',''.LOOP AT gt_result.mcr_appending: ''.mcr_td: gt_result-tcode,gt_result-sprsl,gt_result-ttext,gt_result-pgmna,gt_result-dypno,gt_result-menue,* '10' gt_result-cinfo,gt_result-arbgb.mcr_appending ''.ENDLOOP.mcr_appending:'
事务码语言代码事务码描述程序名称初始屏幕其它其它
'.* HTML文件结束*&---------------------------------------------------------------------*ENDFORM. ' SUB_PROCESS_HTML只要你懂足够多的HTML与CSS,你就能做出足够漂亮的页面!
推荐信息