Contents Using the Workspace Manager Previous Next

Code Samples

Using Local SAS with ADO

    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

Using Remote SAS with ADO and No Persisted ServerDefs or LoginDefs

    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

Establishing LDAP parameters and Listing Server Definitions in the Current Scope

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

Parsing the returned XML

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

Using COM+ Pooling

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

Using Integration Technologies Pooling

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


Contents Using the Workspace Manager Previous Next