BADI IF_EX_CTS_REQUEST_CHECK

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

BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Hallo,

Zunächst einmal möchte ich mich für den Titel entschuldigen. Ich wusste nicht genau was ich hinschreiben soll. Zu meiner Situation. Ich habe als Student in einem Unternehmen neu angefangen. Meine Kenntnisse direkt in Abap sind sehr sehr gering (Beginner), das programmieren in anderen Sprachen selbst aber nicht. Meinen Kollegen ist zwar bewusst, dass ich noch eine Leihe bin aber ich habe trotzdem eine Aufgabe bekommen an der ich mich messen soll.
So worum gehts? Aus den bisherigen Gesprächen habe ich selber die Anforderungen der Aufgabe ausformuliert:

Es wird vor dem Einfügen von Objecten geprüft , ob diese den Richtlinien entsprechen, die für einen Transport in den 150iger Mandaten. Hierfür wird die Methode CHECK_BEFORE_ADD_OBJECTS verwendet werden. Durch Abruf und der entsprechenden Attribute (Welche?). Diese Attribute sollen mit einer generischen Tabelle verglichen werden. Diese enthält alle zulässigen Kombinationen , die für einen Transport erlaubt sind. Findet kein Matching statt, so wird dem Entwickler über ein PopUp Fenster ein entsprechender Hinweis mitgeteilt.

Diese Beschreibung sol nur zeigen wohin es geht. Mein aktuelles Problem ist, das ich nicht weiß wo sich zb.: die Referenzen zu Kontextelementen der Paketübersicht befinden. Angenommen ich möchte mit der Methode CHECK_BEFORE_ADD_OBJECTS den verwendete Transportschicht prüfen ( der Name würde schon reichen).
Wie komme ich an diese Referenz des Kontextelements ran?
Können diese Mithilfe von Parametern der Methode übernommen werden. Wenn ja wie könnte dieser Parameter lauten bzw. aus welcher Tabelle werden die informationen bezogen (E070, E071, K, A usw.)
Sicherlich gibt es mehrere Möglichkeiten mein Problem zu lösen.

Ich bitte Sie um Entschuldigung, falls die Informationen nicht ausreichend sind.

Besten Gruß

Ippo

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


Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Tron (Top Expert / 1327 / 35 / 331 ) »
Moin,
also...
Da das Meiste in Tabellen steht, ist die Frage : wo sind die Transportschichten ?
Die Transportschichten sind verknüpft mit den Paketen (einstmals Entwicklungsklasen) , also brauchst Du die Tabelle der Pakete und damit die Tabelle TDEVC.
Im coding des Badis kannst Du also mit Select PDEVCLASS from tdevc.... die Transportschicht zum Paket ermitteln.
Das große "Buch" aller Objekte ist in der Tabelle TADIR. Darin ist auch das Paket, dem das Objekt zugeordnet ist. usw.
gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
Ippoo

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Vielen Dank für die prompte Antwort.
Ich habe mir die Tabelle angesehen und da sind auch die benötigten Daten. Allerdings ist mit dabei und leider auch erst heute aufgefallen, dass bei einem Auftrag die Transportschicht, welche zuvor standardmäßig vom übergeordneten Paket befüllt ist, im nachhinein geändert werden kann. Somit hätte ich ein Problem und nicht die korrekte Transportschicht.
Da ja bei dieser CHECK_BEFORE_ADD_OBJECTS bereits eine Prüfung bei der Aktivierung stattfindet, benötige ich die dann die aktuelle vom User verwendete Transportschicht.

Manuell habe ich im SE11 die Tabelle E070 betrachtet.
- bei TRKORR die Aufgabennummer eingegeben.
- bei STRKORR die übergeordnete Auftragsnummer kopiert.
- diese wieder in der Tabelle aufgerufen.
- in der Spalte TARSYSTEM befindet sich dann die ausgewählte Transportschicht.

Soweit so gut. Theoretisch müsste ich von der Implentierung in etwa diese Schritte verfolgen um an meine Daten zu kommen. Ich weiß nur mit meinem aktuellen Kenntnisstand nicht genau wie ich auf Tabelle E070 zugreife um darin um die oben genannten Werte auszulesen.
Mir würde schon ein Codeschnipsel ausreichen um mich orientieren zu kennen.
Wie müsste die Select anweisung in etwa aussehen wenn ich nur die Transportschicht am Ende einfach mit der Anweisung WRITE ausgeben will?

Gruß

