ALV细节

更多:http://www.cnblogs.com/VerySky/articles/2192401.html

一、ALV简介

1、简介

2、ALV_GRID介绍

3、其它描述

二、开发ALV的基本流程

三、ALV相关开发细节

1、标准ALV与对象ALV的共同开发细节

2、标准ALV开发相关细节

3、对象ALV开发相关细节

四、注意事项

五、附属信息

1、ALV快捷工具栏功能说明(如下图)

2、类型SLIS_FIELDCAT_ALV常用参数说明

3、类型SLIS_T_SORTINFO_ALV常用参数说明

4、类型SLIS_LAYOUT_ALV常用数说明

5、类型SLIS_T_EVENT常用参数说明

6、结构LVC_S_FCAT参数说明(清单观察器控制的字段目录)

7、结构LVC_S_LAYO参数说明(ALV 控制: 布局结构)

8、打印的参数控制请参考结构 [LVC_S_PRNT]

9、排序的参数控制请参考结构[LVC_S_SORT]

11、'REUSE_ALV_GRID_DISPLAY'函数常用参数

12、'REUSE_ALV_LIST_DISPLAY'函数常用参数

13方法"set_table_for_first_display"的参数说明

14方法"REFRESH_TABLE_DISPLAY"的参数说明

六、ALV常见问题

七、示例程序

 

ALV的创建一般有两种方式: 1> 采用function module,    2> OOPS abap 

两种创建方式有对应的适用范围,也有一些交集。

一 .FM 

在使用FM来实现ALV时,对应于fullscreen alv,   Type-pool:   SLIS非常重要,它定义了FM中的许多参数类型. 
1 . ALV是种展现手段,那么它就会涉及到定义数据选择条件,数据获取,数据展现,事件处理等步骤. 
1> 在定义选择条件时,可以采用Selection screen来定义条件,可以定义一个值(PARAMETERS),也可以定义一个范围(SELECTION-OPTIONS),方便的很,如果程序中如果有动态条件的话,可以考虑采用RANGES来, 并且有个小技巧是采用 ( ) 来动态执行SQL.简单例子如下. 
    select * into itab 
                from sflight 
                where (wheretab) 
wheretab 是个行项类型是字符型的内表, 它的每一行就是一个选择条件字符串. 
对于这种动态语句尽量避免使用,因为它在运行时才能确定执行语句,并且可以避过编译时的语法检查.
注: SAP标准程序中可以看到这种用法,如FM:  SD_PARTNER_READ. 
       SELECT  * FROM  (object ) INTO  TABLE  l_vbpa WHERE  vbeln = f_vbeln. 它是将选取的数据表动态化了. 

2> 数据选取 
  这里一般对程序性能影响最大,关注点在于对数据库表的访问,内表的操作等方面. 

3> 数据展现 
  field catalog:它是一个内表,对应于每一列的显示选项的技术性信息或额外的信息,像hotspot的定义,这一列显示不显示等. 
  layout structure: layout for grid,可以定义一些GRID的配置,像求总选项, 

4> 事件处理 
  对于双击事件,hotspot的处理, TOP-OF-PAGE, END-OF-LIST等. 

2.相关的FM. 
REUSE_ALV_VARIANT_DEFAULT_GET 
REUSE_ALV_VARIANT_F4 
REUSE_ALV_VARIANT_EXISTENCE 
REUSE_ALV_EVENTS_GET:  包含事件名称与事件处理form名称的内表 
REUSE_ALV_COMMENTARY_WRITE 
REUSE_ALV_FIELDCATALOG_MERGE: 根据ABAP Dictionary中的Transparent table , Structure, View等生成一个field catalog 
REUSE_ALV_LIST_DISPLAY: 以list形式显示结果 
REUSE_ALV_GRID_DISPLAY: 以Grid形式显示结果 
REUSE_ALV_POPUP_TO_SELECT 

粗线标识的是最经常使用的. 
3. field catalog 
1>它是对输出表的字段的描述,定义了字段的输出属性. 
   比如: 
col_pos     字段在表中第几列, 
fieldname   输出的字段名,如果此字段是CURR(currency field) ,QUAN(Quantity field) 需要指定相应的CUKY, UNIT字段.设置,Cfieldname Ctabname 和Qfieldname    Qtabname 
no_out       隐藏此列,不输出,但注意用户可以change layout来显示出此列. 
hotspot       设置此列的所有cell为热点, 单击即可触发相应function. 
do_sum       此列求总 
no_zero      只输出有意义的值,空值不输出. 
edit_mask 对字段像WRITE般设置格式化. 
just            R L 调整对齐方式 

调整输出列抬头的文本:文本可以随着用户调整列的宽度而变化,其文本即是在对应data element中定义的,如果需要定制,则可以指定以下字段 
  seltext_l (long field label) 
  seltext_m (medium field label) 
  seltext_s (short field label) 
  reptext_ddic (header) Analogous to the Data element main header 
  Ddictxt (specify text): You can specify with values 'L', 'M', and 'S',直接指定文本显示长文本,中,短文本, 指定这个字段后则会固定下来,不会随着用户的宽度调整变化. 

2> 如何构建 
   A. 手工构建 
      创建SLIS_T_FIELD_ALV类型的内表,  行项类型为SLIS_FIELD_ALV 对每个字段的相应属性进行设置后,加入内表. 

B. 半自动 
       调用FM: REUSE_FIELD_CATALOG_MERGE ,传入DDIC中的transparent table, view ,structure的名称,输出field catalog内表. 
    CALL  FUNCTION  'REUSE_ALV_FIELDCATALOG_MERGE' 
    EXPORTING 
