среда, 1 апреля 2009 г.

ClearQuest и .NET

Встала задача написать библиотеку которая сможет нормально использовать API Rational ClearQuest и при этом методы будут доступны на платформе .NET.

Попытки осуществить эту затею на C# с грохотом провалились, так как рефлексия COM объекта ClearQuestOleServer не даёт полной информации о его членах. А C#, как известно, не поддерживает позднего связывания.

Немного поковырявшись в носу, пришлось ковырять на Visual Basic, так как он поддерживает позднее связывание, да и примеры в документации приведены на VBScript.

Ну что же приступим.

Почитав документацию, начинаешь понимать что чёрт не так страшен как кажется. Сначала появилось желание использовать чисто способ запросов как к базе данных, возможность которых есть в API, но после нескольких экспериментов выяснилось, что
API просто передаёт запрос в базу (следовательно пользователь с ограниченными провами получал в ответ сообщение о том, что ему не доступна данная операция), а так как расчёт ставится не только на администратора БД, но и на обычного пользователя, то пришлось разбираться с возможностями конструктора запросов)

Ну так вот....

Любые действия с API CQ выполняются через получение сессии к базе... на бейсике это делается приблизительно вот так:

Private Function GetSession() As SessionClass

If (_userName = "" Or _userName = Nothing) Then
Throw New NullReferenceException("Имя пользователя не установлено. Воспользуйтесь сначала методом SetConnectionSetting.")
End If

If (_nameDataBaseProject = "" Or _nameDataBaseProject = Nothing) Then
Throw New NullReferenceException("Название базы CQ не установлено. Воспользуйтесь сначала методом SetConnectionSetting.")
End If

Dim session As New Session()
session.UserLogon(_userName, _password, _nameDataBaseProject, 0, "")

Return session

End Function


Главное тут это session.UserLogon(_userName, _password, _nameDataBaseProject, 0, "") . Здесь мы регистрируем свою пользовательскую сессию к CQ. Соотвественно, передаём методу ИмяПользователя, Пароль, НазваниеБазыДанных, далее идёт целочисленный параметр. Смысл его в том, что он указывает тип сессии. Вообще в документации говорится что нужно передавать значения от 1 до 4, но я передаю 0 и при этом всё корректно и приятно работает. Последний же строковый параметр так же не понятно для чего нужен, я использовал пустую строку, в документации говориться что-то про инстансы баз данных, если честно не понял.

На этом пока всё... в следующем сообщении рассмотрю как создавать простые запросы к CQ для поиска дефектов.

Комментариев нет:

Отправить комментарий