Ftp 如何使用QTCP user(命令提示符)识别和使用其他用户的假脱机文件?
在这里,我使用(FTP Servername)命令从命令提示符连接到AS400机器Ftp 如何使用QTCP user(命令提示符)识别和使用其他用户的假脱机文件?,ftp,command-prompt,ibm-midrange,rpgle,rpg,Ftp,Command Prompt,Ibm Midrange,Rpgle,Rpg,在这里,我使用(FTP Servername)命令从命令提示符连接到AS400机器 我使用命令提示符执行的每个操作都将在后台与QTCP用户一起提交。 主要关注点如下: 我有一个生成spool文件的命令,该文件的名称是我在命令提示符下登录时使用的名称 我想使用spool文件内容并复制到我的一个库中,所有这些都可以通过CPYSPLF命令完成,但是如何使用QTCPuser执行相同的操作 我在这里的主要要求是使用命令提示符而不是AS400终端执行CL命令操作 @user2338816在使用QSPRIL
我使用命令提示符执行的每个操作都将在后台与QTCP用户一起提交。
主要关注点如下:
- 我有一个生成spool文件的命令,该文件的名称是我在命令提示符下登录时使用的名称
- 我想使用spool文件内容并复制到我的一个库中,所有这些都可以通过CPYSPLF命令完成,但是如何使用QTCPuser执行相同的操作
- 我在这里的主要要求是使用命令提示符而不是AS400终端执行CL命令操作
DQUSLSPL PR EXTPGM('QUSLSPL')
D UserSpaceName Like(UserSpace) CONST
D FormatName 8 CONST
D UserName 10 CONST
D QualOutQName 20 CONST
D FormType 10 CONST
D UsrDta 10 CONST
D ErrorCode Like(APIError)
D QualJobName 26 CONST
D KeyFields 1 CONST
D KeyFieldsNum 10i 0 CONST
D ASP 10i 0 CONST
D JobSystemName 8 CONST
D StartCRDate 7 CONST
D StartCRTime 6 CONST
D EndCRDate 7 CONST
D EndCRTime 6 CONST
创建用户空间
DCreateUserSpace PR ExtPgm('QUSCRTUS')
D Name Like(UserSpace) CONST
D ExtendedAttrib 10 CONST
D InitialSize 10i 0 CONST
D InitialValue 1 CONST
D PublicAuth 10 CONST
D Text 50 CONST
D Replace 10 CONST
D ErrorCode Like(APIError)
DRtvUserSpace PR ExtPgm('QUSRTVUS')
D UserSpaceName Like(UserSpace) CONST
D StartingPos 10i 0 CONST
D LengthToReturn 10i 0 CONST
D ReceiverVar Like(SPLF0300)
D ErrorCode Like(APIError)
DDeleteUserSpace PR ExtPgm('QUSDLTUS')
D Name Like(UserSpace) CONST
D ErrorCode Like(APIError)
从用户空间检索数据
DCreateUserSpace PR ExtPgm('QUSCRTUS')
D Name Like(UserSpace) CONST
D ExtendedAttrib 10 CONST
D InitialSize 10i 0 CONST
D InitialValue 1 CONST
D PublicAuth 10 CONST
D Text 50 CONST
D Replace 10 CONST
D ErrorCode Like(APIError)
DRtvUserSpace PR ExtPgm('QUSRTVUS')
D UserSpaceName Like(UserSpace) CONST
D StartingPos 10i 0 CONST
D LengthToReturn 10i 0 CONST
D ReceiverVar Like(SPLF0300)
D ErrorCode Like(APIError)
DDeleteUserSpace PR ExtPgm('QUSDLTUS')
D Name Like(UserSpace) CONST
D ErrorCode Like(APIError)
删除用户空间
DCreateUserSpace PR ExtPgm('QUSCRTUS')
D Name Like(UserSpace) CONST
D ExtendedAttrib 10 CONST
D InitialSize 10i 0 CONST
D InitialValue 1 CONST
D PublicAuth 10 CONST
D Text 50 CONST
D Replace 10 CONST
D ErrorCode Like(APIError)
DRtvUserSpace PR ExtPgm('QUSRTVUS')
D UserSpaceName Like(UserSpace) CONST
D StartingPos 10i 0 CONST
D LengthToReturn 10i 0 CONST
D ReceiverVar Like(SPLF0300)
D ErrorCode Like(APIError)
DDeleteUserSpace PR ExtPgm('QUSDLTUS')
D Name Like(UserSpace) CONST
D ErrorCode Like(APIError)
我喜欢创建一个字段来存储用户空间名称,这样我就不必一直键入它:
DUserSpace S 20 INZ('SPLFSPACE QTEMP ')
调用API时,需要以下API错误数据结构:
DAPIError DS Qualified
D AEBytesProv 10i 0 Inz(117)
D AEBytesAvail 10i 0 Inz(0)
D AEExceptionID 7
D AEReserved 1
D AEExceptData 80
最后,这里是一个数据结构,其中包含返回的每个假脱机文件的信息:
DSPLF0300 DS Qualified
D JobName 10
D UserName 10
D JobNumber 6
D SplfName 10
D SplfNumber 10i 0
D SplfStatus 10i 0
D DateCreated 7
D TimeCreated 6
D SplfSchedule 1
D SplfSystemName 10
D UserData 10
D FormType 10
D OutQName 10
D OutQLib 10
D ASP 10i 0
D SplfSize 10i 0
D SplfSizeMult 10i 0
D TotalPages 10i 0
D CopiesLeft 10i 0
D Priority 1
D Reserved 3
D Internalppji 10i 0
列表假脱机文件API的参数比其他答案中需要的参数多,我在上面的原型中使用了它们。因为您不能将假脱机文件名指定为要搜索的参数,所以我们可以指定创建日期和时间范围来帮助限制返回的结果
因此,实际的编码很简单。您可以列出QTCP在过去5分钟内拥有的所有假脱机文件。查看列表,看看哪些被命名为QPJOBLOG。抓住最近的一个
DCounter S 10i 0
DStartPoint S 10i 0
DFiveMinutesAgo S Z
DDateStart S 7
DTimeStart S 6
DLastSPLF DS Qualified
D Job 26
D SplfName 10
D SplfNumber 10i 0
D Date 7
D Time 6
/free
FiveMinutesAgo = %TimeStamp()-%Minutes(5);
DateStart=%Char(%Date(FiveMinutesAgo):*CYMD0);
TimeStart=%Char(%Time(FiveMinutesAgo):*HMS0);
CreateUserSpace(UserSpace:*Blank:1:x'00':'*ALL':*Blank:'*YES':APIError);
QUSLSPL(UserSpace:'SPLF0300':'QTCP':'*ALL':'*ALL':'*ALL':APIError:
*Blanks:*Blank:0:0:'*CURRENT':DateStart:TimeStart:'*LAST':
*Blanks);
RtvUserSpace(UserSpace:1:%Len(ListInfo):ListInfo:APIError);
Counter = 0;
StartPoint = ListInfo.ListDataOfs+1;
DoW Counter<ListInfo.ListEntryCount;
RtvUserSpace(UserSpace:StartPoint:%Len(SPLF0300):SPLF0300:APIError);
If SPLF0300.SplfName='QPJOBLOG' And
SPLF0300.DateCreated>=LastSplf.Date And
SPLF0300.TimeCreated>=LastSplf.Time;
LastSplf.Job = SPLF0300.JobName +
SPLF0300.UserName +
SPLF0300.JobNumber;
LastSplf.SplfName = SPLF0300.SplfName;
LastSplf.SplfNumber = SPLF0300.SplfNumber;
LastSplf.Date = SPLF0300.DateCreated;
LastSplf.Time = SPLF0300.TimeCreated;
EndIf;
StartPoint=StartPoint+ListInfo.EntrySize;
Counter=Counter+1;
EndDo;
DeleteUserSpace(UserSpace:APIError);
DCounter S 10i 0
DStartPoint S 10i 0
D五分钟前S Z
第七部分
开始时间6
DLastSPLF DS合格
D工作26
D SplfName 10
D SPLFN编号10i 0
D日期7
D时间6
/免费的
五分钟前=%TimeStamp()-%Minutes(5);
DateStart=%Char(%Date(五分钟前):*CYMD0);
TimeStart=%Char%(时间(五分钟前):*HMS0);
CreateUserSpace(用户空间:*空白:1:x'00':'*ALL':*空白:'*YES':APIRROR);
QUSLSPL(用户空间:'SPLF0300':'QTCP':'*ALL':'*ALL':'*ALL':APIRERROR:
*空白:*空白:0:0:“*当前”:日期开始:时间开始:“*最后一次”:
*空白);
RTVuser空间(用户空间:1:%Len(ListInfo):ListInfo:APIError);
计数器=0;
StartPoint=ListInfo.ListDataOfs+1;
道指计数器=最新发布日期和
SPLF0300.TimeCreated>=lastplf.Time;
LastSplf.Job=SPLF0300.JobName+
SPLF0300.UserName+
SPLF0300.JobNumber;
LastSplf.SplfName=SPLF0300.SplfName;
LastSplf.SplfNumber=SPLF0300.SplfNumber;
LastSplf.Date=SPLF0300.DateCreated;
LastSplf.Time=SPLF0300.TimeCreated;
EndIf;
StartPoint=StartPoint+ListInfo.EntrySize;
计数器=计数器+1;
EndDo;
DeleteUserSpace(用户空间:APIRROR);
我的示例使用5分钟,但这可能太长了。试着看看什么对你有用
所有这些都必须进入一个新的程序,然后该程序将返回a CPYSPLF命令所需的信息。事实上,您可以让这个程序为您构建并执行CPYSPLF命令,这样您的FTP脚本就更简单了。@user2338816在使用QSPRILSP API方面做得很好。但是,如果这不能提供您所需要的,那么下面是如何使用列表假脱机文件(QUSLSPL)API来查找它的 在开始之前,请回顾我在这篇文章中的回答: 这是使用quslsplapi和用户空间的一个很好的入门,尽管它是用C#进行讨论的。下面是如何在RPG IV中使用该API: 首先,您需要对API的调用进行原型化 列出假脱机文件
DQUSLSPL PR EXTPGM('QUSLSPL')
D UserSpaceName Like(UserSpace) CONST
D FormatName 8 CONST
D UserName 10 CONST
D QualOutQName 20 CONST
D FormType 10 CONST
D UsrDta 10 CONST
D ErrorCode Like(APIError)
D QualJobName 26 CONST
D KeyFields 1 CONST
D KeyFieldsNum 10i 0 CONST
D ASP 10i 0 CONST
D JobSystemName 8 CONST
D StartCRDate 7 CONST
D StartCRTime 6 CONST
D EndCRDate 7 CONST
D EndCRTime 6 CONST
创建用户空间
DCreateUserSpace PR ExtPgm('QUSCRTUS')
D Name Like(UserSpace) CONST
D ExtendedAttrib 10 CONST
D InitialSize 10i 0 CONST
D InitialValue 1 CONST
D PublicAuth 10 CONST
D Text 50 CONST
D Replace 10 CONST
D ErrorCode Like(APIError)
DRtvUserSpace PR ExtPgm('QUSRTVUS')
D UserSpaceName Like(UserSpace) CONST
D StartingPos 10i 0 CONST
D LengthToReturn 10i 0 CONST
D ReceiverVar Like(SPLF0300)
D ErrorCode Like(APIError)
DDeleteUserSpace PR ExtPgm('QUSDLTUS')
D Name Like(UserSpace) CONST
D ErrorCode Like(APIError)
从用户空间检索数据
DCreateUserSpace PR ExtPgm('QUSCRTUS')
D Name Like(UserSpace) CONST
D ExtendedAttrib 10 CONST
D InitialSize 10i 0 CONST
D InitialValue 1 CONST
D PublicAuth 10 CONST
D Text 50 CONST
D Replace 10 CONST
D ErrorCode Like(APIError)
DRtvUserSpace PR ExtPgm('QUSRTVUS')
D UserSpaceName Like(UserSpace) CONST
D StartingPos 10i 0 CONST
D LengthToReturn 10i 0 CONST
D ReceiverVar Like(SPLF0300)
D ErrorCode Like(APIError)
DDeleteUserSpace PR ExtPgm('QUSDLTUS')
D Name Like(UserSpace) CONST
D ErrorCode Like(APIError)
删除用户空间
DCreateUserSpace PR ExtPgm('QUSCRTUS')
D Name Like(UserSpace) CONST
D ExtendedAttrib 10 CONST
D InitialSize 10i 0 CONST
D InitialValue 1 CONST
D PublicAuth 10 CONST
D Text 50 CONST
D Replace 10 CONST
D ErrorCode Like(APIError)
DRtvUserSpace PR ExtPgm('QUSRTVUS')
D UserSpaceName Like(UserSpace) CONST
D StartingPos 10i 0 CONST
D LengthToReturn 10i 0 CONST
D ReceiverVar Like(SPLF0300)
D ErrorCode Like(APIError)
DDeleteUserSpace PR ExtPgm('QUSDLTUS')
D Name Like(UserSpace) CONST
D ErrorCode Like(APIError)
我喜欢创建一个字段来存储用户空间名称,这样我就不必一直键入它:
DUserSpace S 20 INZ('SPLFSPACE QTEMP ')
调用API时,您将需要以下API e