OS390-PO-Bibliotheken auf Windows/Unix übertragen (SourceFTP)
Verfasst von StephanFrenzel am 13 Juli, 2005 - 21:14
Das FTPSource- Tool überträgt eine komplette PO-Bibliothek (d.h. alle Member einer Bibliothek) per Ftp von OS390 auf einen Unix- oder Windows-Rechner.
Die PO-Bibliothek wird auf dem Zielrechner folgendermaßen abgelegt:
- Für jede übertragene PO-Bibliothek wird ein Unterverzeichnis angelegt, dessen Name sich aus dem Namen der PO-Bibliothek und einem Timestamp zusammensetzt.
- Im angegebenen Zielverzeichnis werden die Member als jeweils eine Datei mit einer vorgegebenen Namenserweiterung abgelegt.
//ABC100S JOB,'X4711,DWH/CP',CLASS=H,NOTIFY=&SYSUID,MSGCLASS=X //* //* SourceFTP //* ... transfers a complete PO library to a unix or windows platform. //* On the target platform a directory will be created containing one //* file for each member of the PO library. //* //SAS EXEC SAS //SASAUTOSDDDSN=DWH.SAS.MACAUTOS,DIP=SHR //FTPSCR DDDSN=&&FTPSCR,DISP=(NEW,PASS,DELETE) //SYSIN DD * %RDSPOLib ( getFTPScript , libDSN = ABC100.SASENTW.PGM , outDD = ftpscr , ftpHost = 111.42.33.204 , ftpUid = dwhuid , ftpPwd = dwhpwd , extension = txt ); /* //* //* Transfer source members //* //FTP EXECPGM=FTP,COND=(8,LT) //INPUT DDDSN=&&FTPSCR,DISP=(OLD,DELETE,DELETE)
Das Makro RDSPOLib:
/**
* ... implements utilities to deal with PO libraries on OS390
*/
%macro rdsPOLib
( method
, libDSN =
, prefix =
, out = rdsPOContent /* getContentDS */
, ftphost = /* getFTPScript */
, ftpuid =
, ftppwd =
, extension =
, outDD =
);
%local umn umName;
%let umn = 11;
%let umName = rdsPOLib;
/**
* ... create a SAS data set containing directory information of
* the PO library
*/
%if &method. = getContentDS %then %do;
filename rds&umn.a '&libDSN.';
filename rds&umn.b temp;
** Write directory to sequential file;
proc source indd=rds&umn.a dirdd=rds&umn.b nodata noprint;
run;
filename rds&umn.a clear;
** Read directory, create content data set with ISPF statistics;
data &out.;
infile rds&umn.b;
file print header=header;
input member $8. ttr pib3. ind pib1. @;
datalen = 2*mod(ind,32);
if (datalen = 30) then do;
input
ver pib1. mod pib1. blank pib2.
ccreate pib1. create pd3. cchanged pib1.
changed pd3. hh pk1. mm pk1.
size pib2. init pib2. modl pib2.
userid $8.
;
yyyydddc = (ccreate * 100000) + 1900000 + create;
jcreate = datejul(yyyydddc);
yyyydddx = (cchanged * 100000) + 1900000 + changed;
jchange = datejul(yyyydddx);
end;
** Print the results;
put @ 4 member $8.
@15 jcreate yymmdd10.
@27 jchange yymmdd10.
@39 hh 2. ':' mm 2.
@48 userid;
%if %length(&prefix.) ne 0 %then %do;
if member =: upcase ('&prefix.');
%end;
return;
header:
put @ 4 'NAME '
@15 'CREATED'
@27 'CHANGED'
@39 'TIME'
@48 ' ID ' /;
run;
filename rds&umn.b clear;
%end; %* Method getContentDS;
/**
* ... writes an ftp script to transfer the PO library to unix or
* windows
*/
%else %if &method. = getFTPScript %then %do;
%rdsPOLib
(getContentDS, libDSN=&libDSN., prefix=&prefix., out=&out.);
data _null_;
set &out. end=done;
file &outDD.;
dirName =
'&libDSN..'
|| translate (put(datetime(),datetime16.0), '-', ':');
if _n_ = 1 then
put '&ftphost.'
/ '&ftpuid.'
/ '&ftppwd.'
/ 'ascii'
/ 'mkdir ' dirName
/ 'cd ' dirName;
put 'put '&libDSN.(' member +(-1) ')' ' member +(-1)
'.&extension.';
if done then put 'quit';
run;
%end; %* Method createFTPScript;
/**
* ... tests the complete functionality
*/
%else %if &method. = testAll %then %do;
%put;
%put TEST: &umName.(testAll) ...;
%put;
%put TEST: Creating FTPScript (will test getContentDS implicitly);
%put TEST: Expectation: Print generated ftp script to log;
filename rds&umn.c temp;
%rdsPOLib
( getFTPScript
, libDSN = &libDSN.
, outDD = rds&umn.c
, ftpHost = 10.0.0.1
, ftpUid = uid001
, ftpPwd = pwd001
, extension = msc
);
data _null_;
infile rds&umn.c;
input line $80.;
put 'TEST: ' line;
run;
filename rds&umn.c clear;
%put;
%put TEST: &umName.(testAll) passed;
%put;
%end;
%mend; %* rdsPOLib;
»
- Anmelden oder Registrieren um Kommentare zu schreiben
