2016-07-17 4 views
0

Это как мои две глобальные классы выглядеть следующим образом:доступа статические методы и свойства класса друга в ABAP

CLASS zcl_singleton_class DEFINITION CREATE PRIVATE friends ZCL_FLINFO 
PUBLIC SECTION. 

CLASS-METHODS: 
CLASS_CONSTRUCTOR, 
get_instance 
    RETURNING VALUE(r_instance) TYPE REF TO zcl_singleton_class. 

PRIVATE SECTION. 
types: 
TY_CONNECTION_LIST TYPE STANDARD TABLE OF SPFLI WITH KEY carrid connid. 

class-data instance type ref to zcl_singleton_class . 
class-data CONNECTION_LIST type TY_CONNECTION_LIST . 
ENDCLASS. 

CLASS zcl_singleton_class IMPLEMENTATION. 

method CLASS_CONSTRUCTOR. 
instance = instance. 
SELECT * FROM SPFLI INTO TABLE CONNECTION_LIST. 
endmethod. 

METHOD get_instance. 
r_instance = instance. 
ENDMETHOD. 
ENDCLASS. 


CLASS ZCL_FLINFO DEFINITION. 

PUBLIC SECTION. 
CLASS-METHODS: 
CLASS_CONSTRUCTOR, 
get_connection 
    IMPORTING im_carrid type S_CARR_ID 
     RETURNING VALUE(re_connection) TYPE. 
ENDCLASS. 


CLASS ZCL_FLINFO IMPLEMENTATION. 

METHOD get_connection. 
LOOP at CONNECTION_LIST TRANSPORTING NO FIELDS WHERE carrid = im_carrid. 
    re_connection = re_connection + 1. 
ENDLOOP. 
ENDMETHOD. 
ENDCLASS. 

Как я могу реализовать get_connection метод ZCL_FLINFO так перебирать внутренней таблицы CONNECTION_LIST из zcl_singleton_class, чтобы подсчитать количество соединений для данной авиакомпании и вернуть их в параметр?

+0

Что вы пробовали до сих пор, с какими проблемами вы столкнулись? Также обратите внимание, что это плохая идея, чтобы фабрика/менеджер хранила фактические данные, а не инкапсулировала их в управляемых экземплярах. – vwegert

+0

Использование принципа дружбы - довольно плохая идея. – Jagger

+0

Это то, что я пробовал: 'метод GET_N_O_CONNECTIONS. DATA: CONNECTION_LIST TYPE TABLE OF REF TO ZCL_3609_SINGLETON. LOOP В CONNECTION_LIST ТРАНСПОРТИРОВКА НЕТ ПОЛЕЙ ГДЕ CARRID = IM_CARRID. RE_N_O_CONNECTIONS = RE_N_O_CONNECTIONS + 1. ENDLOOP. endmethod.' и у меня есть ошибка, указывающая, что никакой компонент не существует с именем CARRID. – user2120167

ответ

0

Я выяснил, что работа выполнена отлично в моем случае. Если класс A (zcl_singleton_class) предлагает дружбу другому классу B (ZCL_FLINFO), B может получить доступ к частным компонентам A. Поэтому я просто обращаюсь к внутренней таблице (CONNECTION_LIST), вызывая ее в моем цикле.

method GET_N_O_CONNECTIONS. 
LOOP AT zcl_singleton_class=>CONNECTION_LIST TRANSPORTING NO FIELDS WHERE CARRID = IM_CARRID. 
    RE_N_O_CONNECTIONS = RE_N_O_CONNECTIONS + 1. 
ENDLOOP. 
endmethod. 
Смежные вопросы