Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-At-S

Benutzeroberflächen in SAP®-Systemen.
25 Beiträge • Seite 1 von 2 (current) Nächste
25 Beiträge Seite 1 von 2 (current) Nächste

Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-At-S

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Hallo,

ich befinde mich auf einem SAP-eigenen Dynpro (klinischer Auftrag, Stichwort CORDER), habe dort u. a. ein Drop-Down-Feld mit einem vorbelegten Wert 'E0009' stehen und möchte den Wert über Dropdown z. B. in 'E0003' ändern.
Die SAP war so frei, hier Badis anzubieten, die die Eingaben abfangen (N1_CORDER_CHECK). Ich habe eine Implementierung angelegt, bin nun aber auf der Suche nach einer Möglichkeit, Dynprofelder zur Laufzeit auszulesen, die noch nicht gespeichert wurden! Innerhalb der Badimethode kann ich natürlich nicht PAI zünden, um die Eingaben im Dynpro zu beauskunften, und auch die Badischnittstelle (Signatur) liefert keine Importparameter zum Feldinhalt. Gibt es eine Klassenmethode oder einen FuBa, der Feldinhalte aus dem Dynpro zur Laufzeit absaugen kann, also den Wert 'E0003'? Ich bilde mir ein, so etwas schon mal irgendwo gesehen zu haben, nur Google findet nix ...
Das Bild hilft vielleicht etwas weiter.

Bild

Vielen Dank für eure Hilfe!

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


Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von JHM (Top Expert / 1188 / 1 / 195 ) »
sapdepp hat geschrieben:Ich bilde mir ein, so etwas schon mal irgendwo gesehen zu haben, nur Google findet nix ...
FuBa: GET_DYNP_VALUE und andere können das.

Mehr dazu: http://www.tricktresor.de/blog/feldwert ... -auslesen/

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
sapdepp

Gruß Hendrik

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Hallo,

danke dir. Werde ich auch testen.

Ich habe noch was Passendes gefunden vorhin, was auch funktioniert.

FuBa: C14Z_DYNP_READ_FIELD.

VG
sapdepp

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Dein FuBa GET_DYNP_VALUE ist übersichtlicher.

Nun ergibt sich die Frage, wie ich Werte ins Dynpro zurückschreibe, und zwar in die Dropdown-Liste. Der FuBa SET_DYNP_VALUE ist geeignet dafür, aber mein vorgegebener Wert wird nicht ins (eingabebereite) Dropdown-Feld übertragen; der alte bleibt hartnäckig stehen. Muss ich solche Listboxen erst über den List-Index usw. ansprechen, um den Wert zu füllen?

VD!

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

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

DYNP_VALUES_UPDATE sollte das Problem lösen.
Kann aber sein, dass der KLAT (ishmed Klinischer Auftrag) das von sich aus überschreibt und deswegen das Update nicht zulässt.
Sprich du änderst zwar das Feld, dann kommt aber der KLAT und überschreibt es wieder mit seinen intern gespeicherten Informationen.

lg ADT

EDIT: Moment? Willst du die Werte die im Dropdown angezeigt werden ändern? Oder den aktuell ausgewählten Wert (am Dynpro)? Vorallem wie wird dein Coding aufgerufen? Von einem Control aus (Event-Handling) oder innerhalb von PAI/PBO (in einem Badi)?
Das Feld das du ändern möchtest ist nämlich der Status der KLAT-Position und der sollte sich auch über die Badis ändern lassen ohne jetzt das Dynpro zu verändern.
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: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Hallo, ADT,

FuBa DYNP_VALUES_UPDATE packt das nicht. Habe es probiert.

Es handelt sich um ein Badi, was im PAI des KLAT-Dynpros aufgerufen wird. Und zwar möchte ich erreichen, dass bei einem bestimmten sy-ucomm wie z. B. CHECK oder SAVE der Wert E0001 ins Dynprofeld geschrieben wird, wenn vorher dort E0009 drin stand. E0001 ist im Festwertvorrat der Dropdown-Liste enthalten, wie im Bild erkennbar. Ich möchte also nur den Dynpro-Feldwert ändern, nicht den Wertevorrat der Dropdown-Liste.

