【ABAP】创建采购订单(ME21N)增强-长文本校验

原本做了一个增强,就是保存的时候会检查长文本幅宽和卷长是否为空,如果不为空继续判断是否为纯数字,相当于必输项且是数字,但是客户在正常创建的时候就会提示需要填写幅宽和卷长,就算已经填写了,也会继续提示。

原本的逻辑是先根据文本抬头的信息先去STXH取对应语言代码,再用read_text函数读取长文本内容。正常写报表这样取没问题。

但是要想在创建采购订单的时候通过增强来获取长文本内容是行不通的,原因是数据到这步还没保存进数据库里,所以取STXH和函数read_text都不会成功。所以即使输入了还会导致报错。

解决方法

通过查看入参参考的类型(第一个)

是可以看到GET_TEXT有这样的获取文本字样的方法,然后用他

然后成功获取到长文本内容,接着做检查就行

*-->幅宽卷长检查

DATA:lo_handler      TYPE REF TO cl_message_handler_mm.
DATAlt_lines TYPE TABLE OF tline,
      l_tdname TYPE tdobname,
      lv_dummy TYPE LENGTH 128,
      lv_htype TYPE dd01v-datatype.
DATA BEGIN OF theader.
INCLUDE TYPE thead.
DATA END OF theader.
DATA:lt_items_po   TYPE purchase_order_items,
     ls_mepoitem   TYPE mepoitem,
     ls_mepoheader TYPE mepoheader,
     lv_name       TYPE thead-tdname.

lt_items_po im_header->get_items).
ls_mepoheader im_header->get_data).
LOOP AT lt_items_po INTO DATA(ls_items_po).
  ls_mepoitem ls_items_po-item->get_data).
  INCLUDE mm_messages_mac.
  DATA:ls_mmpur_texttypes TYPE mmpur_texttypes,
       lt_mmpur_texttypes TYPE TABLE OF mmpur_texttypes.

  ls_items_po-item->if_longtexts_mm~get_typesIMPORTING ex_texttypes lt_mmpur_texttypes ).
  LOOP AT lt_mmpur_texttypes INTO ls_mmpur_texttypes.
    ls_items_po-item->if_longtexts_mm~get_textEXPORTING im_tdid       ls_mmpur_texttypes-tdid
                                                                                                          im_texttype ls_mmpur_texttypes
                                                                                    IMPORTING ex_textlines           DATA(lt_textlines)
                                                                                                         ex_text_formatted DATA(lt_text_formatted).
    DATA(lv_tlineslineslt_textlines ).
    IF  lt_textlines IS NOT INITIAL.
      DATA(lv_textlines_flag'X'.
    ENDIF.
    CONCATENATE ls_mmpur_texttypes-tdid lv_textlines_flag INTO DATA(lv_flag).
    CASE lv_flag.
      WHEN 'F02'.
        mmpur_metafield mmmfd_cust_01.
        MESSAGE e000(zmm_commonWITH TEXT-003 INTO lv_dummy.
        mmpur_message_forced sy-msgty sy-msgid sy-msgno
                             sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      WHEN 'F02X'.
        IF lv_tlines 1.
          READ TABLE lt_textlines INTO DATA(ls_textlinesINDEX 1.
          IF sy-subrc 0.
            CLEAR:lv_htype.
            CALL FUNCTION 'NUMERIC_CHECK'
              EXPORTING
                string_in ls_textlines-tdline
              IMPORTING
                htype     lv_htype.
            IF lv_htype <> 'NUMC'.
              mmpur_metafield mmmfd_cust_01.
              MESSAGE e000(zmm_commonWITH TEXT-004  INTO lv_dummy.
              mmpur_message_forced sy-msgty sy-msgid sy-msgno
                                   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.
          ENDIF.
        ELSE.
          "预留
        ENDIF.
      WHEN 'F03'.
        mmpur_metafield mmmfd_cust_01.
        MESSAGE e000(zmm_commonWITH TEXT-005 INTO lv_dummy.
        mmpur_message_forced sy-msgty sy-msgid sy-msgno
                              sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      WHEN 'F03X'.
        IF lv_tlines 1.
          READ TABLE lt_textlines INTO ls_textlines INDEX 1.
          IF sy-subrc 0.
            CLEAR:lv_htype.
            CALL FUNCTION 'NUMERIC_CHECK'
              EXPORTING
                string_in ls_textlines-tdline
              IMPORTING
                htype     lv_htype.
            IF lv_htype <> 'NUMC'.
              mmpur_metafield mmmfd_cust_01.
              MESSAGE e000(zmm_commonWITH TEXT-006  INTO lv_dummy.
              mmpur_message_forced sy-msgty sy-msgid sy-msgno
                                   sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.
          ENDIF.
        ELSE.
          "预留
        ENDIF.
    ENDCASE.
    CLEAR:lv_textlines_flag,ls_textlines,lt_textlines,lv_tlines.
  ENDLOOP.
ENDLOOP.

给TA打赏
共{{data.count}}人
人已打赏
ABAPSAP

【ABAP】增强合集

2021-5-31 14:46:18

ABAPSAP

【ABAP】OA->SAP创建合同(ME31K)接口:BDC模式

2021-6-10 17:25:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索