Chris,
Wow! I never knew about half of those certifications. Boy, am I behind. Say, how about a SAS CLSID certification? I mean, who doesn't want to memorize the numbers of every single SAS CLSID? Long overdue, I say.
On a more serious note: Progress continues! I'm safely past that last exception, and, based on the log file, I can see that I've now connected to my SAS server!
2015-11-20 13:54:57,105 [11] INFO SAS.EC.Directory.Model.Server [(null)] - Attempting connection to SASApp
2015-11-20 13:54:57,105 [11] INFO SAS.EC.Directory.Model.Server [(null)] - Machine: sasp01.sce.com@8591
2015-11-20 13:54:57,105 [11] INFO SAS.EC.Directory.Model.Server [(null)] - LogicalName: SASApp - Logical Workspace Server
2015-11-20 13:54:57,105 [11] INFO SAS.EC.Directory.Model.Server [(null)] - IOM options: LOCALE=en-US
2015-11-20 13:54:57,105 [11] INFO SAS.EC.Directory.Model.Server [(null)] - LoginMode: Cache
2015-11-20 13:54:57,105 [11] INFO SAS.EC.Directory.Model.Server [(null)] - Login: Authdomain = DefaultAuth, User = barboujb
2015-11-20 13:54:58,370 [11] INFO SAS.EC.Directory.Model.Server [(null)] - Connection successful
But, alas, all is not quiet on the western front, I am now getting an IOM exception as follows;
2015-11-20 13:55:00,705 [4] ERROR SAS.EG.JobManagement.WorkspaceJob [(null)] - (Id=1) OnExecuting() - Unrecoverable error occurred
System.InvalidOperationException: The 'sas.iomprovider.1' provider is not registered on the local machine.
at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at SAS.EG.JobManagement.Adapters.ExecutionWorkspaceConnection.GetMacroVariableValueFromServer(String macroVariable)
at SAS.EG.JobManagement.Adapters.ExecutionWorkspaceConnection.InitializeConnection(IJobLog initializationLogThatCouldBeNull)
at SAS.EG.JobManagement.Adapters.ExecutionWorkspaceConnection..ctor(String serverName, Boolean usePrimaryWorkspace, Boolean useGridIfAvailable, IJobLog initializationLogThatCouldBeNull)
at SAS.EG.JobManagement.Adapters.WorkspaceExecutor.Connect(String serverName, IJobLog jobLog, ResultManager resultManager, Boolean usePrimaryWorkspace, Boolean useGridIfAvailable)
at SAS.EG.JobManagement.WorkspaceJob.OnExecuting(EventArgs e)
So, after a bit of creative Googling (saaay, how about a SAS Googling certification?), 😉 I found that I need to install the SAS Providers for OLE DB. I downloaded same, using version 9.3, and got the following message:
Since the version of the SAS Providers for OLE DB matching my version of SAS didn't work, I downloaded and installed version 9.43 of the SAS Providers for OLE DB, and... It WORKED!! (I'll mail you some of my sushi since I've now won my "free lunch" bet)
I haven't tried scheduling my vb script yet, but I've got the vb script working, so I think I'm pretty much there.
Short, high level summary of what I did to get a vb script to run an EG project in batch mode in an evironment with virtualized SAS EG (i.e. SAS EG isn't physically installed on the local hard drive but rather is invoked through some type of virtualization client such as Microsoft Application Virtualization Client):
1. Generate a vb script
2. Write a batch file that invokes the "bitness" correct version of CSscript.exe and executes the above generated vb script
3. Download and install SASEGScripting.dll
4. Download and install SAS Integration Technologies client
5. Add one's profile to ConfigurationV51.xml
6. Download and install SAS Providers for OLE DB
7. Bug the heck out of Chris Hemedinger (essential step in this case) 🙂
Two notes:
1. It would be nice if the generated vb script were named {project name}.vbs instead of just EGScript1, EGScript2, EGScript3, etc.
2. The process I went through to get this to work is fairly laborious. Inasmuch as companies are increasingly moving toward virtualized applications, a smoother, more automated procedure would surely be called for. Incidentally, neither my current employer nor my previous employer has had a policy of physically installing SAS EG on individual's machines. Both use some type of virtualized SAS EG. My current employer uses Microsoft Application Virtualization Client. My previous employer used Citrix. If SAS EG wants to have a credible automation option, then I really think there's got to be a better way than the route that I went. Even if one were armed with the knowledge of the steps I've outlined above, it might still take the better part of a day to get everything working, and the process is error prone. Anyway, another suggestion to throw into the hopper. 🙂
Thanks for all your help and by golly it worked,
Jim
... View more