Subscreen aktualisieren

Getting started ... Alles für einen gelungenen Start.
13 Beiträge • Seite 1 von 1
13 Beiträge Seite 1 von 1

Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Hallo,
ich stehe noch am Anfang der SAP_Programmierung.

Nun habe ich drei Radiobuttons angelegt und dazu drei Registerkarten.

Die erste Registerkarte ist immer sichtbar, die beiden anderen werden in Abhängigkeit vom gewählten Radiobutton ein- bzw. ausgeblendet.

Klappt soweit aber:

- wird die Registerkarte eingeblendet ist sie nicht aktiv (also SAP soll gleich den Inhalt anzeigen), sondern die Registerkarte, die immer vorhanden ist bleibt im Vordergrund
- klicke ich zurück auf den Radiobutton welcher die Registerkarte anzeigt, die immer vorhanden ist und habe ich zuvor in eine der anderen Registerkarten hinein geklickt, wird nach wie vor der Inhalt der angeklickten Registerkarte angezeigt (also Inhalt der Registerkarte, die immer vorhanden ist wird nicht aktualisiert)

Jemand einen Tipp für mich?

Code: Alles auswählen.

data: l_cbvalue(1) type c.



* Wert aus dem Radiobutton auslesen
  call method <pub__service>->api__get_value
    EXPORTING
      i_alias = 'ZKODIRADIO'
    IMPORTING
      e_value = l_cbvalue.

  CASE l_cbvalue.

    when 'Z'.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGT2'.
          SCREEN-INVISIBLE = 0.
          SCREEN-ACTIVE = 1.
          REG_ZKODIREGIS-activetab = 'PUS_ZKODIREGT2'.
          crd_ZKODIREGIS = '0004'.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.

      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGT1'.
          SCREEN-INVISIBLE = 1.
          SCREEN-ACTIVE = 0.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.


    when 'E'.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGT1'.
          SCREEN-INVISIBLE = 0.
          SCREEN-ACTIVE = 1.

          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.

      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGT2'.
          SCREEN-INVISIBLE = 1.
          SCREEN-ACTIVE = 0.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.

    when 'K'.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGB'.
          SCREEN-INVISIBLE = 0.
          SCREEN-ACTIVE = 1.
          REG_ZKODIREGIS-activetab = 'PUS_ZKODIREGB'.
          crd_ZKODIREGIS = '0002'.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGT1'.
          SCREEN-INVISIBLE = 1.
          SCREEN-ACTIVE = 0.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'PUS_ZKODIREGT2'.
          SCREEN-INVISIBLE = 1.
          SCREEN-ACTIVE = 0.
          MODIFY SCREEN.
        ENDIF.
      ENDLOOP.

  endcase.
Gruß
Tatjana

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


Re: Subscreen aktualisieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hi!

Das ein-/ausblenden hast du so wie es ausschaut richtig gemacht. Du musst nur noch den aktiven Tab verändern.
http://help.sap.com/saphelp_46c/helpdat ... ontent.htm
Da ist etwas weiter unten das programmgesteuerte Blättern erklärt.
(Stichwort ACTIVETAB)

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Subscreen aktualisieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
mom...
<pub__service>->api__get_value ???
Sag bloß du arbeitest innerhalb eines PMDs (IS-H*MED)

Da wird das ein-/ausblenden der Karteireiter über das Field-Modify UserExit und dem zum Tabreiter gehörigen Alias gesteuert.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Hallo,
ja ich arbeite innerhalb eines PMD.

Erste Variante war

Code: Alles auswählen.

 data: l_cbvalue(1) type c.

* Wert aus dem Radiobutton auslesen
 call method <pub__service>->api__get_value
    EXPORTING
      i_alias = 'ZKODIRADIO'
   IMPORTING
     e_value = l_cbvalue.

CASE l_cbvalue.

when 'Z'.
if   <pub__this_alias> =  'ZKODIREGT2'.
   <pub__field_visible> = true.
else.
  <pub__field_visible> = false.
endif.

if   <pub__this_alias> =  'ZKODIREGT1'.
   <pub__field_visible> = true.
else.
  <pub__field_visible> = false.
endif.

endcase.
Brachte gleiches Ergebnis und dieselben Probleme mit dem Subscreen.

Gruß
Tatjana

Re: Subscreen aktualisieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
hi!

Leider bietet das PMD Framework hier keine "direkte" Lösung, da das Setzen des Focus über die internen Funktionen durchgeführt wird, aber die Service-Klasse dies für Karteireiter untersagt. Und da der Fokuswechsel immer erfolgt, werden auch händische Versuche mittels SET CURSOR oder Änderung am TABSTRIP-Control immer überschrieben.

Code: Alles auswählen.

CALL METHOD o__pmd->('API__SET_FOCUS')
  EXPORTING
    p_alias = alias1.
Damit kann man den Focus eines bel. Elements verändern. Leider "umgeht" man hiermit das von der GSD vorgesehene Framework und es könnte unter Umständen sein, dass es bei einer späteren Änderung der internen Klassen zu Fehlern führt. Auf alle Fälle würde ich noch ein TRY...CATCH drumherum empfehlen.

lg ADT

EDIT: Blödsinn... Sorry... Bei dir ging es ja darum den Karteireiter nach dem Ausblenden zu wechseln. Das Coding von mir ändert aber nur den Focus (um den Tabreiter zu wechseln) wenn man NICHT in der Funktionscode-Verarbeitung ist. Bei einem Radio-Button-Wechsel wird aber auch PAI durchlaufen, also sollte eine Änderung des Funktionscodes (API__SET_FUNCTION) auf den Funktionscode des übrigbleibenden Tabreiter auch funktionieren.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Hi,
Focus setzen funktioniert an der Stelle nicht.

