昨天讲述了如何实现ALVGRID中的Dobule Click事件。今天主要讲述一下在ALVGRID中如何实现红绿灯效果。用红绿灯来显示数据在BI中比较常用,主要用来考核KPI指标等,与仪表盘等类似。这一功能能够让人一目了然的看到数据的情况,比如绩效考核达标是用绿灯,优异时用黄灯,未达标是用红灯。好了,言归正传,接下来讲述如何在ALVGTID中实现以红绿灯显示数据。
ALVGRID中实现红绿灯比较容易。在SAP中已经预先定义了一个LVC_CIFNM这样的data element,该element表示的涵义是"ALV control: Field name with simple row color coding".因此,实现原理为:首先定义一个类型为LVC_CIFNM的变量并赋值为'LIGHT';然后在显示ALVGRID的时候指定Layout的 excp_fname为前面定义的变量名称;再在包含需要显示的数据的内表前面加上一个类型为C,长度为1的字段(2表示绿灯,1表示红灯,3表示黄等),将该字段的值取值于需要用来用进行红绿灯显示的指标;最后将数据显示出来。大概代码如下:
一,定义一个类型为LVC_CIFNM的变量并赋值。
DATA: g_lights_name type lvc_cifnm value 'LIGHT'.
二,指定ALVGRID的LAYOUT属性
    DATA: 
gs_layout   type lvc_s_layo. 
           gs_layout-grid_title = 'Flight'(100).
       gs_layout-excp_fname = g_lights_name.
           gs_layout-sel_mode = 'A'. 
三,定义包含红绿灯显示列的内表,并获取数据。
     
DATA: BEGIN OF GT_OUTPUT OCCURS 0.
                INCLUDE STRUCTURE sflight.
     DATA: light type c.                 
"The column in order to show the light 
     DATA: end of GT_OUTPUT. 
             
****在我们这个例子中没有根据实际的业务来进行红绿灯显示,而只是简单的根据序号来判断
     FORM Get_DATA  TABLES   P_GT_OUTPUT STRUCTURE GT_OUTPUT.
                DATA i TYPE p.
                Select * from sflight INTO TABLE  gt_sflight UP TO 100 ROWS.
                LOOP at gt_sflight.
                    MOVE-CORRESPONDING gt_sflight to P_GT_OUTPUT.
                    i = SY-TABIX mod 3 .
                    if i = 0 .
                       P_GT_OUTPUT-light = '3'.
                    ELSEIF i = 1.
                       P_GT_OUTPUT-light ='2'.
                    ELSE.
                       P_GT_OUTPUT-light ='1'.
                    endif.
                    APPEND P_GT_OUTPUT.
                  ENDLOOP.
        ENDFORM.      
四,调用 SET_TABLE_FOR_FIRST_DISPLAY 方法显示数据。
     
CALL METHOD grid1->SET_TABLE_FOR_FIRST_DISPLAY       "Call the method to show data
                EXPORTING
                   I_STRUCTURE_NAME              = 'SFLIGHT'
                   IS_LAYOUT                     =  gs_layout
                CHANGING
                   IT_OUTTAB                     = GT_OUTPUT[].
OK,大功告成,F8运行,红绿灯已经显示在你的眼前了!你会发现,在每一行数据的第一列会有三个一排的灯,其中一个灯的颜色会显示,另外两个灯颜色是灰的。可能你会问,又没有办法能够只显示亮的灯而其他灰色的灯不显示呢?当然没问题。很简单,设置一下 layout的excp_led属性就可以了。例如 gs_layout-excp_led = 'X'. 或者 gs_layout-excp_led = ''. 只有哪个表示一盏灯哪个表示3盏灯,实验一下就可以了!
   关于红绿灯显示的问题就到这里了,明天或许会讲述一下如何在ALVGRID上的加上自定义按钮。
 
                     
                    
                 
                    
                 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号