Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
25 Beiträge • Seite 1 von 2 (current) Nächste
25 Beiträge Seite 1 von 2 (current) Nächste

Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Hallo zusammen, danke für die Aufnahme. ich bin noch sehr neu auf dem Gebiet ABAP, im September 2018 habe ich die Zertifizierung gemacht. Davor war ich Berater seit 2013. Ich stehe nun vor einer Aufgabe die ich nicht ganz bewältigen kann.

Die Inhalte aus der Transaktion COGI sollen gruppiert nach Nachrichtennummer und Nachrichtenklasse an einen bestimmten E-Mail-User (extern) versendet werden.
Die Zuordnung der E-Mail Empfänger findet über eine Z-Tabelle statt und orientiert sich an Nachrichtennummer und Nachrichtenklasse (Schlüsselfelder)

Im E-Mail Body sollen relevante Informationen zu den selektierten COGI-Sätzen angezeigt werden.
Das Programm läuft soweit, nur sendet es immer nur eine Email an einen Empfänger mit allen Fehlern der COGI.

Ich konnte den Fehler auch eingrenzen, aber da komme ich nicht weiter.

Code: Alles auswählen.

* Verarbeitung Receiver von ZCOGIEMAIL
 LOOP AT lt_cogi_daten ASSIGNING <lf_cogi_daten>.
  AT NEW msgid_key.
* Verarbeitung Receiver von ZCOGIEMAIL
    READ TABLE lt_cogi_mail
    WITH KEY msgid = <lf_cogi_daten>-msgid
             msgno = <lf_cogi_daten>-msgno
    INTO ls_cogi_mail.
    MOVE-CORRESPONDING ls_cogi_mail TO gs_receivers.
    APPEND gs_receivers TO gt_receivers.
    CLEAR gt_doc_content[].
  ENDAT.
* Aufbereitung Email
  DESCRIBE TABLE gt_doc_content LINES gv_entries.
  READ TABLE gt_doc_content INTO gs_doc_content INDEX gv_entries.
  gs_doc_data-doc_size = ( gv_entries - 1 ) * 255 + strlen( gs_doc_content ).
Da wird es verarbeitet, aber, wenn ich einen zweiten AT NEW MSGNO_KEY setze, prüft er nicht auf beide Felder.
In der Ztabelle für die Emails sind die Datenfelder vorhanden. In meiner lt_cogi_daten habe ich die Felder MSGID, MSGNO… nach vorne geholt umbenannt in MSGID_KEY, MSGNO_KEY…und per. include den Rest der Tabelle angehängt. Leider ist es zu lange her, aber ich weiß, dass man eine AT NEW in zwei Stufen machen kann. Und da scheitert es. Die Tabelle ist sortiert.

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


Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo,

bei dem AT NEW hast du sicherlich bedacht, dass die Felder rechts vom Feld msgid_key
nicht gefüllt sind. Der Inhalt ist ‚*‘.

Gruß Wolfgang

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Hallo Wolfgang,

nein das habe ich nicht bedacht, es ist auch nur ein Teil des Codes.

Zur Verständlichkeit. Das was darüber Passiert.

Code: Alles auswählen.

* Select zcogiemal
SELECT * FROM zcogiemail
  INTO CORRESPONDING FIELDS OF TABLE lt_cogi_mail.
* Select auf AFFW
SELECT * FROM affw
  INTO CORRESPONDING FIELDS OF TABLE lt_cogi_daten.
**********************************************************************
* Verarbeitung der Daten ZCOGIEMAIL und AFFW auf Key MSGNO
**********************************************************************
* Verarbeitung AFFW
LOOP AT lt_cogi_daten ASSIGNING FIELD-SYMBOL(<lf_cogi_daten>).
  <lf_cogi_daten>-msgid_key      = <lf_cogi_daten>-msgid.
  <lf_cogi_daten>-msgno_key      = <lf_cogi_daten>-msgno.
  <lf_cogi_daten>-msgty_key      = <lf_cogi_daten>-msgty.
  <lf_cogi_daten>-msgv1_key      = <lf_cogi_daten>-msgv1.
  <lf_cogi_daten>-msgv2_key      = <lf_cogi_daten>-msgv2.
  <lf_cogi_daten>-msgv3_key      = <lf_cogi_daten>-msgv3.
  <lf_cogi_daten>-msgv4_key      = <lf_cogi_daten>-msgv4.
  <lf_cogi_daten>-weblnr_key     = <lf_cogi_daten>-weblnr.
