SAS 9.1.3 Integration Technologies » Developer's Guide


Using the Workspace Manager
Launching IOM Servers
Administering the SAS Workspace Manager
SAS Workspace Manager Interfaces
Error Reporting
Using Workspace Pooling
Code Samples
Windows Clients

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 might run 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