ABAP自定义F4并且标题也自定义

本文详细介绍了在 ABAP 中如何使用 F4 功能实现自定义标题栏的步骤,包括通过 T001L 表选择工厂数据,并自定义显示字段,如 WERKS、LGOBE 和 LGORT 的标题和偏移量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先上图

大概就是这个样子。。。。。em  em  em  em  em  emmmmm......

上代码走起~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*&---------------------------------------------------------------------*
*& REPORT  Z001_FQ_2                                                   *
*&                                                                     *
*&--------F4 自定义标题栏目  -------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  Z001_FQ_2                               .

TABLES: T001L.


PARAMETERS:S_WERKS  LIKE T001L-WERKS.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_WERKS.
  PERFORM F4_WERKS.

*&---------------------------------------------------------------------*
*& Form F4_WERKS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM F4_WERKS .

  TYPES: BEGIN OF TY_F4,
           WERKS TYPE T001L-WERKS,
           LGOBE TYPE T001L-LGOBE,
           LGORT TYPE T001L-LGORT,
         END OF TY_F4.

  DATA:LT_RETURN    TYPE HRRETURN_TAB,
       LS_RETURN    TYPE DDSHRETVAL,
       LS_FIELD_TAB TYPE DFIES,
       LT_FIELD_TAB LIKE TABLE OF  LS_FIELD_TAB.

  DATA: LT_WERKS TYPE STANDARD TABLE OF TY_F4.

  SELECT WERKS LGOBE LGORT
    FROM T001L
    INTO TABLE LT_WERKS.
  IF SY-SUBRC <> 0.
    RETURN.
  ENDIF.

  CLEAR: LS_FIELD_TAB.
  PERFORM GET_FIELDINFO
          USING 'T001L' 'WERKS'
          CHANGING LS_FIELD_TAB.

  LS_FIELD_TAB-POSITION = 1.
  LS_FIELD_TAB-OFFSET = 0.
  LS_FIELD_TAB-REPTEXT   =
  LS_FIELD_TAB-SCRTEXT_S =
  LS_FIELD_TAB-SCRTEXT_M =
  LS_FIELD_TAB-SCRTEXT_L = '字段1'.
  APPEND LS_FIELD_TAB TO LT_FIELD_TAB.

  CLEAR: LS_FIELD_TAB.
  PERFORM GET_FIELDINFO
          USING 'T001L' 'LGOBE'
          CHANGING LS_FIELD_TAB.

  LS_FIELD_TAB-POSITION = 2.
  LS_FIELD_TAB-OFFSET = 4.    "与前面字段的 INTLEN 长度一样累计  0+4
  LS_FIELD_TAB-REPTEXT   =
  LS_FIELD_TAB-SCRTEXT_S =
  LS_FIELD_TAB-SCRTEXT_M =
  LS_FIELD_TAB-SCRTEXT_L = '字段2'.
  APPEND LS_FIELD_TAB TO LT_FIELD_TAB.

  CLEAR: LS_FIELD_TAB.
  PERFORM GET_FIELDINFO
          USING 'T001L' 'LGORT'
          CHANGING LS_FIELD_TAB.

  LS_FIELD_TAB-POSITION = 3.
  LS_FIELD_TAB-OFFSET 20.    "与前面字段的 INTLEN 长度一样累计 0+4+16
  LS_FIELD_TAB-REPTEXT   =
  LS_FIELD_TAB-SCRTEXT_S =
  LS_FIELD_TAB-SCRTEXT_M =
  LS_FIELD_TAB-SCRTEXT_L = '字段3'.
  APPEND LS_FIELD_TAB TO LT_FIELD_TAB.

  SORT LT_WERKS.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'WERKS'
      DYNPPROG        = SY-REPID
      DYNPNR          = SY-DYNNR
      VALUE_ORG       = 'S'
      DYNPROFIELD      = 'WERKS'
*     CALLBACK_PROGRAM = SY-REPID
*     CALLBACK_FORM   = ''
    TABLES
      VALUE_TAB       = LT_WERKS[]
      RETURN_TAB      = LT_RETURN
      FIELD_TAB       = LT_FIELD_TAB
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.
  IF SY-SUBRC <> 0.
    CLEAR:LT_RETURN.
  ENDIF.

ENDFORM.
*---------------------------------------------------------------------*
*       Form GET_FIELDINFO
*---------------------------------------------------------------------*
FORM GET_FIELDINFO USING U_TABNAME
                          U_FIELDNAME
                 CHANGING CS_FIELD_TAB.

  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      TABNAME        = U_TABNAME
      FIELDNAME      = U_FIELDNAME
      LFIELDNAME     = U_FIELDNAME
    IMPORTING
      DFIES_WA       = CS_FIELD_TAB
    EXCEPTIONS
      NOT_FOUND      = 1
      INTERNAL_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.

ENDFORM. " GET_FIELDINFO

 

重点!!!!! LS_FIELD_TAB-OFFSET 这个 字段后面的参数就是你前面字段长度累加!!!!!

比如第一个字段长度为 4 那么第二就写 4  比如第三个字段 为 10  那么第三个就写  14  。 这块如果实在不会算 你就取一个估计数值然后慢慢计算 看与实际数据差几个 就剪掉几位(或加上几位)。

### 调整ABAP中F4搜索帮助弹出窗口的宽度 在ABAP环境中,当涉及到调整F4搜索帮助弹出窗口的尺寸时,主要依赖于用于创建和管理这些界面组件的方法和技术。对于F4帮助窗口而言,并未直接提供属性来设定其具体大小;然而,在更广泛的上下文中,可以借鉴处理其他类型的弹出窗口的经验。 针对弹出对话框窗口中的SAP ABAP ALV列表展示情况,可以通过定义`CL_GUI_POPUP->CREATE`方法内的参数`WIDTH`和`HEIGHT`来自定义对话框的实际外观尺寸[^3]。虽然此做法适用于ALV报表类别的弹窗设计,但对于标准F4帮助窗口来说,则需采用不同策略。 为了间接影响F4帮助窗口的表现形式,开发人员通常会考虑如下几种方式: #### 使用自定义选择屏幕 如果希望对字段的选择为有更多控制权,可以选择构建自己的选择屏幕而非依赖默认F4辅助功能。这允许完全掌控所呈现给用户的交互界面样式及其布局特性。 #### 修改事务码配置 有时特定程序或对象下的F4帮助逻辑可能绑定到某个后台事务代码上执。在这种情况下,修改该关联事务内部的为可能会带来意想不到的效果,但这往往涉及较为复杂的定制工作,并且应当谨慎评估潜在风险。 #### 应用CSS样式(限Web Dynpro) 如果是基于Web的应用场景,比如使用Web Dynpro技术栈实现的功能模块,那么就可以利用外部样式表文件(CSS)去改变HTML页面元素的视觉效果,从而达到调整弹窗大小的目的。不过这种方法并不适用于传统的Dynpro应用程序。 尽管上述建议提供了若干思路,但在传统ABAP环境内并没有简单而直接的办法能够精确调节F4帮助窗口的具体宽高比例。大多数时候,这种级别的UI微调超出了经典ABAP编程模型的能力范围之外。 ```abap DATA: go_popup TYPE REF TO cl_gui_custom_container, gr_alv TYPE REF TO cl_salv_table. CALL METHOD cl_gui_popup=>create EXPORTING parent = cl_gui_container=>screen0 width = '500' height = '300' IMPORTING popup_handle = go_popup. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值