ENDLOOP.
SORT lt_cogi_daten.
Da setzte ich einen Loop drauf mit Field symbol, somit sollte das gefüllt sein. Denke ich.

Gruß
Björn

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von wreichelt (Top Expert / 1046 / 30 / 192 ) »
Hallo Björn,

hier ein Hinweis zum Gruppenwechsel:

https://www.tricktresor.de/blog/gruppenwechsel/

Gruß Wolfgang

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Das habe ich bereits probiert, ich bekomme immer das selbe Ergebnis.
Er prüft nicht hat der COGI Datensatz MSGID= M7 und MSGNO: 090. Und schaut in der Email Tabelle nach welche Emailadressen diese beiden Eigenschaften haben.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
huhu,

Wolfgang´s Link sollte meiner Meinung nach ausreichen um das Problem zu lösen...
https://www.tricktresor.de/blog/gruppenwechsel/ hat geschrieben: Anmerkung:

Der ABAP-Interpreter erkennt auch Gruppenwechsel in den hinteren Feldern automatisch! Bei einer Tabelle mit FELD1, FELD2, FELD3 können Sie getrost ein

AT NEW feld3.

programmieren, ohne auf die vorderen Felder einzugehen. Selbst Wenn FELD3 gleich bleibt, sich aber FELD 2 ändert, wird der Gruppenwechsel erkannt.

Oder hattest du dein Coding, nach dem durchlesen des Artikels, schon entsprechend angepasst?

Liebe Grüße
abuma

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Ich habe das nun anders gemacht.

ich frage auf MSGNO_key.
Ich bekomme auch an die entsprechenden emails die daten , aber auch an eine Email die überhaupt so nicht in meiner ZTabelle ist.
Sie ist zwar in der Ztabelle aber nicht mit den MSGNO und MSGID.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
huhu,

das dürfte an deinem READ TABLE liegen bzw. was dein Programm danach macht.
Durch debuggen solltest du das schnell erkennen.

Falls nicht helfe ich gerne weiter.

Liebe Grüße
abuma

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Danke für die Hilfen, nun funktioniert es, ich habe wie oben beschreiben habe ich msgid gegen msgno getauscht seit dem haut es hin.

Nur sieht die Email irgendwie mist aus. Er schreibt alles hintereinander weg. Durch das

Code: Alles auswählen.

CONCATENATE 'Belegnummer = '
                    <lf_cogi_daten>-weblnr_key
                    INTO gs_doc_content-line SEPARATED BY space.
Gibt es eine Möglichkeit das er jede Belegnummer untereinander schreibt, nicht hintereinander weg.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von abuma (Specialist / 102 / 36 / 14 ) »
CL_ABAP_CHAR_UTILITIES=>NEWLINE
CL_ABAP_CHAR_UTILITIES=>CR_LF

Die Klasse sowie die Komponenten sind dokumentiert.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von DeathAndPain (Top Expert / 1941 / 257 / 412 ) »
Das Problem, das ich mit Björns Fragen habe, besteht (mal wieder) darin, dass er nur mehr oder weniger zusammenhanglose Codefragmente bietet.

Ein

Code: Alles auswählen.

    CONCATENATE 'Belegnummer = '
                        <lf_cogi_daten>-weblnr_key
                        INTO gs_doc_content-line SEPARATED BY space.
scheint mir genau eine Belegnummernzeile zusammenzubauen (deshalb auch das gs_doc_content-line).

Wie daraus eine Email wird, ist nirgends erkennbar, obwohl sich darauf die Frage bezieht. So wird das nichts.

Björn, poste doch mal den gesamten Code, auf den sich Deine Frage bezieht, insbesondere auch einschließlich der Definition aller verwendeten Typen und Felder. Dann hat die Kaffeesatzleserei mal ein Ende, und man kann Dir zielgerichtet helfen.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Entschuldige DeathandPain ich bin noch neu auf diesem Gebiet und gelobe besserung.

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_COGI_EMAIL
*& 
*&---------------------------------------------------------------------*
*& 19.02.2019
*&
*&---------------------------------------------------------------------*

REPORT z_cogi_email_kopie.

