Genexus Extensions SDK — Как управлять командной разработкой КБ с помощью кода?

#sdk #genexus

Вопрос:

Я искал способы получить информацию и методы раздела командной разработки Genexus с помощью SDK, такие как:

  • Получите имя КБ, размещенного на сервере Genexus (не то имя, которое я поставил, когда КБ было загружено с сервера)
  • Получить информацию о наборе изменений
  • Триггерная фиксация наборов изменений
  • Запустите полное обновление текущего КБ

Я узнал о некоторых занятиях внутри «Артеха.Упаковка.TeamDevClient…» Библиотеки DLL, но они не прилагались к установке SDK, я нашел эти библиотеки DLL в своей папке установки Genexus 16 (внутри ./Пакеты), поэтому я не уверен, следует ли мне ее использовать. Поэтому мои вопросы таковы:

  • В среде SDK я могу получить информацию о разделе Team Dev в Genexus? для таких вещей, как наборы изменений, имя КБ сервера Genexus…
  • Могу ли я запускать события сервера Genexus, такие как фиксации, обновления и блокировки?

Редактировать:

Для выполнения этих операций нам, очевидно, необходимо подключиться к экземпляру сервера GX, поэтому, если учетные данные сервера Genexus не были заданы, он не будет работать.

Тем не менее, как мне правильно установить (и получить) эти конфигурации программно? Я немного покопался в классах и нашел это TeamDevelopmentData , у Artech.Architecture.Common.Services.TeamDevData.Client него есть и перегрузка, чтобы принять рабочую модель, поэтому я попробовал следующее (с моими учетными данными сервера genexus, уже настроенными в разделе командной разработки):

 TeamDevelopmentData teamDevData = new TeamDevelopmentData(UIServices.KB.CurrentModel); foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(teamDevData)) {  string name = descriptor.Name;  object value = descriptor.GetValue(teamDevData);  CommonServices.Output.AddLine(name " = "  value); }  

В результате teamDevData свойства являются null . Как мне правильно его использовать?

Ответ №1:

Двоичные файлы в папке «Пакеты» представляют собой сведения о реализации служб, определенных в SDK. Не рекомендуется ссылаться ни на один из них, так как они подвержены изменениям, и ваше расширение сломается, если это произойдет. Наша приверженность совместимости относится к SDK GeneXus.

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

  1. Чтобы получить имя удаленного КБ, вы можете запросить соответствующее свойство КБ:
 KnolwedgeBase kb = UIServices.KB.CurrentKB; string remoteKBName = (string) kb.Properties.GetPropertyValue(Artech.Genexus.Common.Properties.KB.RemoteKb);  
  1. Чтобы получить списки изменений, определенные в диалоговом окне фиксации, вы можете использовать следующее:
 var changeLists = BLServices.TeamDevClient.GetChangelists(UIServices.KB.CurrentModel);  

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

  1. В настоящее время нет способа зафиксировать объекты списка изменений напрямую, но можно отфильтровать ожидающие фиксации объекты в соответствии с ключами необходимого списка изменений.
 var localChanges = BLServices.TeamDevClient.GetLocalChanges(UIServices.KB.CurrentModel); Listlt;KBObjectHistorygt; objectList = ….. var data = new SendChangesData {  Comment = “Commit comment”,  Options = ExportOptions.Default,  ObjectList = objectList }; bool result = UIServices.TeamDevelopment.SendChanges(data);  

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

  1. Запустите полное обновление текущего КБ
 var data = new ReceiveChangesData(); var pendingUpdate = UIServices.TeamDevClient.JustReceiveChanges(ref data);  

Я надеюсь, что это позволит вам начать. Если у вас есть какие-либо вопросы, не стесняйтесь задавать их.

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

1. Это потрясающе @Антонелла Гутьеррес ! спасибо за подробное объяснение, я продолжу расспрашивать о SDK и, надеюсь, облегчу новым разработчикам понимание того, на что способна платформа.

2. Я отредактировал с помощью дополнительного вопроса, касающегося управления учетными данными Team Dev в SDK!

3. Как я уже сказал, пакет пользовательского интерфейса управляет учетными данными пользователей для тех операций, которые требуют их отправки на сервер. Мы переходим от аутентификации служб с помощью учетных данных к использованию уже аутентифицированных токенов, чтобы службам BL не нужно было также получать учетные данные в качестве аргументов. Эта часть еще не завершена для использования расширениями.