ALV-Fieldcatlog参数总结

目录

前言

Fieldcatlog详解

REUSE_ALV_GRID_DISPLAY (兼容List ALV )

REUSE_ALV_GRID_DISPLAY_LVC(兼容OO ALV )

如何通过数据结构自动获取Fieldcatalog字段?

FM:REUSE_ALV_FIELDCATALOG_MERGE

LVC & OO: LVC_FIELDCATALOG_MERGE


前言

        在ABAP编程中,ALV是一种强大的工具,用于以表格形式呈现数据,并提供诸如排序、过滤、汇总等多种交互功能。Fieldcat(字段目录)是ALV编程的核心组成部分之一,它用于定义和控制ALV输出表格中每个字段和列的特定属性和行为。

     Fieldcatalog的主要作用如下:

  1. 定义字段属性:Fieldcatalog为每个要在ALV中显示的字段定义了属性,如字段名、字段标签、字段类型、字段长度等。这些属性决定了字段在ALV中的外观和行为。
  2. 排序和过滤:通过Fieldcatalog,可以定义哪些字段可以用于排序和过滤。用户可以根据这些字段对ALV中的数据进行排序,或者通过输入过滤条件来筛选数据。
  3. 输出设置:Fieldcatalog还可以用来定义数据的输出格式,比如是否要显示货币符号、小数位数、日期格式等。
  4. 其他特殊功能:除了基本的显示和排序功能外,Fieldcatalog还可以与ALV的其他功能结合使用,比如实现双击行事件、自定义按钮等。

        总的来说,Fieldcatalog在ABAP ALV中扮演着至关重要的角色,它决定了数据如何在ALV中呈现给用户,并提供了排序、过滤等交互功能。通过合理配置Fieldcatalog,可以大大提高ABAP应用程序的用户体验和数据展示效果。

Fieldcatlog详解

REUSE_ALV_GRID_DISPLAY (兼容List ALV )

        Fieldcat 的类型为 slis_fieldcat_alv字段属性如下:

REUSE_ALV_GRID_DISPLAY_LVC(兼容OO ALV )

        Fieldcat 的类型为 lvc_s_fcat字段属性如下:

备注:未进行描述的字段极少使用,暂时不清楚具体用法,如以上数据总结有描述不对的地方可提出后修正,希望对大家有所帮助。 

如何通过数据结构自动获取Fieldcatalog字段?

        根据程序中的数据内表结构,来自动生成FIELDCAT内表,根据内表结构所参照的词典类型来自动完成如表标题字段名的生成,后续可以再根据特殊情况再修改FIELDCAT内表,这样可以大大减少FIELDCAT内表的创建工作。

        注意:程序中用来输出的内表结构中的每个字段都要参考了数据字典中的Data element,否则无法获取字段的相关信息,此时在自动构建FIELDCAT后再手动对无参照字典类型的字段进行手工设置。

FMREUSE_ALV_FIELDCATALOG_MERGE

DATA: gs_fieldcat TYPE slis_fieldcat_alv,
      gt_fieldcat TYPE slis_t_fieldcat_alv.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    i_program_name         = sy-repid
*   i_internal_tabname     = ''
    i_structure_name       = 'SPFLI'
    i_inclname             = sy-repid
  CHANGING
    ct_fieldcat            = gt_fieldcat[]
  EXCEPTIONS
    inconsistent_interface = 1
    program_error          = 2
    OTHERS                 = 3.

IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

LVC & OOLVC_FIELDCATALOG_MERGE

DATA: gs_fieldcat TYPE lvc_s_fcat,
      gt_fieldcat TYPE lvc_t_fcat.

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  EXPORTING
*   I_BUFFER_ACTIVE        =
    i_structure_name       = 'SPFLI'
*   I_CLIENT_NEVER_DISPLAY = 'X'
*   I_BYPASSING_BUFFER     =
*   I_INTERNAL_TABNAME     =
  CHANGING
    ct_fieldcat            = gt_fieldcat[]
  EXCEPTIONS
    inconsistent_interface = 1
    program_error          = 2
    OTHERS                 = 3.

IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

gt_fieldcat 运行结果:

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
您可以通过以下步骤来实现ALV按钮的切换可编辑: 1. 创建一个自定义的按钮,例如“编辑”按钮。 2. 在按钮的处理程序中,使用函数MODULE ALV_EDIT_TOGGLE调用ALV编辑切换的功能。 3. 在ALV_DISPLAY事件中,将需要切换可编辑状态的列设置为可编辑或不可编辑。 以下是一个简单的示例代码: ``` REPORT ztest_alv. DATA: gt_data TYPE STANDARD TABLE OF spfli, gs_data LIKE LINE OF gt_data. * ALV显示事件处理程序 MODULE alv_display. DATA: gr_alv TYPE REF TO cl_gui_alv_grid. CREATE OBJECT gr_alv EXPORTING i_parent = cl_gui_container=>screen0. CALL METHOD gr_alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_entered. CALL METHOD gr_alv->set_table_for_first_display EXPORTING i_structure_name = 'SPFLI' CHANGING it_outtab = gt_data. PERFORM set_editable_columns. ENDMODULE. * 编辑按钮事件处理程序 MODULE edit_button. DATA: gr_alv TYPE REF TO cl_gui_alv_grid. CREATE OBJECT gr_alv EXPORTING i_parent = cl_gui_container=>screen0. CALL METHOD gr_alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_entered. IF sy-ucomm = 'EDIT'. CALL FUNCTION 'MODULE_ALV_EDIT_TOGGLE' EXPORTING i_grid = gr_alv. PERFORM set_editable_columns. ENDIF. ENDMODULE. * 设置可编辑列 FORM set_editable_columns. DATA: gt_fieldcat TYPE lvc_t_fcat. CALL METHOD gr_alv->get_frontend_fieldcatalog RECEIVING et_fieldcatalog = gt_fieldcat. LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fieldcat>). IF <fs_fieldcat>-fieldname = 'CARRID' OR <fs_fieldcat>-fieldname = 'CONNID'. <fs_fieldcat>-edit = 'X'. ELSE. <fs_fieldcat>-edit = ''. ENDIF. ENDLOOP. CALL METHOD gr_alv->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = gt_fieldcat. ENDFORM. ``` 在上面的代码中,我们创建了一个名为“编辑”的按钮,并在它的处理程序中调用了MODULE_ALV_EDIT_TOGGLE函数来切换ALV的可编辑状态。在ALV_DISPLAY事件中,我们调用了set_editable_columns子例程来设置需要切换可编辑状态的列。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_亮亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值