Ftp 如何使用QTCP user(命令提示符)识别和使用其他用户的假脱机文件?

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

在这里,我使用(FTP Servername)命令从命令提示符连接到AS400机器
我使用命令提示符执行的每个操作都将在后台与QTCP用户一起提交。

主要关注点如下:

  • 我有一个生成spool文件的命令,该文件的名称是我在命令提示符下登录时使用的名称
  • 我想使用spool文件内容并复制到我的一个库中,所有这些都可以通过CPYSPLF命令完成,但是如何使用QTCPuser执行相同的操作
  • 我在这里的主要要求是使用命令提示符而不是AS400终端执行CL命令操作

@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错误数据结构:

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