Instanzreferenz kopieren bzw. clonen

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Instanzreferenz kopieren bzw. clonen

Beitrag von mazu (ForumUser / 60 / 1 / 0 ) »
Hallo,
aus best. Gründen muss ich in der PTMW in einem Checkbadi neue Datensätze erzeugen (die von der PTMW nicht gelesen werden, aber ich will Sie entsperren).
Ich habe als einzige Grundlage dazu einen abzugrenzenden Datensatz (Krankheit) des IT2001 zur Verfügung. Der Datensatz kommt als Exportparameter rein und referenziert auf IF_PT_TD_CONTROL. Heisst dann LIF_REC. Das ist alles drin.
Denn will ich kopieren/clonen, den in LIF_REC->DATA (bzw. LO_CTLOBJECT) befindlichen Teil des IT2001 mit Daten aus einer Tabelle LT_PA2001 überschreiben, und die neue Referenz (LO_CTLOBJECT) wieder als Exportparameter rausgeben. Funktioniert nur nicht richtig. Was mache ich falsch?

Code: Alles auswählen.

DATA: LIF_REC         TYPE REF TO IF_PT_TD_CONTROL,
         LO_CTLOBJECT TYPE REF TO IF_PT_TD_CONTROL,
         LIF_P2001       TYPE REF TO IF_PT_TD_IT2001,
         LIF_P2001_CLONE TYPE REF TO IF_PT_TD_IT2001,
         LIF_P2002       TYPE REF TO IF_PT_TD_IT2002,
         LS_PA2001       TYPE PA2001,
         LT_PA2001       TYPE TABLE OF PA2001,
         LS_TMP_P2001  TYPE P2001. "Ex DATA(LS_TMP_P2001) =

  LOOP AT I_TIME_DATA INTO LIF_REC.
        IF LIF_REC->DATA->CATEGORY = CL_PT_TMW_TDM_CONST=>CAT_INFTY.
          CASE LIF_REC->DATA->TYPE.
            WHEN '2001'.
           LIF_P2001 ?= LIF_REC->DATA.
* bei Krankheit/Unfall -> Sperrkennzeichen setzen oder löschen
              IF LIF_P2001->P2001-SUBTY = '0300'.

* beim Ändern des Krankheits/Unfallsatzes werden die gesperrten Sätze nicht mehr eingelesen; Satz clonen und an E_TIME_DATA anhängen??

* DB-Select für gesperrte Sätze
 SELECT * FROM PA2001 
INTO TABLE LT_PA2001 
WHERE PERNR EQ LIF_P2001->P2001-PERNR AND
                          BEGDA GT LIF_P2001->P2001-ENDDA AND
                         SPRPS EQ ABAP_TRUE.

LOOP AT LT_PA2001 INTO LS_PA2001.

                  LO_CTLOBJECT = LIF_REC.

                  CALL METHOD LO_CTLOBJECT->CLONE
                    EXPORTING
                      I_ORIGIN    = LIF_REC
*                     I_PRIVCONT  =
                    RECEIVING
                      R_CTLOBJECT = LO_CTLOBJECT.

* DATA-P2001 Einträge ändern
                  LIF_P2001_CLONE ?= LO_CTLOBJECT->DATA.
                  LS_TMP_P2001 = LIF_P2001_CLONE->P2001.
                  MOVE-CORRESPONDING LS_PA2001 TO LS_TMP_P2001.
                  LS_TMP_P2001-SPRPS = ABAP_FALSE.

                  LIF_P2001_CLONE->SET_DATA(
                    EXPORTING
                      I_P2001            = LS_TMP_P2001
                    EXCEPTIONS
                     READ_ONLY          = 1                " Das Objekt darf nicht geändert werden
                     INCONSISTENT_STATE = 2                " Das Datenobjekt ist in einem inkonsistenten Zustand
                     OTHERS             = 3
                  ).
                  IF SY-SUBRC <> 0.
*                   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                  ENDIF.

* Exporttabelle füllen
                  APPEND LO_CTLOBJECT TO E_TIME_DATA.
ENDLOOP.

ENDCASE.
ENDLOOP.

Grüsse

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Instanzreferenz kopieren bzw. clonen

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Deine Frage ist schwierig nachvollziehbar:
1. Die Variablenbezeichnungen sind sehr verwirrend.
2. Kannst du eine genaue Fehlerbeschreibung anhängen
3. Wirft die Methode IF_PT_TD_IT2001~SET_DATA eine Ausnahme, die danach einfach nicht behandelt wird?

Re: Instanzreferenz kopieren bzw. clonen

Beitrag von mazu (ForumUser / 60 / 1 / 0 ) »
Hallo nein es liefert nicht das gewünschte Resultat.
Vor allem kann ich die Felder von der Referenz LIF_P2001_CLONE->P2001 nicht umschreiben. Genau auf die (mindestens die) brauche ich Zugriff.
Ich bekomme da immer die Meldung:
Ein Schreibzugriff auf das READ-ONLY-Attribut "P2001" ist außerhalb der Klasse/des Interfaces nicht erlaubt.
Gruss

Re: Instanzreferenz kopieren bzw. clonen

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Das "P2001"-Attribut wird mit der SET_DATA Methode gesetzt. Dies wurde ja so richtig im Code implementiert. Hast du schon geprüft, ob die SET_DATA-Methode eine Ausnahme wirft?

Re: Instanzreferenz kopieren bzw. clonen

Beitrag von mazu (ForumUser / 60 / 1 / 0 ) »
Hallo nein SET_DATA wirft keine Ausnahme. Ich benutze es an einer anderen Stelle genau so und es funktioniert. Deswegen bin ich da ratlos.
Ich hab auch diverse Sachen ausprobiert.
Die CLONE und SET_DATA -Methode mit Referenz auf LIF_REC; mit Referenz auf LO_CTLOBJECT.
Resultat ist jedesmal dasselbe:
Die ursprüngliche Referenz LIF_REC (ist ein Datensatz Krankheit, der in der PTMW abgegrenzt wird) ->nach Speichern verschwindet der Satz komplett und ist nicht mehr da.
Die neue Referenz LO_CTLOBJECT wird als neuer Datensatz im It2001 angelegt. Obwohl schon einer vorhanden ist.
Alles sehr dubios....
Gruss


Gruss

Seite 1 von 1

Vergleichbare Themen

5
Antw.
4095
Views
Instanzen kopieren, ohne Referencen zu kopieren
von markudo » 25.04.2008 09:16 • Verfasst in ABAP Objects®
3
Antw.
2152
Views
Kopieren von ALV-Anzeigevarianten?
von TakerOne » 16.01.2006 13:34 • Verfasst in ABAP® Core
3
Antw.
3602
Views
Auftragsart kopieren
von SAPAlex » 23.04.2008 20:35 • Verfasst in Sales and Distribution
0
Antw.
2464
Views
Angebot kopieren ?
von ratsnus » 12.04.2012 15:24 • Verfasst in Sales and Distribution
5
Antw.
7597
Views
Programm kopieren
von pohlmann-schwarza » 11.09.2008 09:47 • Verfasst in ABAP Objects®

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1668
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8270