Naar hoofdinhoud gaan

Bezoekers hun eigen bedrijf laten beheren

Doel​

Laat de mensen die zich op je portal aanmelden bij een bedrijf horen — er een oprichten, collega's uitnodigen, zien wie er lid is, wijzigen wat ze mogen doen en vertrekken — allemaal vanaf een scherm dat jij tekent.

Voordat je begint​

  • Een portal die bezoekers vraagt zich aan te melden. Zie Bezoekers vragen zich aan te melden.
  • E-mail versturen, ingericht door degene die je Parsware-installatie beheert. Een uitnodiging is een bericht met een link erin; zonder e-mail kan niemand worden uitgenodigd.

Waarom deze aanroepen van het platform zijn en niet van je aangepaste API​

Al het andere dat je portal leest en schrijft, gaat via een aangepaste API die jij hebt geschreven. Een bedrijf niet, en het is goed te weten waarom: wie bij welk bedrijf hoort, wordt bijgehouden door de identiteitsservice van het platform, en die accepteert de sessie van een bezoeker alleen van de eigen server van de portal. Je aangepaste API draait daar niet — die draait waar je tabellen staan — dus geen enkel script dat je zou kunnen schrijven, zou iemand mogen uitnodigen.

Het platform geeft je daarom de zes aanroepen, en jij tekent het scherm. Er is geen pagina Personen ingebouwd in het platform: de ledenlijst, het vak Uitnodigen en de rolkiezer deel je zelf in, net als de rest van je portal.

De zes aanroepen​

AanroepWat hij doet
startCompany(name)Richt een bedrijf op met deze bezoeker als eerste Owner
invitePerson(email) / invitePerson(email, role)Stuurt een uitnodiging per e-mail. Alleen voor Owners. Member als er geen rol is opgegeven
loadCompanyPeople(into) / loadCompanyPeople(into, companyInto)Zet de personen in een statusveld, en het bedrijf in een tweede
changePersonRole(person, role)Wijzigt wat een collega mag doen
removePerson(person)Verwijdert een collega, of trekt een openstaande uitnodiging in
leaveCompany()Deze bezoeker vertrekt

De rollen zijn Member, Billing en Owner, en elke rol mag alles wat de vorige mag. Alleen Owners nodigen uit, wijzigen rollen en verwijderen personen; dat bepaalt het platform, niet je scherm.

Stappen​

  1. Teken een tekstvak en koppel de waarde aan een statusveld — bijvoorbeeld state.text.

  2. Teken een knop en geef hem deze click-handler:

    startCompany(getState("text"));
    createRecord("par_client", { par_name: getState("text") });
    loadCompanyPeople("people", "company");
  3. Teken een tweede knop om uit te nodigen:

    invitePerson(getState("text"));
    loadCompanyPeople("people", "company");
    notify("Invitation sent.");
  4. Zet in de screenLoad van het scherm loadCompanyPeople("people", "company");, zodat de pagina opent met de lijst al gevuld.

De volgorde op de eerste knop is de hele truc

startCompany doet twee dingen: het maakt het bedrijf aan en laat de sessie van deze bezoeker ernaar wijzen. Pas daarna geeft portalCustomerId() iets terug — en dat is wat de aangepaste API achter createRecord leest om je eigen record de id van het bedrijf te geven.

Doe je het andersom, dan is er geen id om aan het record te geven. Je API krijgt er nooit een van de pagina, en dat hoort ook zo: het platform bepaalt het, en dat voorkomt dat een bezoeker het bedrijf van iemand anders opeist.

Wat er in je statusvelden terechtkomt​

loadCompanyPeople("people", "company") vult twee velden:

  • state.people — één rij per collega en per openstaande uitnodiging:

    VeldWat het is
    idmember:… of invitation:… — geef het direct terug aan removePerson
    nameHun naam, of het adres waarnaar een uitnodiging ging
    emailHet adres waarmee ze zich aanmelden
    roleMember, Billing of Owner
    statusMember of Invited
    isYouOf deze rij de persoon is die de pagina leest
  • state.company — { name, role, canManage }. Koppel een bijschrift aan state.company.name, en zet de zichtbaarheid van je vak Uitnodigen op state.company.canManage, zodat een gewoon lid geen knop te zien krijgt die hem wordt geweigerd.

Wie bij geen enkel bedrijf hoort, krijgt een lege lijst en een leeg bedrijf. Dat is geen fout — daar is je formulier "een bedrijf oprichten" voor.

Een knop Verwijderen die voor beide soorten rijen werkt​

Herhaal een tabel over state.people en zet één knop in de rij:

removePerson(row.id);
loadCompanyPeople("people", "company");

Dat verwijdert een collega of trekt een uitnodiging in, omdat de id van de rij zegt welke van de twee het is. Die voorwaarde schrijf jij niet — en dat moet je ook niet doen, want voor het platform zijn het twee verschillende handelingen, en alleen het platform kent de regels voor elk.

De rol van een uitnodiging kan niet worden gewijzigd. changePersonRole op een rij invitation: wordt met een uitleg geweigerd: trek de uitnodiging in en nodig de persoon opnieuw uit.

Hoe een weigering eruitziet​

De eigen zin van het platform verschijnt naast de knop waarop iemand drukte — "Alleen een Owner kan mensen uitnodigen", "De laatste Owner kan het bedrijf niet verlaten", "Dat adres hoort al bij dit bedrijf".

Die berichten hoef je niet te schrijven, en probeer ze ook niet voor te zijn: de regels horen bij het platform, en een scherm dat gokt, gokt uiteindelijk een keer verkeerd.

De laatste Owner kan niet vertrekken

Wie de enige Owner van een bedrijf is, moet eerst een collega Owner maken. Dat is bewust: een bedrijf met records erachter blijft niet zonder beheerder achter doordat één persoon op een knop drukt.

Waar een uitnodiging uitkomt​

Bij de voordeur van je portal, net als een bevestigingslink en een link om het wachtwoord opnieuw in te stellen. Wie is aangemeld, wordt direct lid; wie dat niet is, ziet het aanmeldformulier met Je bent uitgenodigd erboven, en de uitnodiging staat nog klaar nadat hij zich heeft geregistreerd en zijn adres heeft bevestigd. Zie Bezoekers vragen zich aan te melden.

Waar dit voor is​

Een bedrijf is waarop een gegevensbeleid records beperkt. Deze twee pagina's passen dus in elkaar: deze gaat over hoe iemand een bedrijf krijgt, en die over hoe de rijen van een tabel eraan gaan toebehoren.

Gerelateerd​