SAP中有很多地方用到了长文本,这些长文本保存在表STXL和STXH里面,STXH保存抬头长文本,STXL保存行项目文本。
我们查询STXL可以知道,长文本的信息不是存储在表里的某个字段,而是存储在文本表里面的多行数据,拼接在一块才是长文本信息.可以通过函数READ_TEXT去读取长文本。
常规长文本的位置:物料主数据、采购申请、采购订单、销售订单、工艺路线、BOM、生产订单等。
SAP自带标准长文本查询程序 RSTXTC3 ,使用SE38可以直接调用查询详细信息。
如何读取SAP中的长文本信息。
方法一 使用 FUNCTION‘READ_TEXT’ 读取长文本的详细信息
DATA : line LIKE TABLE OF tline WITH HEADER LINE . FIELD-SYMBOLS:<it_lines> LIKE LINE OF line. DATA ltext TYPE string. "read_text中文描述 CALL FUNCTION 'READ_TEXT' EXPORTING language = sy-langu "语言 id = 'GRUN' NAME = '000000008010485965' OBJECT = 'MATERIAL' TABLES lines = line EXCEPTIONS ID = 1 LANGUAGE = 2 NAME = 3 NOT_FOUND = 4 OBJECT = 5 REFERENCE_CHECK = 6 WRONG_ACCESS_TO_ARCHIVE = 7 OTHERS = 8. IF sy-subrc = 0 and line[] is not INITIAL. LOOP AT line ASSIGNING <it_lines>. CONCATENATE ltext <it_lines>-tdline INTO ltext. CONDENSE ltext NO-GAPS. ENDLOOP. ENDIF.
从上面的源代码我们用’read_text’函数来读取长文本比较麻烦,需要定义几个变量,使用函数之后还要自己进行字段拼接,使用起来比较麻烦。
其实系统有给我们提供类方法直接取出文本信息,不过它内核还是read_text,只是给你封装好了。
cl_eso_extraction_tools=>extract_long_text_by_id
cl_esh_if_data_provider_tools=>extract_long_text_by_id
cl_esh_ex_conv_sapscript_text=>extract_long_text_by_id
以上三个封装函数均可实现读取长文本,三个方法的属性均为共有和静态,可直接调用,传入的参数值也一样。
方法二使用已经封装好的静态method实现
data ltext2 TYPE string. "extract_long_text_by_id中文描述 CALL METHOD cl_eso_extraction_tools=>extract_long_text_by_id EXPORTING iv_langu = sy-langu "语言 iv_text_id = 'GRUN' " 文本标识 iv_name = '000000008010485965' "文本名 iv_object = 'MATERIAL' " 文本对象 IMPORTING ev_search_terms = ltext2.