首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SapScript或SmartForm中找到标准文本?

如何在SapScript或SmartForm中找到标准文本?
EN

Stack Overflow用户
提问于 2015-12-14 13:34:23
回答 2查看 9K关注 0票数 1

我需要跟踪大量自定义的边框脚本和smartforms中使用特定标准文本(SO10)的位置。

除了“检查每个打印脚本的代码”之外,我还没有找到一个可行的在线解决方案。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-14 13:50:42

在发帖后,我找到了一个部分解决方案。下面的代码将搜索皂苷脚本中的标准文本,而不是smartforms。

代码语言:javascript
运行
复制
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.

这是在这里找到的代码的(固定)版本:http://scn.sap.com/thread/179142

票数 1
EN

Stack Overflow用户

发布于 2017-06-03 19:57:21

与SmartForms有关的是,你不能。你不能随心所欲地找到它。

不幸的是,在SmartForms这样的̶g̶o̶o̶d̶̶o̶l̶‘̶遗留技术中,一切都是传统的方式,而标准文本只是硬编码的。是的,这看起来很尴尬,但它们确实是硬编码的,每次重新生成这些名称都会被写入SmartForm FM代码。

所以这里唯一的解决办法就是分析代码。

  1. 查找系统中现有智能窗体的所有FMs

有一个包含所有表单及其包含的D010INC表。这里的要点是,所有SmartForm FMs都以/1BCDWB/前缀开头。

主要逻辑在包含中,因此我们需要为目标表单查找对应的包含。

  1. 获取SF包括源代码

它可以通过几种方式完成:通过CL_RECA_RS_SERVICES类,通过表REPOSRC,但最简单的方法是ABAP语句READ REPORT

  1. 在源代码中搜索SO10文本元素名称
  2. 从命中列表中获取FMs的智能表单名称。这可以通过STXFADMI表完成,如下面的片段所示,但更正确的方法是SSF_FUNCTION_MODULE_NAME FM。
  3. 对啰! 示例解决方案可能如下所示: 资料: lt_source类型的字符串表,lt_smartforms类型的d010inc表,so_text类型的char50,fs_form类型的字符串,used_in类型的string表,len类型i.。*将SmartForm FMs的列表从d010inc AS d填充到表lt_smartforms中,其中主表为'/1BCDWB/%‘,包括LIKE '/1BCDWB/%’。so_text =‘85XX_脚注’。“<-我们的SO10文本元素名称循环在lt_smartforms赋值字段-符号()。*读取FM源代码读报告-包含到lt_source中。*检查源代码中是否存在SO11,发现so_text在表lt_source中第一次出现。如果subrc= 0。len = strlen( -include )- 7. *搜索与目标fm相关的SmartForm,从stxfadmi选择单个表单名到fs_form,其中fmnumb = -include+len(4)。如果subrc= 0。将fs_form附加到used_in。ENDIFENDIFENDLOOP

是的,它是垃圾,不优雅和尴尬,但谁说它应该是这样的?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34268377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档