In het eerste deel van deze serie hebben we het datamodel aangemaakt in Schema Builder. Wat we daardoor nog niet geregeld hebben is:
- Tabbladen voor deze custom objecten aanmaken
- Pagina layouts bepalen voor deze custom objecten
- Toegang tot de tabbladen, objecten en velden verlenen
Dat pakken we in dit deel op.
Een Custom App maken
Om te beginnen maken we een custom app voor ons Monopoly spel.
Typ in het zoekveld in de linkerbalk van Setup home App m. De opties worden uitgedund en je kunt nu snel App Manager vinden en aanklikken.
Klik op New Lightning App
In de volgende stap kun je Acties aan de Utility Bar toevoegen. Deze zijn dus waar je ook bent binnen de app direct beschikbaar. Nu hebben we hier nog geen acties voor, maar waarschijnlijk zullen we hier later terugkomen om ten minste één screenflow via de Utility Bar aan te bieden. Ook het kiezen van de tabbladen slaan we voor nu over. Deze maken we immers in de volgende stap aan. Daarbij koppelen we ze aan deze app. Later kun je dan terug naar de App Manager gaan de de volgorde van de tabbladen wijzigen als je dat wilt.
De laatste stap is om de app toegankelijk te maken voor bepaalde profielen. Ook dit slaan we over omdat ik de app via een Permission Set wil aanbieden.
Tabbladen aanmaken
Voor het aanmaken van een nieuw custom object tabblad ga je naar Setup en typ je Tab in het zoekveld in het linker menu. Klik vervolgens Tabs aan.
Klik op de New knop bij Custom Object Tabs.
Kies het object en kies een Tab Style.
In het tweede scherm kun je aangeven welke profielen toegang mogen hebben tot dit tabblad. Omdat we alle toegang met een permission set zullen regelen, mag je de toegang tot het tabblad voor alle profielen uitschakelen.
In het derde scherm bepaal je binnen welke apps het tabblad beschikbaar zal zijn. Vink hier alle apps behalve de Monopoly app uit.
Ook voor de objecten Player, Asset Group, Asset en Rule maken we tabbladen. Voor de andere objecten lijkt een tabblad me niet nodig. Het Rule tabblad zal vooral tijdens het bouwen en testen nuttig zijn, maar minder belangrijk voor de uiteindelijke gebruikers.
Lightning Pagina’s ontwerpen
Inmiddels is bijna alles op een record pagina wel direct te beheersen in de Lightning Page, dus we gaan proberen of het lukt om helemaal niets meer met de ouderwetse Page Layout te doen.
Ga naar Setup > Object Manager en zoek het object Board op.
Klik op de New knop, kies Record Page en klik op de Next knop.
Zoals voor de meeste dingen die ik bouw of configureer, heb ik ook hiervoor een vaste naming convention. Een afkorting voor de klant of de app, LRP, wat natuurlijk staat voort Lightning Record Page, gevolgd door de Objectnaam.
Ik kies altijd voor Header and Two Equal Regions. Hiermee kan ik de record details en Related Lists naast elkaar zetten. Doordat er voor de Related Lists een halve paginabreedte ruimte is, kun je de Enhanced weergave gebruiken, wat bij slechts een sidebar voor de Related Lists niet kan. Bij een Enhanced Related List kun je meer dan 4 kolommen tonen, de kolombreedtes aanpassen, actieknoppen verbergen, bepalen hoeveel regels te tonen en filteren in de gerelateerde lijst.
Laten we voor alle Componenten die we gebruiken de Dynamic versie gebruiken. Om te beginnen bij het Dynamic HighLights Panel met Dynamic Actions.
Het Dynamic Hightlights Panel Component vind je niet onder het tabblad Components, maar onder Fields.
Omdat het Board object niet voor elke Component die ik wil uitleggen het beste voorbeeld is, zal ik de verschillende Componenten soms uitleggen aan de hand van verschillende objecten. Je merkt dit wel in de screenshots.
Dynamic Highlights Panel
Voor de record page van het Player object vind ik de Cash Balance en de Position de belangrijkste informatie uit de velden van dit record. Daarom sleep ik die velden naar het Dynamic Highlights Panel Component op de pagina.
Ook een feature die ik wil gebruiken, is de Conditional Formatting. Ik wil dat er een rood waarschuwings icoon bij de cash balance komt te staan wanneer die beneden € 1.000 is.
Dat doen we als volgt. Klik het veld Cash Balance in het Highlights Panel aan. Klik in het zoekveld voor Conditional Fomatting en klik daar op + Create Ruleset. Geef de Rule een naam en klik op de Next knop.
Het laatste dat we op het Highlights Panel gaan doen is de Dynamic Actions toevoegen. Voor nu voeg ik alleen de acties Edit, Clone en Delete toe. Komen we later met andere acties, dan komen we hiervoor terug.
Je ziet dat je voor zowel het Highlights Panel als geheel als elk veld erop als elke Action kunt instellen wanneer het zichtbaar mag zijn. Het principe hiervan is bij alle soorten Componenten op Lightning Pages gelijk en ik zal het verderop in dit blog nog laten zien aan de hand van een voorbeeld.
Tabs Component
Om te zorgen dat gebruikers gemakkelijk hun weg vinden in een app, kies je voor een consistente opbouw van je Lightning Pages. Ik gebruik steeds dezelfde indeling met twee gelijke kolommen. Ook is mijn gewoonte hierbij om de Record Details op de linker helft te zetten en de Related Lists rechts.
Omdat je soms toch meerdere tabs zult willen gebruiken om bijvoorbeeld ook nog een chatter feed op je pagina toe te voegen, gebruik ik de Tabs Componenten altijd, ook wanneer ze maar één tabblad hebben.
Field Sections en Fields
In het Details tab sleep ik eerst een Field Section die ik een naam mag geven. Daarop plaats ik de naam van de speler, de Cash Balance en de Position.
De naam van de Speler moet verplicht zijn, maar de Position en Cash Balance, mag de speler natuurlijk niet zomaar zelf via deze pagina kunnen bewerken. Daarvoor kun je deze velden op Read only zetten.
Ik heb deze velden overigens niet zelf Read Only gemaakt, omdat de speler die velden tijdens het spelen via een screenflow wel degelijk zal bewerken. Ook wil ik als admin deze velden wel kunnen bewerken. Daarvoor plaats ik een tweede Field Section, met de Cash Balance en Position er in, waarbij deze velden wel gewoon bewerkbaar zijn.
Ik gebruik Set Component Visibility om te bepalen dat deze Field Section alleen maar getoond wordt wanneer de gebruiker die de pagina bekijkt een System Admin profiel heeft.
Waarschijnlijk zullen we gedurende de serie nog meerdere keren Lightning Pagina’s gaan bewerken en zichtbaarheid van Componenten of velden voorwaardelijk willen maken. Dan zal ik daarbij steeds terug verwijzen naar deze uitleg.
Dynamic Related Lists
Voor het toevoegen van gerelateerde lijsten ga je in de linker balk met Componenten naar het tabje Components en zoek je op Related. Daar kies je Dynamic Related List – Single en die sleep je op het Canvas in het Related Tab Component.
Bij de Player hebben we de Assets nodig die de speler bezit.
Het maximale aantal dat je in de Component mag laten zien is 30. Voor meer moet je als gebruiker op de View all link onder de lijst klikken.
Ik wil de Assets sorteren op Asset Group, zodat de speler in één oogopslag kan zien of ze alle Assets van een groep bezitten en dus hogere huur mogen vragen.
Ik zou in deze gerelateerde lijst ook informatie willen laten zien zoals:
- Aantal huizen dat er op staat
- Of de Asset belast is met Hypotheek
Daar maak ik nu direct ook velden voor aan op het Asset object.
Een checkbox genaamd Mortgaged__c
en een Picklist genaamd Buildings__c
. Daarvoor wil ik dezelfde picklist values gebruiken als voor het gelijknamige veld op Asset Rent Rule.
Daarvoor gaan we naar het veld op de Asset Rent Rule en promoveren de picklist values tot een Global Value Set, die we vervolgens ook voor het Buildings veld op het Asset Object kunnen gebruiken.
Tot slot verwijderen we de New knop, want we willen niet dat spelers zelf Assets gaan aanmaken.
Wanneer je de pagina opslaat, vraagt de Builder je of je hem als standaard wilt instellen. Dat kan voor de hele Org, dus voor alle apps, voor door jou zelf te selecteren specifieke apps of zelfs per app, recordtype en profiel. Ik kies voor de tweede optie. Onze pagina’s worden de standaard voor de Monopoly app. Aan profielen en recordtypen gaan we niet doen.
Nadat we in het volgende deel ook data hebben aangemaakt, kunnen we eens goed bekijken hoe de verschillende pagina’s er uitzien met data erin.
Rechten bepalen met een Permission Set
We maken twee permission sets: één voor gewone spelers en één voor de admin of de bank.
Velden die spelers nooit mogen bewerken, zoals namen, aankoop- en huurtarieven, maken we Read Only voor gewone spelers. Sommige velden moeten ze wel kunnen bewerken binnen een flow, maar niet rechtstreeks via de record pagina. Daarvoor hebben we velden Read Only gemaakt in de Lightning pagina’s, maar deze velden kunnen dus in de Permission Set niet Read Only zijn.
Naast toegang tot de objecten en velden, zullen we via de Permission set ook toegang tot de Monopoly app en de custom object tabbladen verlenen.
Eerst maken we de Permission Set voor de Admin. Daarna klonen we deze en gaan we daarin velden op Read Only zetten voor de gewone spelers.
Zoek in de linker balk in Setup naar “permission” en klik Permission Sets aan. Klik dan op de New knop om een nieuwe permission set aan te maken. De naam van mijn eerste permission set wordt “Monopoly Admin”.
Als eerste gaan we de object- en veldtoegang regelen. Gebruik het zoekveld om naar het Board object te zoeken. Je zult elk object hier met de naam in meervoud zien staan.
Volg de link en klik op Edit.
Admins krijgen maximale toegang, dus op elk object klik je aan:
- Tab settings: Visible
- Object Permissions: Modify all + Create
- Field Permissions: Edit Access voor de gehele kolom
Dit doen we voor:
- Boards
- Asset Groups
- Assets
- Let op dat je het custom object hebt. Dat is de tweede. Je kunt het controleren aan de hand van de velden die je ziet.
- Asset Rent Rules (geen tab settings)
- Positions (geen tab settings)
- Rules
- Position Rules (geen tab settings)
- Players
Hierna klikken we op de Clone knop en noemen we de nieuwe Permission set “Monopoly Player”. Let erop om ook de API naam te wijzigen.
Hier vinken we de volgende machtigingen uit:
- Boards
- Object Permissions
- Create
- Edit
- Delete
- View All
- Modify all
- Field Permissions
- External Id
- Edit Access
- External Id
- Object Permissions
- Asset Groups
- Object Permissions
- Create
- Edit
- Delete
- View All
- Modify all
- Field Permissions
- External Id
- Edit Access
- External Id
- Object Permissions
- Assets
- Object Permissions
- Read en Edit blijven aangevinkt
- Create, Delete, View All en Modify All vinken we uit
- Field Permissions
- Voor Building, Mortgaged en Owned by Player blijft Edit Access aangevinkt
- Voor de verdere velden vinken we Edit Access uit
- Object Permissions
- Asset Rent Rules
- Object Permissions
- Read blijft aangevinkt
- Create, Edit, Delete, View All en Modify All worden uigevinkt
- Field Permissions
- Read Access op alle velden aangevinkt
- Edit Access op alle velden uitgevinkt
- Object Permissions
- Positions
- Object Permissions
- Read blijft aangevinkt
- Create, Edit, Delete, View All en Modify All worden uigevinkt
- Field Permissions
- Read Access op alle velden aangevinkt
- Edit Access op alle velden uitgevinkt
- Object Permissions
- Rules
- Tab Settings
- Available en Visible beide uitgevinkt
- Object Permissions
- Read blijft aangevinkt
- Create, Edit, Delete, View All en Modify All worden uigevinkt
- Field Permissions
- Read Access op alle velden aangevinkt
- Edit Access op alle velden uitgevinkt
- Tab Settings
- Position Rules
- Object Permissions
- Read en Edit blijven aangevinkt
- Create, Delete, View All en Modify All worden uigevinkt
- Field Permissions
- Read Access blijft voor alle velden aan
- Edit Access blijft voor Index aan
- Dit heeft een functie wanneer een gebruikt Kans of Algemeen Fonds ‘kaartje’ terug onder op de ‘stapel’ gaat.
- Object Permissions
- Players
- Tab Settings
- Available en Visible blijven aangevinkt
- Object Settings
- Read, Create en Edit blijven aangevinkt
- Delete, View All en Modify All worden uigevinkt
- Field Settings
- Read Access en Edit Access blijven aan voor alle velden waar dat kan.
- Tab Settings
Volgende delen van deze serie
In het eerstvolgende deel richten we ons op het importeren van data, zodat onze app echt tot leven komt. Daarna gaan we met Flow Builder aan de slag om het spel in beweging te brengen.
De volgende delen kan ik alvast aankondigen.
- deel 3: Data importeren – donderdag 13 februari
- deel 4: Hoe beweegt de speler zich over het bord? – donderdag 27 februari
- deel 5: Wat gebeurt er wanneer de speler op een nieuw veld arriveert? – donderdag 13 maart
- deel 6: Kans en Algemeen Fonds – donderdag 27 maart