Using the Workspace Manager |
Dim obSAS As SAS.Workspace Dim obWorkspaceManager As New SASWorkspaceManager.WorkspaceManager Private Sub Form_Load() Dim obConnection As New ADODB.Connection Dim obRecordSet As New ADODB.Recordset Dim errorString As String Set obSAS = obWorkspaceManager.Workspaces.CreateWorkspaceByServer("MyWorkspaceName", VisibilityProcess, Nothing, "", "", errorString) obSAS.LanguageService.Submit "data a; x=1; y=100; output; x=2; y=200; output; run;" obConnection.Open "provider=sas.iomprovider.1; SAS Workspace ID=" + obSAS.UniqueIdentifier obRecordSet.Open "work.a", obConnection, adOpenStatic, adLockReadOnly, adCmdTableDirect obRecordSet.MoveFirst Debug.Print obRecordSet(1).Value End Sub Private Sub Form_Unload(Cancel As Integer) ' If we don't close SAS, the SAS process ' may stay around forever If Not (obSAS is Nothing) Then obWorkspaceManager.Workspaces.RemoveWorkspace obSAS obSAS.Close End If End Sub
Dim obSAS As SAS.Workspace Dim obWorkspaceManager As New SASWorkspaceManager.WorkspaceManager Private Sub Form_Load() Dim obConnection As New ADODB.Connection Dim obRecordSet As New ADODB.Recordset Dim obServerDef As New SASWorkspaceManager.ServerDef Dim xmlString As String obServerDef.Port = ObjectServerPort obServerDef.Protocol = ProtocolBridge ' Multiple hostNames can be provided ' for failover; order is unreliable. obServerDef.MachineDNSName = "myServer.myCompany.com" Set obSAS = obWorkspaceManager.Workspaces.CreateWorkspaceByServer("MyWorkspaceName", VisibilityProcess, obServerDef, "MyUserID", "MyPassword", xmlString) obSAS.LanguageService.Submit "data a; x=1; y=100; output; x=2; y=200; output; run;" obConnection.Open "provider=sas.iomprovider.1; SAS Workspace ID=" + obSAS.UniqueIdentifier obRecordSet.Open "work.a", obConnection, adOpenStatic, adLockReadOnly, adCmdTableDirect obRecordSet.MoveFirst Debug.Print obRecordSet(1).Value End Sub Private Sub Form_Unload(Cancel As Integer) If not (obSAS is Nothing) Then obWorkspaceManager.Workspaces.RemoveWorkspace obSAS obSAS.Close End If End Sub
This example shows how to set the properties on a SASWorkspaceManager object so that the program can read and write definitions from an LDAP server.
If the persistInRegistry parameter is true on SetLDAPServer, the provided LDAP URL is written to the system registry (HKEY_LOCAL_MACHINE). If persistInRegistry is true on SetLDAPUser, then the LDAP User and Password are persisted in the CurrentUser registry. An error will occur if persistInRegistry is True and the user does not have permission to write to the registry.
Private Sub Form_Load() ' Set parameters to access definitions from LDAP server set obWorkspaceManager = CreateObject("SASWorkspaceManager.WorkspaceManager") ' Remember that VBScript can't use VB enums...replace "ScopeGlobal" with 3, ' or add this line for VBSCript ScopeGlobal = 3 obWorkspaceManager.Scope = ScopeGlobal obWorkspaceManager.SetLDAPServer "LDAP://myServer.myCompany.com:myServerPort/o=MyCompany,c=US", True obWorkspaceManager.SetLDAPUser "cn=myLDAPUserID,o=myCompany,c=US", "myLDAPPassword", True 'Now list all server definitions in the current scope for each def in obWorkspaceManager.ServerDefs debug.print def.Name next End Sub
This example illustrates how to parse the XML that is returned when an error occurs.
Dim obSAS As SAS.Workspace Dim obWorkspaceManager As New SASWorkspaceManager.WorkspaceManager Private Sub Form_Load() Dim errorXML As String On Error GoTo CREATEERROR ' Establish LDAP/File parameters Set obSAS = obWorkspaceManager.Workspaces.CreateWorkspaceByLogicalName("MyWorkspaceName", VisibilityProcess, "", "", errorXML) ' errorXML only gets returned when there is a successful connection, otherwise err.description gets the XML If (Len(errorXML) > 0) Then ParseXML errorXML CREATEERROR: If (Err.Number <> SASWorkspaceManager.Errors.SEE_XML) Then GoTo TROUBLE End If DISPLAYXML: ParseXML Err.Description GoTo NOTROUBLE TROUBLE: Debug.Print Str(Err.Number) + ": " + Err.Source + ": " + Err.Description NOTROUBLE: End Sub Private Sub ParseXML(xml As String) ' Another option would be to create some XML to make this look nice. ' Write the XML to a file so it can be parsed ' Form2 simply has a WebBrowser control in it Dim f As New Scripting.FileSystemObject Dim fname As String Dim tstream As Scripting.TextStream fname = f.BuildPath(f.GetSpecialFolder(TemporaryFolder), f.GetTempName) Set tstream = f.OpenTextFile(fname, ForWriting, True) tstream.Write ("<html><body><xml id=""combridgeOutput"">") tstream.Write (xml) tstream.Write ("</xml><table datasrc=""#combridgeOutput""><thead><th>sasServer</th><th>sasLogin</th>") tstream.Write ("<th colspan=50>machineDNSName</th><th colspan=20>port</th><th colspan=40>status</th>") tstream.Write ("<th colspan=200>description</th></thead><tbody><tr><td><span datafld=""sasserver"">") tstream.Write ("</span></td><td><span datafld=""saslogin""></span></td><td colspan=50>") tstream.Write ("<span datafld=""sasmachinednsname""></span></td><td colspan=50><span datafld=""sasport"">") tstream.Write ("</span></td><td colspan=40><span datafld=""status""></span></td><td colspan=200>") tstream.Write ("<span datafld=""description""></span></td></tr></tbody></table></body></html>") tstream.Close Form2.WebBrowser1.Navigate "file://" + fname Form2.Show End Sub
This example illustrates how to use the COM+ pooling feature.
' Either of these lines will create a PooledWorkspace using COM+ dim obPooledWorkspace as new SASWorkspaceManager.PooledWorkspace set obPooledWorkspace = CreateObject("SASWorkspaceManager.PooledWorkspace") ' Note that from this point on, the code is the same in both the COM+ ' and the Integration Technologies pooling. Dim obSAS as SAS.Workspace Set obSAS = obPooledWorkspace.Workspace ' Now use obSAS. Debug.Print obSAS.UniqueIdentifier 'When done, release the obPooledWorkspace to return it to the pool. Set obPooledWorkspace = Nothing
This example illustrates how to use the Integration Technologies pooling feature.
' Get the pool. If it doesn't exist, create it Dim obWorkspaceManager As New SASWorkspaceManager.WorkspaceManager Dim obPool As SASWorkspaceManager.WorkspacePool On Error Resume Next ' Assume the pool already exists Set obPool = obWorkspaceManager.WorkspacePools("MyLogical") On Error GoTo 0 If (obPool Is Nothing) Then ' The pool doesn't exist; create it Dim obServer As New SASWorkspaceManager.ServerDef Dim obLogin As New SASWorkspaceManager.LoginDef obServer.Protocol = ProtocolBridge obServer.Port = 4321 ' A random number obServer.MachineDNSName = "MyMachine.MyCompany.com" obLogin.LoginName = "MyLogin" obLogin.Password = "MyPassword" Set obPool = obWorkspaceManager.WorkspacePools.CreatePoolByServer("MyLogical", obServer, obLogin) End If ' Now the pool is created, get a Workspace from it: Dim obPooledWorkspace As SASWorkspaceManager.PooledWorkspace set obPooledWorkspace = obPool.GetPooledWorkspace("", "", 1000) ' Note that from this point on, the code is the same in both the COM+ ' and the Integration Technologies pooling. Dim obSAS As SAS.Workspace Set obSAS = obPooledWorkspace.Workspace ' Now use obSAS. Debug.Print obSAS.UniqueIdentifier 'When done, release the obPooledWorkspace to return it to the pool. Set obPooledWorkspace = Nothing
Using the Workspace Manager |