[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    385

    Wie erstelle ich ein SEU UserExit Programm?

    Hallo zusammen,

    ich bräuchte mal Hilfe von Vollprofis ;-)

    Ich möchte ein UserExit Programm schreiben, welches mir gewisse Codeblöcke automatisch in die RPGLE Quelle einfügt (Kommantarbloc bei KOM, eine KeyList bei KEY etc).
    Leider habe ich absolut keinen Plan wie ich das angehen soll. Muss das dahinterligende Programm einen speziellen Aufbau haben (*Entry Parms... )?
    Das zweite Problem es sollen ja mehrere Sachen generiert werden, ich kann aber ja nur ein ExitProgramm hinterlegen, schreibe ich das ein Sammelprogramm für alles was anhand des Zeilenbefehls unterscheidet, oder hinterlege ich dort mehrere Programme?

    Danke an alle Helfenden.

  2. #2
    Registriert seit
    Dec 2000
    Beiträge
    450
    Beschreibung und Beispiele gibt es im SEU-Handbuch:

    http://publib.boulder.ibm.com/infoce...s/c0926050.pdf

    Bruno

  3. #3
    Registriert seit
    Jul 2002
    Beiträge
    151
    Halo ExAzubi,
    Ein nettes Beispiel, welches ich auch selbst einsetze, findest Du hier:
    http://www.mcpressonline.com/mc/.5bfadc7d

    Gruß Holger

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    385
    Danke für die Hinweise, besonder die Bsp. von Hollly haben mir geholfen und das PDF war auch sehr Hilfreich.

    Allerdings habe ich ein Problem, ich kann keine Zeilen einfügen, da knallt mir der SEU. Kann mir vielleicht jemand noch zu diesem Problem ein Tipp geben?

  5. #5
    Registriert seit
    Dec 2000
    Beiträge
    450
    Beim Einfügen von Zeilen musst du SEU noch mitteilen, wieviele Zeilen vom Exit-Programm zurückkommen. Hast du das in deinem Programm?

    Bruno

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    385
    Also der Code-Block sieht folgendermaßen aus.
    Code:
    D RETINF		  DS				  BASED(P2) 
    D  RRETC				  1	  1			  
    D  RRSV2				  2	  4			  
    D  RRECO				  5	  8B 0		   
    D  RSEQN				  9	 15			  
    D  RRSV3				 16	 37
    Paramterds für den 2 Parameter

    Und der Codeblock (Jetzt nur testweise, soll bei Funktionieren noch verschönert werden.
    Code:
    C	 SKOMB		 BEGSR							  
     *													 
    C	 1			 DO  3						
    C				   IF HRLEN<100			  
    C				   MOVEL *ALL'*'	LTXT1	  
    C				   ELSE							   
    C				   MOVEL	 *ALL'*'	   LTXT2	  
    C				   ENDIF							  
     *													 
    C				   MOVEL	 '0000001'	 RSEQN	  
    C				   EVAL	  RRECO = 1				
    C				   EVAL	  RRETC = '0'			  
    C				   ENDDO							  
    C				   EVAL	  LCMD1 = *BLANK		   
     *													 
    C	 EKOMB		 ENDSR
    Was muss ich anders machen?

    Trotzdem Danke für alle bisherigen Tipps.

  7. #7
    Registriert seit
    Jul 2005
    Beiträge
    1.053
    Zitat Zitat von ExAzubi
    Und der Codeblock (Jetzt nur testweise, soll bei Funktionieren noch verschönert werden.
    Code:
    C	 SKOMB		 BEGSR							 
    *													 
    C	 1			 DO 3						
    C				 IF HRLEN<100			 
    C				 MOVEL *ALL'*'	LTXT1	 
    C				 ELSE							 
    C				 MOVEL	 *ALL'*'	 LTXT2	 
    C				 ENDIF							 
    *													 
    C				 MOVEL	 '0000001'	 RSEQN	 
    C				 EVAL	 RRECO = 1				
    C				 EVAL	 RRETC = '0'			 
    C				 ENDDO							 
    C				 EVAL	 LCMD1 = *BLANK		 
    *													 
    C	 EKOMB		 
    ENDSR
    Bist du dir Sicher das die SR zu Begin SKOMB und am Ende EKOMB heißt ?
    Was muss ich anders machen?

    Trotzdem Danke für alle bisherigen Tipps.
    Gruß AS400.lehrling

  8. #8
    Registriert seit
    Apr 2005
    Beiträge
    385
    Zitat Zitat von AS400.lehrling
    Bist du dir Sicher das die SR zu Begin SKOMB und am Ende EKOMB heißt ?

    Gruß AS400.lehrling
    Ja warum nicht?

    Die Benennung der SR ist nun doch ganz egal, und die des Ende TAG's ja auch!?!

  9. #9
    Registriert seit
    Dec 2000
    Beiträge
    450
    Versuch doch mal Folgendes:

    Vor der Schleife
    MOVEL 'A000001' RSEQN
    Damit teilst du SEU mit, dass du nach Zeile 1 was einfügen willst. Statt der 1 kannst du aus der Eingabestruktur auslesen, in welcher Zeile der Befehl eingegeben wurde und das entsprechend setzen, damit nicht nach Zeile 1 sondern nach der aktuellen Zeile eingefügt wird.

    In der Schleife
    die Zeilen mit dem einzufügenden Text füllen. Den Pointer auf die Zeile dabei jeweils erhöhen.

    Nach der Schleife
    EVAL RRECO = Anzahl der eingefügten Zeilen
    EVAL RRETC = '0'

    Ich mache das in einem Cobol-Programm und das funktioniert so.

    Bruno

  10. #10
    Registriert seit
    Apr 2005
    Beiträge
    385
    Danke Bruno für den Tipp, der hat geholfen.

Similar Threads

  1. Programm auf "ferner" AS400 ausführen.
    By Souljumper in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 13-05-09, 19:50
  2. Programmbibliothek in einem Cobol oder CL Programm ermitteln
    By schatte in forum NEWSboard Programmierung
    Antworten: 19
    Letzter Beitrag: 10-01-07, 11:32
  3. Programm auf anderer AS400 starten
    By codierknecht in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 04-07-06, 11:52
  4. UserEXIT in SEU -2 Fragen
    By Robi in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 25-07-01, 14:02

Berechtigungen

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