MD13计划订单屏幕附加字段

这篇博客详细介绍了在 SAP GUI 中进行字段增强的步骤,包括在 CL_CFD_SAP_GUI_CONTROLLER 类中添加字段 ZZ,并在 MD11, MD12, MD13 事务码下进行隐式增强。增强内容涉及字段属性设置、值的设定和搜索帮助功能。此外,还解决了数据丢失问题并进行了S4BUG的处理。

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

PLAF的加字段ZZ,CI_PLAFDB里

然后开始隐式增强

增强1加字段

CL_CFD_SAP_GUI_CONTROLLER=====CP 静态增强点/部分 \TY:CL_CFD_SAP_GUI_CONTROLLER\ME:SET_SUBSCREEN_ASSIGNMENT\SE:BEGIN\EI

METHOD set_subscreen_assignment.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Class CL_CFD_SAP_GUI_CONTROLLER, Method SET_SUBSCREEN_ASSIGNMENT, Start                                                                           A

*$*$-Start: (1)---------------------------------------------------------------------------------$*$*

ENHANCEMENT 1  ZEHM_PP028_001.    "active version

  DATA: ls_position type i.

  IF SY-TCODE = 'MD11' OR SY-TCODE = 'MD12' OR SY-TCODE = 'MD13'.

    IF MT_CONTEXT_FIELDS IS INITIAL.

*     订单类型

      SELECT SINGLE DDTEXT

        INTO @DATA(LV_LABEL)

        FROM DD04T

       WHERE ROLLNAME   = 'AUFART'

         AND DDLANGUAGE = @SY-LANGU

         AND AS4LOCAL   = 'A'.

      DATA(LS_FIELD_METADATA) = VALUE TY_GS_FIELD_METADATA(

        POSITION                    = 1

        FIELD_NAME                  = 'ZZDAUAT'

        FIELD_TYPE                  = 'ASC_TO_STD'

        REFERENCE_FIELD_NAME        = 'ZZDAUAT'

        PERSISTENCE_FIELD_NAME      = 'ZZDAUAT'

        LENGTH                      = 4

        DDIC_TYPE                   = 'CHAR'

        LABEL                       = LV_LABEL

        SCREEN_LENGTH               = 4

        DATA_ELEMENT_NAME           = 'AUFART'

        CODE_TEXT_TABLE_NAME        = ''

        VALUE_HELP_CODE_VIEW_NAME   = 'ATPC_CDS_PLAF'

        VALUE_HELP_DATA_ELEMENT     = 'AUFART'

        ).

      LS_FIELD_METADATA-ASSIGNED_SUBSCREEN_NUMBER = GET_SUBSCREEN( IV_FIELD_TYPE    = 'ASC_TO_STD'   "ASC_TO_STD

                                                                   IV_DDIC_TYPE     = 'CHAR'

                                                                   IV_SCREEN_LENGTH = 4 ).

      APPEND LS_FIELD_METADATA TO MT_CONTEXT_FIELDS.

      CLEAR: LS_FIELD_METADATA, LV_LABEL.

*     一模多出绑定关系号

      SELECT SINGLE DDTEXT

        INTO @LV_LABEL

        FROM DD04T

       WHERE ROLLNAME   = 'ZE_YMDC'

         AND DDLANGUAGE = @SY-LANGU

         AND AS4LOCAL   = 'A'.

      LS_FIELD_METADATA = VALUE TY_GS_FIELD_METADATA(

        POSITION                    = 2

        FIELD_NAME                  = 'YMDC'

        FIELD_TYPE                  = 'TEXT'

        REFERENCE_FIELD_NAME        = 'YMDC'

        PERSISTENCE_FIELD_NAME      = 'YMDC'

        DDIC_TYPE                   = 'CHAR'

        LABEL                       = LV_LABEL

        SCREEN_LENGTH               = 10

        DATA_ELEMENT_NAME           = 'ZE_YMDC'

        IS_READ_ONLY                = ABAP_TRUE ).

        LS_FIELD_METADATA-ASSIGNED_SUBSCREEN_NUMBER = GET_SUBSCREEN( IV_FIELD_TYPE    = 'TEXT'

                                                                     IV_DDIC_TYPE     = 'CHAR'

                                                                     IV_SCREEN_LENGTH = 10 ).

        APPEND LS_FIELD_METADATA TO MT_CONTEXT_FIELDS.

        CLEAR: LS_FIELD_METADATA, LV_LABEL.

*     一模多出当量

      SELECT SINGLE DDTEXT

        INTO @LV_LABEL

        FROM DD04T

       WHERE ROLLNAME   = 'ZE_IFFR'

         AND DDLANGUAGE = @SY-LANGU

         AND AS4LOCAL   = 'A'.

      LS_FIELD_METADATA = VALUE TY_GS_FIELD_METADATA(

        POSITION                    = 3

        FIELD_NAME                  = 'ZIFFR'

        FIELD_TYPE                  = 'TEXT'

        REFERENCE_FIELD_NAME        = 'ZIFFR'

        PERSISTENCE_FIELD_NAME      = 'ZIFFR'

        DDIC_TYPE                   = 'CHAR'

        LABEL                       = LV_LABEL

        SCREEN_LENGTH               = 0003

        DATA_ELEMENT_NAME           = 'ZE_IFFR'

        IS_READ_ONLY                = ABAP_TRUE ).

      LS_FIELD_METADATA-ASSIGNED_SUBSCREEN_NUMBER = GET_SUBSCREEN( IV_FIELD_TYPE    = 'TEXT'

                                                                   IV_DDIC_TYPE     = 'CHAR'

                                                                   IV_SCREEN_LENGTH = 3 ).

      APPEND LS_FIELD_METADATA TO MT_CONTEXT_FIELDS.

      CLEAR: LS_FIELD_METADATA, LV_LABEL.

    ENDIF.

*-------------------------------------------------------

*03.12.2020 10:49:05 chenyl for  lizeren

data ls_ASSOCIATION_KEY_FIELDS TYPE ty_gs_std_assoc_metadata.

ls_ASSOCIATION_KEY_FIELDS-field_name = 'ZZDAUAT'.

ls_ASSOCIATION_KEY_FIELDS-POSITION = '1'.

ls_ASSOCIATION_KEY_FIELDS-ddic_type = 'CHAR'.

ls_ASSOCIATION_KEY_FIELDS-data_element_name = 'AUFART'.

ls_ASSOCIATION_KEY_FIELDS-gui_search_help_name = '/CUM/CU_AUART'.

ls_ASSOCIATION_KEY_FIELDS-search_help_input_parameter = 'AUART'.

ls_ASSOCIATION_KEY_FIELDS-search_help_export_parameter = 'AUART'.

ls_ASSOCIATION_KEY_FIELDS-ASSIGNED_SUBSCREEN_NUMBER = GET_SUBSCREEN( IV_FIELD_TYPE    = 'ASC_TO_STD'   "ASC_TO_STD

                                                                   IV_DDIC_TYPE     = 'CHAR'

                                                                   IV_SCREEN_LENGTH = 4 ).

APPEND ls_ASSOCIATION_KEY_FIELDS TO MT_ASSOCIATION_KEY_FIELDS.

*-------------------------------------------------------

  ENDIF.

ENDENHANCEMENT.

增强2设置字段属性

在\TY:CL_CFD_SAP_GUI_CONTROLLER\IN:IF_CFD_SAP_GUI_CONTROLLER\ME:PBO_SUBSCREEN\SE:END\EI

ENHANCEMENT 1  ZEHM_PP028_002.    "active version

  READ TABLE MT_CONTEXT_FIELDS WITH TABLE KEY POSITION = MV_CURRENT_SUBSCREEN_POSITION REFERENCE INTO LR_CONTEXT_FIELD.

  IF LR_CONTEXT_FIELD IS BOUND.

    IF LR_CONTEXT_FIELD->FIELD_NAME = 'ZZDAUAT'.

      LOOP AT SCREEN INTO DATA(LS_SCREEN).

        IF LS_SCREEN-NAME CS GC_UI_NAME_POSTFIX-DESCRIPTION.

          LS_SCREEN-INVISIBLE = 1.

          LS_SCREEN-INPUT     = 0.

          MODIFY SCREEN FROM LS_SCREEN.

        ENDIF.

      ENDLOOP.

    ELSEIF LR_CONTEXT_FIELD->FIELD_NAME = 'YMDC' OR LR_CONTEXT_FIELD->FIELD_NAME = 'ZIFFR'.

      IF LR_CONTEXT_FIELD->IS_INVISIBLE EQ ABAP_FALSE.

        MODIFY_SUBSCREEN_FIELDS( IV_POSITION      = LR_CONTEXT_FIELD->POSITION

                                 IV_FIELD_TYPE    = LR_CONTEXT_FIELD->FIELD_TYPE

                                 IV_SCREEN_LENGTH = LR_CONTEXT_FIELD->SCREEN_LENGTH

                                 IV_IS_READ_ONLY  = LR_CONTEXT_FIELD->IS_READ_ONLY

                                 IV_IS_MANDATORY  = LR_CONTEXT_FIELD->IS_MANDATORY ).

        UPDATE_UI_VALUE( IV_POSITION   = LR_CONTEXT_FIELD->POSITION

                         IR_UI_VALUES  = IR_UI_VALUES ).

        LOOP AT SCREEN INTO LS_SCREEN.

          LS_SCREEN-INVISIBLE = 0.

          LS_SCREEN-INPUT     = 0.

          MODIFY SCREEN FROM LS_SCREEN.

        ENDLOOP.

      ENDIF.

    ENDIF.

  ENDIF.

ENDENHANCEMENT.

*$*$-End:   (1)---------------------------------------------------------------------------------$*$*

  ENDMETHOD.

增强3设置值

在\TY:CL_CFD_SAP_GUI_CONTROLLER\ME:SET_UI_VALUE_FIELD\SE:END\EI

ENHANCEMENT 1  ZEHM_PP028_003.    "active version

  DATA: LV_YMDC  TYPE ZSPP038-YMDC,

        LV_ZIFFR TYPE ZSPP038-ZIFFR,

        LS_ZTPP052 TYPE ZTPP052.

  READ TABLE MT_CONTEXT_FIELDS WITH TABLE KEY POSITION = MV_CURRENT_SUBSCREEN_POSITION REFERENCE INTO DATA(LR_CONTEXT_FIELD).

  IF LR_CONTEXT_FIELD IS BOUND.

    ASSIGN ('(SAPLM61O)PLAF-PLNUM') TO FIELD-SYMBOL(<LV_PLNUM>).

    IF <LV_PLNUM> IS ASSIGNED.

      call function 'ZPP_GET_YMDC_INFO'

        exporting

          iv_plnum         = <LV_PLNUM>

       IMPORTING

         ES_ZTPP052       = LS_ZTPP052.

    ENDIF.

    IF LR_CONTEXT_FIELD->FIELD_NAME = 'YMDC'.

      LV_YMDC =  LS_ZTPP052-ZYMDC.

      SET_UI_FIELD( IR_UI_VALUES       = IR_UI_VALUES

                    IV_COMPONENT       = IR_UI_FIELD_NAMES->VALUE_FIELD

                    IV_VALUE           = LV_YMDC

                    IV_IS_NUMERIC_TYPE = ABAP_TRUE ).

    ENDIF.

    IF LR_CONTEXT_FIELD->FIELD_NAME = 'ZIFFR'.

      LV_ZIFFR = LS_ZTPP052-AEQUI.

      SET_UI_FIELD( IR_UI_VALUES       = IR_UI_VALUES

                    IV_COMPONENT       = IR_UI_FIELD_NAMES->VALUE_FIELD

                    IV_VALUE           = LV_ZIFFR

                    IV_IS_NUMERIC_TYPE = ABAP_TRUE ).

    ENDIF.

  ENDIF.

ENDENHANCEMENT.

*$*$-End:   (1)---------------------------------------------------------------------------------$*$*

  ENDMETHOD.

增强4写搜索帮助

在\TY:CL_CFD_SAP_GUI_CONTROLLER\IN:IF_CFD_SAP_GUI_CONTROLLER\ME:POV_SUBSCREEN\SE:BEGIN\EI

METHOD if_cfd_sap_gui_controller~pov_subscreen.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Class CL_CFD_SAP_GUI_CONTROLLER, Interface IF_CFD_SAP_GUI_CONTROLLER, Method POV_SUBSCREEN, Start                                                 A

*$*$-Start: (1)---------------------------------------------------------------------------------$*$*

ENHANCEMENT 1  ZEHM_PP028_004.    "active version

  DATA lt_selection_values TYPE if_cfd_sap_gui_ddic_value_help=>ty_gts_return_value.

  DATA ls_selection_values TYPE LINE OF if_cfd_sap_gui_ddic_value_help=>ty_gts_return_value.

  DATA AUART_TMP TYPE T003O-AUART.

  IF ( SY-TCODE = 'MD11' OR SY-TCODE = 'MD12' OR SY-TCODE = 'MD13' ).

    READ TABLE MT_CONTEXT_FIELDS WITH TABLE KEY POSITION = GET_POSITION_FROM_SCREEN( ) REFERENCE INTO DATA(LR_CONTEXT_FIELDS).

    IF LR_CONTEXT_FIELDS IS BOUND.

      IF LR_CONTEXT_FIELDS->FIELD_NAME = 'ZZDAUAT'.

        ASSIGN ('(SAPLM61O)PLAF-PWWRK') TO FIELD-SYMBOL(<Lv_WERKS>).

        IF SY-SUBRC = 0.

          CALL FUNCTION 'CO_F4_AUART'

            EXPORTING

*                      AKTYP     = RC27S-AKTYP

*                      AUTYP_IMP = T490-AUTYP

              WERKS     = <Lv_WERKS>

            IMPORTING

              AUART_EXP = AUART_TMP.

          if AUART_TMP IS NOT INITIAL.

          if mt_value_help_executed IS INITIAL.

            APPEND 1 TO mt_value_help_executed.

          endif.

*            DATA(lt_key_component_contexts)  = get_key_component_contexts( lr_context_fields ).

*APPEND INITIAL LINE TO mt_association_key_fields ASSIGNING FIELD-SYMBOL(<fs_key_fields>).

*<fs_key_fields>-field_name = 'ZZDAUAT'.

*<fs_key_fields>-position = LR_CONTEXT_FIELDS->position.

*              ls_selection_values-parameter_name = 'ZZDAUAT'.

*              ls_selection_values-parameter_value = AUART_TMP.

*              APPEND ls_selection_values to lt_selection_values.

*

*              mo_subscreen_handler->write_value_to_subscreen(

*                iv_subscreen_position      = LR_CONTEXT_FIELDS->position

*                iv_subscreen_dynpro_number = LR_CONTEXT_FIELDS->assigned_subscreen_number

*                it_dynpro_values           = VALUE #(

*                  ( fieldname  = 'ASSOCIATION_FIELD_VALUE'

*                    fieldvalue = AUART_TMP

*                  )

*                 )

*                ).

*            MR_OLD_FIELD_VALUES = MR_FIELD_VALUES.

*            ASSIGN MR_FIELD_VALUES to FIELD-SYMBOL(<fs_FIELD_VALUES>).

*            if sy-subrc = 0.

*              ASSIGN COMPONENT 'ZZDAUAT' of STRUCTURE <fs_FIELD_VALUES> to FIELD-SYMBOL(<fs_ZZDAUAT>).

*              if sy-subrc = 0.

*                <fs_ZZDAUAT> = AUART_TMP.

*              endif.

*            endif.

            SET_UI_FIELD( IR_UI_VALUES       = IR_UI_VALUES

                          IV_COMPONENT       = gc_ui_fields-association-value

                          IV_VALUE           = AUART_TMP

                          IV_IS_NUMERIC_TYPE = ABAP_TRUE ).

*-------------------------------------------------------

*03.12.2020 13:18:48 chenyl for lizeren

data lv_ZZDAUAT TYPE AUFART.

lv_ZZDAUAT = AUART_TMP.

EXPORT lv_ZZDAUAT = lv_ZZDAUAT to MEMORY id 'ZEHM_PP028_006'.

*-------------------------------------------------------

*              set_key_components(

*                    it_key_component_contexts = lt_key_component_contexts

*                    it_selection_values       = lt_selection_values ).

            ENDIF.

           trigger_roundtrip( ).

        ENDIF.

        RETURN.

      ENDIF.

    ENDIF.

  ENDIF.

ENDENHANCEMENT.

增强5处理S4 BUG

在 CL_CFD_SAP_GUI_CONTROLLER  METHOD validate_code_value.开头

ENHANCEMENT 1  ZEHM_PP028_006.    "active version

IF sy-tcode = 'MD11' OR SY-TCODE = 'MD12' OR SY-TCODE = 'MD13'.

RETURN.

ENDIF.

ENDENHANCEMENT.

增强6写搜索帮助值

在 CL_CFD_SAP_GUI_CONTROLLER set_ui_field结束

ENHANCEMENT 2  ZEHM_PP028_006.    "active version

IF sy-tcode = 'MD11' OR SY-TCODE = 'MD12' OR SY-TCODE = 'MD13'.

ASSIGN COMPONENT 'ASSOCIATION_FIELD_LABEL' OF STRUCTURE  ir_ui_values->* TO FIELD-SYMBOL(<lv_ASSOCIATION_FIELD_LABEL>).

IF <lv_ASSOCIATION_FIELD_LABEL> IS ASSIGNED.

IF <lv_ASSOCIATION_FIELD_LABEL> = '订单类型'.

IF <lv_ui_value> IS ASSIGNED.

data lv_ZZDAUAT TYPE AUFART.

  import lv_ZZDAUAT = lv_ZZDAUAT FROM MEMORY id 'ZEHM_PP028_006'.

  IF lv_ZZDAUAT IS NOT INITIAL.

    ASSIGN COMPONENT 'ASSOCIATION_FIELD_VALUE' OF STRUCTURE  ir_ui_values->* TO FIELD-SYMBOL(<lv_ASSOCIATION_FIELD_VALUE>).

  <lv_ASSOCIATION_FIELD_VALUE> = lv_ZZDAUAT .

  ENDIF.

  endif.

ENDIF.

ENDIF.

ENDIF.

ENDENHANCEMENT.

注:回车之后数据丢失的问题

753版本会取plaf的include结构名

mv_persistence_include_name = PLAF_INCL_EEW_PS

756版本不取了

在子屏幕的PAI里会给自定义字段set value,如果include为空就跳过了所以写不进去

解决办法是在set_values方法里再做一个增强,增强里把mv_persistence_include_name的值“PLAF_INCL_EEW_PS”写进去

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值