**********************************************************************
* Datendeklaration aus der ZTABELLE ZCOGIEMAIL und AFFW
**********************************************************************
* Data für Email-Versand
DATA gt_doc_content TYPE TABLE OF solisti1.
DATA gs_doc_content TYPE solisti1.
DATA gt_receivers TYPE TABLE OF somlreci1.
DATA gs_receivers TYPE somlreci1.
DATA gs_doc_data TYPE sodocchgi1.
DATA gv_entries TYPE sy-tabix.
DATA lt_cogi_mail TYPE  TABLE OF zcogiemail.
DATA ls_cogi_mail TYPE zcogiemail.
* Data AFFW
DATA lt_cogi_daten TYPE zosc_t_cogi.
DATA ls_cogi_daten TYPE zosc_s_cogi.
* Data Messagetype
DATA lv_message TYPE solisti1.
* Data Range Table
*DATA zosc_rt_cogi_mail TYPE RANGE OF arbgb.
*DATA zosc_rs_cogi_mail like LINE OF zosc_rt_cogi_mail.
**********************************************************************
* Start of Selection
**********************************************************************
* Select zcogiemal
SELECT * FROM zcogiemail
  INTO CORRESPONDING FIELDS OF TABLE lt_cogi_mail.
* Select auf AFFW
SELECT * FROM affw
  INTO CORRESPONDING FIELDS OF TABLE lt_cogi_daten.
* Range Table
*  DATA lv_msgid type zosc_s_cogi-msgid_key.
*zosc_rs_cogi_mail-sign  = 'I'.
*zosc_rs_cogi_mail-option = 'BT'.
*zosc_rs_cogi_mail-low = 'M7'.
*zosc_rs_cogi_mail-high = 'M7'.
*APPEND zosc_rs_cogi_mail to zosc_rt_cogi_mail.

**********************************************************************
* Verarbeitung der Daten ZCOGIEMAIL und AFFW auf Key MSGNO
**********************************************************************
* Verarbeitung AFFW
LOOP AT lt_cogi_daten ASSIGNING FIELD-SYMBOL(<lf_cogi_daten>).
  <lf_cogi_daten>-msgid_key      = <lf_cogi_daten>-msgid.
  <lf_cogi_daten>-msgno_key      = <lf_cogi_daten>-msgno.
  <lf_cogi_daten>-msgty_key      = <lf_cogi_daten>-msgty.
  <lf_cogi_daten>-msgv1_key      = <lf_cogi_daten>-msgv1.
  <lf_cogi_daten>-msgv2_key      = <lf_cogi_daten>-msgv2.
  <lf_cogi_daten>-msgv3_key      = <lf_cogi_daten>-msgv3.
  <lf_cogi_daten>-msgv4_key      = <lf_cogi_daten>-msgv4.
  <lf_cogi_daten>-weblnr_key     = <lf_cogi_daten>-weblnr.
ENDLOOP.
SORT lt_cogi_daten.
**********************************************************************
* Start Arbeitsbereich Email-verarbeitung
**********************************************************************
* Verarbeitung Receiver von ZCOGIEMAIL
LOOP AT lt_cogi_daten ASSIGNING <lf_cogi_daten>.
  AT NEW msgno_key.
* Verarbeitung Receiver von ZCOGIEMAIL
    READ TABLE lt_cogi_mail
    WITH KEY msgno = <lf_cogi_daten>-msgno
             msgid = <lf_cogi_daten>-msgid
    INTO ls_cogi_mail.
    MOVE-CORRESPONDING ls_cogi_mail TO gs_receivers.
    APPEND gs_receivers TO gt_receivers.
   CLEAR gt_doc_content []. <---Eckige  Klammer wird hier im Forum leider nicht so ausgegeben.
  ENDAT.
