[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2015
    Beiträge
    15

    Welche PGM's ändern Daten

    Hallo zusammen,
    wir haben bei ein paar verschiedene Artikel Bestandsprobleme.
    Deshalb möchte ich einen SQL-Trigger an die Bestandsdatei hängen, der immer dann einen Satz in eine Logdatei schreibt, wenn sich die Menge einer dieser Artikel ändert.
    Ist so erstmal kein Problem. Aber wie finde ich eigentlich den Programmnamen des Programmes heraus, welches die Änderung ausgelöst hat? (Vielleicht ist es sogar ein Externes Programm wie Access oder ähnliches)

    Gruß Heinfried

  2. #2
    Registriert seit
    Nov 2020
    Beiträge
    327
    Hallo Heinfried,

    über den Call Stack.
    Select * From table(qsys2.stack_info())
    Da musst du halt nach der Reihenfolge sortieren und deinen Trigger wegfiltern.
    Ist etwas eine spielerei, aber geht.

    lg Andreas

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Man muss da sogar mehr tun, ins besonders wenn man SQL verwendet.
    Durch den Callstack wandern und das 1. Programm nehmen, dass nicht aus einer Q-Lib kommt.
    Bei der Verwendung von Serviceprogrammen für Dateiverarbeitung muss man auch diese überlesen um an den Aufrufer zu kommen.

    Wurde hier schon mal diskutiert unter "wer hat den Trigger ausgelöst".
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    (Vielleicht ist es sogar ein Externes Programm wie Access oder ähnliches)

    Finde ich aber schon bedenklich wenn andere per ODBC Dir die Daten ändern können.

    Vielleicht sollte man das nochmal diskutieren und es verbieten bzw. schauen das die Leute nur lesend auf die Daten zugreifen können.

    GG 3084

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... warum der Umstand? STRJRNPF => im Journal kann man dann die Änderungen mit Programmname und einiges mehr anschauen.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Oct 2015
    Beiträge
    15
    "Select * From table(qsys2.stack_info())" habe ich probiert. Ist scheinbar irgendwie ein Glücksspiel hier den richtigen Datensatz zu treffen wenn eine kette von Programmen (CL RPG ) aufgerufen wurde.
    Bei externen Programmen ist so gut wie nichts vorhanden.

    Leider gibt es bei uns einige externe Anwendungen die auch teilweise über Access oder auch MSSQL laufen. Also nicht nur ODBC :-(

    An Journal habe ich auch schon gedacht. Aber leider ist die Datenflut hier so groß, das nur wenige Receiver vorgehalten werden können. Außerdem ist es sehr müßig die gesamten Sätze zu prüfen, ob auch gerade das Mengenfeld verändert wurde, um das es geht.

    HB

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von HEBORA Beitrag anzeigen
    [COLOR=#333333]Außerdem ist es sehr müßig die gesamten Sätze zu prüfen, ob auch gerade das Mengenfeld verändert wurde, um das es geht.

    HB
    ... genau das eben nicht! Man kann die Receiver automatisch durchsuchen: DSPJRN in outfile und über Before und After image kann man sich die Kandidaten scharf raussuchen. Auch das Transaktionsvolumen muss nicht zum Problem werden, die Analyse könnte auch automatisch beim umhängen der Receiver vor dem löschen stattfinden. Im übrigen ist Platte nicht mehr so teuer und ich empfehle generell alles zu journalisieren, mit before und after image und open/close Einträgen. Das ist bei jeglicher Fehlerabklärung Gold wert und öffnet auch die Möglichkeit commit einzusetzen, was bei SQL Verwendung ohnehin dringend geboten ist!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Der Stack ist streng nach Aufrufebene sortiert. Da ist es kein Zufall, welches Programm den Trigger ausgelöst hat. Du musst also alle Einträge sortiert bearbeiten und SQL und Filehandler überlesen.

    Und Access/MSSQL können auch nur via ODBC auf die IBM i zugreifen. Da ist dann ein Job QZDASOINIT im Spiel. Hier wird es schwieriger zu erkennen, ob per Access oder SQL-Server zugegriffen wurde.

    Ein Journal ist zwar OK, es kann dir aber nur das Programm nennen, dass die Operation vornimmt.
    Bei Verwendung von Services (kann auch OPM sein) benötigst du aber durchaus den Aufrufer des Service.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Oct 2015
    Beiträge
    15
    Hallo,
    ich habe es nun so gelöst:

    INSERT INTO lib.jrnDatei (
    SELECT SEQUENCE_NUMBER, object, USER_NAME, JOB_NAME, JOB_USER, JOB_NUMBER, PROGRAM_NAME, JOURNAL_ENTRY_TYPE,
    INTERPRET(SUBSTRING(ENTRY_DATA, 6, 7) AS CHAR(7) CCSID 1141) AS AB1,
    INTERPRET(SUBSTRING(ENTRY_DATA, 13, 2) AS DECIMAL(2,0) ) AS AB2,
    INTERPRET(SUBSTRING(ENTRY_DATA, 15, 2) AS DECIMAL(3,0) ) AS Pos,
    INTERPRET(SUBSTRING(ENTRY_DATA, 38, 10) AS CHAR(7) CCSID 1141) AS Artikel,
    INTERPRET(SUBSTRING(ENTRY_DATA, 66, 2) AS DECIMAL(2,0) ) AS Bewegungsart,
    INTERPRET(SUBSTRING(ENTRY_DATA, 68, 20) AS CHAR(20) CCSID 1141) AS Text,
    INTERPRET(SUBSTRING(ENTRY_DATA, 111, 5) AS DECIMAL(9,3) ) AS MENGE,
    ENTRY_TIMESTAMP AS ZEITPUNKT
    FROM TABLE ( QSYS2.DISPLAY_JOURNAL( 'JRNLIB', 'JRN',
    STARTING_RECEIVER_NAME => '*CURCHAIN',
    OBJECT_LIBRARY=>'LIB',
    OBJECT_NAME =>'Datei',
    OBJECT_OBJTYPE=>'*FILE', OBJECT_MEMBER =>'Datei'
    ) ) AS X
    WHERE JOURNAL_ENTRY_TYPE <> ' '
    AND CAST(SUBSTR(ENTRY_DATA, 38, 10) AS VARCHAR(10)) IN ('xxxxx')
    AND SEQUENCE_NUMBER NOT IN (SELECT SEQUENCE_NUMBER FROM BKL.jrndatei)
    )



    Das ganze in ein CL und dann mit SBMJOB über WRKREGINF angestoßen.
    Läuft.

    HB

Similar Threads

  1. daten typ einer Datenstruktur ändern
    By inchic in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 16-04-10, 18:38
  2. Triggermeldungen von RPG-Pgm zu Cobol-Pgm
    By puddschini in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 23-05-08, 09:52
  3. Antworten: 3
    Letzter Beitrag: 25-02-02, 22:27
  4. Antworten: 1
    Letzter Beitrag: 16-12-01, 20:22
  5. Falsche Umlaute AS/400 Daten in Delphi-PGM
    By Joker in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 25-10-01, 15:02

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •