程序调用目标包中所有对象的"使用位置"列表?

2020-08-13 23:13发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

正如标题所示,我正在尝试开发一个程序,该程序获取包名称作为输入,并对该包中的每个对象进行用处搜索。 之后,我希望它显示未在任何地方使用的对象。 这是我的方法:

不幸的是,这总是导致输出一个空表,我的逻辑不正确吗? 方法get_unused_objects。

数据:found_check rsfindlst的类型标准表,
           itab TYPE TABLE OF字符串。
     选择 *
      来自塔迪尔
      插入表@DATA(package_tab)
      在哪里devclass = @i_packagename。  "要从我需要的确切包装中获取物品

     在package_tab处分配ASSIGNING FIELD-SYMBOL()。  "将其转换为字符串,否则将不适用于FM"
       将 -obj_name附加到itab。
     结局。

     在package_tab处分配ASSIGNING FIELD-SYMBOL()。
       通话功能'RS_EU_CROSSREF'
         出口
           i_find_obj_cls ='CLAS'
           no_dialog ='X'
         桌子
           o_founds = found_check
           i_findstrings = Itab
         例外情况
           批次= 1
           batchjob_error = 2
           非法对象= 3
           not_executed = 4
           not_found = 5
           no_cross_for_this_object = 6
           object_not_exist = 7
           错误类型= 8
           其他= 9。
       案例sy-subrc。
         何时1。
           cl_demo_output => display('Some exception')。
         何时2。
           "另一个例外,依此类推。
       结束。
       如果found_check是INITIAL。  "如果FM找不到该对象的用途,
         追加到unused_objects_tab。  "将其添加到表格中,我稍后再返回
       其他。
         清除found_check。  "如果FM发现使用情况,请清除检查并继续。
         继续。
       万一。
     结局。
     r_objects_tab =未使用的_objects_tab。
   终结法。
 

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

正如标题所示,我正在尝试开发一个程序,该程序获取包名称作为输入,并对该包中的每个对象进行用处搜索。 之后,我希望它显示未在任何地方使用的对象。 这是我的方法:

不幸的是,这总是导致输出一个空表,我的逻辑不正确吗? 方法get_unused_objects。

数据:found_check rsfindlst的类型标准表,
           itab TYPE TABLE OF字符串。
     选择 *
      来自塔迪尔
      插入表@DATA(package_tab)
      在哪里devclass = @i_packagename。  "要从我需要的确切包装中获取物品

     在package_tab处分配ASSIGNING FIELD-SYMBOL()。  "将其转换为字符串,否则将不适用于FM"
       将 -obj_name附加到itab。
     结局。

     在package_tab处分配ASSIGNING FIELD-SYMBOL()。
       通话功能'RS_EU_CROSSREF'
         出口
           i_find_obj_cls ='CLAS'
           no_dialog ='X'
         桌子
           o_founds = found_check
           i_findstrings = Itab
         例外情况
           批次= 1
           batchjob_error = 2
           非法对象= 3
           not_executed = 4
           not_found = 5
           no_cross_for_this_object = 6
           object_not_exist = 7
           错误类型= 8
           其他= 9。
       案例sy-subrc。
         何时1。
           cl_demo_output => display('Some exception')。
         何时2。
           "另一个例外,依此类推。
       结束。
       如果found_check是INITIAL。  "如果FM找不到该对象的用途,
         追加到unused_objects_tab。  "将其添加到表格中,我稍后再返回
       其他。
         清除found_check。  "如果FM发现使用情况,请清除检查并继续。
         继续。
       万一。
     结局。
     r_objects_tab =未使用的_objects_tab。
   终结法。
   
付费偷看设置
发送
5条回答
歪着头看世界
1楼-- · 2020-08-14 00:04

您好 Radoslav Pavlov

首先,您需要对所有 找到的对象,对于找到的每个对象。

 LOOP AT package_tab ASSIGNING FIELD-SYMBOL()。  "将其转换为字符串,否则将不适用于FM"
       将 -obj_name附加到itab。
     结局。

     在package_tab处分配ASSIGNING FIELD-SYMBOL()。  " <-每个对象
       通话功能'RS_EU_CROSSREF'
         出口
           i_find_obj_cls ='CLAS'
           no_dialog ='X'
         桌子
           o_founds = found_check
           i_findstrings = itab" <-所有找到的对象 

