2016-07-17 7 views
0

Dies ist, wie meine zwei globale Klassen wie folgt aussehen:Zugang statische Methoden und Attribute der Freund Klasse in 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. 

Wie kann ich die get_connection Methode der ZCL_FLINFO implementieren, so dass es durch die interne Tabelle iterieren CONNECTION_LIST von zcl_singleton_class, um die Anzahl der Verbindungen für die gegebene Fluggesellschaft zu zählen und sie im Parameter zurückzugeben?

+0

Was haben Sie bisher versucht, welche Art von Problem haben Sie konfrontiert? Beachten Sie auch, dass es keine gute Idee ist, dass der Factory/Manager die tatsächlichen Daten enthält, anstatt sie in den verwalteten Instanzen zu kapseln. – vwegert

+0

Freundschaft Prinzip ist eher eine schlechte Idee. – Jagger

+0

Das habe ich ausprobiert: 'Methode GET_N_O_CONNECTIONS. DATA: CONNECTION_LIST TYPE TABELLE VON REF NACH ZCL_3609_SINGLETON. LOOP AT CONNECTION_LIST TRANSPORTIEREN KEINE FELDER, WO CARRID = IM_CARRID. RE_N_O_CONNECTIONS = RE_N_O_CONNECTIONS + 1. ENDLOOP. Endmethod.' und ich habe einen Fehler, der besagt, dass keine Komponente mit dem Namen CARRID existiert. – user2120167

Antwort

0

Ich habe herausgefunden, was in meinem Fall gut funktioniert. Wenn eine Klasse A (zcl_singleton_class) Freundschaft zu einer anderen Klasse B (ZCL_FLINFO) anbietet, kann B auf die privaten Komponenten von A zugreifen. Ich greife einfach auf die interne Tabelle (CONNECTION_LIST) zu, indem ich sie in meiner Schleife aufruft.

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. 
Verwandte Themen