ippoo

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Mittlerweile bin ich weiter und habe die anfänglichen Probleme gelöst.
Ich stelle mal meinen bisherigen Code rein. Nicht wundern wenn ich die andere Methode verwende. Es ist einfacher diese aktuell zu testen.

Code: Alles auswählen.

method if_ex_cts_request_check~check_before_release.
  data: ls_e070 type e070, ls_e071 type e071.
  data: l_text(255), l_text1(255), l_text2(255), l_text3(255).
  data: ls_object_name type tr_objects.


* Prüfung des Mandaten
  case sy-uname.
    when 'xxxx' .
* Tabelle E070 Gesucht: Transportschicht
      select a~trkorr a~strkorr b~tarsystem into corresponding fields of ls_e070
        from e070 as a join e070 as b on a~strkorr = b~trkorr
        where a~trkorr = request.

        concatenate 'Freigabe:' request into l_text
        separated by space.
        concatenate: 'Aufgabennummer'    'Auftagsnummer'   'Transportschicht'  into l_text1
        separated by space.
        concatenate: ls_e070-trkorr  ls_e070-strkorr ls_e070-tarsystem  into l_text2
        separated by space.
      endselect.

* Tabelle E071 Gesucht: Objekte

      select * into ls_e071
        from e071
        where trkorr = request.
        concatenate:  ls_e071-trkorr ls_e071-obj_name into l_text3
        separated by space.
      endselect.

* Aufruf POPUP - Ergebnisdarstellung

      call function 'POPUP_TO_INFORM'
        exporting
          titel = l_text
          txt1  = l_text1
          txt2  = l_text2
          txt3  = l_text3.
      raise cancel.
  endcase.

endmethod.
Ich habe aber aktuell das Problem, dass wenn ich meinem Objecten mehr als eine Zeile habe, dass nur die letzte angezeigt wird. Gibt es eine Möglichkeit mehrere Zeilen anzeigen zu lassen? Sind diese POPUP's so eingeschränkt, dass es nicht möglich ist? Ein Hinweis wäre super.

Gruß

Ippo

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
hi!

Dein concatenate bei den Objekten ist etwas falsch. Du hast immer nur das aktuelle Objekt in den Text reingestopft.

Code: Alles auswählen.

concatenate l_text3 ls_e071-trkorr ls_e071-obj_name into l_text3 separated by space.
Damit kannst du deinen Text L_TEXT3 "erweitern". Wird aber im Popup dann vermutlich abgeschnitten, weil er zu lang werden wird.
Da musst du für die Darstellung vermutlich einen anderen Baustein suchen oder evtl. selbst was schreiben.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Ippoo

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: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
** Korrektur/Edit
**Exception beseitigt es tritt jetzt ein Laufzeitfehler auf
** POPUP_WITH_TABLE_DISPLAY --> POPUP_WITH_TABLE. Den anderen haben wir anscheinend nicht.
** Laufzeitfehler Konvertierung von Typ "R_MYSTRUCT" nach Typ "u" nicht unterstützt
**
**Korrektur/Edit 2
** Laufzeitfehler wurde behoben

Edit2:

Ich erhalte mittlerweile das Fenster (schwere Geburt, Achtung ich habe erst letzte Woche bei Null angefangen).

Das Problem ist, dass es leer ist.
Der Debug Modus ergab die Angabe ungültige Tabelle bezogen auf ls_itab.


Code: Alles auswählen.

METHOD if_ex_cts_request_check~check_before_release.
  DATA: ls_e070 TYPE e070.
  DATA: ls_e071 TYPE e071.
  DATA: l_text(255), l_text1(255), l_text2(255).


  TYPES: BEGIN OF r_mystruct,
     lv_trkorr TYPE e071-trkorr,
     lv_obj_name TYPE e071-obj_name,
     END OF r_mystruct.

  DATA: ls_itab TYPE STANDARD TABLE OF r_mystruct.
CASE sy-uname.
    WHEN 'xxx'.
* Tabelle E070 Gesucht: Transportschicht
      SELECT a~trkorr a~strkorr b~tarsystem INTO CORRESPONDING FIELDS OF ls_e070
        FROM e070 AS a JOIN e070 AS b ON a~strkorr = b~trkorr
        WHERE a~trkorr = request.

        CONCATENATE 'Freigabe:' request INTO l_text
        SEPARATED BY space.
        CONCATENATE: 'Aufgabennummer'    'Auftagsnummer'   'Transportschicht'  INTO l_text1
        SEPARATED BY space.
        CONCATENATE: ls_e070-trkorr  ls_e070-strkorr ls_e070-tarsystem  INTO l_text2
        SEPARATED BY space.
      ENDSELECT.

* Tabelle E071 Gesucht: Objekte


*      SELECT trkorr obj_name INTO CORRESPONDING FIELDS OF ls_e071
*        FROM e071
*        WHERE trkorr = request.
*        WRITE:/ ls_e071.
*        LOOP  AT ls_e071 INTO ls_itab
**         Anweisung
*        endloop.
*
*        ENDSELECT.


      SELECT trkorr obj_name
        FROM e071
        INTO CORRESPONDING FIELDS OF TABLE ls_itab
        WHERE  trkorr = request.
      write :/ ls_itab-lv_obj_name.


* Aufruf POPUP - Ergebnisdarstellung
* der Alte Call ist nur noch solange da bis ich am Schluss irgendwie allles zusammenfassen kann
*1. Call 
      CALL FUNCTION 'POPUP_TO_INFORM'
        EXPORTING
          titel = l_text
          txt1  = l_text1
          txt2  = l_text2.

*2. Call - 

      CALL FUNCTION 'POPUP_WITH_TABLE'
        EXPORTING
        endpos_col         = 45
        endpos_row         = 25
        startpos_col       = 10
        startpos_row       = 1
        titletext          = 'TEST'
*            IMPORTING
*              choise             = l_text3
      TABLES
        valuetab           = ls_itab
*
      EXCEPTIONS
*
            break_off          = 1
      OTHERS             = 2.
      IF sy-subrc <> 0.

        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

      ENDIF.
      RAISE cancel.

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Ippoo hat geschrieben:Edit2:

Ich erhalte mittlerweile das Fenster (schwere Geburt, Achtung ich habe erst letzte Woche bei Null angefangen).

Das Problem ist, dass es leer ist.
Der Debug Modus ergab die Angabe ungültige Tabelle bezogen auf ls_itab.
Schau dir mal im Debugger an was bei POPUP_WITH_TABLE nach

Code: Alles auswählen.

  LOOP AT valuetab.
    listtab = valuetab.
    APPEND listtab.
  ENDLOOP.
in der Tabelle LISTTAB[] drinnensteht. (unbedingt mit []; LISTTAB alleine wäre nur die Kopfzeile)
Wenn es lauter Leerzeilen sind, darfst du keine strukturierte Tabelle (R_MYSTRUCT) übergeben, sondern eine die nur Textzeilen enthält. Am Besten gleich wie LISTTAB[] (CHAR mit Länge 280)

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: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Danke Dead-trousers

Angepasst und keiner Fehlermeldung erhalten, allerdings ist es immer noch leer.

Frage: Kann ich direkt mit objects arbeiten?

@78\QImporting@ REQUEST TYPE TRKORR OPTIONAL Auftrag
@78\QImporting@ TYPE TYPE TRFUNCTION OPTIONAL Auftragstyp
@78\QImporting@ OWNER TYPE TR_AS4USER OPTIONAL Inhaber
@78\QImporting@ OBJECTS TYPE TR_OBJECTS OPTIONAL Objekte des Auftrags
@78\QImporting@ KEYS TYPE TR_KEYS OPTIONAL Schlüssel des Auftrags
@78\QImporting@ DIALOG TYPE TRBOOLEAN OPTIONAL Aufruf erfolgt im Dialog
@7A\QChanging@ TEXT TYPE AS4TEXT OPTIONAL Text
@7A\QChanging@ ATTRIBUTES TYPE TRATTRIBUTES OPTIONAL Attributes des Auftrags
@03\QException@ CANCEL Abbrechen

Zur Erläuterung nenne ich nochmal die Informationen die ich benötige, welche bei einer Transportfreigabe mitgeliefert werden:

Mandant TARSYSTEM PGM-ID OBJECT OBJ_NAME

Was habe ich damit vor:
Diese werden mit einer Tabelle verglichen welche ich noch erstellen muss, aber das erstmal sekundär. Diese Informationen liegen in den tabellen e070 und e071 und auf diese Kann ich auch über entsprechende Select-anweisungen zugreifen. Im Prinzip müsste es aber über die Parameter doch möglich sein auf diese Informationen zuzugreifen? im Speziellen Objects/ tr_objects. Das habe ich aber bisher nicht so wirklich erfolgreich umsetzen können. Es mangelt mit teils an den Kenntnissen auf so ein object zuzugreifen und die entsprechenden Felder auszulesen/kopieren. Ideal wäre es wenn ich die Informationen in eine temporäre Tabelle kopiere und diese mit der mandantenübergreifenden Tabelle vergleiche.

