如何基于TYPE REF TO DATA参数声明完全类型的字段符号?

2020-08-14 07:07发布

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

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


亲爱的人们,这使我发疯,有人可以启发我。

我有此代码

定义

类方法:validate_data导入t_data类型对数据的引用。

实施

 METHOD验证。
   类型:type_ztabname ztabname的类型表。
   FIELD-SYMBOLS: TYPE type_ztabname。
   ASSIGN t_data-> *至。
 *然后它使用 -fieldname,因为字段符号已完全键入
 *验证
 ENDMETHOD。

这是一类具有很多方法的类(就像他们要验证的每个表一样)

与从Asbtract类继承后,我想对其进行更改并使其更好地为每个表创建子类,在Asbtract类中,我将表名传递给构造函数,并且在每种方法中,我都可以处理数据而不必再次重复表

问题在于,如果不在同一范围内定义类型,则无法找到在方法中具有完全类型的方法。 我知道表名(我将其传递给构造函数),我不想在每个方法中都用相同的表名来声明类型。 但是我也需要进行完全键入。 我无法更改所有-字段名。

 FIELD-SYMBOLS: TYPE(我-> table_type)。  " me-> table_type ='ZTABNAME'

有没有办法做到这一点?

谢谢

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

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


亲爱的人们,这使我发疯,有人可以启发我。

我有此代码

定义

类方法:validate_data导入t_data类型对数据的引用。

实施

 METHOD验证。
   类型:type_ztabname ztabname的类型表。
   FIELD-SYMBOLS: TYPE type_ztabname。
   ASSIGN t_data-> *至。
 *然后它使用 -fieldname,因为字段符号已完全键入
 *验证
 ENDMETHOD。

这是一类具有很多方法的类(就像他们要验证的每个表一样)

与从Asbtract类继承后,我想对其进行更改并使其更好地为每个表创建子类,在Asbtract类中,我将表名传递给构造函数,并且在每种方法中,我都可以处理数据而不必再次重复表

问题在于,如果不在同一范围内定义类型,则无法找到在方法中具有完全类型的方法。 我知道表名(我将其传递给构造函数),我不想在每个方法中都用相同的表名来声明类型。 但是我也需要进行完全键入。 我无法更改所有-字段名。

 FIELD-SYMBOLS: TYPE(我-> table_type)。  " me-> table_type ='ZTABNAME'

有没有办法做到这一点?

谢谢

付费偷看设置
发送
4条回答
Aaron 3364
1楼 · 2020-08-14 07:47.采纳回答

首先,对不起,但是您的没有完全输入!

完全输入的表类型(即非通用)必须具有表类别和键。 示例:

类型:type_ztabname带有空键的ztabname的标准表。

对于完全键入的类型,可以创建键入数据的引用:

 DATA  ref_table TYPE REF to type_ztabname。

使用起来更容易:

 METHOD验证。
   ref_table?= t_data。
   循环至ref_table-> *参考数据(ref_line)。
     DATA(fieldname)= ref_line-> fieldname。
   结局。
 终结法。
 
灬番茄
2楼-- · 2020-08-14 07:57

感谢您的反馈!

请使用COMMENT按钮发表评论,提问,添加详细信息,回复OP评论等,答案仅是提出解决方案 ,在答案区域的右侧删除SAP文本。

xfwsx85
3楼-- · 2020-08-14 08:13

您好, Sandra Rossi 。 是的,您是对的,没有完全输入

类型:type_ztabname带有空键的ztabname类型标准表。

我要问的是是否有一种方法可以替换 带有变量内容的粗体部分,但是现在我意识到这只是愚蠢的,因为即使有可能,编译器也要等到运行时才能知道结构,因此不可能使用 -fieldname或ref_line-> fieldname。

我只是精疲力尽,我很糟糕。 nvm

jovirus
4楼-- · 2020-08-14 07:51
这是我对您的设计难题的理解:
  • 您只有一个 validate 例程,可以动态处理不同类型的数据 。
  • 您想要将其更改为许多数据类型(类),每种数据类型都覆盖方法 validate ,即同一方法的许多实现。

我不同意此转换会使它变得更好。这取决于上下文。 实际上,第一个解决方案是规范的ABAP。

第二种解决方案在函数式语言(如javascript)中更容易,您可以将 first class function 传递给 validate 方法。 在ABAP OO中,我建议使用接口(策略模式)而不是建议的子类(模板模式)。 它将变得很冗长,因为您需要进行客观化(为 创建一个类)并至少使用工厂方法 注入对象)而不是使用动态数据引用。

我的2美分

JNN

一周热门 更多>