Poziom 1 - Podstawy Tworzenia Aplikacji i Administracji
Jacek Pietsch
Architektura platformy i ekosystem Mendix
Dogłębna analiza encji, relacji i zdarzeń
Łączenie danych z interfejsem użytkownika
Anatomia Microflow i Nanoflow, wzorce projektowe
Świat pożera oprogramowanie szybciej niż możemy je tworzyć. Zapotrzebowanie na nowe aplikacje rośnie wykładniczo, podczas gdy liczba programistów pozostaje ograniczona.
Tradycyjne podejście do developmentu nie nadąża za tempem zmian biznesowych.
Abstrakcja i automatyzacja w celu poprawy przewidywalności jakości, skalowalności i możliwości zarządzania aplikcjami i rozproszonymi systemami.

Aplikacja jest modelem. Model jest aplikacją. To fundamentalna zasada - tworzysz wykonywalny model, nie kod, który wymaga kompilacji.
Równowaga między wizualnym developmentem a możliwością rozszerzenia poprzez Java Actions i JavaScript.
Deweloperzy bliżej biznesu, szybsza implementacja i skupienie na funkcjach a nie narzędziach.
Dla profesjonalnych deweloperów i architektów. Pełna kontrola nad modelem - modelowanie domeny, złożona logika, integracje REST/SOAP, bezpieczeństwo, rozszerzenia Java.
Umożliwia rozszerzanie funkcjonalności platformy Mendix, tworzenie niestandardowych integracji oraz implementację zaawansowanych fnukcji wykraczającej poza standardowe możliwości aktywności.
Zarządzanie i governance portfolio aplikacji. Użytkownicy platformy, środowiska, monitoring, backupy - wszystko w jednym miejscu.
Ekosystem reużywalnych komponentów - widgety UI, gotowe moduły, konektory do systemów zewnętrznych, motywy graficzne.


Tworzysz model wizualnie w Studio Pro - encje, UI, logika biznesowa
Model jest kompilowany do pakietu .mda gotowego do wdrożenia
Serwer Mendix (Java) interpretuje model i wykonuje go - zarządza bazą, wykonuje Microflows
Przeglądarka renderuje UI i wykonuje logikę kliencką (Nanoflows)


Modelowanie struktury danych i relacji między encjami.
W Mendix, encja to fundamentalny blok konstrukcyjny modelu danych, który reprezentuje typ danych lub obiekt biznesowy w Twojej aplikacji. Możesz myśleć o encji jako o tabeli w tradycyjnej relacyjnej bazie danych.
Każda encja posiada zestaw atrybutów (kolumn), które przechowują konkretne informacje, oraz relacje (powiązania), które łączą ją z innymi encjami, odzwierciedlając złożone struktury danych i zależności biznesowe.
Mendix zapewnia wewnętrzny Object-Relational Mapper (ORM). Oznacza to, że Ty, jako deweloper, pracujesz z obiektami (instancjami encji) w warstwie aplikacji, a Mendix automatycznie zajmuje się tłumaczeniem tych obiektów na zapytania SQL i przechowywaniem ich w bazach danych.
Przechowywanie: Zapisywana w bazie danych jako tabela z własnymi kolumnami
Cykl życia: Trwała, istnieje pomiędzy sesjami użytkowników
Transakcyjność: Pełna obsługa Commit, Rollback
Zastosowanie: Podstawowe dane biznesowe - Klienci, Produkty, Zamówienia
Przechowywanie: Istnieje tylko w pamięci RAM serwera
Cykl życia: Znika po zakończeniu sesji lub Microflow
Transakcyjność: Brak - zmiany nie są trwałe
Zastosowanie: DTO, formularze-wizardy, parametry wyszukiwania, tymczasowe dane UI


Wartość jest obliczana przez Microflow za każdym razem, gdy obiekt jest pobierany z bazy danych (Retrieve).
Na listach (Data Grid) powoduje wykonanie Microflow N razy dla N obiektów.
Użyj Event Handlera Before Commit do obliczenia wartości i zapisz ją w zwykłym, trwałym atrybucie. Wyłącz prawo do edycji atrybutu.
Jeden do jednego - jeden obiekt powiązany z maksymalnie jednym innym obiektem
Jeden do wielu - najczęstsza relacja. Klucz obcy po stronie "wielu"
Wiele do wielu - wymaga osobnej tabeli łączącej (junction table)
Właścicielstwo (Ownership): Owner = Default (referencja po jednej stronie) vs. Owner = Both (referencje po obu stronach - szybsze zapytania, wolniejszy zapis)
Pracownik i Klient mogą dziedziczyć po wspólnej encji Osoba, aby współdzielić atrybuty jak Imię czy Nazwisko.

Mendix tworzy jedną dużą tabelę dla całej hierarchii z kolumną objectType i wszystkimi atrybutami ze wszystkich specjalizacji.
Wywoływany przed utworzeniem obiektu w pamięci
Przed zapisem do bazy - walidacja, ustawianie wartości
Po utworzeniu obiektu w pamięci
Po pomyślnym zapisie - wysyłka maili, integracje, audyt
Dla prostych, pojedynczych walidacji na atrybucie - wymagalność, unikalność, format. Są szybkie, deklaratywne i wystarczające w większości przypadków.
Dla złożonych reguł wymagających pobrania innych obiektów lub skomplikowanej logiki biznesowej. Pełna elastyczność, ale większy narzut.
Rezerwacja (Persistent) i ParametryWyszukiwania (Non-Persistent) z odpowiednimi atrybutami
Changing and deleting objects of an entity with indexes takes longer, because the index needs to be updated in addition to the actual data. Therefore, for attributes that are rarely used as criteria in a search or query, only create an index if the increase in retrieval performance justifies the decrease in update performance.
StatusRezerwacji - omówienie wad wydajnościowych
Before Commit zapisujący status w trwałym atrybucie - lepsza wydajność
Dodanie indeksu na Email w encji Klient dla szybszych wyszukiwań
Od danych do pikseli
Przechowuje i wyświetla jeden obiekt. Niezbędny do budowy formularzy edycji i stron szczegółów. Idealny do operacji CRUD.
Przechowuje i wyświetla listę obiektów w elastycznym, wizualnym układzie. Świetny do kart produktów, galerii.
Przechowuje i wyświetla listę obiektów w formacie tabeli. Oferuje sortowanie, filtrowanie, paginację. Idealny do list biznesowych.
Najprostsze - dane przekazane do strony (np. po kliknięciu Edit). Najszybsze, brak zapytań.
Język zapytań Mendix. Pobiera bezpośrednio z bazy. Niezwykle wydajne filtrowanie i sortowanie. Preferowany dla list.
Gdy dane wymagają złożonego przetworzenia, utworzenia lub logiki niemożliwej w XPath.
Jak Microflow, ale w przeglądarce. Idealne do dynamicznego UI bez odświeżania strony.
Podąża za relacją z obiektu w kontekście (np. z Data View). Automatyczne, wydajne.
"Ramka" strony z górnym menu i boczną nawigacją. Strony są wstrzykiwane w Layout.
Gotowe wzorce stron (List with details, Dashboard) jako punkt startowy.
Gotowe, pre-stylowane sekcje do kopiowania i wklejania.
Reużywalny fragment UI na wielu stronach. Może przyjmować parametry - potężne narzędzie do komponentów!
Microflows i Nanoflows
Kontekst: Mendix Runtime (Java)
Dostęp do bazy: Pełny, bezpośredni
Transakcyjność: Pełna - błąd = automatyczny rollback
Możliwości: Integracje, Java Actions, operacje na plikach
Zastosowanie: Złożona logika biznesowa, transakcje, integracje
Kontekst: Przeglądarka (JavaScript)
Dostęp do bazy: Tylko obiekty zsynchronizowane z serwerem
Transakcyjność: Brak
Możliwości: Ograniczone - brak integracji i Java
Zastosowanie: Walidacja UI real-time, dynamiczne interfejsy, aplikacje offline
Start (początek wykonania) i End (zakończenie, zwrócenie wartości)
Operacje na obiektach: Create, Retrieve, Change, Commit, Delete, Rollback, Aggregate list
Decision (if/else), Merge (połączenie ścieżek), Loop (iteracja po liście)
Custom with/without rollback - działa jak blok try-catch















Jeden Microflow = jedna logiczna operacja. Łatwiejsze testowanie, debugowanie i reużywalność.
Nie więcej niż 50 elementów w jednym microflow
ACT_ dla Command (ACT_Zamowienie_Zatwierdz), BCO_ before bommit lub CAL_ dla kalkulacji pola, DS_ dla datasource.
Każdy Commit to osobna transakcja bazy danych. W pętli 1000 obiektów = 1000 transakcji. Zbieraj na liście i commituj listę!
Retrieve w pętli - dla każdego obiektu osobne zapytanie. Pobierz wszystkie dane jednym zapytaniem przed pętlą.
Operacje na listach zamiast pojedynczych obiektów. Wykorzystuj Aggregate List do obliczeń na zbiorach.
XPath (XML Path Language) to deklaratywny język zapytań używany w Mendix do efektywnego pobierania, filtrowania i sortowania danych bezpośrednio z bazy danych. Jest to wysoce zoptymalizowana i preferowana metoda do zasilania list danych w interfejsie użytkownika, zapewniająca wysoką wydajność.
[Encja/Atrybut = 'Wartość']
Filtruje obiekty na podstawie wartości atrybutu. Obsługuje operatory porównania (=, >, <, >=, <=, !=).
[Relacja/Encja_Związana/Atrybut = 'Wartość']
Pozwala na przechodzenie przez powiązania między encjami w celu filtrowania danych.
Dostęp do przydatnych funkcji tekstowych (starts-with(), contains(), ends-with()), daty (currentDateTime()) i innych, dla zaawansowanego filtrowania.
Użycie operatorów and, or do łączenia wielu warunków filtrowania, tworząc złożone zapytania.

Pobierz wszystkie obiekty Rezerwacja ze statusem "Potwierdzona", które są powiązane z obiektem Klient, którego adres e-mail zaczyna się na "anna":
Rezerwacja.Status
Rezerwacja.Rezerwacja_Klient → Klient
Ten przykład pokazuje, jak efektywnie połączyć warunki na atrybutach encji (Status) z warunkami na atrybutach encji powiązanej (Email z Klient), wykorzystując funkcję starts-with().
Data Grid 2 z dostępnymi slotami czasowymi, źródło danych: XPath
Wywołuje Microflow ACT_Rezerwacja_Zarezerwuj
Pobranie Klienta, utworzenie Rezerwacji, ustawienie asocjacji, zmiana statusu Slotu
Zapis obiektów z obsługą błędu dla zajętego slotu
Wyświetlenie strony z potwierdzeniem rezerwacji

Expressions to potężne narzędzie w Mendix, które pozwala na dynamiczne obliczanie wartości, filtrowanie danych oraz podejmowanie decyzji w oparciu o złożoną logikę. Są one fundamentalne dla tworzenia elastycznych i reaktywnych aplikacji.
Użyj $ dla elementów nazwanych (np. $customer). Atrybuty i asocjacje obiektów są dostępne za pomocą / (np. $customer/Name, $customer/CRM.Customer_Order).
Wspierają operatory arytmetyczne (+, -, *, div, mod), relacyjne (=, !=, <, >) oraz logiczne (and, or, not).
Szeroka gama funkcji dla typów matematycznych (np. max(), round()), tekstowych (np. toUpperCase(), substring()) i datowych (np. beginOfDay(), addDays()).
Dostęp do danych bieżącej sesji użytkownika poprzez $currentUser (obiekt System.User) i $currentSession (obiekt System.Session).
if $package/weight < 1.00 then 0.00 else 5.00
Input:
Product Name: SuperWidget, PRICE: 49,99, quantity: 150 Wyodrębnij nazwę produktu, cenę i ilość z ciągu i sformatuj je w przejrzysty, uporządkowany sposób, jak poniżej:
Produkt: SUPERWIDGET, Cena: 49,99, Ilość: 150Rozwiązanie
'Produkt: ' +
toUpperCase(
trim(
substring(
$input,
find($input, ':') + 1,
find($input, ',') - find($input, ':') - 1 //25 - 12 - 1
)
)
) +
', Cena: ' +
trim(
substring(
$input,
find($input, 'PRICE:') + 1,
find($input, ',', find($input, 'quantity:') - 2) - find($input, 'PRICE:') - 6
)
) +
', Ilość: ' +
trim(
substring(
$input,
find($input, 'quantity: ') + 10 //od tej pozycji do końca stringu
)
)
Utrwalenie wiedzy z Dnia 1 poprzez praktyczne zadanie
Dogłębna konfiguracja i best practices
Wprowadzenie do Domain-Driven Design
Mapowanie DDD na Mendix: Aplikacje i Moduły
Komunikacja ze światem zewnętrznym przez API


Samodzielna implementacja pełnej funkcjonalności w oparciu o wiedzę z Dnia 1.

Rozbudowa aplikacji o nowy moduł "Zarządzanie Zasobami":
Błędy w konfiguracji mogą prowadzić do wycieku wrażliwych danych klientów i naruszeń RODO.
Nieautoryzowane modyfikacje mogą zniszczyć dane biznesowe i przerwać procesy.
Incydenty bezpieczeństwa niszczą reputację i prowadzą do utraty biznesu.
Brak zabezpieczeń, brak logowania. Tylko do wczesnych prototypów!
User Roles i strony nawigacyjne, ale BRAK wymuszania Entity Access. Dane nie są chronione!
Jedyny słuszny wybór dla produkcji. Wszystkie reguły aktywne: strony, Microflows i dane.
Zdefiniowane na poziomie projektu. Odwzorowują role biznesowe (Administrator, Sprzedawca, Użytkownik).
Zdefiniowane na poziomie modułu. Opisują uprawnienia w kontekście modułu (Manager, Viewer, Editor).
User Role = zbiór Module Roles. Granularne i reużywalne zarządzanie uprawnieniami.

Dynamicznie filtruje dane na poziomie bazy (dodaje WHERE do SQL).

Dostęp do stron (Pages) jest kluczowym elementem bezpieczeństwa, który kontroluje, jakie ekrany i funkcjonalności są dostępne dla poszczególnych użytkowników w aplikacji.
W Mendix Studio Pro, każdej stronie (Page) można przypisać określone Module Roles, które mają uprawnienia do jej wyświetlania.
Jeśli rola użytkownika nie posiada jawnie nadanych uprawnień do danej strony, Mendix automatycznie blokuje możliwość jej wyświetlenia, zapewniając bezpieczeństwo.
Dodatkowo, widoczność pojedynczych elementów UI (widgetów, kontenerów) na stronie może być dynamicznie kontrolowana za pomocą Conditional Visibility, bazującej na rolach użytkownika lub złożonych wyrażeniach.


Dostęp do każdego Microflowa jest kontrolowany na poziomie Module Roles. Tylko użytkownicy posiadający przypisaną rolę modułu z odpowiednimi uprawnieniami mogą go wywołać.
Wymusza stosowanie reguł bezpieczeństwa zdefiniowanych dla encji również w Microflowach. Zapobiega to omijaniu zabezpieczeń danych poprzez bezpośredni dostęp w logice.
[MyFirstModule.Rezerwacja_Owner = '[%CurrentUser%]']
Użytkownik widzi tylko swoje rekordy - najpopularniejszy wzorzec zabezpieczeń.
[Status = 'Zatwierdzony' or MyFirstModule.Zamowienie_Owner = '[%CurrentUser%]']
Wszystkie zatwierdzone zamówienia LUB własne w dowolnym statusie - kombinacja reguł.
[MyFirstModule.Dokument_Dzial = '[%CurrentUser%]/Administration.Account_Dzial']
Dostęp do dokumentów tylko z własnego działu - segmentacja organizacyjna.
Kontroluj, które elementy interfejsu użytkownika są widoczne i dostępne dla poszczególnych ról w aplikacji, zapewniając granularną kontrolę dostępu.
Definiuj, które role użytkowników mogą otwierać i przeglądać konkretne strony aplikacji.
Kontroluj widoczność pozycji w menu nawigacyjnym, dostosowując je do uprawnień roli.
Warunkowo pokazuj lub ukrywaj pojedyncze widżety, przyciski czy pola na stronach, bazując na roli.
Ustalaj uprawnienia do wywoływania mikroprzepływów bezpośrednio z elementów interfejsu.
Zmiana z Prototype na Production w ustawieniach projektu
Utworzenie ról: Administrator i Klient
W module Rezerwacje: Rezerwacje_Admin i Rezerwacje_Wlasciciel
Administrator → Rezerwacje_Admin; Klient → Rezerwacje_Wlasciciel
Konfiguracja dla Rezerwacja z XPath constraints
Testowanie jako różne role użytkowników
Zarządzanie złożonością przez umieszczenie modelu biznesowego w centrum
Pojedynczy, duży model staje się niemożliwy do ogarnięcia. Zmiany w jednym miejscu wpływają nieprzewidywalnie na inne.
Trudności w pracy wielu zespołów nad jednym modelem. Konflikty, kolejki, blokady.
Podział na mniejsze, spójne i autonomiczne części. Domain-Driven Design pokazuje jak to zrobić.

Wspólny, precyzyjny język dla ekspertów domenowych i deweloperów. Używany wszędzie: w dyskusjach, dokumentacji i w kodzie/modelu.
Projektowanie na dużą skalę. Jak podzielić system na niezależne części? Bounded Contexts i Context Mapping.
Projektowanie na małą skalę. Jak modelować obiekty wewnątrz części? Aggregates, Entities, Value Objects, Services.

Jawna granica, wewnątrz której dany model domeny i wszechobecny język mają jedno, spójne znaczenie.
Różne konteksty mogą używać tych samych słów, ale z innym znaczeniem biznesowym!
Kontekst Sprzedaży: Produkt ma cenę, stan magazynowy, kategorie
Kontekst Wsparcia: Ten sam Produkt ma dokumentację, historię zgłoszeń, wersje oprogramowania
To dwa różne modele! Próba połączenia = chaos.
Jedna aplikacja Mendix
Osobna baza danych, Runtime
Nie przez wspólną bazę!
Każdy Bounded Context to osobna, niezależnie wdrażana aplikacja Mendix. Komunikują się przez dobrze zdefiniowane interfejsy (API), zachowując autonomię.

Grupa powiązanych obiektów (encji), które muszą być traktowane jako jedna, spójna całość z punktu widzenia zmiany danych. Agregat definiuje granicę transakcji.
Jedyny punkt wejścia do modyfikacji
Obiekty wewnętrzne agregatu
Dostęp tylko przez Root
Moduł w Mendix naturalnie grupuje powiązane encje, logikę i UI.
Encja będąca Aggregate Root to główna, "publiczna" encja modułu.
"Publiczne" Microflows modułu tworzą jego API i są jedynym sposobem na modyfikację agregatu.
To gwarantuje spójność i wymusza reguły biznesowe w jednym miejscu.
Komunikacja pomiędzy kontekstami i ze światem zewnętrznym
Nasza aplikacja Mendix wywołuje API innego systemu, aby pobrać dane lub wykonać operację
Nasza aplikacja Mendix wystawia swoje API dla innych systemów, udostępniając dane i funkcjonalność
Najpopularniejszy standard dzisiaj: REST/JSON
Na podstawie przykładowej odpowiedzi JSON, Mendix generuje strukturę non-persistent encji
Wizualnie zmapuj JSON na swoje encje. Określ jak znaleźć obiekty do update lub create
W Microflow skonfiguruj endpoint, metodę HTTP, nagłówki autoryzacji
W Microflow, zaimportuj dane zwrócone przez Call Rest Service lub Send REST Request używając mapowania
Username i password w nagłówku Authorization kodowane Base64. Proste, ale wymaga HTTPS.
Token przekazywany w nagłówku Authorization: Bearer <token>. Najczęstszy wzorzec dla REST API.
Prosty klucz w nagłówku lub query string. Dobry do publicznych API z rate limiting.
Określ metodę HTTP i ścieżkę (np. POST /v1/rezerwacje/{id}/anuluj)
Wskaż Microflow obsługujący zapytanie. Parametry automatycznie przekazane
Jeśli zwracasz dane, zmapuj swoje encje do struktury JSON
Dostępne dla innych aplikacji (Bounded Contexts)
Business Events to nowoczesne podejście do integracji, które pozwala aplikacjom na asynchroniczną komunikację, reagując na istotne zdarzenia biznesowe, zamiast bezpośrednio wywoływać usługi.
System (np. Mendix), który emituje informacje o zdarzeniu, nie dbając o to, kto je odbierze.
Niezmienny fakt, który się wydarzył w domenie (np. "Zamówienie zostało złożone", "Płatność otrzymana").
System, który nasłuchuje na konkretne zdarzenia i reaguje na nie, wykonując swoje własne procesy.
Zwiększa skalowalność, odporność na błędy i elastyczność architektury przez luźne powiązanie systemów.

Implementacja Business Events w Mendix wymaga konfiguracji zarówno na poziomie platformy, jak i w samej aplikacji Studio Pro. Poniżej przedstawiamy kluczowe etapy i pojęcia.
Mendix Event Broker, oparty na Apache Kafka, to serce integracji. Dla aplikacji produkcyjnych wymagana jest licencja, co zapewnia dedykowane kanały (topics) dla Twojej firmy. Darmowe aplikacje korzystają ze wspólnego brokera.
Administrator techniczny musi aktywować usługę Event Broker w Mendix Portal, zarówno na poziomie aplikacji, jak i dla każdego środowiska (środowiska testowe, produkcyjne itd.).
Przestrzenie izolują wymianę zdarzeń między aplikacjami. Aplikacje w tym samym "space" (domyślnie oparte na nazwie środowiska, np. "acceptance") mogą wymieniać zdarzenia.
Możesz precyzyjnie kontrolować, które aplikacje mają dostęp do publikowania i subskrybowania konkretnych zdarzeń. Zarządzanie odbywa się przez Event Broker Manager.
Wszystkie zdarzenia muszą być zgodne ze standardem CloudEvents i zawierać obowiązkowe atrybuty: ce_id, ce_source, ce_specversion, ce_type.
Możesz zdefiniować zdarzenia spoza Mendix (np. w AsyncAPI) i załadować je do Event Brokera. "Bridges" (SQS, HTTP) pozwalają na integrację z systemami zewnętrznymi.






Profesjonalne techniki rozwiązywania problemów
Zrozumienie co dzieje się z aplikacją
Przegląd Mendix Control Center
Mendix Cloud vs. Private Cloud
CI/CD dla Mendix for Private Cloud
Punkt zatrzymania wykonania Microflow. Możesz dodać warunki - zatrzymaj tylko dla konkretnych obiektów.
Kontrolowane przechodzenie przez kod. Step Into wchodzi do wywołanego Microflow.
Śledzenie wartości wszystkich zmiennych i obiektów. Możesz zmieniać wartości w locie!
Komunikaty logów w czasie rzeczywistym podczas sesji debugowania.

Pętla wykonuje się 1000 razy, ale błąd tylko dla jednego obiektu? Ustaw warunek XPath na breakpoincie: $Iterator_Zamowienie/Numer = 'ZAM/123/2024'
Nanoflowy wykonują się w przeglądarce. Użyj F12 → Console → wpisz mx.debugger; - otworzy interaktywny debugger JavaScript.

Błąd zatrzymuje wykonanie i powoduje rollback całej transakcji. Bezpieczne, ale nie zawsze pożądane.
Przechwyć błąd, cofnij zmiany, wykonaj logikę (np. zapisz log, pokaż komunikat). Analogia do try-catch.
Przechwyć błąd, NIE cofaj zmian. Rzadko używane - głównie do logowania niekriytycznych błędów.
Zawsze opakowuj integracje (Call REST) i złożone Commit w bloki obsługi błędów!


Hierarchiczna struktura pozwalająca na niezależne konfigurowanie poziomów dla różnych części aplikacji.
Przykłady: RESTConsume, Database, Security, MyModule
Użycie debuggera z conditional breakpoint do znalezienia błędu w skomplikowanym Microflow
Identyfikacja pobierania danych w pętli - każda iteracja to osobne zapytanie SQL
Użycie logów (Trace na Database) do zobaczenia generowanych zapytań
Wyeliminowanie pętli - pobranie wszystkich danych jednym zapytaniem

Od Mendix 9, każdy nowy projekt domyślnie używa systemu kontroli wersji Git. Starsze projekty SVN można migrować.
Kod źródłowy aplikacji Mendix (pliki .mpr, .mpk, definicje stylów, akcje Java) jest przechowywany w repozytorium Git.
Studio Pro posiada wbudowane, wizualne narzędzia do obsługi Git. Znajomość podstawowych koncepcji jest kluczowa.
Każda zmiana w modelu (strona, microflow, encja) jest śledzona przez Git jako zmiana w plikach XML definiujących model.

Zawsze zaczynaj dzień od pobrania najnowszych zmian z repozytorium, aby pracować na aktualnej wersji kodu i minimalizować konflikty.
Implementuj nowe funkcjonalności, rozwiązuj błędy i rozwijaj aplikację zgodnie z przyjętymi wymaganiami.
Regularnie zatwierdzaj swoje postępy lokalnie. Używaj jasnych komunikatów i grupuj małe, logiczne zestawy zmian.
Gdy zadanie jest gotowe i przetestowane, wyślij swoje commity do zdalnego repozytorium, aby udostępnić je zespołowi.

Niezależna linia rozwoju kodu. Umożliwia równoległą pracę nad różnymi funkcjonalnościami lub poprawkami bez zakłócania głównej linii projektu.
Główna, stabilna gałąź projektu. Kod w main musi być zawsze działający i gotowy do wdrożenia na środowisko testowe lub produkcyjne. Zasada: Nigdy nie commitujemy bezpośrednio na main!
Każde nowe zadanie (funkcjonalność, poprawka, eksperyment) rozpoczynaj od stworzenia nowej gałęzi z main. Stosuj spójne nazewnictwo, np. feature/MX-123-nowa-funkcja lub bugfix/MX-456-poprawka-bledy. Cała praca nad zadaniem odbywa się wyłącznie na tej gałęzi.

Gdy praca na gałęzi funkcjonalnej jest zakończona, należy ją połączyć z powrotem do głównej gałęzi main, integrując nowe funkcjonalności.
Pojawiają się, gdy wielu deweloperów zmodyfikowało ten sam element. Mendix Studio Pro oferuje wbudowane, wizualne narzędzia do efektywnego rozwiązywania konfliktów.
Zalecana praktyka pracy zespołowej. Jest to prośba o połączenie zmian, która umożliwia innym członkom zespołu przegląd kodu, zgłaszanie komentarzy i akceptację przed włączeniem do main.
Lista wszystkich aplikacji Mendix w organizacji. Zarządzanie środowiskami, członkami zespołu, uprawnieniami.
Zarządzanie użytkownikami platformy - developerami, administratorami. NIE użytkownikami końcowymi aplikacji!
Ustawienia firmowe, integracje z IdP (np. Azure AD), SSO, polityki bezpieczeństwa.
Development → Testing → Acceptance → Production. Standardowy cykl wdrożeń.
Start/Stop, Deployment pakietu .mda, Monitoring (alerty, metryki CPU/RAM), Backups, Runtime Settings.
Constants, Scheduled Events, poziomy logowania - wszystko konfigurowalne per środowisko.
Wybór platformy wdrożeniowej ma kluczowe znaczenie dla zarządzania aplikacją. Mendix oferuje dwie główne opcje, dostosowane do różnych potrzeb:
Zalety:
Wady:
Kiedy używać: Domyślny, najszybszy i najprostszy wybór dla większości nowych aplikacji.
Zalety:
Wady:
Kiedy używać: Gdy ścisłe regulacje wymagają określonej lokalizacji danych lub firma posiada strategię opartą na Kubernetes.



¹ Obejmuje usługi dostarczone przez używany serwer baz danych i plikową pamięć masową.

AKS, EKS, GKE, OpenShift, Rancher).ACR, ECR, Harbor).Pods, Services, Ingress, zarządzania bazą danych i storage'm.MendixApp Custom Resource (CRD) w YAML, a Operator zajmuje się resztą.Developer zatwierdza zmiany w Studio Pro i wysyła je do repozytorium Git (np. GitHub, Azure DevOps).
Serwer CI/CD (np. Jenkins, GitHub Actions) wykrywa zmianę w repozytorium, automatycznie uruchamiając proces CI/CD.
Skrypt budujący tworzy pakiet wdrożeniowy (.mda), a następnie buduje obraz Docker na bazie oficjalnego obrazu Mendix.
Nowo zbudowany obraz Docker jest tagowany i wysyłany do prywatnego lub publicznego repozytorium obrazów.
Narzędzie CD (np. ArgoCD) aktualizuje plik manifestu Kubernetes, zmieniając tag obrazu i aplikując go na klaster.
Mendix Operator wykrywa zmianę w manifeście i bezpiecznie wdraża nową wersję aplikacji, minimalizując przestoje.
Kluczowe Przesłanie: Mendix to nie tylko narzędzie do "klikania", ale kompletna platforma do tworzenia, wdrażania i zarządzania profesjonalnymi aplikacjami w skalowalny i bezpieczny sposób.
Jak budować solidne modele danych i reużywalne interfejsy użytkownika, wykorzystując najlepsze praktyki Mendix.
Jak projektować architekturę aplikacji opartą na Domain-Driven Design, dzieląc system na moduły (Agregaty) i aplikacje (Bounded Contexts).
Jak konfigurować szczegółowe bezpieczeństwo na poziomie produkcyjnym, chroniąc dane i procesy.
Jak skutecznie debugować, logować i monitorować aplikacje Mendix, aby zapewnić ich stabilne działanie.
Jak wygląda nowoczesny proces DevOps z użyciem Mendix, obejmujący CI/CD i zarządzanie wersjami.
Kontynuuj naukę na platformie Mendix Academy, zwłaszcza kursy takie jak "Advanced Developer", aby pogłębić swoją wiedzę.
Regularnie korzystaj z oficjalnej dokumentacji Mendix – jest to Twoje najważniejsze źródło aktualnej i szczegółowej wiedzy.
Dołącz do społeczności Mendix na forum, gdzie znajdziesz wsparcie, odpowiedzi na pytania i inspirację od innych deweloperów.

Jacek Pietsch
Tel. 510 899 666
Mendix: Szkolenie Techniczne