[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Oct 2015
    Beiträge
    109

    Question Prozeduren in Servicepgm von einem Anderen Programm aus aufrufen.

    Hallo zusammen,
    ich versuche Prozeduren, die ich in einem Programm, welches als Serviceprogramm und
    Modul gewandelt ist, von einem zweiten Programm aus aufzurufen.
    Ich bekomme folgenden Fehler:
    Objekt QZDMMDTA der Art *SRVPGM in Bibliothek QSOC nicht gefunden.
    Definition für Symbol 'PR_D1KO_CHAIN' nicht gefunden.
    dspsrvpgm sagt:
    Informationen zur Serviceprogrammerstellung:
    Datum/Uhrzeit der Serviceprogrammerstellung . . : 08.06.16 14:31:57
    Exportquellendatei . . . . . . . . . . . . . . . :
    Bibliothek . . . . . . . . . . . . . . . . . . :
    Exportteildatei . . . . . . . . . . . . . . . . :
    Attribut der Aktivierungsgruppe . . . . . . . . : *CALLER
    Gemeinsam benutzte Aktivierungsgruppe . . . . . : *NO
    Übernommene Berechtigung verwenden . . . . . . . : *YES
    ID des codierten Zeichensatzes (CCSID) . . . . . : 65535
    Anzahl der Module . . . . . . . . . . . . . . . : 1
    Anzahl der Serviceprogramme . . . . . . . . . . : 3
    Anzahl nicht aufgelöster Referenzen . . . . . . : 0
    Anzahl der Copyrights . . . . . . . . . . . . . : 0
    Alle Erstellungsdaten . . . . . . . . . . . . . : *YES
    Überwachbare Daten verdichtet . . . . . . . . . : *NO
    Laufzeitinformationen verdichtet . . . . . . . . : *NO
    Aktualisierung zulassen . . . . . . . . . . . . : *YES
    *SRVPGM-Bibliothek aktualisieren . . . . . . . . : *NO
    Profildefinitionsdaten . . . . . . . . . . . . . : *NOCOL
    Aktivierter Teraspace-Speicher für Module . . . : *ALL
    Speichermodell . . . . . . . . . . . . . . . . . : *SNGLVL
    Argumentoptimierung . . . . . . . . . . . . . . : *NO
    Textbeschreibung . . . . . . . . . . . . . . . . :

    Das aufzurufende Programm sieht (gekürzt) wie folgt aus:
    Code:
     ctl-opt nomain;                                
     ctl-opt option(*nodebugio:*srcstmt:*nounref);  
    **********************************
    dcl-proc pr_D1KO_chain export ;   
    //--------------------------------
    // Prozedur Interface             
    //--------------------------------
    dcl-pi pr_D1KO_chain ind;         
      DS_Input  likeds(DS_Datei);     
      Lock char(1) const;             
    end-pi;

    Der Aufruf per Prototyp in Programm 2:
    Code:
    dcl-pr D1KO_Chain ind extproc('PR_D1KO_CHAIN');
      DS_D1KO likeds(DS_ARTS);                     
      Lock char(1)   const;                        
    end-pr;
    Die Befehle zum Erstellen von Serviceprogramm und Modul:
    Code:
     CRTRPGMOD MODULE(MYLIB/D1KO000) SRCFILE(MYLIB/MYDAT)             
         SRCMBR(D1KO000) OPTION(*EVENTF) DBGVIEW(*SOURCE) REPLACE(*YES)           
                                                                                  
     CRTSRVPGM SRVPGM(MYLIB/D1KO000) MODULE(MYLIB/D1KO000) EXPORT(*ALL)


    Hat von euch jmd. eine Idee / Lösung?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Dein Fehler ist, dass er das Serviceprogram QZDMMDTA nicht findet.
    Das hat mit deinen Programmen ja erst mal nichts zu tun.
    Schau also mal, wo du das Programm aufrufst bzw. welche Prozedur in diesem Programm.
    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

  3. #3
    Registriert seit
    Oct 2015
    Beiträge
    109
    Ich frage mich, wie er auf den Namen kommt?
    Muss ich in dem aufrufenden Programm das Serviceprogramm angeben?
    Vllt bei der Wandlung oder so etwas?

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Ich glaube, dein EXTPROC ist falsch. Das darf nicht der Name der Prozedur im Serviceprogramm sein. Es muss der Name des Programmobjektes sein, in dem sich die exportierte Prozedur befindet.

    Also nicht:

    dcl-pr D1KO_Chain ind extproc('PR_D1KO_CHAIN');
    DS_D1KO likeds(DS_ARTS);
    Lock char(1) const;
    end-pr;

    sondern:

    dcl-pr D1KO_Chain ind extproc('D1KO000');
    DS_D1KO likeds(DS_ARTS);
    Lock char(1) const;
    end-pr;

    Dieter

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wie erstelltst du denn dein Programm, dass das Service-Programm aufrufen soll?
    Dort musst du die Module alle mit aufführen.

    Arbeitest du nicht mein einem BNDDIR, musst du dein Programm in 2 Schritten erstellen:
    1. CRTRPGMOD (bzw. dei SQL-Variante)
    2. CRTPGM ... MODULE( Liste der Module ) ... BNDSRVPGM( Liste der Serviceprogramme)

    Bei der Fehlermeldung mal F9 drücken und schauen, an wen denn die Nachricht ging.
    Per DSPSRVPGM ggf. mal die Exporte prüfen, hier ist Großkleinschreibung wichtig.
    BNDDIR's vereinfacht zwar die Sache, macht es allerdings ein wenig komplexer.
    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

  6. #6
    Registriert seit
    Oct 2015
    Beiträge
    109
    Dankeschön,
    hab das ausprobiert, es läuft aber auf das Gleiche raus
    Objekt QZDMMDTA der Art *SRVPGM in Bibliothek QSOC nicht gefunden.
    Definition für Symbol 'PR_D1KO000' nicht gefunden.

  7. #7
    Registriert seit
    Oct 2015
    Beiträge
    109
    F9 sagt:
    Von Programm . . . . . . . . . : QBNBIND
    Von Bibliothek . . . . . . . : QSYS
    Von Modul . . . . . . . . . : QBNBSYMR
    Von Prozedur . . . . . . . . : QBNBSYMR__UnresolvedReferenceIterator
    Von Anweisung . . . . . . . : 31

    An Programm . . . . . . . . . : QBNBIND
    An Bibliothek . . . . . . . : QSYS
    An Modul . . . . . . . . . . : QBNBSYMR
    An Prozedur . . . . . . . . : QBNBSYMR__SignalUnresolvedReferences
    An Anweisung . . . . . . . . : 8
    Ich hab CRTBNDRPG verwendet.

    ich denke CRTRPGMOD war der wichtige Schritt den ich vergessen hatte.
    Ich werde jetzt mal versuchen das auf diese Art zu erstellen.
    Dankeschön

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von dholtmann Beitrag anzeigen
    Ich frage mich, wie er auf den Namen kommt?
    Muss ich in dem aufrufenden Programm das Serviceprogramm angeben?
    Vllt bei der Wandlung oder so etwas?
    Zum Compile-Zeitpunkt (genauer gesagt zum Zeitpunkt des Bindens) muss er die Prozedur in dem Service-Programm QZDMMMDA in der Bibliothek QSOC gefunden haben und die eindeutige Signatur dieses Service-Programms eingebunden haben.

    Wie er das Service-Programm im Binder-Schritt findet, kommt darauf and, ob die Service-Programme manuell aufgelistet werden oder aus einem oder mehreren Binderverzeichnissen, die beim Binder-Schritt angegeben wurden findet.

    Sofern das Programm mit CRTBNDRPG gewandelt wird, können Binder-Verzeichnisse im Compile-Befehl aufgelistet werden. Ebenso ist es möglich Binder-Verzeichnisse in den H-Bestimmungen zu hinterlegen.

    Binder-Verzeichnisse sind immer additiv, d.h. H-Bestimmungen überschreiben nicht die Compile-Befehl-Angaben und umgekehrt.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wie heißt denn nun deine Prozedur?
    EXTPROC(Prozedurname) im rufenden und EXPORT(Prozedurname) im gerufenen Programm müssen genau übereinstimmen.
    Zur Compilezeit wird das Programm gebunden. Sind Importe (wie EXTPROC) nicht vorhanden, kann das Objekt eigentlich nicht erstellt werden.

    Außerdem fällt mir auch auf, dass deine DCL-PROC und DCL-PI unterschiedlich sind.
    DCL-PROC definiert den Prototyp incl. Parameter der vom Compiler gebunden wird.
    DCL-PI definiert die Aufrufschnittstelle der Prozedur selber.
    Eigentlich sollte hier der Compiler schon meckern, wenn der selbe Name unterschiedlich definiert ist.
    Ggf. ist das der Fluch des Free-Compilers, dass er da nicht mehr zurechtfindet?
    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

  10. #10
    Registriert seit
    Oct 2015
    Beiträge
    109
    ich werde die Groß und Kleinschreibung anpassen.
    PR und PI passen jedoch zusammen, die Datenstrukturen heißen zwar unterschiedlich, sind aber identisch. Das verwende ich öfter in so einer Kombination.
    Ich verwende DS_D1KO likeds(DS_ARTS); und DS_Input likeds(DS_Datei);
    nur mit unterschiedlichen Namen, da das eine Programm generiert wird.
    Hatte das ganze schon einmal lauffähig, hab es heute aber Stundenlang nicht hinbekommen
    (vermutlich aufgrund der Wandlungsart (Da bin ich aber noch dran)).

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich bezog mich nur auf diese Definition im ersten Post, da fehlte halt die komplette Definition.
    Diese muss auch im gerufenen Programm übereinstimmen.
    dcl-proc pr_D1KO_chain export ;
    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

  12. #12
    Registriert seit
    Oct 2015
    Beiträge
    109
    achso, ja das stimmt.
    Hab ich vllt nicht gut aufgeschrieben.

    Ich hab mich jetzt doch für ein Bindeverzeichnis entschieden.
    Es wäre sonst kompliziert, sich jedes Mal zu merken,
    mit welchem Befehl erstellt wurde und
    das nächste Serviceprogramm zu ergänzen.
    Da finde ich die Bindeverzeichnismethode einfacher.

Similar Threads

  1. CL-Programm aus C# mit Rückgabeparameter aufrufen
    By Armin in forum NEWSboard Programmierung
    Antworten: 16
    Letzter Beitrag: 04-03-16, 16:07
  2. Berechtigung Job mit anderen User aufrufen
    By Paul_Hofmann in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-01-16, 09:23
  3. Wie kann man über SQL ein I5-Programm aufrufen
    By MR-BN in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 02-10-15, 15:40
  4. Batch-Programm aus RPG aufrufen?
    By hansr in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 28-11-02, 16:38
  5. IBM Nadeldrucken in einem anderen Gebäude als die AS 400
    By Markus H in forum NEWSboard Drucker
    Antworten: 11
    Letzter Beitrag: 12-02-02, 13:22

Tags for this Thread

Berechtigungen

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