Hab es auch schon wie folgt versucht:

Code: Alles auswählen.

call method <pub__service>->api__set_focus
exporting
      i_alias = '.....'.
Hier kam "Methode nciht erlaubt"

Gruß
Tatjana

Re: Subscreen aktualisieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Hi!

Nein, die Variable heißt o__pmd und ist ein Objekt einer lokalen Klassen in der generierten Funktionsgruppe.
Das heißt, der Aufruf der Methode API__GET_FOCUS ist nur innerhalb der Funktionsgruppe möglich. (z.B. direkt im Include für Subroutinen)
An allen anderen Stellen kann man nur mit einem untypisierten TYPE REF TO OBJECT auf die Objektinstanz zugreifen. Daher auch der dynamische Methodenaufruf mittels CALL FUNCTION ...->('API__SET_FOCUS')
Die PUB_SERVICE (CL_ISHMED_PMD_SERVICES) bietet diese Methode NICHT an. Es gibt nur eine die ähnlich heißt, aber nicht für Karteireiter funktioniert.

Hast du auch schon die Alternative via API__SET_FUNCTION ausprobiert?

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Ja habe ich, dann verschwanden alle Karteikarten nach dem Klicken auf den entsprechenden Radiobutton komplett....

Gruß
Tatjana

Re: Subscreen aktualisieren

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Und du hast es in dieser Form gemacht?

Variante OHNE o__pmd:
1) Im User-Exit "PAI"
Wenn der Funktionscode vom Radiobutton X ist, der den Karteireiter Y ausblendet und dieser ist gerade aktiv, dann API__SET_FUNCTION auf den Funktionscode von einem anderen Karteireiter (meist PUS_<aliasname>)
Wenn der auszublendende Karteireiter nicht aktiv ist, darf keine Änderung erfolgen.
2) Im User-Exit "Bild Modif" des Karteireiters Y
Wenn Radiobutton X nicht ausgewählt <pub__field_visible> = false.

Variante MIT o__pmd:
1) Im User-Exit "PBO"
Wenn der Funktionscode der PAI/PBO ausgelöst hat vom Radiobutton X ist und der zugehörige Karteireiter Y war bislang aktiv, dann o__pmd->('API__SET_FOCUS') auf einen anderen Karteireiter.
Wenn der auszublendende Karteireiter nicht aktiv ist darf keine Änderung erfolgen.

Den Zustand ob aktiv oder inaktiv würde ich mir noch in einer globalen Variable in <pub__my> ("Include für Daten" und "Eigene Daten zus. instanzieren") merken.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Hallo,
ich habe nun beide Varianten getestet, es ändert sich zwar der Focus aber der Subscreen wird nicht mit geändert. Also er hat zwar den richtigen activetab aber der Subscreen ist der falsche (der von der zuvor ausgewählten Karteikarte).

Das bleibt nach wie vor das Problem.

Gruß
Tatjana

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Jetzt haben wir es doch noch hin bekommen (zu zweit) mit API__SET_FUNCTION

Wir haben jetzt im PAI folgenden Code eingebaut

Code: Alles auswählen.

* Wert aus dem Radiobutton auslesen
  call method <pub__service>->api__get_value
    EXPORTING
      i_alias = 'ZKODIRADIO'
    IMPORTING
      e_value = l_cbvalue.

  CASE l_cbvalue.

    when 'Z'.
      CALL METHOD <pub__service>->API__SET_FUNCTION
    EXPORTING
      I_FUNCTION = 'PUS_ZKODIREGT2'.
*
    when 'E'.
      CALL METHOD <pub__service>->API__SET_FUNCTION
    EXPORTING
      I_FUNCTION = 'PUS_ZKODIREGT1'.

    when 'K'.
       CALL METHOD <pub__service>->API__SET_FUNCTION
    EXPORTING
      I_FUNCTION = 'PUS_ZKODIREGB'.

  endcase.

Vielen Dank für die Anregungen, sie waren sehr hilfreich.

Gruß
Tatjana

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Jetzt hab ich nur das Problem dass ich keine andere Registerkarte mehr auswählen kann sobald ich auf der Radiobuttons klicke. Jemand noch ne Idee?

Gruß
Tatjana

Re: Subscreen aktualisieren

Beitrag von Tgut (ForumUser / 75 / 3 / 0 ) »
Ich hab's noch hinbekommen :P

Code: Alles auswählen.

data: number(20) type c.

number = sy-ucomm.
if number = 'OK-Code'.

CASE ....
endcase.

endif.
Nochmal danke für die Anregungen.

Gruß
Tatjana

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1848
Views
Probleme Beim Subscreen im Subscreen
von dimes » 07.03.2007 14:50 • Verfasst in Dialogprogrammierung
0
Antw.
293
Views
Subscreen im Subscreen mit Tabstrip
von Maggonski » 03.02.2023 15:19 • Verfasst in Dialogprogrammierung
2
Antw.
2333
Views
ALV aktualisieren
von dawns » 22.11.2006 10:36 • Verfasst in ABAP Objects®
0
Antw.
1121
Views
Partner aktualisieren
von Thomas17 » 31.03.2015 10:44 • Verfasst in Sales and Distribution
1
Antw.
1893
Views
per Enter aktualisieren
von L0r3n2 » 13.03.2017 07:42 • Verfasst in ABAP® für Anfänger

Ü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

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141