Wenn ich versuche mit der Select anweisungen auf objects zuzugreifen meldet die SyntaxPrüfung folgende:

Code: Alles auswählen.

 
data: ls_objects type tr_objects .

 select trkorr obj_name into corresponding fields of ls_objects
        from tr_objects
        where  trkorr = request.
        write:/ ls_objects-obj_name.
      endselect.
Als Arbeitsbereich ist eine interne Tabelle nicht erlaubt.

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Richtiger wäre es gewesen die Abfrage so zu gestalten... :wink:

Code: Alles auswählen.

data: lt_objects type tr_objects . "<-- Tabellentyp von E071. Alternative wäre 'type standard table of E071 with default key.'
field-symbols: <ls_object> type e071. "<-- Feld-Symbole sind performanter als Work-Areas

select trkorr obj_name into corresponding fields of table lt_objects "<-- In eine interne Tabelle schreiben.
       from e071 "<-- Datenbanktabelle!!!
       where trkorr = request.

* Auf die Daten zugreifen und ausgeben
loop at lt_objects assigning <ls_object>.
  write:/ <ls_object>-obj_name.
endloop.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Ippoo

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: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Ja stimmt so funktioniert es. Allerdings möchte ich direkt auf die Objekte zugreifen und nicht auf die Datenbanktabelle.
In der Check_Before_Add_Objects Prüfung sind die Daten eventuell noch nicht persistent.

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
ups... völlig übersehen. Du bist ja im Badi.
Da ist das Select nicht nur unnötig sondern wie du bereits erkannt hast auch "gefährlich".

Ist eigentlich ziemlich gleich wie das vorherige Coding von mir, nur dass man sich den SELECT sparen kann.

Code: Alles auswählen.

field-symbols: <ls_object> type e071.

LOOP AT objects ASSIGNING <ls_object>.
* Hier alles rein was mit den Objekten geschen soll. Prüfungen usw.
* Zugriff erfolgt wie bei einer Struktur z.B. mit <ls_object>-pgmid.
ENDLOOP.
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: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Wunderbar das hilft mir schon mal weiter.

Gibt es auch eine Möglichkeit seperat auf die einzelne Objekteleme zuzugreifen.
BZW. sind diese von der Struktur her indexiert oder irgendwelchen entsprechenden Schlüsselwörtern zugeordnet?

Re: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von a-dead-trousers (Top Expert / 4285 / 214 / 1141 ) »
Objektelemente?
Meinst du die KEYS? (E071K)

Die sind mit den OBJECTS über PGMID OBJECT OBJNAME verbunden.

Code: Alles auswählen.

field-symbols: 
  <ls_object> type e071
  <ls_key>    type e071k.

LOOP AT objects ASSIGNING <ls_object>.
* Hier alles rein was mit den Objekten vor den Keys geschen soll.
  LOOP AT keys ASSIGNING <ls_key> 
    WHERE pgmid eq <ls_object>-pgmid AND object eq <ls_object>-object AND objname eq <ls_object>-obj_name.
* Hier alles rein was mit den Objekten mit den Keys geschen soll.
  ENDLOOP.
* Hier alles rein was mit den Objekten nach den Keys geschen soll.
ENDLOOP.
lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Ippoo

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: BADI IF_EX_CTS_REQUEST_CHECK

Beitrag von Ippoo (ForumUser / 16 / 5 / 0 ) »
Recht herzlichen Dank.

Ich stehe noch vor einigen Baustellen, aber wenigstens das hier wird mir kein Kopfzerbrechen bereiten.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
899
Views
HTTP Request
von carlie » 23.08.2019 20:28 • Verfasst in ABAP® für Anfänger
6
Antw.
7730
Views
HTTP Request
von vagans » 20.10.2011 11:11 • Verfasst in ABAP® Core
1
Antw.
1137
Views
Releasing Request (Freigabe)
von Mustafapmk0 » 25.01.2017 13:00 • Verfasst in ABAP® für Anfänger
2
Antw.
5355
Views
Funktionsbaustein für Request löschen
von Gast » 04.10.2004 14:51 • Verfasst in Sonstige Module
7
Antw.
8646
Views
SELECTION-SCREEN ON VALUE-REQUEST
von RiffRaff » 10.08.2004 10:19 • Verfasst in ABAP® Core

Ü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.