Mendix: kjekt å vite om sortering av lister med Union-operasjonen

Har du noen gang kommet over et komplekst sorterings- og filtreringskrav, og ikke aner hvor du skal begynne? Forhåpentligvis kan denne artikkelen hjelpe deg!

Wessel Braakman

Publisert:

16. mar. 2023

Trykk på taggene for å lese mer om hvor og hvordan vi benytter samme fag og teknologi

Litt om Mendix

Mendix er en plattform som gjør det enklere for bedrifter å bygge og administrere egendefinerte applikasjoner.

Tenk på det som en verktøykasse som lar deg bygge en applikasjon uten å måtte være en erfaren programvareutvikler eller ha teknisk kunnskap. Mendix gir brukere muligheten til å lage egendefinerte applikasjoner ved hjelp av dra-og-slipp-verktøy, i stedet for å måtte skrive kode fra bunnen av.

Problemet

Enkel sortering av lister i Mendix kan oppnås ved bruk av handlingen List Operation og funksjonen Sort. Da kan man sortere basert på en eller flere attributter, enten etter stigende eller synkende verdi. Dette kan fungere fint for enkle listehandlinger med enkle sorteringskrav, men det kan bli vanskelig når du implementerer komplekse filtrerings- og sorteringsmekanismer i koden din.

Mitt problem oppsto da jeg prøvde å konsolidere en liste med rundt 500 alternativer, kjøre den gjennom over 15 filtre og sortere den både underveis, og etter filtreringen. Jeg prøvde alt; la til tall på hvert element på listen, som økte eller ble redusert når filtre ble brukt, la til løkker i løkker for å filtrere og sortere samtidig, osv. Dette ga meg hodepine!

Løsningen

Hodepinen varte helt til jeg fant ut at dette kunne løses mye enklere enn jeg først trodde. Problemet ble løst ganske enkelt ved å dele listene basert på attributter, og deretter slå dem sammen igjen. Så, hvordan fungerer dette?

La oss si at jeg har følgende eksempel for filtrering/sortering:

  1. Hent alle bilmerker og modeller fra en database
  2. Fjern alle biler som ikke slippes ut i Norge
  3. Sorter alle biler basert på rekkevidde (høyest til lavest)
  4. Plasser alle elbiler øverst på listen
  5. Plasser alle hybridbiler mellom elbilene og biler med andre drivstofftyper
  6. Skriv ut listen over biler

Husk at dette er et eksempel på assigment, og sannsynligvis ikke en veldig relevant eller effektiv måte å filtrere denne typen liste på. Dette brukes kun for å gi tips om hvordan du kan bruke listeoperasjonene for å få filtrering og sortering gjennomført.

Eksempel: Databasemodell

Eksempel Database modell brukt i denne løsningen
Eksempel: Databasemodell brukt i denne løsningen

1. Hent alle bilmerker og modeller fra en database

Dette gjøres veldig ofte i Mendix, og det er ikke noe vi vil gjøre annerledes her. Vi henter bare en liste over denne enheten fra databasen vår, uten å sortere eller utføre andre operasjoner.

Retrieve a list of all cars from the database
Hent alle bilmerker og modeller fra databasen

2. Fjern alle biler som ikke slippes i Norge

Bruk ListOperation – Filter

I trinn 2 ville vi delt ut de bilene som ikke slippes i Norge. Dette gjør vi ved å bruke List Operation kalt Filter, hvor vi filtrerer ut alt som gjelder for en bestemt begrensning og plasserer dette i en annen liste. Vi filtrerer ut alle biler som har attributtet «releasedInNorway» satt til «TRUE», og plasserer dem i listen ListOfCars_ReleasedInNorway.

List of cars that were released in Norway
Liste over biler som ble sluppet i Norge

3. Sorter alle biler basert på rekkevidde (høyest til lavest)

Bruk ListOperation – Sort

For trinn 3 ønsker vi å sortere listen over biler utgitt i Norge, med bilene med høyest rekkevidde på toppen og bilene med lavest rekkevidde nederst. Til dette bruker vi List Operation – Sort og sorter etter «range», «descending».

List of cars sorted based on range descending
Liste over biler sortert basert på rekkevidde, synkende

4. Plasser alle elbiler øverst på listen

I trinn 4 ønsker vi å plassere alle elbiler på toppen av listen. For å gjøre dette, bruker vi filtrer- og sammenslåingstrikset! Først filtrerer vi ut alle elbiler og plasserer dem i en ny liste.

Bruk ListOperation – Filter

Vi bruker List Operation – Filter igjen, og filtrerer nå ut alle biler som har attributtet «fuelType» satt til «electric». Vi plasserer disse i en ny liste kalt ListOfCars_ElectricOnly.

List of only electric cars
Liste over kun elbiler

Bruk ListOperation – Subtract

Deretter må vi fjerne disse bilene fra den opprinnelige listen over biler, så vi trekker de fra igjen. Bruk List Operation - Subtract og plasser ListOfCars_ReleasedInNorway_Sorted øverst, og ListOfCars_ElectricOnly nederst. Dette vil fjerne elbilene fra den opprinnelige listen over biler som ble sluppet i Norge. Vi kaller denne nye listen ListOfCars_NotElectric. For å få elbilene på toppen av den listen gjør vi følgende, og det er her magien kommer inn.

Subtracting the list of electric cars from the original list
Fjerner listen over elbiler fra den opprinnelige listen

Bruk ListOperation – Union

Simplified view of what we will be doing in Mendix
Forenklet syn på hva vi skal gjøre i Mendix

Ved sammenslåing av 2 lister vil elementene i den første listen bli plassert på toppen av elementene i den andre listen!

Så når vi slår sammen listene, velger vi først listen ListOfCars_Electric, og deretter listen ListOfCars_NotElectric som andre. Dette plasserer alle elbiler på toppen i denne listen. Som magi! Dette er magien! Vi kaller denne nye listen ListOfCars_ElectricOnTop.

Merging the list of electric cars over the list of cars with other fueltypes
Slå sammen listen over elbiler med listen av biler med andre drivstofftyper

5. Plasser alle hybridbiler mellom elbilene og biler med andre drivstofftyper

Bruk List Operation – Filter og List Operation – Subtract igjen

Når vi ser på trinn 5, må vi plassere hybridbiler mellom elbiler og biler med andre drivstofftyper. Her vil vi gjøre det samme trikset, men vi må først sørge for å ha 3 lister.

  • Vi må filtrere ut alle hybridbiler og plassere dem i en ny liste kalt ListOfCars_Hybrid

 

List of only hybrid cars
Liste over bare hybridbiler
  • Vi trenger listen med alle biler, men uten de elektriske og hybriddrevne bilene. For dette kan vi gjenbruke ListOfCars_NotElectric, og trekke ListOfCars_Hybrid fra denne
List of cars containing no electric cars and no hybrid cars
Liste over biler som ikke inneholder elbiler og hybridbiler

 

  • Vi trenger alle elbilene igjen, og vi kan gjenbruke ListOfCars_ElectricOnly for dette

Vi vil nå ha 3 lister, ListOfCars_ElectricOnly, ListOfCars_Hybrid og ListOfCars_NoElectricNoHybrid. Vi kan nå starte sammenslåing av listene våre.

Bruk List Operation – Union igjen

Først slår vi sammen ListOfCars_ElectricOnly og ListOfCars_Hybrid og kaller det ListOfCars_ElectricAndHybrid. Ved å gjøre dette i akkurat den rekkefølgen har vi nå en liste der elbilene er plassert over hybridbilene.

Merging the list of electric cars on top of the list of hybrid cars
Slår sammen listen med elbiler på toppen av listen med hybridbiler

Vi forener så denne nye ListOfCars_ElectricAndHybrid med listen ListOfCars_NoElectricNoHybrid, og vips så har vi nå en ListOfCars_ElectricOnTopHybridSecond med elbiler øverst, etterfulgt av hybridbiler og til slutt biler med annet drivstoff.

Creating the final list with Electric cars on top, followed by Hybrid cars, followed by other fueled cars
Lag den endelige listen med elbiler øverst, etterfulgt av hybridbiler og til slutt andre drivstoffbiler

6. Skriv ut listen over biler

Return the filtered and sorted list to the next bit of Mendix logic
Returner den filtrerte og sorterte listen til neste del av Mendix-logikken

Vi har nå en liste medr alle kjøretøy som er sluppet i Norge, de er sortert etter rekkevidde, elbiler er plassert på toppen, etterfulgt av hybridbiler og til slutt biler med andre drivstoff.

Fortsett med dette!

Fortsett med denne praksisen til du har kommet deg gjennom alle filtrene og sorteringene dine, og bli forbløffet av magien.

Dette enkle trikset hjalp meg tonnevis mens jeg jobbet med kompleks filtrerings- og sorteringslogikk, og jeg er sikker på at det vil hjelpe meg tonnevis i fremtiden.

Spørsmål?

Hvis du vil vite mer om Mendix, eller vil høre om flere Mendix tips og triks, ikke nøl med å ta kontakt.

Artikkel av:

Wessel Braakman
IT-konsulent
Test og Kvalitetssikring