2013-03-08 2 views
4

У меня есть класс с именем 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 ничего не делает.

Затем я попытался следующие с тильдой:

DATA : wa_blue_style TYPE zcl_rm_spreadsheetml~ty_style. 

я получил следующее:

Type "ZCL_RM_SPREADSHEETML~TY_STYLE" is unknown 

Двойной щелчок TY_STYLE принесет мне хоть на определение TY_STYLE, поэтому я должен быть рядом , В прошлый раз у меня была аналогичная проблема, потому что я обращался к частному методу, но я четко обозначил тип как Public.

Любые идеи о том, что я делаю неправильно?

EDIT

Я также попытался на комментарий

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. 

Это работает

+1

Пробовали ли вы 'DATA: wa_blue_style TYPE zcl_rm_spreadsheetml-> ty_style.' Используйте' -> '' вместо этого -'. (Это только комментарий, потому что у меня нет SAP в данный момент, поэтому я не могу проверить себя) – knut

ответ

4

Вы должны использовать соответствующий component selector:

Определяется характер, который может быть использован для решения компонентов верхних блоков. Существует селектор компонентов структуры (-), селектор компонентов класса (=>), селектор компонент интерфейса (~) и селектор компонент объекта (->).

В этом случае вы получаете доступ к типу (компоненту) класса, поэтому вы должны использовать =>.

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). 
+0

Я действительно ссылался на тип, встроенный в объект SE80, а не на встроенный объект. Но да, '=>' работает в обоих случаях. – tomdemuyt