首页 > 代码库 > ABAP笔记
ABAP笔记
ABAP程序开发,经常会遇到报表开发需求。使用ABAP的Report类型程序开发报表十分便利,用很少的代码就可以快速开发出一个报表。这种报表需求,抛开各种细枝末节,都可以归结为“三步走”:1、选择屏幕;2、OPEN SQL;3、结果呈现。一般情况下,在编写报表之前,都是知道取数的表是哪个表的,但是,如果想要让用户输入取数的表,然后再从这个表里把所有数据都取出来,呈现在屏幕上,这样的需求,涉及到动态编程。因为报表运行前,并不知道会从哪个数据表里取数据,也就无法参照声明出用来存放数据的结构和内表,只有用户输入表名,点击报表运行以后,才会知道所需要的内表的结构信息,这些信息,需要动态的获取,并动态的声明出所需的内表,然后动态的取出数据存放在这个内表中,最后呈现在屏幕上。
1 REPORT zm_test01. 2 "选择屏幕提取一个用户输入的字符串 3 PARAMETERS p_name TYPE c LENGTH 20 DEFAULT ‘sflight‘. 4 "r_dataob是一个数据引用,data类型。 5 "<f_tb>为字段符号。可以指向任何内表。 6 DATA r_dataob TYPE REF TO data. 7 FIELD-SYMBOLS <f_tb> TYPE ANY TABLE. 8 "错误处理用来处理用户输入的字符串不是数据字典里的内表的情况 9 TRY . 10 "定义错误类型 11 DATA r_err TYPE REF TO cx_sy_create_data_error. 12 "这里是关键,指向名称为用户输入的p_name的内表指针 13 CREATE DATA r_dataob TYPE TABLE OF (p_name). 14 CATCH cx_sy_create_data_error INTO r_err. "捕捉定义的错误类型 15 DATA err_txt TYPE string. 16 err_txt = r_err->get_text( ). 17 WRITE: ‘不存在的表‘, err_txt. 18 "使用EXIT关键字结束程序,从而下面的代码就不会继续执行了, 19 "否则虽然捕捉到了错误,但是程序还会继续向下运行 20 EXIT. 21 ENDTRY. 22 "将指针解引用,解引用后为其指向的内表,然后将字段符号<f_tb>指向这个内表 23 "此时字段符号才会有值 24 "之后需要用这个内表,只需要使用字段符号即可 25 ASSIGN r_dataob->* TO <f_tb>. 26 "在这个select语句中,p_name为用户输入的取数据的表,而<f_tb>字段符号为根据用户输入的字符串动态生成的内表。 27 "注意在select语句中可以使用字段符号,但是不能直接把解引用放进来。也就是说,字段符号是很有必要的。 28 SELECT * FROM (p_name) INTO TABLE <f_tb>. 29 "使用savl快速构建报表简单呈现 30 DATA r_alv_tb TYPE REF TO cl_salv_table. 31 DATA r_alv_funclist TYPE REF TO cl_salv_functions_list. 32 TRY. 33 CALL METHOD cl_salv_table=>factory 34 IMPORTING 35 r_salv_table = r_alv_tb 36 CHANGING 37 t_table = <f_tb>. 38 CATCH cx_salv_msg . 39 ENDTRY. 40 r_alv_funclist = r_alv_tb->get_functions( ). 41 r_alv_funclist->set_all( ). 42 r_alv_tb->display( ).
ABAP笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。