Статьи

Импорт проблем из Jira в базу данных с использованием C #

Я оцениваю размещенную Jira Studio, и она мне нравится все больше и больше, когда я ее использую. Поскольку размещенный сервис находится не у нас и содержит важную информацию о нашей работе, меня попросили выяснить, есть ли способ прочитать данные из Jira Studio и сохранить их в нашем локальном хранилище данных. В этой публикации я покажу вам простой способ прочитать проблемы из Jira Studio и сохранить их в базе данных.

Предупреждение! Код, показанный здесь, дает вам представление о том, как общаться с Джирой. Если вы хотите использовать его в реальных сценариях, то вам нужно изменить его, чтобы из веб-службы запрашивалось меньше данных. Используйте этот код в качестве рабочей основы для собственного уровня интеграции с Jira, но не забудьте оптимизировать его.

Добавление ссылки на сервис

Я пытался добавить ссылку на современный сервис в веб-сервис Jira в Visual Studio 2010, но он генерировал неправильные вызовы методов, которые было невозможно использовать. Ключ заключается в том, чтобы добавить ссылку в старом стиле на веб-сервис Jira.

Чтобы добавить ссылку на веб-сервис Jira, выполните следующие действия.

  1. Щелкните правой кнопкой мыши по вашему проекту и выберите Добавить ссылку на услугу…
  2. Оставьте поля пустыми в этом диалоговом окне и нажмите кнопку «Дополнительно»
  3. Оставьте значения такими, какие они есть, и нажмите кнопку Добавить веб-ссылку …
  4. Введите URL-адрес Jira и имя веб-ссылки (пример показан на скриншоте ниже)
  5. Нажмите на зеленый значок, чтобы загрузить WSDL
  6. Нажмите кнопку Добавить ссылку…

Добавление ссылки на веб-сервис Jira

Если все прошло хорошо, тогда в ваш проект добавится новая веб-ссылка, и вы сможете начать общаться с Jira.

Создание базы данных и модели данных

Теперь давайте создадим простую таблицу для вопросов и добавим ее в наше приложение как модель данных сущности ADO.NET. В этой публикации у нас есть только одна таблица и один класс. Конечно, вы можете читать больше данных из Jira, а также отслеживать изменения.

Стол для вопросов JiraКласс для вопросов Jira

Теперь наши данные готовы, и пришло время установить связь с Jira.

Подключение к Джира

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

var client = new JiraService.JiraSoapServiceService();
var token = client.login("UserName", "Password");
 
// Read data from service or add new issues

client.Dispose();

Если этот код работает для вас, то вы готовы общаться с Jira.

Проблемы с импортом

Импорт проблем означает, что мы читаем проблемы из сервиса, сопоставляем эти проблемы с нашими локальными проблемами и вставляем их в базу данных. Копирование значений из проблемы веб-службы в проблему нашей модели не очень хорошая идея. Мы можем использовать AutoMapper для облегчения нашей работы. Просто добавьте ссылку на пакет NuGet в проект, прежде чем добавлять следующий код.

var client = new JiraService.JiraSoapServiceService();
var token = client.login("UserName", "Password");
 
var model = new JiraEntities();
 
var issues = client.getIssuesFromJqlSearch(token, "", 2);
 
Mapper.CreateMap<string, int>().ConvertUsing<IntTypeConverter>();
Mapper.CreateMap<JiraService.RemoteIssue, Issue>()
    .ForMember(p => p.ProjectKey, 
              d => d.MapFrom(dd => dd.key.Split('-')[0])
    );
 
foreach (var issue in issues)
{
    var modelIssue = new Issue();
    Mapper.Map(issue, modelIssue);
 
    model.Issues.AddObject(modelIssue);
    model.SaveChanges();
}
 
model.Dispose();
client.Dispose();

AutoMapper не выполняет автоматические преобразования, когда один тип должен быть проанализирован с другим (например, string => int). Вот почему мы используем класс IntTypeConverter, который я нашел из потока stackoverflow AutoMapper: Как проанализировать Int из String и возможно ли создать правила на основе типа данных? Вы можете найти больше классов преобразования из этой темы. Вот IntTypeConverter.

class IntTypeConverter : TypeConverter<string, int>
{
    protected override int ConvertCore(string source)
    {
        if (source == null)           
            throw new MappingException("Cannot convert null to int");
        return Int32.Parse(source);
    }
}

Выполнение кода займет некоторое время, по крайней мере, на моей машине. Но это импортирует проблемы в мою таблицу базы данных.

Вывод

Jira Studio — серьезное предложение для компаний-разработчиков программного обеспечения. Помимо среды для совместной работы на профессиональном уровне, существуют также веб-сервисы, которые позволяют интегрировать Jira Studio с другими системами, которые может использовать ваша компания (планирование времени и ресурсов и т. Д.). Чтобы получить данные от Jira, мы добавили ссылку на старый веб-сервис в наш проект, и перед тем, как связываться с веб-сервисом, мы аутентифицировали себя, чтобы получить токен аутентификации для использования с вызовами методов веб-сервиса.