Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Abap 如何访问对象的公共类型_Abap - Fatal编程技术网

Abap 如何访问对象的公共类型

Abap 如何访问对象的公共类型,abap,Abap,我有一个名为ZCL_RM_SPREADSHEETML的类 它在“类型”选项卡中有一个名为TY_STYLE的类型,其可见性为“Public”,并使用直接类型条目定义 当我尝试在调用方代码中声明以下内容时: DATA : wa_blue_style TYPE zcl_rm_spreadsheetml-ty_style. 我得到以下信息: The type "ZCL_RM_SPREADSHEETML" has no structure and therefore no component calle

我有一个名为ZCL_RM_SPREADSHEETML的类

它在“类型”选项卡中有一个名为TY_STYLE的类型,其可见性为“Public”,并使用直接类型条目定义

当我尝试在调用方代码中声明以下内容时:

DATA : wa_blue_style TYPE zcl_rm_spreadsheetml-ty_style.
我得到以下信息:

The type "ZCL_RM_SPREADSHEETML" has no structure and therefore no
component called "TY_STYLE". .
Type "ZCL_RM_SPREADSHEETML~TY_STYLE" is unknown
我想这是有道理的,因为ZCL_RM_SPREADSHEETML是一个类,双击
TY_STYLE
也完全不起作用

然后我用tilda试了一下:

DATA : wa_blue_style TYPE zcl_rm_spreadsheetml~ty_style.
我得到以下信息:

The type "ZCL_RM_SPREADSHEETML" has no structure and therefore no
component called "TY_STYLE". .
Type "ZCL_RM_SPREADSHEETML~TY_STYLE" is unknown
双击TY_STYLE会让我了解TY_STYLE的定义,所以我必须接近它。上次我遇到类似的问题是因为我正在访问一个私有方法,但我清楚地将该类型标记为Public

你知道我做错了什么吗

编辑

我也试过了

DATA : wa_blue_style TYPE ref to zcl_rm_spreadsheetml->ty_style. "and
DATA : wa_blue_style TYPE zcl_rm_spreadsheetml->ty_style. 

Field "ZCL_RM_SPREADSHEETML" is unknown. It is neither in one of the
specified tables nor defined by a "DATA" statement.
这让我想到用“课堂”的方式来尝试

DATA : wa_blue_style TYPE zcl_rm_spreadsheetml=>ty_style.

这是有效的

您必须使用适当的:

定义的字符,可用于寻址上层单元的组件。有一个结构组件选择器(
-
)、一个类组件选择器(
=>
)、一个接口组件选择器(
~
)和一个对象组件选择器(
->

在本例中,您访问的是类的类型(组件),因此必须使用
=>

您的意思是这样的,对吗

report  zstructsob.

*&---------------------------------------------------------------------*
*&       Class MYCLASS
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
class myclass definition.
  public section.

    types: begin of mystruct, " ------------> The public type
      field1 type i,
      field2 type string,
    end of mystruct.

    methods print_data importing data type mystruct.

  private section.
    data mydata type mystruct.
endclass.               "MYCLASS

*&---------------------------------------------------------------------*
*&       Class (Implementation)  MYCLASS
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
class myclass implementation.
  method print_data.
    write:/ data-field1, data-field2.
  endmethod.

endclass.               "MYCLASS

start-of-selection.

data ztype type myclass=>mystruct. " ------------> The public type of the class
data zclass type ref to myclass.

create object zclass.

ztype-field1 = 1.
ztype-field2 = 'Field2'.

zclass->print_data( ztype ).

您是否尝试了
DATA:wa_blue\u样式类型zcl\u rm\u spreadsheetml->ty\u样式。
使用
->
而不是
-
。(这只是一个注释,因为我目前没有可用的SAP,所以我无法测试自己)我实际上指的是内置在SE80对象中的类型,而不是内嵌对象。但是是的,
=>
在这两种情况下都有效。