VG
sapdepp

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Zufällig arbeite ich mich auch grad in KLATs ein ;)
Daher kann ich dir schon mal sagen, dass der PAI/PBO daran schuld ist, dass im Dropdown der Wert vom KLAT-Framework überschrieben wird.
ABER
Der Status kann über CL_ISHMED_PREREG=>SET_STATUS geändert werden. Evtl. musst du die Instanz die du im Badi hast erst auf den richtigen Typ "casten" damit du die Methode zur Verfügung hast.

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: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Gut zu wissen. Noch einer, der sich mit KLATs beschäftigen muss/will. ;-) Hätte da noch viele andere Fragen.

Von Up- oder Down-Casting habe ich schon gehört, hatte bisher aber damit nichts am Hut, ich kenne Castings eigentlich nur von DSDS. ;-) Ich wüsste also nicht, welche Instanz ich wohin casten müsste. Kenne mich da nicht aus. In ABAP OO kann ich bestenfalls bei den Basics mitreden im Moment, aber Castings oder Polymorphie ... auweia. Deswegen ja auch "sapdepp".

Habe mal den Debugger angeschmissen bei Ereignisauslösung CHECK innerhalb des KLATs:

Bild

Sagt mir ehrlich gesagt nicht allzu viel.

LG
sapdepp

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Das Feld wo dieses Objekt drinnen steckt wird vermutlich nicht diesen Typ haben.
Deswegen musst du mit dem Casting Operator ?= dieses umwandeln:

Code: Alles auswählen.

data:
  lr_cordpos type ref to cl_ishmed_cordpos.
try.
lr_cordpos ?= ir_object.
catch cx_root.
endtry.
if lr_cordpos is bound.
*... Verarbeitung
endif.

Ab sofort, kannst du über lr_cordpos auf alle Funktionen der Auftragspostition zugreifen.
Das try...catch...endtry dient zur Fehlervermeidung ;)
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: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Hallo, ADT,

zur Laufzeit sind alle "Instanzen" bis auf CR_CORDER initial, um casten zu können. Der Einzige, der das vielleicht schafft, ist Dieter Bohlen.
Bild

Und wenn ich die nicht-initiale Instanz CR_CORDER nehme, will er nicht wegen Inkompatibilität.
Bild

Wie gesagt, bin in Sachen OO noch nicht ganz Freischwimmer. Sind mir zu viele ?=; ->; =>; ~; ->* usw. ;-)

LG
sapdepp

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Die CR_ORDER hat aber die Methode GET_CORDPOS oder so ähnlich. Die liefert wiederum alle zum Auftrag existierenden Positionen. Anhand deren CORDTSN (GET_CORDTYP oder so ähnlich) kannst du die Positionen dann identifizieren und bei der richtigen Instanz dann den Status verändern.
(Bin leider nicht in der Nähe von unserem System, dass ich nachschauen könnte)
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: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Hallo, ADT,

ich habe das jetzt mit deinem Gedankenanstoß irgendwie hinbekommen. ;-)

Code: Alles auswählen.

      
DATA: gr_cordpos  TYPE REF TO cl_ishmed_prereg,
          i_posnr type N1VKG-posnr,
          e_estat type tj30-estat.
...

CALL METHOD cr_corder->GET_CORDPOS_BY_POSNR
      EXPORTING
        I_POSNR         = i_posnr
*       IR_ENVIRONMENT  = gr_env
      IMPORTING
        ER_CORDPOS      = gr_cordpos
        E_RC            = e_rc
      CHANGING
        CR_ERRORHANDLER = cr_errorhandler.

    i_estat = 'E0001'.

    CALL METHOD gr_cordpos->SET_STATUS
      EXPORTING
        I_ESTAT         = i_estat
*       IR_ESTAT        =
      IMPORTING
        E_RC            = e_rc
      CHANGING
        CR_ERRORHANDLER = cr_errorhandler.

...
Bleibt nur noch die Frage offen, wieso die CORDERID so komisch aussieht und ich die richtige erst über Umwege aus der N1CORDER-Tabelle holen kann. Die komische sieht so aus: CL_ISH_CORDER-0004, die richtige, die ich mir mit SELECT aus der N1CORDER besorge, so: 53900DFF780A0CD0E1008000AC13E40B.

Code: Alles auswählen.

* Get the cordtitle.
  CALL METHOD cr_corder->get_data
    IMPORTING
      es_n1corder     = ls_n1corder
      e_rc            = e_rc
    CHANGING
      cr_errorhandler = cr_errorhandler.

  CHECK e_rc = 0.

