Jmix.ru – Telegram
Jmix.ru
646 subscribers
358 photos
44 videos
1 file
436 links
Jmix — платформа быстрой разработки B2B и B2G веб-приложений на Java.

🤝 Наш коммьюнити-чат: https://news.1rj.ru/str/jmixchat

⚙️ Начать бесплатно: https://www.jmix.ru/get-started/
Download Telegram
Шаблоны сообщений избавляют от рутины🧩

Приложение разговаривает с пользователем посредством уведомлений и email’ов. Но для этого разработчику нужно задать текст сообщений. И часто так бывает, что в этот текст надо вставить конкретные данные. Например, имя пользователя или номер заказа.

В принципе, задача нехитрая, с этим справится даже джун😎. Но это совершенно рутинная работа, которая просто отнимает время и хотелось бы от нее избавиться.

Команда Jmix постоянно думает, как оптимизировать и еще больше ускорить разработку и поэтому в релизе 2.5 появились шаблоны сообщений!

Адд-он Message Templates использует движок Apache FreeMarker для генерации HTML и текстовых шаблонов. А создавать и редактировать эти шаблоны вы можете в визуальном редакторе на основе GrapesJS. Этот редактор позволяет создавать шаблоны с использованием библиотеки предварительно разработанных HTML-блоков. Вы можете легко проектировать свои шаблоны, просто перетаскивая эти блоки из палитры на холст.

Подробнее можно почитать в документации📚

Устанавливайте Message Templates из маркетплейса и создавайте информативные и привлекательные сообщения для ваших пользователей!🚀

#фича #jmix25
🔥4
Запускаем онлайн-курс «Jmix PRO»!

📅 Даты: 7 - 24 апреля
🕒 Время: с 18:00 до 21:00 по московскому времени

💻 Формат: учебные сессии в МТС Линк, общение в закрытом Telegram-чате.
В данном курсе подробно рассматривается работа с файлами и данными, разработка административного пользовательского интерфейса, развертывание приложений, подсистема управления доступом

Что вы узнаете и научитесь делать?

1️⃣ Использовать систему управления доступом.
Создавать и назначать роли. Рассмотрим пример регистрации и активации пользователей. Разберем интеграцию с внешним сервисом аутентификации на примере KeyCloak SSO.

2️⃣ Подготавливать приложения к развертыванию в продуктовой среде правильно.
Также мы изучим доступные способы сборки приложения - от JAR до собственного многослойного образа Docker.

3️⃣ Создавать типовой пользовательский интерфейс с множеством доступных компонентов.
Стилизовать приложения Jmix, создавать собственные компоненты интерфейса, создавать обработчики событий интерфейса.

4️⃣ Создавать модель данных приложения, получать доступ к данным с использованием разнообразных подходов программно и декларативно.
Выгружать файлы на сервер, отображать их в пользовательском интерфейсе, инициировать загрузку файлов из браузера.

📌Домашние задания с проверкой тренером!

🔗 Регистрация, стоимость и условия здесь.

#мероприятия
👍3
📢 Уже ЗАВТРА! Не пропустите продолжение вебинара по Jmix BPM!

12 марта в 16:00 по мск Станислав Макаров, продуктовый аналитик платформы Jmix, продолжит показывать, как с помощью Jmix BPM создавать процессы, ориентированные на обработку событий.

На вебинаре вы узнаете:

🔸Как брокер сообщений RabbitMQ выступает источником событий для запуска процессов.
🔸Как запускаются процессы в ответ на изменение данных и при помощи планировщика Quartz.
🔸Как используются внутренние события Jmix для управления интерфейсом и бизнес-логикой

💎БОНУС: Вы увидите в действии компоненты для работы с картами (Maps) и графиками (Charts) и другие возможности платформы Jmix.

Рекомендуем посмотреть первую часть встречи по данной теме здесь.

🔗 Регистрация по ссылке
До встречи в эфире!

#мероприятия
👍62
Media is too big
VIEW IN TELEGRAM
Работа с несколькими вкладками в Flow UI

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

