5

我有一个名为 ZCL_RM_SPREADSHEETML 的类。

它在 Types 选项卡中有一个名为 TY_STYLE 的类型,可见性为“Public”,并使用 Direct Type Entry 定义。

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

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". .

我猜这是有道理的,因为 ZCL_RM_SPREADSHEETML 是一个类,双击TY_STYLE也完全没有任何作用。

然后我用 tilda 尝试了以下操作:

DATA : wa_blue_style TYPE zcl_rm_spreadsheetml~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.

这有效

4

2 回答 2

7

您必须使用适当的组件选择器

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

在这种情况下,您正在访问一个类的类型(组件),因此您必须使用=>.

于 2013-03-09T09:04:49.943 回答
1

你的意思是这个,对吧?

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 ).
于 2013-03-11T16:34:14.033 回答