* Warum sieht die CORDERID so komisch aus?
  CALL METHOD cr_corder->GET_CORDERID
    RECEIVING
      R_CORDERID = lv_CORDERID.

* korrekte CORDERID besorgen
  select SINGLE corderid
    from n1corder
    into lv_corderid
    where reftyp eq ls_n1corder-reftyp
    and   patnr  eq ls_n1corder-patnr
*    and   papid  eq ls_n1corder-papid
    and   etroe  eq ls_n1corder-etroe
    and   orddep eq ls_n1corder-orddep
    and   cordtitle eq ls_n1corder-cordtitle
*    and   prgnr  eq ls_n1corder-prgnr
.
Es dankt und grüßt
sapdepp

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Die "neuen" ishmed Objekte arbeiten mit sog. GUIDs. Das sind 32-stellige Zahlen/Zeichenkombination die garantiert eindeutig sind. Der Vorteil ist, dass keine Logik zur Nummernvergabe benötigt wird. Der Nachteil ist, dass man diese GUIDs nur sehr schwer lesen kann. Desshalb gibt es bei den KLATs auch die sog. Auftragsnummer die wieder wie gewohnt per Nummernkreis vergeben werden kann (aber nicht für die Funktionalität benötigt wird)
Die Positionsnummer in der CORDER ist die laufende Nummer der Position innerhalb des Auftrags. Also in deinem Fall die vierte Position. Ich würde dir aber empfehlen NICHT die Positionsnummer zu verwenden, da diese wie gesagt index-abhängig ist. Das heißt sobald jemand eine weitere Position hinzufügt, passt deine Logik nicht mehr.

Es gibt wie gesagt die Methode GET_T_CORDPOS oder so ähnlich. Das Ergebnis daraus ist eine Tabelle von Objekten die alle Positionen des KLATs repräsentieren. Diese kann man dann mit besagtem Casting-Operator in den gewünschten Objekttyp umwandeln kann. Von diesen Objekten kann man dann die CORDTSN (Der Text-Bezeichner der Position) ermitteln (GET_CORDTYP und GET_CORDTSN) und dann weiß man mit Sicherheit das es sich um den richtigen Eintrag handelt dessen Status man verändert.

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: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Wie verhält sich das Ganze eigentlich, wenn noch gar keine CORDERID vorhanden ist? Damit sind die Instanzen ja nicht gefüllt. Es ist häufig so, dass der KLAT erst angelegt werden muss, und zwar beim Speichern. Nur vorher ist halt zu prüfen, ob der richtige Status im Dynpro steht. Der muss dann ggf. im PBO, also noch vor dem Speichern ersetzt werden. Hier wäre CALL FUNCTION 'DYNP_VALUES_UPDATE' ideal, was aber leider nicht geht.

VG
sapdepp

Re: Inhalte von Dynprofeldern (Dropdown) ohne PAI oder LOOP-

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Die Prüfroutinen werden soweit ich weiß immer mit der aktuellen Instanz aufgerufen. Egal ob die schon gespeichert wurde oder nicht. Man sollte immer mit diesen Instanzen arbeiten. Von einer direkten Prüfung auf den Datenbestand in der DB rate ich generell ab.
btw. (fast)jedes Objekt im Umfeld des KLAT hat eine GET_DATA-Methode mit der du die Daten in derselben Struktur wie auf der DB abfragen kannst.

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

Vergleichbare Themen

1
Antw.
721
Views
2
Antw.
3205
Views
Vorzeichen in Dynprofeldern. (sign lost)
von asano » 09.06.2004 09:41 • Verfasst in Dialogprogrammierung
1
Antw.
1533
Views
SAP Inhalte ins web?
von Chrisu » 23.05.2005 11:55 • Verfasst in Web Application Server
5
Antw.
2980
Views
SAP Web Inhalte und Internet Explorer 7
von Kaiwalker » 22.11.2006 08:20 • Verfasst in SAP - Allgemeines
4
Antw.
2865
Views
TableView-Inhalte auslesen
von Kona » 04.05.2006 09:52 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 38 Minuten von msfox 2 / 34
Interne Tabelle
vor 17 Stunden von sap_enthusiast 3 / 163
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

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.

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 38 Minuten von msfox 2 / 34
Interne Tabelle
vor 17 Stunden von sap_enthusiast 3 / 163
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 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