И вот почти готово!🎉
Пока в экспериментальном режиме, но уже можно попробовать, как функционирует Jmix-приложение со множеством вкладок в новом интерфейсе Flow UI. Разработчики честно предупреждают, что это пока не для продакшн, а только посмотреть, окончательная версия появится в следующем релизе.

При помощи бина ViewBuilders вы сможете открывать экраны, передавать в них параметры, получать возвращаемые значения и так далее.

Если вы до сих пор откладывали миграцию своего приложения на новый Jmix из-за сложностей переделки интерфейса, то сейчас самое время начать!

📗Читайте в документации, как попробовать новый режим!

#фича #jmix25
🔥15👍2
Jmix Community Meetup: полезные материалы 💪🏻

Как обещали, публикуем материалы с митапа.

🔹 Презентации спикеров.

🔹 Панели (Dashboards) для мониторинга метрик производительности приложений на базе Jmix для системы Grafana и источника данных Prometheus.
На данный момент в репозитории расположены две готовые панели инструментов. Одна для Jmix 1.6.0+, другая для Jmix 2.2.0+.
Также репозиторий содержит файл с более подробным описанием настройки Jmix для работы с метриками и панелями визуализации Grafana.

🔹Фотоотчет.

Надеемся для тех, кто не смог присутствовать на митапе, данная информация также будет полезна 🙌🏻 Если возникнут вопросы, мы с радостью ответим на них в чате.

#мероприятия
🔥12👍1
🎥 Запись вебинара: Событийный подход в разработке процессных приложений 2.0 с Jmix BPM
Дата проведения: 12.03.2025 год

Как сказал Стас Макаров, спикер вебинара и продуктовый аналитик Jmix, мы продолжаем наш "долгоиграющий сериал по Jmix BPM" 😎 Вторая серия уже доступна к просмотру здесь.

Следующий вебинар по Jmix BPM уже запланирован на 16 апреля, следите за нашими новостями!

#мероприятия
🔥93
Media is too big
VIEW IN TELEGRAM
Hot deploy 🚀– в Студию!

Горячее развертывание a.k.a. Hot deploy это крайне полезная фича для ускорения разработки, поскольку позволяет мгновенно применять изменения без остановки приложения.

Реализован Hot deploy был в Jmix давно, можно сказать изначально. Однако это не было столь удобно, как теперь в Jmix 2.5. Раньше надо было смотреть в консоль, чтобы убедиться, что Hot deploy сработал.

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

С таким индикатором разработчик постоянно видит состояние изменений в исходном коде и при может их доставить их в работающее приложение в любой момент. ⏱️

📚Подробнее читайте в документации.

#фича #jmix25
🔥182
БД со справочниками и демо данными в Git’е – это удобно!👻

Когда делаешь прототип, то часто приходится экспериментировать и откатываться назад, если идея не сработала или что-то пошло не так. С кодом проблем нет – Git позволит вернуться в точку, где все работало. Но как быть с базой?

Окей, схему БД синхронизирует Liquibase, за что ему большое спасибо. Но иногда эксперименты заходят так далеко, что базу проще сгенерить заново, чем чинить. А потом нужно опять заводить какие-то данные для демо или для тестирования.

Чтобы этого избежать, было бы удобно вместе с кодом хранить и версию базы. Тогда можно будет вернуться на любой шаг и продолжить разработку. Но как это сделать? Бэкапить базу вручную и помнить, для какой версии эти данные? Неудобно!

К счастью, есть способ проще: кладем саму БД в Git и дело в шляпе! Но этот способ работает только с HSQLDB, с Postgres или другой «настоящей» СУБД будет слишком хлопотно.

Что надо сделать:

1. Запустите приложение.
При этом база будет создана автоматически в папке .jmix/hsqldb

2. Отредактируйте файл .gitignore:
Нужно чтобы файлы БД из директории .jmix попадали в коммит, а все прочие игнорировались. Поэтому перечислим их следующим образом:

!.jmix/hsqldb/*.lobs (BLOB-объекты, если есть)
!.jmix/hsqldb/*.log

!.jmix/hsqldb/*.properties
!.jmix/hsqldb/*.noscript


Вместо * можете подставить ваш Project id, например, ord.log.

🔸Но не надо хранить в репозитории лок-файл *.lck, иначе будет выскакивать ошибка.

Вот и все! 🎉
Теперь при каждом коммите база данных тоже будет сохраняться, и вы сможете быстро перейти к любой версии.

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

#лайфхак
🔥9
🔈 Вебинар Jmix и Axiom JDK: Как перестать изобретать "велосипеды" и не сжигать ресурсы при создании проекта

9 апреля 2025, 16:00 по мск

Вместе с нашим партнером Axiom JDK, средой разработки и исполнения JAVA с российской техподдержкой для коммерческих и государственных компаний, обсудим важную тему - Как сократить затраты при разработке решений?

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

🚲 Как избежать необходимости изобретать "велосипед"?


На встрече поговорим про:

🔹 Ситуацию с программным обеспечением на ИТ рынке 2025.
🔹 Вызовы при создании внутренних цифровых активов компании.
🔹 Пути разработки на Java. Подходы к построению архитектуры web-приложения.

🔗 Регистрация по ссылке

Присоединяйтесь к обсуждению!

#мероприятия
🔥9
Поваренная книга от Jmix:
Готовим пользовательские интерфейсы для людей

А вы знали, что в наших UI Samples есть сборник рецептов о том, как создавать интерфейсы, когда нужно сделать нечто более замысловатое, чем типовой CRUD-экран?
Вот, хотя бы с использованием композиций (composition).

Методом проб и ошибок подобные конструкции самому реализовать трудно, да и чтение документации не всегда помогает сразу, хотя в документации все написано. Потому что темы эти действительно сложные 🤔. Зато наглядный пример с пояснениями от разработчиков позволяет быстро решить задачу.

Итак, экран с композицией

Предположим, мы создаем систему управления аэропортами✈️. Как известно, в аэропорте может быть несколько терминалов. То есть, сущности Airport и Terminal связаны отношением composition. Соответственно, надо открывать и редактировать атрибуты терминала из экрана аэропорта. Это можно сделать разными способами:

🔅Показать на экране редактирования сущности нужно таблицу со связанными объектами🔗, которые можно открывать и редактировать. Причем у вам может быть много уровней вложенности.

🔅Или можо использовать экран мастер-деталь, чтобы уменьшить вложенность диалоговых окон.

🔅А еще есть inline-редактор для таблиц, который тоже может быть удобен в каких-то случаях.

🔅И учтите, что при работе с композициями нужно позаботиться о правильной сортировке, чтобы видеть подчиненные сущности в контексте корневой.

🔅И бывает полезно информировать пользователя об изменениях, если они произошли после того, как он открыл экран

Как это правильно и удобно показать в интерфейсе,
смотрите по ссылке на нашу книгу рецептов📚


#cookbook #гайд
🔥12👍5
На недавнем вебинаре по Jmix BPM мы говорили о событиях в процессе.

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

Если вы думаете, что достаточно поставить флаг async и все волшебным образом образуется, то это не так. Все гораздо сложнее.

Чтобы разобраться в этом вопросе читайте на Хабре новую статью Станислава Макарова
Неблокирующий вызов внешнего сервиса в процессе

#статья
🔥6👍4
🆕 Видеообзор: Что нового в Jmix 2.5

Дмитрий Кремнев, ведущий разработчик Jmix, вернувшись с нашего митапа, не смог остаться равнодушным к просьбе коммьюнити подготовить отдельное видео по последним обновлениям и планам на будущее!

Специально для тех, кто не смог посетить встречу в Москве, публикуем обзор релиза 2.5 🤘

📌 VK
📌 YOUTUBE

Делитесь обратной связью в чате!

#обновления #jmix25
🔥15👍3
Продолжаем рассказывать про новое в релизе Jmix 2.5!🎉

Сегодня речь пойдет про REST API и REST DataStore, два аддона, которые работают в паре и дополняют друг друга. В новом релизе их взаимодействие стало еще теснее.

🔸Фетч-планы в REST API и REST DataStore
Теперь вы можете передавать произвольные fetch-планы в виде JSON-объектов в ваши REST API endpoints.

Что это значит для вас? 🤔
Больше не нужно определять все fetch-планы в общих репозиториях.
Используйте встроенные fetch-планы в ваших клиентских экранах и Java-коде!

🔸Новый Capabilities API
Он информирует клиента о функциях, поддерживаемых данным универсальным REST API.

🔸Использование FileStorage с REST DataStore
В REST DataStore  появилась специальная реализация FileStorage, которая работает с файлами, расположенными в хранилище файлов удаленного приложения через REST-эндпойнты /files.

🔸Настраиваемые пути REST-эндпойнтов
Пути универсальных эндпойнтов REST API теперь можно настраивать с помощью свойств приложения.

🔸Сессии в REST API
Дополнение Jmix Sessions предоставляет поддержку сессий, поддерживаемых для REST-запросов с одним и тем же токеном. 

#фича #jmix25
🔥8👍3
📣 Вебинар Данные в действии: Как Jmix BPM превращает бизнес-процессы в эффективные механизмы

16 апреля, 16:00 по мск

Станислав Макаров, продуктовый аналитик Jmix, уже готовит новый вебинар! В этот раз Стас представит богатый арсенал Jmix BPM по работе с данными, который позволяет реализовать сложные сценарии их обработки в виде сервисных задач бизнес-процесса 🔝

На встрече вы узнаете:

▪️Что такое процессные переменные и как их правильно использовать.
▪️Когда и как применять Entity Data Task, и когда их использовать не стоит.
▪️Как реализовать Service Task по обработке данных.
▪️Каковы лучшие практики и риски при использовании бизнес-данных в процессе

🔗 Регистрация тут.

#мероприятия
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10😱2
😮 Воу воу! Огненная статья про Jmix AI Assistant появилась на Хабре!

Автор рассказывает о создании образовательной платформы с помощью ассистента Jmix. Как можно быстро сгенерировать UML-диаграммы, определить доменную модель и реализовать ключевые сущности, не написав ни строчки кода вручную.

Читать обязательно тут.

#статья
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥193👍3
🎙 Мы обещали встречаться офлайн чаще - следуем этому плану!

Сегодня на 31-й Конференции «Информационные технологии в страховании» в Москве выступает Антон Решанов, Руководитель продаж Jmix в России и Беларуси.

💡 Тема доклада: «Особенности автоматизации бизнес-процессов в InsurTech». Ох и много мы говорим про Jmix BPM в этом году 😎

Приходите послушать, задать вопросы и пообщаться про Jmix.

📍 Связаться с Антоном можно по телефону +7 937 238 0322

#мероприятия
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
Март был богат на события, и апрель не отстает! 🌪️

Дмитрий Кремнев, ведущий Jmix-разработчик, которого вы знаете по вебинарам и недавнему митапу, будет рад встретиться с вами на JPoint 👋

3-4 апреля находите Диму на площадке и задавайте ему любые вопросы про Jmix.

Как его найти? Конечно, по фирменной толстовке Жмых-Жмых! Или напишите ему в тг.

На мероприятии будут также наши друзья Amplicode и Spring АйО, рекомендуем тоже к ним заглянуть 😉

#мероприятия
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥1
Продолжаем рассказывать про Jmix.2.5📣

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

Гайд по инициализации сущностей🎉

Зачем нужно инициализировать сущности? — Есть много причин.
Например, можно сократить проверки на null, уменьшить ручной ввод, минимизировать ошибки и так далее.

— Но это же очень просто!
Мы же умеем инициализировать переменные в коде.
В чем проблема?

Дело в том, что в Jmix задать начальные значения атрибутов сущностей можно несколькими разными способами, и это по-разному сказывается на конечном результате —поэтому и понадобился специальный гайд.

Итак, сущности можно инициализировать:

🔸 Прямо в описании класса
🔸 С помощью метода @PostConstruct
🔸 Посредством инжекции зависимостей
🔸 По событиям InitEntityEvent, EntitySavingEvent, EntityChangedEvent

На уровне UI💻, причем есть несколько вариантов

🔹 При инициализации экрана
🔹 При обновлении связанных полей
🔹 При сохранении сущности

А когда какой способ рациональнее выбрать, 📚читайте в нашем гайде

#гайд #jmix25
👍14
Поваренная книга от Jmix, выпуск 2:
Работа с данными в UI


Вот несколько рецептов для эффективной работы с данными и элементами UI!

1️⃣ Каскадные выпадающие списки
Каскадные выпадающие списки фильтруют элементы на основе предыдущего выбора в иерархии. Например, выбор планеты в первом списке обновляет второй список, показывая ее луны.
📌 Совет: Используйте DataLoadCoordinator, чтобы автоматически перезагружать связанные данные при изменении выбора!

2️⃣ Копирование сущностей
При копировании сущностей в представлениях списка вы можете использовать два подхода:
Копировать: Создает новый экземпляр и немедленно сохраняет его.
Копировать и редактировать: Создает новый экземпляр и открывает детальный просмотр сущности для редактирования. Сохраняется только после подтверждения пользователем.
🛠 Совет: Используйте MetadataTools.copy() для поверхностного копирования выбранных сущностей.

3️⃣ Пользовательский фильтр с декларативными условиями
Вы можете реализовать пользовательский фильтр, связав поля ввода с условиями запроса через DataLoadCoordinator. Он автоматически инициирует загрузку данных при событии BeforeShowEvent.
🔍 Совет: Совмещайте с компонентом genericFilter для большей гибкости.

4️⃣ Пользовательский фильтр с модификацией запроса
Изменяйте текст запроса программно, когда изменяется значение поля ввода. Это позволяет реализовать более сложные фильтрации, например, поиск без учета регистра.
🛠 Совет: Метод reload() в контроллере явно инициирует логику фильтрации.

5️⃣ Отложенная загрузка данных
Оптимизируйте пользовательский опыт, откладывая загрузку данных до окончательного выбора. После завершения выбора заказов, данные загружаются через 2 секунды.
Совет: Используйте фасет таймера для загрузки данных только после завершения выбора пользователя.

6️⃣ Сохранение сущности через пользовательский сервис
Отправляйте сущности в пользовательские сервисы для обработки, обеспечивая изолированную и гибкую работу. Например, обновите статус контракта через сервис, перехватывая стандартные операции сохранения.
💡 Совет: Используйте сервисные бины для обработки изменений статуса и убедитесь, что представление сохраняет только измененные сущности.

7️⃣ Использование представлений базы данных
Используйте только для чтения представления базы данных для отображения агрегированных данных без возможности редактирования. Для редактирования данных используйте связанные сущности через обработчики.
🔧 Совет: Обновляйте таблицу данных после успешного коммита с помощью окна диалога для редактирования.

🔗 Следите за новыми полезными советами!
Первый пост о Cookbook смотри здесь.
#cookbook
🔥12👍5
Jmix 2.5: Генерация клиента OpenAPI по тегам – что это значит?

При генерации клиентского кода из схемы OpenAPI обычно создается код для всего API, включая все эндпоинты и модели. Однако в Jmix 2.5 теперь можно генерировать клиентский код только для определенных тегов, заданных в OpenAPI.

Как это работает?

1. OpenAPI использует "теги" для группировки API-эндпоинтов. Например, в API для e-commerce можно иметь:
🔹Orders (для работы с заказами)
🔹Customers (для работы с клиентами)
🔹Products (для работы с товарами)

2. С этим новым функционалом вы можете выбрать только нужные теги при генерации клиентского кода. Если вам нужны только заказы, выбираете тег Orders, а остальные игнорируете.

3. Studio автоматически отфильтрует неиспользуемые схемы. Исключаются модели (структуры данных), которые не задействованы в выбранных эндпоинтах, уменьшая объем сгенерированного кода.

Зачем это нужно?

Меньше кода – Нет необходимости разбираться с лишними моделями и эндпоинтами.
Проще поддерживать – Компактный клиентский код удобнее в работе.

Эта возможность помогает интегрироваться с большими API, не перегружая проект лишним кодом.

Смотрите подробнее в гайде Integrating Applications Using OpenAPI

#фича #jmix25
👍6🔥2🤩1