-
Frage CPYFRMSTMF
Hallo,
ich schreibe meine Sourcen von der Iseries ins IFS, von dort werden sie dann in Subversion SVN geschrieben/gesichert. Soweit funktioniert mein Weg auch schon.
Sieht im IFS dann so aus:
\\iseries\ROOT\home\SVN\source\trunk\LNSSOND_SOURC EM\PM3073.RPG
Nun will ich natürlich auch wieder zurück. Der Weg ist mir soweit klar. Allerdings hab ich beim zurückschreiben in die Source ein Problem. Mit dem folgenden Befehl
CPYFRMSTMF FROMSTMF('/home/SVN/source/trunk/LNSSOND_SOURCEM/PM3073.RPG
') TOMBR('/qsys.lib/test.lib/source.file/PM3073.mbr') MBROPT(*REPLACE)
STMFCODPAG(*PCASCII) ENDLINFMT(*CRLF)
bekomme ich die Sourcen zwar wunderbar zurück, kann sie anschauen etc.
Allerdings wird die Source ohne die "ART" (STRPDM) erstellt.
Ich hab zwar schon einen anderen Weg versucht, der auch funktionieren würde:
FTP auf IFS -> DIR *.* (DISK -> dann dort die Datei durchlesen und die Sourcen leer erstellen und anschließend mit dem CPYFRMSTMF die Sourcen reinkopieren.
Finde ich aber etwas umständlich.
Frage: kann ich das auch eleganter lösen?
-
Wenn du die "Art" aus dem Namen der IFS-Datei extrahierst, kannst du sie danach per CL in deiner Sourcedatei eintragen:
CHGPFM FILE(&LIB/&FILE) MBR(&MBR) +
SRCTYPE(&SRCTYPE)
Also z.B:
CHGPFM FILE(TESTLIB/QRPGLESRC) MBR(PGM001) SRCTYPE(RPGLE)
Dieter
-
Danke hilft mir auch schon mal weiter!!
Noch eine Frage: Wenn ich im IFS mehrere Sourcen stehen habe und die alle rüberziehen will, geht das mit den Cpyfrmstmf überhaupt.
Ein generisch mit *.* geht nicht.*.* bringt da einen Fehler. Gibts da was ala' Copy mit *.*??
Wie lese ich aus dem IFS die ganzen Einträge ohne "FTP"?
-
Es gibt dafür APIs von IBM, die du in RPGLE einbinden kannst. Z.B. kann das API "readdir" ein ganzes Verzeichnis auslesen und die Namen liefern.
Wir haben bei uns die meisten IFS-Zugriffe (z.B. Dateien lesen, schreiben, ...) über Streamfile-APIs gelöst.
Dieter
-
Noch ein Nachtrag: Es gibt da übrigens ein downloadbares Handbuch "IBM i Programming API overview and concepts" von IBM. Wenn ich spezielle APIs suche, nutzte ich allerdings meistens die IBM-Internetseite IBM i information center Dort gibt es einen API-Finder.
Es ist manchmal etwas mühsam, die APIs (sind in Regel in C geschrieben) zu nutzen. Aber wenn man das einmal gemacht hat, kann man sie wegkapseln und einfacher nutzen.
Dieter
-
Alle Einträge kannst du mit QSH (Beispiele hier im Forum) auslesen.
Mittels "FTP localhost" und mget kannst du dir alle Sourcen in die PF kopieren.
Du musst allerdings dann per RTVMBRD *NEXT dann die Art per CHGPFM manuell eintragen.
-
Erstmal Danke an alle!! Bin durch Euch jetzt schon sehr viel weiter gekommen.
Zufällig hab ich auch noch das hier gefunden, das mir Qsh und FTP erspart. Das Programm konnte ich auch wunderbar erweitern (Dateiausgabe) Ich stelle es mal hier rein, vielleicht kann man es ja mal brauchen 
Mann muss nur den Pfad (pathtolist)anpassen, dann tut das Teil.
Code:
H DftActGrp(*No) Option(*SrcStmt : *NoDebugIO)
D PATHTOLIST C CONST('/home/jamie/')
D*PATHTOLIST C CONST('/')
D*
D* Directory Entry Structure (dirent)
D*
D*
D p_dirent s *
D dirent ds based(p_dirent)
D d_reserv1 16A
D d_reserv2 10U 0
D d_fileno 10U 0
D d_reclen 10U 0
D d_reserv3 10I 0
D d_reserv4 8A
D d_nlsinfo 12A
D nls_ccsid 10I 0 OVERLAY(d_nlsinfo:1)
D nls_cntry 2A OVERLAY(d_nlsinfo:5)
D nls_lang 3A OVERLAY(d_nlsinfo:7)
D nls_reserv 3A OVERLAY(d_nlsinfo:10)
D d_namelen 10U 0
D d_name 640A
D*------------------------------------------------------------
D* Open a Directory
D*
D* DIR *opendir(const char *dirname)
D*
D*------------------------------------------------------------
D opendir PR * EXTPROC('opendir')
D dirname * VALUE
D*------------------------------------------------------------
D* Read Directory Entry
D*
D* struct dirent *readdir(DIR *dirp)
D*
D*------------------------------------------------------------
D readdir PR * EXTPROC('readdir')
D dirp * VALUE
D* a few local variables...
D dh S *
D PathName S 256A
D Name S 256A
C* Step1: Open up the directory.
c eval PathName= PATHTOLIST + x'00'
C eval dh = opendir(%addr(PathName))
C if dh = *NULL
c eval Msg = 'Cant open directory'
c dsply Msg 50
c eval *INLR = *ON
c Return
c endif
C* Step2: Read each entry from the directory (in a loop)
c eval p_dirent = readdir(dh)
c dow p_dirent <> *NULL
C* FIXME: This code can only handle file/dir names 256 bytes long
C* because thats the size of "Name"
c if d_namelen < 256
c eval Name = %subst(d_name:1:d_namelen)
c movel Name dsply_me 52
c dsply_me dsply
c endif
c eval p_dirent = readdir(dh)
c enddo
C* Step3: End Program
c dsply Pause 1
c eval *inlr = *On
der Link dazu display all tables in IFS directory
-
Sorry for English - you might be interested in our SVN client for IBM i. See Subversion and other tools for IBM i developers
Regards,
Alexei
-
Hallo,
ich muss das Thema nochmal hochholen. Da ich erst jetzt wieder mal dazugekommen bin da weiterzumachen.
Über was ich jetzt stolpere ist, mein "entry". Wenn ich das Programm laufen lasse mit der Konstanten CONST im Pfadnamen (wie im Original) funktioniert es.
Wenn ich das ganze dahin ändere, das ich den Pfadnamen oder einen Teil davon übergeben will klappts nicht mehr.
Ich hab dann in der Variablen "dh" imm "*Null" stehen, anstatt wie im Orginal den Pfadnamen.
Kann mir da jemand einen Tip geben, woran's da bei mir krankt?
Code:
H DftActGrp(*No) Option(*SrcStmt : *NoDebugIO)
FDIROUTPUT O E DISK
D PATHTOLIST C CONST('/home/SVN/src_diso1/trunk/+
D LSRCELNS_SOURCE/')
D PFADNAME S 100A INZ VARYING
D*
D* Directory Entry Structure (dirent)
D*
D*
D p_dirent s *
D dirent ds based(p_dirent)
D d_reserv1 16A
D d_reserv2 10U 0
D d_fileno 10U 0
D d_reclen 10U 0
D d_reserv3 10I 0
D d_reserv4 8A
D d_nlsinfo 12A
D nls_ccsid 10I 0 OVERLAY(d_nlsinfo:1)
D nls_cntry 2A OVERLAY(d_nlsinfo:5)
D nls_lang 3A OVERLAY(d_nlsinfo:7)
D nls_reserv 3A OVERLAY(d_nlsinfo:10)
D d_namelen 10U 0
D d_name 640A
D*------------------------------------------------------------
D* Öffnen Directory
D*
D* DIR *opendir(const char *dirname)
D*
D*------------------------------------------------------------
D opendir PR * EXTPROC('opendir')
D dirname * VALUE
D*------------------------------------------------------------
D* Read Directory Entry
D*
D* struct dirent *readdir(DIR *dirp)
D*
D*------------------------------------------------------------
D readdir PR * EXTPROC('readdir')
D dirp * VALUE
D* a few local variables...
D dh S *
D PathName S 256A
D Name S 256A
D PATH S 256A
C *ENTRY PLIST
C PARM P_PFADNAME 25
C* Step1: Öffnen Directory.
c** eval Pathname = PATHTOLIST + x'00'
c eval PFADNAME = pathtolist + P_PFADNAME
c eval Pathname = PFADNAME + x'60'
C eval dh = opendir(%addr(PathName))
C if dh = *NULL
c eval Msg = 'Cant open directory'
c dsply Msg 50
c eval *INLR = *ON
c Return
c endif
-
Ist das ein Tippfehler oder warum hängst du X'60' dran?
Der Prototyp sollte mit "const options(*string)" definiert werden, dann kannst du das mit dem X'00' sein lassen:
dh=opendir(pathtolist + %trim(Pfadname));
Wichtig ist, dass keine Leerzeichen am Ende sind.
Allerdings:
MKDIR '\Home\MyDir ' enthält am Ende ein Blank was mit zum Namen zählt!
-
Sorry, aber auch wenn ich mich hier jetzt beschämend als unwissend oute. Ich versteh's nicht.
dh=opendir(pathtolist + %trim(Pfadname));
ist mir klar.
??? - Zeile ist vom Inhalt klar, aber wo und wie nicht?
ich hab jetzt versucht möglichst viel über "Prototypen" zu lesen, kriegs aber nicht hin.   
- das mit dem "X60" ist wohl aus meinen Versuchen übrig geblieben.
Similar Threads
-
By stoerfang in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 24-01-13, 10:27
-
By Bratmaxxe in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 24-01-07, 19:17
-
By wrkas400 in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 11-01-07, 11:12
-
By Freezer in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 23-10-06, 21:02
-
By cbe in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 24-08-06, 17:30
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks