Monopoly app bouwen in Salesforce – deel 3: Data importeren

In deze serie bouwen we een Monopoly spel in Salesforce. Aan de hand van dit voorbeeld verkennen we allerlei vaardigheden die van belang zijn voor een Admin of Consultant.

In het eerste deel hebben we de basis gelegd voor het datamodel van de Monopoly app. In het tweede deel hebben we de user interface verzorgd met een custom app en de pagina layouts.

De laatste stap voor we echt verder het ontwerpen van het verloop van het spel in duiken is data. We hebben immers een beetje testdata nodig om tijdens het bouwen van flows te kunnen weten of het werkt zoals we willen. Ook komt de app die we in deel 2 gebouwd hebben meer tot leven als er echt data in zitten.

Bij het aanmaken van data kun je het beste bovenaan in de hiërarchie beginnen. Als we terugkijken naar het datamodel dat we in deel 1 gemaakt hebben zie je dat er 4 objecten zijn die geen andere objecten boven zich hebben.

  • Board
  • Player
  • Rule
  • Asset Group

De records van deze objecten moeten dus eerst gemaakt worden, voor we de records die daar in de hiërarchie onder vallen, kunnen aanmaken. Dan kun je immers de relatie van die onderliggende records naar de parent record bij aanmaak al direct vullen.

Board

We beginnen met het Board. Omdat we maar een Board nodig hebben, maken we dit gewoon aan in de user interface. Of je dit verkiest boven importeren, hangt een beetje samen met hoeveel velden je moet invullen en je persoonlijke voorkeur. Het Board heeft alleen maar een naam, dus importeren zou hier echt te omslachtig voor zijn.

Asset Groups

Naar de players en rules zullen we later kijken. Eerst de Asset Groups. Daarna komen de Assets. Als de Assets geïmporteerd zijn, kunnen we de Positions importeren en dan krijgt het bord echt vorm.

Er zijn 10 Asset Groups, de 8 steden, de nutsbedrijven en de stations. We maken de eerste record handmatig aan. Hiervoor hebben we toch een custom tab nodig voor het Asset Group object. Dat hebben we eerder niet gemaakt. Ik geef alleen Admins toegang tot dit tabblad. Over het aanmaken van tabs, Lightning Pagina’s en de Permission sets lees je in het vorige deel van deze serie.

Nu ik toegang tot het Asset Groups tabblad heb, navigeer ik daarheen, ik klik op de New knop en maak mijn eerste Asset Group aan.

Zolang er maar een of twee waarden verschillen tussen de verschillende records van een object, is klonen en de gekloonde record bewerken ook een redelijk snelle optie.

Dit doen we voor de Asset Groups. Deze hebben alleen een naam en een External ID. Voor alle external Id’s ga ik een gelijksoortige schrijfwijze aanhouden: geheel in kleine letters en zonder spaties. De External ID van de Asset Group Den Haag wordt hiermee denhaag.

Assets

We hebben in totaal 28 Assets met elk 5 velden met waarden die grotendeels uniek zijn voor elk record. Hier zal importeren dus efficiënter werken.

We gebruiken Salesforce Inspector Reloaded om te exporteren en importeren en Excel om de te importeren records voor te bereiden. In deze eerdere blog lees je hoe je de browser plugin Salesforce Inspector Reloaded kunt installeren en gebruiken.

Eerst maken we één Asset handmatig aan. Dat wordt de eerste Asset van het bord: Dorpsstraat – Ons Dorp

  • Name: Dorpsstraat
  • External Id: dorpsstraat
  • Asset Group: Ons Dorp
  • Purchase price: 6000
  • Base Rent Price: 200

Bouw je import bestand met een export

Nu we één record van dit object hebben, kunnen we een export maken die de basis vormt voor ons importbestand. Open de Salesforce Inspector Reloaded browser extensie en klik op de Data Export knop.

In deze export gebruik je SOQL queries. Dit staat voor Salesforce Object Query Language. Deze begint altijd met SELECT. Daarna som je gescheiden door komma’s de velden op die je export moet bevatten. Daarna bepaal je uit welk object je wilt exporteren met FROM. Hierna gebruik je WHERE gevolgd door je filter criteria. Voor deze export hebben we geen filter criteria nodig, maar ik zal in de query wel een filter gebruiken om een voorbeeld te geven van hoe je die schrijft.

Tot slot leg ik uit hoe we voor onze te importeren Assets de relatie leggen naar hun Parent records. Je kunt simpelweg de veld API naam van de lookup of master detail relatie gebruiken. De waarde die je dan moet meegeven is de 18 karakters tellende Salesforce record id van de parent record. Wij maken het onszelf echter gemakkelijk en gebruiken de external id van de parent, die we zelf bepaald hebben en die beter leesbaar en veel gemakkelijker te onthouden is.

