2014-06-26 31 views
2

我正在实施一个依赖Bloombergs blpapilib2的工具,它是Bloomberg API COM Lib 3.5。Bloomberg API:如何检查其连接是否有效?

在给我的用户访问任何刷新数据功能之前,我想确保连接正常。我的方法到目前为止:

  1. 检查图书馆是否可用和链接。基本上通过参考循环来完成这项工作。

  2. 用session.Start()打开连接。我希望在这里得到一个错误,但它不会给我一个。因此,步骤3.

  3. 请求一些数据并验证它(确保其不为空)

Surporisingly,我不能可靠地重现得到一个空的结果。我期望我的会议依赖于一个用户进入终端。看来我错了;即使我注销,我的请求将被处理并返回正确的数据。

我能想象两种场景:

  • 的bbcom,服务器在某些后台缓存

  • 其他身份验证方法用于


我有两个问题:

Q1。

Q1。确保用户能够下载数据的最佳方式是什么? Q2302。如何验证连接是否已成功建立并且用户已通过身份验证?

谢谢。

回答

2

要“切断”连接,您需要注销并登录到其他计算机上。如果您只是注销,则Feed仍然可以使用API​​。

这就是我如何测试连接 - 我认为它工作得很好。我有一个BloombergWrapper类来处理所有与API通信的低层次的东西,它具有以下功能:

Private pSession As blpapicomLib2.Session 
Private pService As blpapicomLib2.Service 

Private Sub Class_Initialize() 

    Dim locStatusBar As Variant 
    Dim locBbResult As Variant 

    On Error GoTo error_handler 

    If Application.StatusBar = False Then locStatusBar = False Else locStatusBar = Application.StatusBar 
    Application.StatusBar = "Connecting to Bloomberg..." 

    Set pSession = New blpapicomLib2.session 
    pSession.Start 

    pSession.OpenService ("//blp/refdata") 
    Set pService = pSession.getService("//blp/refdata") 

    Application.StatusBar = locStatusBar 
    Exit Sub 

error_handler: 
    If InStr(Err.Description, "timeout") Then 
    Call MsgBox("A Bloomberg timeout has occured. Make sure you are logged on your terminal.", vbCritical + vbOKOnly, "Bloomberg error...") 
    End If 
    If locStatusBar <> "" Then Application.StatusBar = locStatusBar 

End Sub 

Private Sub Class_Terminate() 
    pSession.Stop 
    Set pSession = Nothing 
End Sub 
+0

谢谢,这看起来很像是我要找的。出于某种原因,'On Error GoTo errHandler'不会捕获我得到的运行时错误:“运行时错误-2147024809(80070057):未找到服务'// blp/refdata'”。为什么? (Lib已链接,BB未运行,并且从未在此计算机上运行,​​但已安装。)谢谢! – phi

+0

这很奇怪。我不确定为什么要诚实... – assylias

+0

只是一个快速更新,我让调试器停止了所有的错误,包括那些处理的地方,渲染任何错误处理毫无意义;)这个解决方案工作得很好。谢谢! – phi