alv的用法很多,在report中绝大多数abaper选择使用call function的方法,设置layout 结构和填充fieldcat以及其他结构内表,将这些结构和内表传给该函数就可以实现ALV了,但是在dialog程序中call function的方法就行不通了。那要怎样在dialog屏幕上实现alv呢?

第一步:在屏幕上创建一个容器元素,名字:container;

第二步:在主程序里面定义一个容器对象和一个ALV控件对象,例如:

                DATA: CTN_001 TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

                             KJ_ALV TYPE REF TO CL_GUI_ALV_GRID

 

第三步:要想将主程序里内表的数据显示在屏幕上创建的容器中,需要:

               创建一个和屏幕中创建的容器同名容器对象:

                          CREATE OBJECT CTN_001                          

                            EXPORTING
                            container_name 'CONTAINER'.

              再创建一个指定容器对象的alv控件对象:

                            CREATE OBJECT KJ_ALV
                               EXPORTING
                                  i_parent CTN_001.

             最后调用alv控件对象的set_table_for_first_display 方法:

                             CALL METHOD kj_alv->set_table_for_first_display
                                  EXPORTING
                                    is_layout                     gs_layout
                                 CHANGING
                                    it_outtab                     gt_return[]
                                    it_fieldcatalog               gt_fieldcat[]
                                 EXCEPTIONS
                                    invalid_parameter_combination 1
                                     program_error                 2
                                     too_many_lines                3
                                    OTHERS                        4.

           至于那些传进去的参数这里就不废话了,只是这里的gs_layout 和gt_fieldcat的定义和call function的方式略不同

                           gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE,
                           gs_layout TYPE lvc_s_layo.

 

          第三步中,我们会把这些小步骤统一写到PBO下某个module里面,当然,在创建容器对象的时候会判断该容器对象是否已经存在,如果存在,意味着alv对象也已经存在了,alv不是初次现实,此时,为了刷新屏幕上alv,我们会调用alv控件对象的refresh_table_display方法:kj_alv->refresh_table_display

            

          

 

               

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