**********************************************************************
* Email Body (Ausgabe Inhalt der Meldung in der Email
**********************************************************************
  CONCATENATE 'Belegnummer = '
                    <lf_cogi_daten>-weblnr_key
                    INTO gs_doc_content-line SEPARATED BY space.
  APPEND gs_doc_content TO gt_doc_content.
  CLEAR gs_doc_content.
**********************************************************************
* Message behandlung
**********************************************************************
  MESSAGE ID <lf_cogi_daten>-msgid_key TYPE <lf_cogi_daten>-msgty_key NUMBER <lf_cogi_daten>-msgno_key
  WITH <lf_cogi_daten>-msgv1_key <lf_cogi_daten>-msgv2_key <lf_cogi_daten>-msgv3_key <lf_cogi_daten>-msgv4_key
  INTO lv_message.
  CONCATENATE ' ' lv_message into
  gs_doc_content-line SEPARATED BY space.
  append gs_doc_content to gt_doc_content.

**********************************************************************
* Email Header
**********************************************************************
  gs_doc_data-obj_descr = 'Fehler bei der Transaktion COGI'.
  gs_doc_data-sensitivty = 'O'.
  AT END OF msgno_key.
**********************************************************************
* Email verarbeiten
 DESCRIBE TABLE gt_doc_content LINES gv_entries.
  READ TABLE gt_doc_content INTO gs_doc_content INDEX gv_entries.
  gs_doc_data-doc_size = ( gv_entries - 1 ) * 255 + strlen( gs_doc_content ).
**********************************************************************
* Ende Arbeitsbereich Email-verarbeitung
**********************************************************************
* Funktionsbaustein SO_NEW_DOCUMENT_SEND_API1
**********************************************************************
    CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
      EXPORTING
        document_data              = gs_doc_data
       DOCUMENT_TYPE              = 'RAW'
*       PUT_IN_OUTBOX              = ' '
        commit_work                = 'X'
*       IP_ENCRYPT                 =
*       IP_SIGN                    =
* IMPORTING
*       SENT_TO_ALL                =
*       NEW_OBJECT_ID              =
      TABLES
*       OBJECT_HEADER              =
        object_content             = gt_doc_content
*       CONTENTS_HEX               =
*       OBJECT_PARA                =
*       OBJECT_PARB                =
        receivers                  = gt_receivers
      EXCEPTIONS
        too_many_receivers         = 1
        document_not_sent          = 2
        document_type_not_exist    = 3
        operation_no_authorization = 4
        parameter_error            = 5
        x_error                    = 6
        enqueue_error              = 7
        OTHERS                     = 8.
* Implement suitable error handling here
    IF sy-subrc <> 0.
    ENDIF.
    REFRESH gt_receivers.

  ENDAT.
ENDLOOP.

Ich hoffe es ist so verständlicher.
Dazu habe ich eine Ztabelle mit Emailadressen (ZCOGIEMAIL)(RECEIVER und REC_TYPE) gebaut mit den zusätzen MSGID(ARBGB) und MSGNO(MSGNO).
Das Programm tut was es soll, aber er setzt den text bei den ersten beiden Emails untereinander und bei weiteren Emails hintereinander.

Das weitere was ich habe, ich möchte das die Fehlermeldungen (MSGID und MSGNO) für ein Emailabsender gesammelt werden und in einer Email verschickt werden, zurzeit bekommt der Empfänger zb bei MSGID M7 und MSGNO 090 eine Email und wenn ich den selben Empfänger nochmal einsätze mit MSGID M7 und MSGID 021. Gibt es eine andere Lösung als Collect und Range Table.

Ich hoffe ich habe mich verständlich ausgedrückt. Ich bin froh das es sowas gibt, wo die erfahrenen den unerfahrenen helfen können.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_COGI_EMAIL
*& Björn Heidke
*&---------------------------------------------------------------------*
*& 19.02.2019
*&
*&---------------------------------------------------------------------*

REPORT z_cogi_email_kopie.

**********************************************************************
* Datendeklaration aus der ZTABELLE ZCOGIEMAIL und AFFW
**********************************************************************
* Data für Email-Versand
DATA gt_doc_content TYPE TABLE OF solisti1.
DATA gs_doc_content TYPE solisti1.
DATA gt_receivers TYPE TABLE OF somlreci1.
DATA gs_receivers TYPE somlreci1.
DATA gs_doc_data TYPE sodocchgi1.
DATA gv_entries TYPE sy-tabix.
DATA lt_cogi_mail TYPE TABLE OF zcogiemail.
DATA ls_cogi_mail TYPE zcogiemail.
* Data AFFW
DATA lt_cogi_daten TYPE zosc_t_cogi.
DATA ls_cogi_daten TYPE zosc_s_cogi.
* Datendeklaration Messagetype
DATA lv_message TYPE solisti1.
**********************************************************************
* Start of Selection
**********************************************************************
* Select zcogiemal
SELECT * FROM zcogiemail
  INTO CORRESPONDING FIELDS OF TABLE lt_cogi_mail.
* Select auf AFFW
SELECT * FROM affw
  INTO CORRESPONDING FIELDS OF TABLE lt_cogi_daten.
**********************************************************************
* Verarbeitung der Daten ZCOGIEMAIL und AFFW auf Key MSGNO
**********************************************************************
* Verarbeitung AFFW
LOOP AT lt_cogi_daten ASSIGNING FIELD-SYMBOL(<lf_cogi_daten>).
  <lf_cogi_daten>-msgid_key      = <lf_cogi_daten>-msgid.
  <lf_cogi_daten>-msgno_key      = <lf_cogi_daten>-msgno.
  <lf_cogi_daten>-msgty_key      = <lf_cogi_daten>-msgty.
  <lf_cogi_daten>-msgv1_key      = <lf_cogi_daten>-msgv1.
  <lf_cogi_daten>-msgv2_key      = <lf_cogi_daten>-msgv2.
  <lf_cogi_daten>-msgv3_key      = <lf_cogi_daten>-msgv3.
  <lf_cogi_daten>-msgv4_key      = <lf_cogi_daten>-msgv4.
  <lf_cogi_daten>-weblnr_key     = <lf_cogi_daten>-weblnr.
ENDLOOP.
SORT lt_cogi_daten.
**********************************************************************
* Start Arbeitsbereich Email-verarbeitung
**********************************************************************
* Verarbeitung Receiver von ZCOGIEMAIL
LOOP AT lt_cogi_daten ASSIGNING <lf_cogi_daten>.
  AT NEW msgno_key.
* Verarbeitung Receiver von ZCOGIEMAIL
    READ TABLE lt_cogi_mail
    WITH KEY msgno = <lf_cogi_daten>-msgno
             msgid = <lf_cogi_daten>-msgid
    INTO ls_cogi_mail.
    MOVE-CORRESPONDING ls_cogi_mail TO gs_receivers.
    APPEND gs_receivers TO gt_receivers.
    CLEAR gt_doc_content[].
  ENDAT.
**********************************************************************
* Email Body (Ausgabe Inhalt der Meldung in der Email
**********************************************************************
  CONCATENATE
    'Belegnummer:' <lf_cogi_daten>-weblnr_key
                      INTO gs_doc_content-line SEPARATED BY CL_ABAP_CHAR_UTILITIES=>newline.
  APPEND gs_doc_content TO gt_doc_content.
  CLEAR gs_doc_content.
**********************************************************************
* Message behandlung
**********************************************************************
  MESSAGE ID <lf_cogi_daten>-msgid_key TYPE <lf_cogi_daten>-msgty_key NUMBER <lf_cogi_daten>-msgno_key
  WITH <lf_cogi_daten>-msgv1_key
       <lf_cogi_daten>-msgv2_key
       <lf_cogi_daten>-msgv3_key
       <lf_cogi_daten>-msgv4_key
  INTO lv_message.
  CONCATENATE 'Meldung:' lv_message INTO
  gs_doc_content-line SEPARATED BY cl_abap_char_utilities=>newline.
  APPEND gs_doc_content TO gt_doc_content.
**********************************************************************
* Email Header
**********************************************************************
  gs_doc_data-obj_descr = 'Fehler bei der Transaktion COGI'.
  gs_doc_data-sensitivty = 'O'.
  AT END OF msgno_key.
**********************************************************************
* Aufbereitung Email
    DESCRIBE TABLE gt_doc_content LINES gv_entries.
    READ TABLE gt_doc_content INTO gs_doc_content INDEX gv_entries.
    gs_doc_data-doc_size = ( gv_entries - 1 ) * 255 + strlen( gs_doc_content ).
**********************************************************************
* Ende Arbeitsbereich Email-verarbeitung
**********************************************************************
* Funktionsbaustein SO_NEW_DOCUMENT_SEND_API1
**********************************************************************
    CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
      EXPORTING
        document_data              = gs_doc_data
*       DOCUMENT_TYPE              = 'RAW'
*       PUT_IN_OUTBOX              = ' '
        commit_work                = 'X'
*       IP_ENCRYPT                 =
*       IP_SIGN                    =
* IMPORTING
*       SENT_TO_ALL                =
*       NEW_OBJECT_ID              =
      TABLES
*       OBJECT_HEADER              =
        object_content             = gt_doc_content
*       CONTENTS_HEX               =
*       OBJECT_PARA                =
*       OBJECT_PARB                =
        receivers                  = gt_receivers
      EXCEPTIONS
        too_many_receivers         = 1
        document_not_sent          = 2
        document_type_not_exist    = 3
        operation_no_authorization = 4
        parameter_error            = 5
        x_error                    = 6
        enqueue_error              = 7
        OTHERS                     = 8.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
    REFRESH gt_receivers.

  ENDAT.
ENDLOOP.
Danke für die tollen Tipps.
Das einzige Problem was ich noch habe ist, das mehrere Email-Absender mehrere Fehler (MSGID und MSGNO) bekommen können. Dann bekommt ein Empfänger drei oder mehr Emails.
Gibt es eine Möglichkeit das die Fehler pro Empfänger gesammelt werden und nur eine Email mit allen Fehlern für diesen Empfänger gesendet werden.

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von DeathAndPain (Top Expert / 1941 / 257 / 412 ) »
Also das ist schon bedeutend aufschlussreicher. Ich bin trotzdem noch etwas am Knobeln, wie Du Dir die genaue Funktionalität gedacht hast. Du hast eine Tabelle lt_cogi_daten, in die Du die auszugebenden Zeilen einliest. Dann hast Du noch eine Tabelle lt_cogi_mail, in der offenbar die zugehörigen Emailempfänger stehen (sollen). Die Verbindung stellst Du her über MSGNO und MSGID, also über Typ und Nummer der Nachricht!? Daran kann man den Emailempfänger erkennen? Es können also keine zwei Emailempfänger die gleiche Fehlernachricht bekommen?

Wie die entsprechenden Werte in die Datenbanktabelle ZCOGIEMAIL hineingelangt sind, so dass Du dort zu allen MSGNO/MSDID aus der AFFW bereits eine passende Zeile mit dem zugehörigen Emailempfänger vorzuliegen hast, ist auch unklar.

Was Du nach meiner Überzeugung auf jeden Fall ändern solltest, ist, dass Du durchgehend mit Standardtabellen arbeitest. Dementsprechend gibst Du auch keinen Tabellenschlüssel für Deine internen Tabellen an, wodurch ABAP automatisch einen Standardschlüssel zuweist. Wie der aussieht, kann ich nicht beurteilen, da Du leider die genaue Felddefinition von ZCOGIEMAIL und dem Datentyp ZOSC_T_COGI nicht angegeben hast. Es erscheint mir aber wahrscheinlich, dass dieser Standardschlüssel nicht dem entspricht, was Du hier brauchst. Damit fliegt Dir dann wahrscheinlich jeder AT NEW und COLLECT um die Ohren, da diese Befehle sich an dem primären Schlüssel der Tabellen orientieren und es reines Glück wäre, wenn dieser Schlüssel das ist, was Du in Deinem Programm tatsächlich brauchst.

Zudem brauchst Du die Tabellen ja auch sortiert. Du hast ja sogar einen SORT lt_cogi_daten drin - bei dem Du aber auch wieder nicht angibst, wonach eigentlich sortiert werden soll, so dass ABAP auch hier wieder auf den mir unbekannten Defaultschlüssel zurückfällt. Warum also definierst Du Deine Tabelle nicht gleich als SORTED TABLE und gibst dabei einen präzisen, für Dein Programm gut geeigneten Schlüssel an? Dann gehen auch alle Suchvorgänge auf diesen Tabellen schneller, da ABAP dann den Sortierschlüssel dafür nutzen kann.

Naheliegen würde, dass Du den Schlüssel von LT_COGI_DATEN mit dem Feld RECEIVER anfangen lässt (gibt es ja anscheinend, da Du einen MOVE-CORRESPONDING ls_cogi_mail TO gs_receivers machst. (Du merkst: Aufgrund der fehlenden Tabellendefinition muss ich noch immer ein Stück weit Kaffeesatz lesen)). Dann kannst Du im LOOP AT lt_COGI_DATEN mit AT NEW receiver für jeden Empfänger einen neuen Block anfangen lassen. In dem machst Du dann einen weiteren (geschachtelten) LOOP AT lt_COGI_DATEN WHERE receiver = <lf_cogi_daten>-receiver in ein anderes Feldsymbol. Ist vielleicht nicht die eleganteste Lösung für Dein Problem, aber eine, die funktionieren sollte. Innerhalb dieses inneren LOOPS bekommst Du alle Zeilen für diesen einen Empfänger, und am Ende des LOOPs schickst Du dann die Email für diesen Empfänger raus und machst dann mit dem äußeren LOOP weiter (nächster Empfänger).

Noch eine kleine Anmerkung am Rande: Da Du so schön moderne 7.40-Syntax schreibst, solltest Du anstelle von

Code: Alles auswählen.

    * Verarbeitung Receiver von ZCOGIEMAIL
        READ TABLE lt_cogi_mail
        WITH KEY msgno = <lf_cogi_daten>-msgno
                 msgid = <lf_cogi_daten>-msgid
        INTO ls_cogi_mail.
lieber schreiben:

Code: Alles auswählen.

ASSIGN lt_cogi_mail{ msgno = <lf_cogi_daten>-msgno
                     msgid = <lf_cogi_daten>-msgid } TO FIELD-SYMBOL(<lf_cogi_mail>).
(mit eckigen Klammern anstelle der geschweiften, die ich hier benutzt habe, damit der code-Tag des Forums nicht rumspinnt).

Schicker, schneller und nutzt automatisch den Suchschlüssel msgno/msgid auf der internen Tabelle lt_cogi_mail (was natürlich voraussetzt, dass Du die Tabelle als SORTED (oder HASHED) mit einem solchen Schlüssel definiert hast).

Re: Inhalte Gruppiert TCODE COGI nach Nachrichtennummern...

Beitrag von Bjoern77 (ForumUser / 17 / 0 / 0 ) »
Danke DeathandPain,

ich habe das geändert mit dem
ASSIGN lt_cogi_mail{ msgno = <lf_cogi_daten>-msgno
msgid = <lf_cogi_daten>-msgid } TO FIELD-SYMBOL(<lf_cogi_mail>).

Sieht schöner aus und ist auch schneller.

Die Zcogiemail ist wie folgt aufgebaut

Code: Alles auswählen.

MSGID|MSGNO|Email|REC_TYPE
In der ZOSC_T_COGI habe ich mir die MSGID und MSGNO nach vorne an die Tabelle geholt (Deswegen MSGID_KEY und MSGNO_KEY...) Und einen .Include mit AFFW um den Rest der Tabelle zu bekommen.

Damit stehe ich etwas auf dem Schlauch ich soll noch ein neues AT NEW receiver machen?

Dann kannst Du im LOOP AT lt_COGI_DATEN mit AT NEW receiver für jeden Empfänger einen neuen Block anfangen lassen. In dem machst Du dann einen weiteren (geschachtelten) LOOP AT lt_COGI_DATEN WHERE receiver = <lf_cogi_daten>-receiver in ein anderes Feldsymbol. Ist vielleicht nicht die eleganteste Lösung für Dein Problem, aber eine, die funktionieren sollte. Innerhalb dieses inneren LOOPS bekommst Du alle Zeilen für diesen einen Empfänger, und am Ende des LOOPs schickst Du dann die Email für diesen Empfänger raus und machst dann mit dem äußeren LOOP weiter (nächster Empfänger).

In der it_cogi_daten gibt es kein Feld Receiver aber in der lt_cogi_mail.


Ich versuche es nochmal zu erklären.
Bei MSGID M7 und MSGNO 090 soll Email a verwendet werden.
Bei MSGID M7 und MSGNO 053 soll Email b verwendet werden.
Das Funktioniert auch.
Aber wenn bei MSGID M7 und MSGID 023 wieder Email a verwendet wird, bekommt dieser Email Empfänger zwei Emails.
Kann man das nicht Sammeln und die beiden Fehler in einer Email an a senden.
Ich habe leider noch wenig mit RANGE defintionen etwas zu tun gehabt. Geschweige mit COLLECT.

Vergleichbare Themen

2
Antw.
5075
Views
Query: Umsätze gruppiert nach Anlagedatum
von obreuer » 02.04.2007 16:57 • Verfasst in Sonstige Module
4
Antw.
3398
Views
COGI - Konsi-Buchungen
von ubrinkmann » 08.05.2014 13:35 • Verfasst in Material Management & Produktionsplanung
0
Antw.
1836
Views
Auswirkungen Nichtabarbeiten COGI Liste
von Abraxas1 » 01.02.2008 16:42 • Verfasst in Financials
2
Antw.
7438
Views
0
Antw.
2320
Views
BAPI_PRODORDCONF_CREATE_TT Kein Labedruck & COGI statt CO11n
von Mole1986m » 16.01.2017 09:38 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 732
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2358
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8942