### ABAP OOALV知识点详解 #### 一、ABAP OOALV简介 **ABAP OOALV**(Object-Oriented Application List Viewer)是一种基于SAP GUI的列表展示技术,它采用面向对象的方式实现数据的展示。OOALV相比传统的ALV(Application List Viewer)提供了更强大的功能和更灵活的定制选项,尤其是在处理复杂数据结构和用户交互方面表现突出。 #### 二、OOALV关键组件理解 1. **DATAGS_ALVTYPEREFTOCL_GUI_ALV_GRID**:此变量用于引用`CL_GUI_ALV_GRID`类的对象,它是OOALV的核心组件,负责管理ALV的所有行为。 2. **DATAGS_PARENTTYPEREFTOCL_GUI_CUSTOM_CONTAINER**:此变量用于引用`CL_GUI_CUSTOM_CONTAINER`类的对象,它是ALV的容器,负责容纳ALV并控制其外观和行为。 3. **DATAGT_FIELDCATTYPELVC_T_FCAT**:此变量类型定义了一个字段类别表,用于存储ALV列的信息,如字段名、标题等。 4. **DATAGS_FIELDCATTYPELVC_S_FCAT**:此变量类型定义了一个字段类别单个实例,用于存储单个ALV列的信息。 5. **DATAGS_LAYOUTTYPELVC_S_LAYO**:此变量类型定义了ALV的布局信息,如列宽、排序方式等。 6. **DATAGS_STABLETYPELVC_S_STBL**:此变量类型定义了ALV的数据刷新行为,包括何时以及如何刷新ALV。 #### 三、OOALV实例化过程 - **构造器**:实例化ALV时使用的构造器,通常是指`CL_GUI_ALV_GRID`的构造函数,用于创建ALV对象。 - **容器实例化**:首先实例化容器`CL_GUI_CUSTOM_CONTAINER`,用于容纳ALV组件。 - ```abap CREATE OBJECT gs_parent EXPORTING container_name = 'GC_CON'. ``` - **ALV实例化**:接着实例化`CL_GUI_ALV_GRID`对象,并将其植入到之前创建的容器中。 - ```abap CREATE OBJECT gs_alv EXPORTING i_parent = gs_parent. ``` #### 四、字段类别(FIELD CATALOG)定义 字段类别是ALV中用来定义列属性的重要概念,通过字段类别可以指定每列的标题、宽度、对齐方式等信息。 - 定义宏`%%ADD_FIELDCAT`来添加字段类别信息: - ```abap DEFINE %%ADD_FIELDCAT. CLEAR gs_fieldcat. gv_pos = gv_pos + 1. gs_fieldcat-col_pos = gv_pos. gs_fieldcat-fieldname = &1. gs_fieldcat-scrtext_m = &2. gs_fieldcat-outputlen = &3. CASE &2. WHEN 'WEIGHT'. gs_fieldcat-qfieldname = 'ZUNIT'. ENDCASE. APPEND gs_fieldcat TO gt_fieldcat. END-OF-DEFINITION. ``` - 在模块`BUILD_FIELDCAT`中使用该宏填充字段类别: - ```abap FORM BUILD_FIELDCAT. %%ADD_FIELDCAT: 'ZCODE' '学生编号' 10, 'ZNEME' '学生姓名' 20, 'SEX' '性别' 5, 'ZSCHOOL' '学校' 10, 'WEIGHT' '体重' 5, 'ZUNIT' '单位' 5. ENDFORM. ``` #### 五、ALV的输出与刷新 - **输出**:ALV的输出不同于传统ALV的调用方式,而是通过屏幕0100进行显示。首先需要创建一个编号为0100的屏幕,并在其中设置CustomerControl,名称为`GC_CON`。 - ```abap CALL SCREEN 0100. ``` - **刷新**:为了提高性能和响应速度,可以通过调用`REFRESH_TABLE_DISPLAY`方法来刷新ALV的内容,而不是每次都重新实例化ALV和容器。 - ```abap MODULE INIT_ALV_OUTPUT. IF gs_alv IS INITIAL. PERFORM CREATE_ALV. PERFORM BUILD_FIELDCAT. PERFORM BUILD_LAYOUT. PERFORM BUILD_ALV. ELSE. PERFORM REFRESH_ALV. ENDIF. ENDMODULE. FORM REFRESH_ALV. gs_stable-row = 'X'. gs_stable-col = 'X'. CALL METHOD gs_alv->REFRESH_TABLE_DISPLAY EXPORTING is_stable = gs_stable is_soft_refresh = 'X' "是否软刷新 EXCEPTIONS finished = 1 others = 2. IF sy-subrc <> 0. WRITE: / 'Error refreshing ALV'. ENDIF. ENDFORM. ``` #### 六、其他功能 - **按钮功能**:可以通过类似DIALOG编程的方式来为ALV添加按钮,并为其定义事件处理逻辑。 - **其他设置**:除了基本的显示和刷新操作外,还可以根据需求调整ALV的样式、排序方式等。 ABAP OOALV提供了强大且灵活的列表展示功能,通过上述步骤可以实现自定义的ALV设计与开发。对于初学者而言,熟练掌握这些基本操作将有助于更好地理解和应用这一技术。
剩余16页未读,继续阅读
- 粉丝: 0
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助