Abap 如何在SapScript或SmartForm中查找标准文本?
我需要跟踪在大量定制SAPScript和smartforms中使用特定标准文本(SO10)的位置Abap 如何在SapScript或SmartForm中查找标准文本?,abap,sapscript,sap-smart-forms,Abap,Sapscript,Sap Smart Forms,我需要跟踪在大量定制SAPScript和smartforms中使用特定标准文本(SO10)的位置 除了相当于“检查每个打印脚本的代码”之外,我还没有在网上找到一个可行的解决方案。有什么建议吗?发布后,我找到了部分解决方案。下面的代码将在sapscripts中搜索标准文本,但不会在smartforms中搜索 PARAMETERS: p_sttxt LIKE stxh-tdname. DATA: BEGIN OF t_stxh OCCURS 0, tdname LIKE stxh-
除了相当于“检查每个打印脚本的代码”之外,我还没有在网上找到一个可行的解决方案。有什么建议吗?发布后,我找到了部分解决方案。下面的代码将在sapscripts中搜索标准文本,但不会在smartforms中搜索
PARAMETERS: p_sttxt LIKE stxh-tdname.
DATA: BEGIN OF t_stxh OCCURS 0,
tdname LIKE stxh-tdname,
tdspras LIKE stxh-tdspras,
END OF t_stxh.
DATA t_lines LIKE tline OCCURS 0 WITH HEADER LINE.
SELECT tdname tdspras FROM stxh INTO TABLE t_stxh
WHERE tdobject = 'FORM'
AND tdid = 'TXT'
AND tdspras = 'E'.
LOOP AT t_stxh.
REFRESH t_lines.
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = 'TXT'
language = t_stxh-tdspras
name = t_stxh-tdname
object = 'FORM'
TABLES
lines = t_lines
EXCEPTIONS
id = 0
language = 0
name = 0
not_found = 0
object = 0
reference_check = 0
wrong_access_to_archive = 0
OTHERS = 0 .
SEARCH t_lines FOR p_sttxt.
IF sy-subrc EQ 0.
WRITE:/ t_stxh-tdname, t_stxh-tdspras.
ENDIF.
ENDLOOP.
这是此处代码的(固定)版本:与SmartForms有关的内容,您不能。你不能像你想要的那样找到它。
不幸的是,在像SmartForms这样的“g、o、o、d、o、l”遗留技术中,一切都是以遗留方式工作的,标准文本都是简单的硬编码。是的,这看起来很尴尬,但它们确实是硬编码的,每次重新生成时,这些名称都会写入SmartForm FM代码 所以这里唯一的解决方法就是分析代码
D010INC
表,包含所有表单及其包含项。这里的要点是,所有SmartForm FMs都以/1BCDWB/
前缀开头
主要逻辑在INCLUDE中,因此我们需要为目标表单找到相应的INCLUDE
CL\u RECA\u RS\u服务
类,通过tableREPOSRC
,但最简单的方式是ABAP语句读取报告
SO10
文本元素名称stxfami
表完成,如下面的代码片段所示,但更正确的方法是SSF\u函数\u模块\u名称
FMDATA: lt_source TYPE TABLE OF string,
lt_smartforms TYPE TABLE OF d010inc,
so_text TYPE char50,
fs_form TYPE string,
used_in TYPE TABLE OF string,
len TYPE i.
* populating the list of SmartForm FMs
SELECT * FROM d010inc AS d
INTO TABLE lt_smartforms
WHERE master LIKE '/1BCDWB/%'
AND include LIKE '/1BCDWB/%'.
so_text = '85XX_FOOTER'. " <- our SO10 text element name
LOOP AT lt_smartforms ASSIGNING FIELD-SYMBOL(<fs_fm_name>).
* reading FM source code
READ REPORT <fs_fm_name>-include INTO lt_source.
* checking if SO11 exists in source code
FIND FIRST OCCURRENCE OF so_text IN TABLE lt_source.
IF sy-subrc = 0.
len = strlen( <fs_fm_name>-include ) - 7.
* searching for SmartForm related to the target FM
SELECT SINGLE formname
FROM stxfadmi
INTO fs_form
WHERE fmnumb = <fs_fm_name>-include+len(4).
IF sy-subrc = 0.
APPEND fs_form TO used_in.
ENDIF.
ENDIF.
ENDLOOP.
DATA:lt\u字符串的源类型表,
d010inc的lt_smartforms类型表,
所以请输入char50,
fs_表单类型字符串,
在字符串的类型表中使用,
lenⅠ型。
*填充SmartForm FMs列表
从d010inc中选择*作为d
进入表格lt\u smartforms
其中master类似于“/1BCDWB/%”
并包括类似“/1BCDWB/%”的内容。
so_text='85XX_FOOTER'。"