/************************************************************************************/ /* Copyright (c) 2006-2011, SAS Institute Inc., Cary, NC, USA, All Rights Reserved. */ /************************************************************************************/ /* NAME: mm_migration.source */ /* VERSION: 3.1 */ /* */ /* PRODUCT: SAS(r) Model Manager */ /* USAGE: macros for migrating sas dataset and catalog */ /* */ /************************************************************************************/ /*----------------------------------------------------------------------------------------------------* Purpose: Get all versions to be migrated Name: MM_migrationStep0 Parameters: MMRootURL :URL of MMRoot in WebDAV Server of SMM migration source system Server :network machine name of application server in SMM migration target system (2.2 and 2.3 only) multicast address of of application server in SMM migration target system (3.1 only) PortNumber :port number of application server in SMM migration target system (2.2 and 2.3 only) multicast port number of application server in SMM migration target system (3.1 only) User :User identification for application server in SMM migration target system Password :User password for application server in SMM migration target system TargetDir :Directory to store all portable files at workspace server in SMM migration target system Support: Emily Gao History: Feb 25, 2009 Emily Gao Initial coding Mar 18, 2009 Emily Gao Add option new to proc cimport Feb 15, 2011 Emily Gao Change macro signature *----------------------------------------------------------------------------------------------------*/ %macro MM_migrationStep0 ( MMRootURL = %nrstr(http://myServer:8300/ModelManager), Server = myServer, PortNumber = 6411, User = mmUser, Password = mmPassword, TargetDir = \\network1\port ); libname mmlib "&TargetDir"; %global _MM_RepositoryId; %global _MM_ServerName; %global _MM_PortNumber; %global _MM_MulticastAddress; /* SMM source server's multicast address */ %global _MM_MulticastPort; /* SMM source server's multicast port number*/ %global _MM_User; /* User identification for source server */ %global _MM_Password; /* User password for source server */ %let _MM_RepositoryId = ModelManagerDefaultRepo; %let _MM_ServerName = &Server; %let _MM_PortNumber = &PortNumber; %let _MM_MulticastAddress = &Server; %let _MM_MulticastPort = &PortNumber; %let _MM_User = &User; %let _MM_Password = &Password; /* Get all versions to be migrated */ filename accmacro catalog "SASHELP.modelmgr.accessmacros.source"; %include accmacro; filename accmacro; %MM_CreateModelDataSet ( mDatasetName=work.mm_models, smmPath=//ModelManagerDefaultRepo/MMRoot ); proc sort data=work.mm_models(keep = projectuuid versionname projecturl projectpath) out=versions nodupkey; by projectuuid versionname; run;quit; data mmlib.migration_step0; set versions; length from $ 400; label from="Migrate From"; /* Here projectURL should not use url encoded format */ /* otherwise, long DBCS name will not work */ from = strip("&mmrooturl")||strip(projectpath)||"/"||strip(versionName)||"/Resources"; keep projectuuid projectpath versionname from; run; %mend MM_migrationStep0; /*----------------------------------------------------------------------------------------------------* Purpose: Port all sas files under folder version\Resources Name: MM_migrationStep1 Parameters: MigrateFrom21 :Migrate from 2.1 or not? Y or y indicates YES, other values indicate No. Server :network machine name of application server in SMM migration source system (2.2 and 2.3 only) multicast address of of application server in SMM migration source system (3.1 only) PortNumber :port number of application server in SMM migration source system (2.2 and 2.3 only) multicast port number of application server in SMM migration source system (3.1 only) User :User identification for application server in SMM migration source system Password :User password for application server in SMM migration source system TargetDir :Directory to store all portable files at workspace server in SMM migration source system Support: Emily Gao History: Feb 25, 2009 Emily Gao Initial coding *----------------------------------------------------------------------------------------------------*/ %macro MM_migrationStep1 ( MigrateFrom21 = , Server = mySourceServer, PortNumber = port number of mySourceServer, User = mmUser, Password = mmPassword, TargetDir = \\network1\port ); libname mmlib "&TargetDir"; %let MigrateFrom21 = %upcase(&MigrateFrom21); %if (%nrbquote(&MigrateFrom21) ne Y) %then %do; %global _MM_RepositoryId; %global _MM_ServerName; %global _MM_PortNumber; %global _MM_MulticastAddress; /* SMM source server's multicast address */ %global _MM_MulticastPort; /* SMM source server's multicast port number*/ %global _MM_User; /* User identification for source server */ %global _MM_Password; /* User password for source server */ %let _MM_RepositoryId = ModelManagerDefaultRepo; %let _MM_ServerName = &Server; %let _MM_PortNumber = &PortNumber; %let _MM_MulticastAddress = &Server; %let _MM_MulticastPort = &PortNumber; %let _MM_User = &User; %let _MM_Password = &Password; /* Get all versions to be migrated */ filename accmacro catalog "SASHELP.modelmgr.accessmacros.source"; %include accmacro; filename accmacro; %MM_CreateModelDataSet ( mDatasetName=work.mm_models, smmPath=//ModelManagerDefaultRepo/MMRoot ); proc sort data=work.mm_models(keep = projectuuid versionname projecturl projectpath) out=versions nodupkey; by projectuuid versionname; run;quit; data mmlib.migration_step0; set versions; length from $ 400; label from="Migrate From"; /* Here projectURL should not use url encoded format */ /* otherwise, long DBCS name will not work */ from = strip(unicode(urldecode(projecturl), 'utf8'))||"/"||strip(versionName)||"/Resources"; keep projectuuid projectpath versionname from; run; %end; /* Get counts of versions */ %let numversions=0; proc sql noprint; select count(*) into: numversions from mmlib.migration_step0; quit; %let numversions=&numversions; /* Clear result data set */ proc datasets library=mmlib nolist; delete migration_step1; run;quit; data _null_; if symget('sysscp')=:'WIN' then dsep='\'; else if symget('sysscp')=:'DNT' then dsep='\'; else dsep = '/'; call symputx('_MMfileSep', dsep); run; /* Loop to migrate each version */ %do i=1 %to &numversions; data work.temp1; set mmlib.migration_step0(obs=&i firstobs=&i); call symput("ResourcesURL", trim(from)); run; %let ResourcesURL=%superq(ResourcesURL); libname source base "&ResourcesURL" WEBDAV user="&User" pass="&Password"; /* Get counts of versions */ %if %sysfunc(exist(work.members)) %then %do; proc datasets lib=work nolist; delete members; run;quit; %end; ods select members(nowarn); ods output members(nowarn) = members; proc contents data = source._all_ nods; run;quit; ods select all; %if %sysfunc(exist(work.members))=0 %then %goto nextversion; %let nummembers=0; data work.members; set work.members end=last; where trim(memtype) ne "INDEX"; if last then call symput('nummembers', _n_); run; /* Sometimes there is no member at Resources */ %if &nummembers=0 %then %goto nextversion; %do j=1 %to &nummembers; data _null_; set work.members(obs=&j firstobs=&j); call symput("memname", lowcase(trim(name))); if trim(memtype)="DATA" then do; call symput("memtype", "DATA"); call symput("fileext", "dpo"); end; else do; call symput("memtype", "CATALOG"); call symput("fileext", "cpo"); end; run; %let transerr=0; filename portfile "&TargetDir.&_MMfileSep.&memname._&i..&fileext"; proc cport &memtype=source.&memname file=portfile index=yes; run;quit; %if (&syserr ne 0) or (&sysinfo ne 0) %then %let transerr=1; data work.temp2; set work.temp1; length port $ 8; label port = "Port"; length portfile $ 200; label portfile = "Port File"; portfile = "&TargetDir.&_MMfileSep.&memname._&i..&fileext"; length portfilename $ 50; label portfilename = "Port File Name"; portfilename = "&memname._&i..&fileext"; %if (&transerr=0) %then port="OK"; %else port="FAIL"; ; keep from port portfile projectuuid projectpath versionname portfilename; run; proc append base=mmlib.migration_step1 data=work.temp2 force; run;quit; %end; %nextversion: libname source; %end; %if %sysfunc(exist(mmlib.migration_step1)) %then %do; proc print data=mmlib.migration_step1 label; run;quit %end; %mend MM_migrationStep1; /*----------------------------------------------------------------------------------------------------* Purpose: Import all portable files to version\Resources Name: MM_migrationStep2 Parameters: Server :network machine name of application server in SMM migration target system (2.2 and 2.3 only) multicast address of of application server in SMM migration target system (3.1 only) PortNumber :port number of application server in SMM migration target system (2.2 and 2.3 only) multicast port number of application server in SMM migration target system (3.1 only) User :User identification for application server in SMM migration target system Password :User password for application server in SMM migration target system SourceDir :Directory to store all portable files and can be accessed by workspace server of SMM migration target system TargetDir :Directory to store migration result table at workspace server in SMM migration target system Support: Emily Gao History: Feb 25, 2009 Emily Gao Initial coding *----------------------------------------------------------------------------------------------------*/ %macro MM_migrationStep2 ( Server = myTargetServer, PortNumber = port number of myTargetServer, User = mmUser, Password = mmPassword, SourceDir = \\network1\port, TargetDir = ); libname mmlib "&SourceDir"; %let tarlib = work; %if %nrbquote(&TargetDir) ne %then %do; libname mmtarlib "&TargetDir"; %let tarlib = mmtarlib; %end; %global _MM_RepositoryId; %global _MM_ServerName; %global _MM_PortNumber; %global _MM_MulticastAddress; /* SMM target server's multicast address */ %global _MM_MulticastPort; /* SMM target server's multicast port number*/ %global _MM_User; /* User identification for target server */ %global _MM_Password; /* User password for target server */ %let _MM_RepositoryId = ModelManagerDefaultRepo; %let _MM_ServerName = &Server; %let _MM_PortNumber = &PortNumber; %let _MM_MulticastAddress = &Server; %let _MM_MulticastPort = &PortNumber; %let _MM_User = &User; %let _MM_Password = &Password; /* Clear result data set */ proc datasets library=mmlib nolist; delete migration_step2; run;quit; /* Get all versions to be migrated */ filename MMAccess catalog "SASHELP.modelmgr.accessmacros.source"; %include MMAccess; filename MMAccess; data _null_; set mmlib.migration_step1(obs=1); call symput('projectid', projectuuid); run; %MM_GetURL(ID=&projectid); data _null_; p = index("&_MM_URL", "MMRoot"); call symput('rooturl', substr("&_MM_URL", 1, p-2)); run; %if (%sysfunc(exist(mmlib.migration_step1))=0) %then %goto exit; /* Get counts of versions */ data &tarlib..migration_step2 work.todo; set mmlib.migration_step1; length to $ 400; label to="Migrate To"; length import $ 8; label import = "Import"; /* Here projectURL should not use url encoded format */ /* otherwise, long DBCS name will not work */ to = strip("&rooturl")||strip(projectPath)||"/"||strip(versionName)||"/Resources"; import="FAIL"; output &tarlib..migration_step2; if upcase(strip(port))="OK" then output todo; run; %let numversions=0; proc sql noprint; select count(*) into: numversions from work.todo quit; %let numversions=&numversions; data _null_; if symget('sysscp')=:'WIN' then dsep='\'; else if symget('sysscp')=:'DNT' then dsep='\'; else dsep = '/'; call symputx('_MMfileSep', dsep); run; /* Loop to migrate each version */ %do i=1 %to &numversions; data _null_; set work.todo(obs=&i firstobs=&i); call symput("ResourcesURL", trim(to)); call symput("portfile", trim("&SourceDir")||"&_MMfileSep"||strip(portfilename)); run; %let ResourcesURL=%superq(ResourcesURL); libname target base "&ResourcesURL" WEBDAV user="&User" pass="&Password"; %let transerr=0; filename portfile "&portfile"; proc cimport library=target infile=portfile new; run;quit; %if (&syserr ne 0) or (&sysinfo ne 0) %then %let transerr=1; %if (&transerr=0) %then %do; proc sql; update &tarlib..migration_step2 set import="OK" where upcase(strip(portfile))=upcase(strip("&portfile")); quit; %end; libname target; %end; %exit: %if %sysfunc(exist(&tarlib..migration_step2)) %then %do; proc print data=&tarlib..migration_step2 label; run;quit %end; %mend MM_migrationStep2; /******************************************************************** * Test sample 1 - Migrate from Model Manager 2.3 to 3.1 * Step 1: Export all sas files from source system * Note: Please run this macro at workspace server in migration source system ******************************************************************** %MM_migrationStep1 ( Server = mySourceServer, PortNumber = 6411, User = mmUser, Password = mmPassword, TargetDir = \\network1\port ); /******************************************************************** * Test sample 1 - Migrate from Model Manager 2.3 to 3.1 * Step 2: Import all sas files to target system * Note: Please run this macro at workspace server in migration target system ******************************************************************** %MM_migrationStep2 ( Server = myTargetServer, PortNumber = 8080, User = mmUser, Password = mmPassword, SourceDir = \\network1\port ); ********************************************************************/ /******************************************************************** * Test sample 2 - Migrate from Model Manager 2.1 to 3.1 * Step 0: Get versions to be migrated * Note: Please run this macro at workspace server in migration target system ******************************************************************** %MM_migrationStep0 ( MMRootURL = %nrstr(http://myServer:8300/ModelManager), Server = mySourceServer, PortNumber = 6411, User = mmUser, Password = mmPassword, TargetDir = \\network1\port ); /******************************************************************** * Test sample 2 - Migrate from Model Manager 2.1 to 3.1 * Step 1: Export all sas files from source system * Note: Please run this macro at workspace server in migration source system ******************************************************************** %MM_migrationStep1 ( MigrateFrom21 = Y, User = mmUser, Password = mmPassword, TargetDir = \\network1\port ); /******************************************************************** * Test sample 2 - Migrate from Model Manager 2.1 to 3.1 * Step 2: Import all sas files to target system * Note: Please run this macro at workspace server in migration target system ******************************************************************** %MM_migrationStep2 ( Server = myTargetServer, PortNumber = 8080, User = mmUser, Password = mmPassword, SourceDir = \\network1\port ); ********************************************************************/