第二,您只在寻找类。

 i_find_obj_cls ='CLAS'

从 该软件包,您应该阅读有关它们的更多信息(准确地说是它们的类型),然后在I_FIND_OBJ_CLS参数中使用此信息。例如:

  • ABAP OO类-CLAS
  • < li> ABAP程序-REPS
  • ABAP函数-FUNC

亲切的问候

Mateusz
粗暴的香蕉
2楼-- · 2020-08-13 23:53

嗨,Radoslav,

< 谢谢 您访问SAP社区以获得问题的答案。 我在这里 帮助您充分利用它。

首先,我建议您 熟悉 https://community.sap.com/resources/questions-and-answers (如果 您还没有这样做),因为 它提供了准备问题的技巧,这些问题会引起我们的回应 成员。

请 还请确保您使用的是所有适当的标签,以便正确的专家可以找到 你的问题。 总体而言,您提供的详细信息越多,可能性就越大 成员将能够为您提供帮助。 如果您愿意,可以修改您的 选择操作,然后选择修改(尽管有人回答了您的问题 问题,您将失去编辑问题的能力-但是,如果发生这种情况, 您可以在评论中留下更多详细信息。)

最后,如果您希望与 读者,请考虑在您的个人资料中添加图片。 这是你的做法 它: https://www.youtube.com/watch?v=F5JdUbyjfMA&list=PLpQebylHrdh5s3gwyDh6 >。 通过使用 的照片,鼓励读者做出回应。

最好,
Lena(SAP社区主持人)

Nir深蓝
3楼-- · 2020-08-14 00:05

您必须指出感兴趣的对象类型。这些类型在类型组SWBM(SE11)中定义。

 TYPES  tt_scope_object_cls euobj-id的类型表。

 数据(lt_scope_object_cls)=值tt_scope_object_cls(
     (swbm_c_type_prg_source)
     (swbm_c_type_cls_object_type)
     (swbm_c_type_cls_mtd_impl)。
 通话功能'RS_EU_CROSSREF'
     ...
     桌子
       ...
       i_scope_object_cls = lt_scope_object_cls
       ... 
哎,真难
4楼-- · 2020-08-13 23:50

我想您的问题是在 answer 之后提出的 Michael Piesche 在昨天的问题

独立观察员
5楼-- · 2020-08-14 00:01

1)RS_EU_CROSSREF

< p>在您的情况下,使用FM'RS_EU_CROSSREF'时,您至少必须传递对象的名称以及想要执行的操作的对象类型(对象类) 在哪里使用列表搜索(其他所有参数都是可选的)。 您不能一次同时搜索不同的对象类型。 在大多数情况下,它应为i_find_obj_cls = TADIR-OBJECT,而itab包含TADIR-OBJ_NAME的条目。

  • i_find_obj_cls = TADIR-OBJECT
  • itab包含TADIR- OBJ_NAME

2)关于基于对象类型的可用位置列表的限制

使用FM'RS_EU_CROSSREF'不适用于所有对象类型,例如 您将无法找到功能组FUGR,RFC Services SRFC等。 通常,它们必须在表EUOBJ中可用。

3)功能模块上的where-Used-List

在查找功能模块时,无法在TADIR中直接找到它们,但是 可以通过TADIR中的功能组FUGR找到它,并将其与TFDIR上的select结合使用,而功能组的TADIR-OBJ_NAME需要转换为TFDIR条目的程序名(PNAME),该名称应包括 实际名称(但在名称空间之后):

  • TADIR-OBJECT = FUGR
    TADIR-OBJ_NAME = ZMYFUGR
  • TFDIR-PNAME = SAPLZMYFUGR
    TFDIR-FUNCNAME = zmyfunctionnames
  • TADIR-OBJECT = FUGR
    TADIR-OBJ_NAME =/NAMESP/MYFUGR
  • TFDIR-PNAME =/NAMESP/SAPLMYFUGR
    TFDIR-FUNCNAME =/NAMESP/myfunctionnames

一周热门 更多>