如何访问公共类型的对象

时间:2013-03-08 21:25:02

标签: sap 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 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.

此作品

2 个答案:

答案 0 :(得分:7)

您必须使用相应的component selector

  

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

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

答案 1 :(得分: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 ).