API Bloomberg: как проверить, работает ли соединение?

Я внедряю инструмент, основанный на blpapilib2 Bloomberg, который является COM Lib 3.5 API Bloomberg.

Прежде чем предоставить моему пользователю доступ к каким-либо функциям обновления данных, я хочу убедиться, что соединение работает. Мой подход до сих пор:

  1. Проверьте, доступна ли библиотека и подключена ли она. В основном цикл по ссылкам делает свою работу.

  2. Откройте соединение с помощью session.Start() . Я надеялся получить ошибку здесь, но это не даст мне ее. Таким образом, шаг 3.

  3. Запросите некоторые данные и проверьте их (убедитесь, что они не пусты)

Удивительно, но я не могу надежно воспроизвести получение пустого результата. Я ожидал, что мой сеанс зависит от входа пользователя в терминал. Кажется, я был неправ; даже если я выйду из системы, мой запрос будет обработан и вернет правильные данные.

Я могу представить два сценария:

  • некоторое фоновое кэширование на сервере bbcom

  • используется альтернативный метод аутентификации


У меня есть два вопроса:

Q1. Как лучше всего убедиться, что пользователь сможет загружать данные?

Q2. Как я могу проверить, успешно ли установлено соединение и аутентифицирован ли пользователь?

Спасибо.


person zuiqo    schedule 26.06.2014    source источник


Ответы (1)


Чтобы «разрезать» соединение, вам нужно выйти из системы и войти в нее на другой машине. Если вы просто выйдете из системы, фид по-прежнему будет доступен через 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
person assylias    schedule 26.06.2014
comment
Спасибо, это очень похоже на то, что я ищу. По какой-то причине «On Error GoTo errHandler» не улавливает ошибку времени выполнения, которую я получаю: Ошибка времени выполнения -2147024809 (80070057): Служба «//blp/refdata» не найдена. Почему это? (Либа подключена, а ББ НЕ работает и никогда не работал на этой машине, но установлен.) Спасибо! - person zuiqo; 26.06.2014
comment
Просто быстрое обновление, я остановил отладчик на всех ошибках, включая те, которые были обработаны, что сделало любую обработку ошибок бессмысленной;) Это решение работает отлично. Спасибо! - person zuiqo; 30.06.2014