Zo ziet de query eruit waarmee ik de bestaande Asset ga exporteren.

SELECT Name, External_Id__c, Asset_Group__r.External_Id__c, Purchase_Price__c, Base_Rent_Price__c FROM Asset__c WHERE CreatedDate >= TODAY and External_Id__c != null

Om het jezelf gemakkelijk te maken begin je met een query Template: SELECT FROM Object WHERE De tweede stap is het object te kiezen. Selecteer het object in je query. Begin de objectnaam te typen die je wilt exporteren. Let op, we hebben het custom object Asset__c nodig, niet het standaard object Asset.

Zet je cursor nu tussen SELECT en FROM en begin te typen aan veldnamen die je nodig hebt. Als het goed is valt je op dat onder het invoerveld de lijst met opties die matchen met wat je typt verandert. Zo kun je de opties dus ook aanklikken in plaats van elke veldnaam volledig uit te moeten typen. Let wel op de komma’s tussen de verschillende velden.

Voor de relatie naar de bovenliggende Asset Group, pakken we niet het veld Asset_Group__c maar de cursieve Asset_Group__r. Doe je dit, dan kun je daarna velden van het Asset Group object selecteren.

Query af? Klik dan op de Export knop. Nu is het resultaat meteen klaar, maar exporteer je veel data dan gaat dat in plukjes van 2.000 records tegelijk. Wacht dan tot de hele export voltooid is. Klik hierna op Copy (Excel).

Open Excel, ga in cel A1 staan en druk op Ctrl+V om de geëxporteerde data te plakken. Dit is een prettige manier om een importbestand te maken, omdat door kolom A Salesforce Inspector Reloaded zal begrijpen naar welk object te importeren en door de kolomkoppen de gegevens automatisch naar de juiste velden zal mappen.

Onderaan dit artikel kun je het importbestand downloaden dat ik verder ingevuld heb.

Assets importeren

  • Open de Salesforce Inspector Reloaded browser extensie opnieuw.
  • Klik op Import Data
  • Kopieer in Excel alle kolommen en rijen waar wat in staat.
  • Ctrl+C
  • Plak deze data in het Data invoerveld in Inspector

Omdat we de juiste kolomkoppen al hebben, worden de gegevens die je geplakt hebt automatisch al goed gemapt. Voor deze import hoef je alleen de volgende instellingen aan te passen:

We kunnen nu op de Run Upsert knop klikken.

Positions

Nu de Assets bestaan, kunnen we ook de Positions gaan importeren. Omdat Positions lookup relaties hebben naar het Board en meestal naar een Asset, was het handig om die twee eerst aan te maken.

De stappen om Positions te importeren zijn dezelfde als bij het importeren van Assets. Hierna importeren we ook de Asset Price Rules en zullen we ten behoeve van het testen twee spelers handmatig aanmaken.

Onderaan dit artikel vind je het Excelbestand met alle data die we moeten importeren.

Rules en Position Rules

Rules verdienen meer aandacht, dus in meerdere van de volgende delen zullen we de Rules aanmaken waar we dan op focussen.

Wel wil ik er nu al enkele aanmaken die vast gekoppeld zijn aan een bepaald vakje.

  • Start: speler ontvangt € 20.000
  • Inkomstenbelasting
  • Extra belasting
  • Ga naar de gevangenis

Deze maken we aan via het Rules tabblad en koppelen we aan de juiste Position via de Related List Position Rules.

Asset Rent Rules

Het laatste object waarvoor we de data nu zullen importeren, zijn de Asset Rent Rules. Als we onze objecten vergelijken met fysieke onderdelen die je in de doos van een Monopoly spel vindt, dan zijn de Assets de kaartjes die als eigendomsbewijs dienen en de Asset Rent Rules zijn de regels van de prijslijst voor de huur hierop.

Ja, ik heb echt gekeken naar de versie die ik als kind speelde en die misschien wel ouder is dan ikzelf. Ik vind de bedragen die 100x zo hoog zijn als die in de versie die ik nu in huis heb toch leuker :).

Ook deze vind je in het hieronder gedeelde Excel bestand.

Gedurende de volgende delen zullen we af en toe nog door voortschrijdend inzicht aanpassingen maken aan het datamodel en de pagina layouts en ook zullen we verderop nog meer data toevoegen zoals meer Rules.

In het volgende deel van de serie beginnen we aan hoe een beurt van een speler verloopt en duiken we in Flow Builder.