9
Execute FTP commands in batch on the iSeries Tim Brinker 08 Mar 2001 Rating: -3.90- (out of 5) On the AS/400 create a flat physical file. This file will contain the User ID and Password to sign for the system, the FTP command will be executed. This file will also contain the FTP commands (PUT, GET..). Example Flat File Containing the FTP Commands USERID PASSWORD binary put Library/File Library/File quit Replace the USERID and PASSWORD in the example file with a valid User ID and Password for the system the FTP will be executing to. Now to execute the FTP file defined above in a batch job, you need to override the file created above to a file name of INPUT. Then all you need to do is execute FTP with the System Name or IP Address. Example CL Commands to Execute the FTP OVRDBF FILE(INPUT) TOFILE(FILECREATEDABOVE) FTP RMTSYS('100.100.1.1') DLTOVR FILE(*ALL) You can also automate FTP commands from the PC. To do this you need again to create a script (text) file on the PC that contains the FTP commands you wish to execute. Example PC Text File of FTP commands open 100.100.1.1 {IP Address of the system you wish to connect to} USERID {User ID for the System You Will Connect to} PASSWORD {Password of the System you Will Connet to) binary get /qsys.lib/temp.lib/temp.file/qtemp.mbr e:qtemp close quit Now to execute the FTP command to transfer files from the another system to your PC do the following. Start the MS DOS Prompt and at the DOS prompt enter the following ftp -s:FILENAME replace FILENAME with the name that you saved the text file as. Note: My FTP scripts have "binary" in them. You use binary when you wish to transfer AS/400 Save files between systems. AS/400 FTP name formats Lou Gerritse 03 Apr 2001 Rating: -3.22- (out of 5) When FTPing an AS/400 from a non-AS/400 client the command 'quote site namefmt' can be used to display the name format currently used by the FTP server. To switch between LIB and DIR naming conventions using an additional 1 or 0 appended to the above command switches the name format to the preferred naming format.

IFS FTP Tutorial for AS400 Iseries

Embed Size (px)

Citation preview

Page 1: IFS FTP Tutorial for AS400 Iseries

Execute FTP commands in batch on the iSeries

Tim Brinker

08 Mar 2001

Rating: -3.90- (out of 5)

On the AS/400 create a flat physical file. This file will contain the User ID and Password to sign for the system, the FTP command will be

executed. This file will also contain the FTP commands (PUT, GET..).

Example Flat File Containing the FTP Commands

USERID PASSWORD

binary

put Library/File Library/File

quit

Replace the USERID and PASSWORD in the example file with a valid User ID and Password for the system the FTP will be executing to.

Now to execute the FTP file defined above in a batch job, you need to override the file created above to a file name of INPUT. Then all you

need to do is execute FTP with the System Name or IP Address.

Example CL Commands to Execute the FTP

OVRDBF FILE(INPUT) TOFILE(FILECREATEDABOVE)

FTP RMTSYS('100.100.1.1')

DLTOVR FILE(*ALL)

You can also automate FTP commands from the PC. To do this you need again to create a script (text) file on the PC that contains the FTP

commands you wish to execute.

Example PC Text File of FTP commands

open 100.100.1.1 {IP Address of the system you wish to connect to}

USERID {User ID for the System You Will Connect to}

PASSWORD {Password of the System you Will Connet to)

binary

get /qsys.lib/temp.lib/temp.file/qtemp.mbr e:qtemp

close

quit

Now to execute the FTP command to transfer files from the another system to your PC do the following.

Start the MS DOS Prompt and at the DOS prompt enter the following

ftp -s:FILENAME

replace FILENAME with the name that you saved the text file as.

Note: My FTP scripts have "binary" in them. You use binary when you wish to transfer AS/400 Save files between systems.

AS/400 FTP name formats

Lou Gerritse

03 Apr 2001

Rating: -3.22- (out of 5)

When FTPing an AS/400 from a non-AS/400 client the command 'quote site namefmt' can be used to display the name format currently used

by the FTP server. To switch between LIB and DIR naming conventions using an additional 1 or 0 appended to the above command switches

the name format to the preferred naming format.

Page 2: IFS FTP Tutorial for AS400 Iseries

Tech tips: Making file transfers redundant

by Glenn Robinson

Article Information

Article ID: 18919

Pub: iSeries NEWS UK

Dept: Feature Articles

Date: June 24, 2004

Printer Friendly

Other Articles By:

Glenn Robinson

Article Feedback:

• Feedback can be submitted only for articles that are less than six months old.

My last few articles have been concerned with using the IFS to access file systems on other servers and this month I am going to carry on in a

similar vein. On my travels to iSeries and AS/400 sites I still see many customers using Data Transfer and FTP to move data between their

OS/400 based systems and their Windows/*nix systems. In the majority of cases there is no real need to do this any longer because of the

additional functionality built in to OS/400 over the last few years.

Most customers using File Transfer just want to get a file or two from the system, save it to My Documents and then open it in Excel. I was

working with a customer a little while ago who said it took him around four days at the end of each month to run queries and then to

download some very large files; he'd being doing this for around a decade!

COPYING TO/FROM EXTERNALLY DESCRIBED FILES

In a previous Tech Tip I briefly discussed how to use CPYTOIMPF. I'll expand on the command here and touch on a few other commands

too. The easiest way to get files in to a format that Excel or OpenOffice can read is to use the Copy to Import File command (CPYTOIMPF).

This command takes a database file and converts it to csv format. This is an ASCII delimited file format that is understood by many

applications which separates each field with a comma, places double quotes around character fields and terminates each record with an End

Of Record character(s).

You will recall that the /QNTC file system will allow me to copy files to/from shares on other Windows servers, Samba servers and OS/400

systems running NetServer. Simply by using a command such as:

CPYTOIMPF FROMFILE(QIWS/QCUSTCDT)

TOSTMF('/qntc/fs001/public/glenn/customer.csv')

STMFCODPAG(*PCASCII)

RCDDLM(*CRLF)

I can get a csv format version of file QIWS/QCUSTCDT in to a share on the remote server FS001.

The important parameter shown above is STMFCODPAG. This determines what the code page of the file you are creating will be. If you

leave it as default and try to open the csv file in Excel it will just show up as a load of weird characters. By specifying *PCASCII you are

instructing OS/400 to convert the database file in to a csv format that Windows applications will understand.

The RCDDLM parameter lets you specify the characters that are used to denote the end of each record. By default this is set to *EOR which

adds hex 00 to the last field. If you are sending the file to a DOS/Windows machine, you need to specify *CRLF; for a *nix target system

specify *LF. In my example, I have given the target file a suffix of .csv. Although you could put anything at all, doing this will ensure that

Windows associates the file with the MS Excel application, ie when you double click the customer.csv file Windows knows to open it with

Excel.

Of course, you can also import delimited files into DB2 files too. CPYFRMIMPF allows you to take a file in csv format and copy the

contents in to an externally described file. The following command:

CPYFRMIMPF FROMSTMF('/qntc/fs001/public/glenn/customer.csv')

Page 3: IFS FTP Tutorial for AS400 Iseries

TOFILE(GLENN/CUST)

RCDDLM(*CRLF)

will take the contents of file customer.csv on server FS001 and adds it to file CUST in library GLENN. Note that the file GLENN/CUST

must already exist.

COPYING FLAT FILES

Sometimes you want to copy to or from a flat file. Let's say you've run the CPYSPLF command to get the contents of a spool file to a file;

this can be copied to the IFS or to a remote system using the CPYTOSTMF command:

CPYTOSTMF FROMMBR('/qsys.lib/glenn.lib/spoolfile.file/spoolfile.mbr')

TOSTMF('/qntc/fs001/public//glenn/customerReport.txt')

STMFCODPAG(*PCASCII)

As you can, see the format is similar to CPYTOIMPF but the first parameter is in IFS format rather than LIBRARY/OBJECT format. Again,

by specifying .txt Windows will know what program to open the file with -- .rtf and .doc also work. CPYFRMSTMF will copy a text file in

to a flat file in a library, again the format is similar to the above command.

SHARING THE FILES

The methods I have described in this and previous articles have shown how you can create ASCII versions of database files and copy them to

shares on remote servers or to the IFS on another iSeries system. One method I favour is to copy the files to a folder within the IFS of your

local iSeries rather than to a remote share. You can then share out the local folder using either a NetServer share or an NFS export. In both

cases you can specify that the share/export is read-only or read/write. The two benefits of using this method are that the data is held locally so

will be saved as part of your daily backup routine with the SAV command and that, by using a read-only share/export, the file cannot be

tampered with by the clients using the files. They can, of course, copy the file to their PC and amend it but they wouldn't be able to replace

the original file.

COPYING SAVE FILES

The CPY command allows to you move any IFS objects around. This is especially useful for moving Save Files between your iSeries

systems. Consider the command:

CPY OBJ('/qsys.lib/glenn.lib/glenn.file')

TODIR('/qfilesvr.400/london/qsys.lib/qgpl.lib')

This command takes a Save File called GLENN in library GLENN on my local system and copies it to library QGPL on remote iSeries

LONDON.

WHERE NOW?

Although using the IFS commands will replace many Data Transfer requests it will not replace all of them. One major benefit of replacing

Data Transfers with IFS commands is that you don't need an iSeries Access/Client Access license.

Most people don't realise that you only need an iSeries Access license for PC5250 and Data Transfer, all other iSeries Access and iSeries

Navigator functions are included as part of your OS/400 license. This includes ODBC, so you can quite happily use any application that

supports ODBC to get data from your OS/400 files and in to your Windows applications with no license required.

Going back to my previous comment about the customer who'd been doing the same file transfers every month for many years, I got to

thinking why he was still doing these transfers and came to this conclusion. Many iSeries and AS/400 shops are led to believe by Windows

technical staff and IT management that our system is an old legacy system so we feel that the way we did things ten years ago is still

appropriate today. This is not necessarily true; we have possibly the most robust, flexible, open and feature-rich computer system around but

we don't, in general, exploit it.

Hopefully my last few Tech Tips will have demonstrated how well iSeries integrates with other non-OS/400-based computer systems. My

advice is that you should question the way you move data around between your iSeries and other systems. In some instances your procedures

will still be valid but I believe that many of them would benefit from using some of the more up-to-date methods available within OS/400.

For direct FTP to a physical file:

Page 4: IFS FTP Tutorial for AS400 Iseries

1. The flat file needs to be fixed-length, matching character-for-character the layout of the physical file. The next 2 items describe things that

prevent this.

2. If the physical file has what are called packed fields, then not directly. It is possible to define what is called a logical file in DDS or SQL,

and that file can map the packed fields to what are called zoned fields. BTW, packed fields store each digit in half a byte, so each byte stands

for 2 digits.

3. If there are negative numbers, not usually - the sign is held in a half-byte of the last byte of the zoned field.

If none of those problems exist, this is very simple. There are a couple naming conventions to get used to, but it's just simple ftp at this point.

But if not, there is still hope - there is a command on the 400, CPYFRMIMPF (copy from import file) that can do the conversions, especially

well with delimited PC files. Actually, fixed-length PC files are harder with this command - they require another object on the 400 that

defines the layout of the data.

To use CPYFRMIMPF, the flat file has to get to what is called the IFS (Integrated File System) of the 400. This is a PC-like file system, and

you can either FTP the file to it, or use Windows networking to get there - map a network drive.

You can ftp the flat file to the IFS, then use a special 400 ftp server subcommand (rcmd) that can execute the CPYFRMIMPF command

remotely.

There's more to the details - the ftp manual covers a lot.

Page 5: IFS FTP Tutorial for AS400 Iseries

How do I do FTP from/to my AS/400?

I) Manual method - Good for one shotters or for testing and learning.

A) Starting ftp from my PC to the 400

From your PC do the following:

Start

Run

cmd

From the command interface window:

ftp your400name

Enter your userid

Enter your password

For a list of commands type in ? and hit enter

By default you will be in the library system. To change to the directory

system then enter: quote site namefmt 1

To change to the library system: quote site namefmt 0

get is used to get a file from the remote to the local.

put is used to put a file to the remote from the local.

Here is a sample used to run a command on the 400:

quote rcmd crtpf mylib/myfile rcdlen(80)

quit is used to exit.

When transmitting a save file to the 400, the save file should already

exist. Also you should use the bin command to transmit the file in

binary.

B) Starting ftp from my 400 to another 400

Very similar to starting ftp from a pc to the 400.

Differences include:

While you still use ? to prompt for commands the prompting appears

different.

C) Starting ftp from my 400 to a PC.

You'll need to ensure that the PC has a ftp server loaded. Windows comes

with one, but normally you have to load that separately. There are

others available.

II) Automated, or scripting, method

A) Scripted ftp from the pc to the 400.

First create a .BAT file. Let's call ours FTPSCRIPT.BAT. In it we'll

have one line:

ftp -n -s:ftpscript.txt>ftpout.txt

The -n says not to open a system until we say so.

The -s says to used a script file and this is the name of the script file.

The >ftpout.txt will pipe the output to a text file. You can check this

file for transmission errors.

Now create another text file called FTPSCRIPT.TXT. In this place:

open myas400

user myuserid mypassword

cd mylib

quote rcmd crtpf mylib/myfile rcdlen(80)

put myfile.txt myfile

quote rcmd runpost

quit

Now when you type ftpscript it will run the ftpscript.bat file, which

will use the ftpscript.txt file. You can use notepad or some other

utility to check the ftpout.txt file for the status of the transmission.

An important thing to remember is that the command we used, runpost, will

have to set up the library list. It will not use any library list

defined by your user profile's job description.

B) Scripted ftp from 400 to another server.

First create a simple CL program. Let's call ours FTPSCRIPT. In it we'll

have these lines:

PGM PARM(&RMTSYSTEM)

DCL VAR(&RMTSYSTEM) TYPE(*CHAR) LEN(200)

OVRDBF FILE(INPUT) TOFILE(MYLIB/FTPSCRIPT)

OVRDBF FILE(OUTPUT) TOFILE(MYLIB/FTPOUTPUT)

FTP RMTSYS(&RMTSYSTEM)

DLTOVR FILE(INPUT)

DLTOVR FILE(OUTPUT)

Page 6: IFS FTP Tutorial for AS400 Iseries

CALL PGM(ANALYZER) /* Analyze FTP output */

ENDPGM

The file MYLIB/FTPSCRIPT should be a one field file. The record length

is pretty flexible.

The file MYLIB/FTPOUTPUT should also be a one field file. Again, the

record length is pretty flexible.

In the file MYLIB/FTPSCRIPT put the following

<- There should be one blank line first. This cancels

prompting for the user name and password. The user

statement will handle that.

user myuserid mypassword

cd mylib

quote rcmd crtpf mylib/myfile rcdlen(80)

put myfile.txt myfile

quote rcmd runpost

quit

Now when you type CALL FTPSCRIPT it will run the CL program FTPSCRIPT,

which will use the FTPSCRIPT file. You can use DSPPFM or some other

utility to check the FTPOUTPUT file for the status of the transmission.

The program analyzer would be written to check out the contents of

FTPOUTPUT and process accordingly.

An important thing to remember is that the command we used, runpost, will

have to set up the library list. It will not use any library list

defined by your user profile's job description.

Q. When I ftp from an AS/400 to another, once logged in, the

default directory is QGPL and the file format is the

library format (0). I then have to type the NA 1 comand

to switch to the IFS format and issu a CD command to

position myself in the right directory. There is a home

directory value in the user profile but it does not seems to work.

A. At V4R5 use CHGFTPA AUTOSTART(*YES) NAMEFMT(*PATH) CURDIR(*HOMEDIR).

You can also set the list format to a Unix format (LISTFMT(*UNIX))

if you wish. After the change stop and restart the ftp servers.

Answer courtesy Guy Murphy via MIDRANGE-L 30 Nov 2001

Scott Klement is hosting an open source FTP API project at

http://klement.dstorm.net/ftpapi/ If you want to script an

FTP session, but don't relish parsing the log file to see

if your transfer was a success or not, take a look at this

code and contribute to it's further development!

For moving binary objects like Java class files

or save files (not source or other text),

be sure to use binary mode. If you forget

and transfer in ASCII mode, FTP will attmept

to translate (if necessary) from ASCII to EBCDIC

and vice-versa. Example:

From the PC side:

ftp youriSeriesorAS400Box

quote namefmt 1

cd /your/IFS/directory

bin

put yourProgram.class

From the OS/400 side:

ftp yourPCBox

namefmt 1

lcd /your/IFS/directory

Page 7: IFS FTP Tutorial for AS400 Iseries

cd your/PC/directory

bin

get yourProgram.class

Note that you can only connect to a PC from

the iSeries if the PC is running an FTP

server.

When using FTP to another AS/400, remember that

if the file doesn't exist, FTP will create a

"default" file for you. The attributes of this

default file will make it a simple flat file

with a record length equal to the first record

and having a single field.

If the file already exists, FTP will write the

new records over the existing record format, so

the field definitions will remain intact.

If you need to FTP a file to another AS/400 and

it doesn't exist at the target, either:

1) Create the file on the target before FTP, or

2) Use a save file

a) on source, CRTSAVF

b) on source, SAVOBJ to the save file

watch the TGTRLS!

c) on target, CRTSAVF

d) FTP the save file in binary mode

e) on target, RSTOBJ from the save file

f) on target, DLTF the save file

g) on source, DLTF the save file

I am having a problem where records are dropping from my file when ftp occurs through

a batch process using this same method. When sending interactively, the file arrives

For save files, you can use name format 1

to create the save file at the target machine:

nam 1

put /qsys.lib/buck.lib/mysavefile.savf /qsys.lib/buck.lib/yoursavf.savf

Page 8: IFS FTP Tutorial for AS400 Iseries

Copy IFS data from the iSeries to a Windows server

Jean-Marie Sauvageot

05 Feb 2004

Rating: -4.42- (out of 5) Hall of fame tip of the month winner

Want to copy IFS data from the iSeries to a Windows server using only one command? These steps will help you do just that.

1. Start NetServer on iSeries using iSeries Navigator (/Network/Servers/TCP/IP/iSeries NetServer) or OS/400 command STRTCPSVR

SERVER(*NETSVR)

2. Enter command MKDIR DIR('/qntc/Wservername'). Be aware to enter this command after each system IPL because all these QNTC links

will be cleaned up during IPL.

3. Use command WRKLNK OBJ('/qntc/Wservername') and then option 5=display to verify that you can see all shared folders on the

Window server. Be aware that user/password on iSeries and Windows sever must be the same.

4. Use command COPY OBJ(IFSpathname) TODIR('/QNTC/Wservername/foldername)

And that's it.

Note: If your Window server is not in the same IP subnet as your iSeries server, you'll have to indicate your WINS server address in the

iSeries NetServer properties in iSeries Navigator.

Page 9: IFS FTP Tutorial for AS400 Iseries

Ten things to remember when using the IFS Ron Turull 14 Apr 2003 Rating: -2.93- (out of 5)

Using the IFS can be a little tricky. Ron Turull gives you 10 things to keep in mind.

1. To access the IFS from a PC, you need the Client Access/400 V3R1M0 Windows Client or the Optimized for OS/2 Client. 2. Each individual file system (e.g., the OS/400 library system or the DLS file system) is a major subtree in the IFS, with only the root above

them. 3. In QSYS.LIB (the OS/400 library system), libraries are subdirectories, as are database files (because database files contain members).

Database file members are considered "objects" or "files" in the IFS, as are other OS/400 objects. 4. Each individual file system has it own naming conventions. For example, in the QSYS.LIB file system you must specify a period and the

object type after the object name (some examples: ".LIB" for libraries, ".FILE" for files, ".MBR" for database members, or ".OUTQ" for output queues). Also, some file systems, such as QOpenSys, are case-sensitive.

5. To access an object in any of the file systems via the IFS, you must specify a DOS-like path name to the object. For example:

/QSYS.LIB/MYLIB.LIB/MYFILE.FILE/MYFILE.MBR

specifies member MYFILE in file MYFILE in library MYLIB in the OS/400 library system. You can use the back-slash character () instead of the front-slash character (/) in path names.

6. Hard links cannot cross file system boundaries while symbolic links can. The QSYS.LIB and QDLS file systems support only a single hard link to an object (the one that is created automatically when the object is created). You cannot create symbolic links in either the QSYS.LIB and QDLS file systems. However, symbolic links pointing to objects in QSYS.LIB or QDLS can be created in other file systems.

7. Directory and file names are stored in Unicode format. This allows the IFS to automatically convert directory and file names from one code page to another. For example when a PC uses a different code page than the AS/400, directory and file names are converted automatically to the code page of the PC. Caveat: The code page you are using must contain the characters used in the names. Bottom line: Use international letters and symbols only (i.e., use only characters common to all code pages).

8. The IFS supports the single-character wildcard character '?' as well as the multiple-character wildcard character '*' . (DOS users should be familiar with this.) For example, this gives AS/400 users the ability to search for objects using a more complex search criteria than that provided by the standard AS/400 generic name facility (e.g., WRKOBJ TEST*). The IFS Work with Object Links command (WRKLNK) can be used to perform a more complex search (for example, WRKLNK '/QSYS.LIB/A?C?.* will find ABCD.LIB and ADCB.FILE, but not ABBCD.LIB). Unfortunately, wildcard characters are allowed only in the object name and not in any of the directories listed in the path.

9. For a list of APIs that can be used by AS/400 programs to access the IFS, see "Unix-type APIs" in the API Reference manual. 10. The IFS supports local sockets. This allows sockets programming on a single machine to implement single-box client/server

programming.