📄 122801_05.htm
字号:
<html>
<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>计算机世界日报:
用Delphi/400转换AS/400的打印文件
</title>
<!--***********-->
</head>
<body bgcolor="#FFFFFF" >
<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
用Delphi/400转换AS/400的打印文件
</h2></font>
<h3>
天津外轮代理公司
<br>朱志和 冯卫
</h3>
</center>
<p><font color="#ffffff">----</font>
随着Internet应用的日益广泛,外轮代理公司作为IBM的AS/400小型机的老用户,在实际的工作中,需要将AS/400中的数据以E-mail的方式与外界进行数据通讯的需求也越来越多。比如,需要将某一航次的货物舱单(Cargo Manifest)以E-mail的方式传给船公司,此货物舱单就是AS/400的打印文件(Spool File)。如何将AS/400的打印文件以E-mail的方式与外界进行数据通讯,其关键是将此打印文件转化为微机能支持的.txt文件格式。本文即介绍利用Delphi/400实现其过程的方法及步骤。
<p><font color="#ffffff">----</font>
Delphi for AS/400是Borland公司(现改为Inprise公司)专门为AS/400用户提供的用于开发AS/400应用程序的Delphi前端开发工具。除了具有Delphi 3.0的全部功能外,Delphi/400提供了与AS/400相兼容的三组元件--SCD400 Data、SCD400 System和SCD400 DB。其中SCD400 Data和SCD400 DB两组元件与普通Delphi 3.0所属两组元件Data Access和Data Controls中元件具有相同或类似的功能。在SCD400 System元件组中,提供的元件,可以直接调用AS/400 PGM程序和直接调用A/400 CL命令。
<p><font color="#ffffff">----</font>
<b>一、 在AS/400上编制实现打印货物舱单的RPG程序</b>
<p><font color="#ffffff">----</font>
为叙述方便,假设所需要用到的AS/400上的文件(在AS/400中称为对象--Object)都放在TEST库(Library)中。DCPRTMF为打印文件,用来输出打印舱单的打印格式和内容。DCRPGMF为RPG程序,带两参数VSLCOD(船代码)和VOYNO(航次),用来生成舱单。
<p><font color="#ffffff">----</font>
<b>二、 在AS/400上将打印文件转化为AS/400的物理文件</b>
<p><font color="#ffffff">----</font>
在AS/400上建一物理文件MFPC(相当于其它数据库的Table),记录名为MP,字段名为MP198,长度为198字符。此物理文件用来保存货物舱单打印文件内容。这个过程用MFCPYSPL程序(CLP类型)来实现,程序如下:
<pre>
***************Beginning of data***************
01.0 PGM PARM(&STRJOB &STRUSR &STRNBR)
0002.00 DCL VAR(&STRJOB) TYPE(*CHAR) LEN(10)
0003.00 DCL VAR(&STRUSR) TYPE(*CHAR) LEN(10)
04.0 DCL VAR(&STRNBR) TYPE(*CHAR) LEN(6)
0005.00 CPYSPLF FILE(DCPRTMF) TOFILE(TEST/MFPC) +
0006.00 JOB(&STRNBR/&STRUSR/&STRJOB) TOMBR(MFPC) +
0007.00 MBROPT(*REPLACE) ①
0008.00 DLTSPLF FILE(DCPRTMF)
JOB(&STRNBR/&STRUSR/&STRJOB) ②
0010.00 ENDPGM
****************** End of data **************
</pre>
<font color="#ffffff">----</font>
上述文件定义了三个参数STRJOB、STRUSR和STRNBR,是与操作Spool File相关的参数。<p><font color="#ffffff">----</font>
①将打印文件(Spool File)拷贝到物理文件MFPC;②删除打印文件。
<p><font color="#ffffff">----</font>
<b>三、 用Delphi/400将AS/400上的打印文件转化为微机的文本文件</b>
<p><font color="#ffffff">----</font>
在进行程序处理以前,先在Delphi的Database Module进行如下VCL组件设置:
<p><font color="#ffffff">----</font>
1.AS400组件设置:name--AS4001。
<p><font color="#ffffff">----</font>
2.Table组件设置:name--MfpcTbl;
<br>tablename--MFPC。与AS/400上的物理文件连接。
<p><font color="#ffffff">----</font>
3.Call400组件设置:name--Call400PRTMF;
<br>AS400--AS4001;LibraryName--TEST;
<br>ProgramName--DCRPGPC;Params定义对应VSLCOD和VOYNO。
<p><font color="#ffffff">----</font>
4.Call400组件设置:name--Call400CPYSPL;
<br>AS400--AS4001;LibraryName--TEST;
<br>ProgramName--MFCPYSPL;Params
<br>定义对应STRJOB、STRUSR和STRNBR。
<p><font color="#ffffff">----</font>
5.Cmd400组件设置:name--Cmd400Addlible;
<br>AS400--AS4001;CommandLine--ADDLIBLE LIB(TEST)
<br> POSITION(*FIRST)。将TEST加入库表。
<p><font color="#ffffff">----</font>
6.Cmd400组件设置:name--Cmd400Rtvjob;AS400--AS4001;
<br>CommandLine--RTVJOBA JOB(&P.1) USER(&P.2)
<br>NBR(&P.3) USRLIBL(&P.4)。用于获取运行MFCPYSPL程序所需要的参数。
<p><font color="#ffffff">----</font>
以下就是实现将AS/400上的打印文件DCPRTMF转化为微机的文本文件的源程序。
<pre>
var
F,ToF:TextFile;
TempStr:String;
Fname:String;
Str_Job:String;
Str_Usr:String;
Str_Nbr:String;
begin
//获取运行将打印文件转换为物理文件程序的参数
CommDtmFrm.Cmd400Rtvjoba.Execute;
Str_Job:=CommDtmFrm.Cmd400Rtvjoba.Value[0];
Str_Usr:=CommDtmFrm.Cmd400Rtvjoba.Value[1];
Str_Nbr:=CommDtmFrm.Cmd400Rtvjoba.Value[2];
//增加库表
CommDtmFrm.Cmd400Addlible1.Execute;
//生成CARGO MENIFEST,其中StrVslcod、
StrVoyage为打印舱单的参数
CommDtmFrm.Call400PRTMF.Value[0]:=StrVslcod;
CommDtmFrm.Call400PRTMF.Value[1]:=StrVoyage;
CommDtmFrm.Call400PRTMF.Execute ;
//转换为物理文件
CommDtmFrm.Call400Cpyspl.Value[0]:=Str_Job;
CommDtmFrm.Call400Cpyspl.Value[1]:=Str_Usr;
CommDtmFrm.Call400Cpyspl.Value[2]:=Str_Nbr;
CommDtmFrm.Call400Cpyspl.Execute ;
//产生一个新文件
Fname:='C:\Communication\Newmf.txt';
AssignFile(F,Fname);
ReWrite(F);
if CommDtmFrm.MfpcTbl.Active=false then
CommDtmFrm.MfpcTbl.Active:=True ;
//将物理文件的数据读出保存为文本文件
with CommDtmFrm.MfpcTbl do
begin
DisableControls;
try
First;
while not EOF do
begin
{ Process each record here }
TempStr:=CommDtmFrm.MfpcTblMP198.Value;
writeln(F,TempStr);
Next;
end;
finally
EnableControls;
end;
end;
if SaveDialog1.Execute then
begin
AssignFile(ToF, SaveDialog1.FileName);
ReWrite(ToF);
Reset(F);
while not EOF(F) do
begin
{ Process each record here }
Readln(F,TempStr);
writeln(ToF,TempStr);
end;
end;
CloseFile(F);
CloseFile(ToF);
</pre>
<p align="right"><small><em>中国计算机世界出版服务公司版权所有</em></small>
<br>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -