原本做了一个增强,就是保存的时候会检查长文本幅宽和卷长是否为空,如果不为空继续判断是否为纯数字,相当于必输项且是数字,但是客户在正常创建的时候就会提示需要填写幅宽和卷长,就算已经填写了,也会继续提示。
原本的逻辑是先根据文本抬头的信息先去STXH取对应语言代码,再用read_text函数读取长文本内容。正常写报表这样取没问题。
但是要想在创建采购订单的时候通过增强来获取长文本内容是行不通的,原因是数据到这步还没保存进数据库里,所以取STXH和函数read_text都不会成功。所以即使输入了还会导致报错。
解决方法
通过查看入参参考的类型(第一个)
是可以看到GET_TEXT有这样的获取文本字样的方法,然后用他
然后成功获取到长文本内容,接着做检查就行
*-->幅宽卷长检查 DATA:lo_handler TYPE REF TO cl_message_handler_mm. DATA: lt_lines TYPE TABLE OF tline, l_tdname TYPE tdobname, lv_dummy TYPE c 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_types( IMPORTING ex_texttypes = lt_mmpur_texttypes ). LOOP AT lt_mmpur_texttypes INTO ls_mmpur_texttypes. ls_items_po-item->if_longtexts_mm~get_text( EXPORTING 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_tlines) = lines( lt_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_common) WITH 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_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_common) WITH 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_common) WITH 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_common) WITH 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.