*     I_PROGRAM_NAME               = 
*     I_INTERNAL_TABNAME           = 
      i_structure_name             = c_alv_structure_name 
*     I_CLIENT_NEVER_DISPLAY       = 'X' 
*     I_INCLNAME                   = 
*     I_BYPASSING_BUFFER           = 
*     I_BUFFER_ACTIVE              = 
    CHANGING 
      ct_fieldcat                  = gt_fieldcat[] 
    EXCEPTIONS 
      inconsistent_interface       = 1 
      program_error                = 2 
      OTHERS                        = 3 

       如果要对抬头,hotspot等属性进行调整, 可以循环field catalog内表,修改其对应属性.如: 
        LOOP  AT  gt_fieldcat ASSIGNING  <l_fcat>. 
    
        CASE <l_fcat>-fieldname. 
          WHEN 'flname'. 
              "修改属性. 
              
        ENDCASE. 
         ENDLOOP. 

4. field layout 
  
  注意属性 GET_SELINFOS ,它对于REUSE_ALV_GRID_DISPLAY 的输入IS_SEL_HIDE有用,但在WAS 7.0中已不再支持. 

5. 事件 
   ALV触发的事件可用FM: REUSE_ALV_EVENTS_GET 来获得, 输出一个内表,类型是slis_t_event , 行项为slis_alv_event,包含两个字段,一个事件名,另一个是事件处理的FORM名. 
   CALL FUNCTION 'REUSE_ALV_EVENTS_GET' 
       EXPORTING 
           I_LIST_TYPE = 0 
       IMPORTING 
            ET_EVENTS   = I_EVENTS. 
   常用事件有: 
     列表抬头处理: Slis_ev_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'. 
     双击,单击    : Slis_ev_user_command TYPE slis_formname VALUE 'USER_COMMAND' 
      subtotal文本: Slis_ev_subtotal_text TYPE slis_formname VALUE   'SUBTOTAL_TEXT'. 
               参考 https://www.sdn.sap.com/irj/scn/wiki?path=/display/Snippets/Display%252bsubtotal%252btext%252bin%252bALV%252bgrid 
                   https://www.sdn.sap.com/irj/scn/thread?threadID=1033110&tstart=0 
                    注意: 如果必须修改subtotal对应的字段的field_catalog属性no_out为X才可以触发这个事件. 

6.开发时一般的需求: 
一般都会涉及到REUSE_ALV_GRID_DISPLAY 的输入属性 
1> ALV variant 保存 
    
    is_default 
    is_save   
    is_variant 

2> 小计, 排序 
    it_sort属性,可以定义按哪个字段排序并且可以指定按这个字段小计其它可以汇总的字段. 
    -          spos :  Sort sequence 
    -          fieldname :  Internal output table field name 
    -          tabname : Only relevant for hierarchical-sequential lists. Name of the internal output table. 
    -          up : 'X' = sort in ascending order 
    -          down : 'X' = sort in descending order 
    -          subtot : 'X' = subtotal at group value change 
    -          group : '* ' = new page at group value change ,'UL' = underline at group value change 
   
3> ALV 抬头 页脚 
   A. 可以采用TOP_OF_PAGE事件触发可以采用方式: 
        a. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  输出一个内表: slis_t_listheader 这种方法输出格式固定,不利于对齐 
         设置输入属性i_logo可输出图片. 

        b.  Grid方式:设置 , 布局容易控制一些. 
         DATA : lr_content TYPE  REF  TO  cl_salv_form_element. 

         DATA : lr_grid      TYPE  REF  TO  cl_salv_form_layout_grid,  " top grid definition 
                  lr_flow      TYPE  REF  TO  cl_salv_form_layout_flow,  " flow for top grid 
                  l_text(500 )  TYPE  c .                                         " showed in top of list 

      * create a grid 
      CREATE  OBJECT  lr_grid. 
      
      *创建一个单元格 
      lr_flow = lr_grid->create_flow( 
                row    = 1   "行 
                column = 1  ). "列 

      * write a blank column 
       WRITE  (20 ) '' .   "可直接输出 

      plr_flow = plr_grid->create_flow( 
       row    = 1 
       column = 2 ). 

    * create text in cell 
    lr_flow->create_text( text  = pl_text ). "定制cell里的文本 

       cl_salv_form_content=>set( lr_content ). 
      
   B. 设置I_CALLBACK_HTML_TOP_OF_PAGE 属性触发 
     FORM f_html_top_of_page USING pr_document TYPE REF TO cl_dd_document. 
       可以加入HTML文本,链接,图片 
                  CALL METHOD pr_document->add_text( text = 'Picture' ). 

           CALL METHOD pr_document->add_gap( width = 10 ). 

           CALL METHOD pr_document->add_picture( picture_id = 'ENJOYSAP_LOGO' ). 



  
4> 点击某列,转到另外一个tranaction中,需要设置列字段为hotspot,再在user_command中处理function code: "&IC1 " 
    it_events属性,传入一个slis_t_event类型的内表.设置相应处理form,如 handle_user_command. 
    FORM  handle_user_command USING  p_ucomm     LIKE  sy-ucomm 
                                 ps_selfield TYPE  slis_selfield. 
    
Reference: 
https://www.sdn.sap.com/irj/scn/wiki?path=/display/ABAP/ALV+TUTOTIAL+FOR+BEGINERS+WITH+EXAMPLES 
这篇文章对FM方式创建ALV讲得非常全面.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值