Permitir que los visitantes gestionen su propia empresa
Objetivo
Permitir que las personas que inician sesión en su portal pertenezcan a una empresa: que la creen, inviten a sus compañeros, vean quién está en ella, cambien lo que cada uno puede hacer y la abandonen, todo desde una pantalla que dibuja usted.
Antes de empezar
- Un portal que pide a los visitantes que inicien sesión. Consulte Pedir a los visitantes que inicien sesión.
- El envío de correo electrónico, configurado por quien administra su instalación de Parsware. Una invitación es un mensaje con un vínculo; sin correo electrónico no se puede invitar a nadie.
Por qué estas llamadas son de la plataforma y no de su API personalizada
Todo lo demás que su portal lee y escribe pasa por una API personalizada que escribió usted. Una empresa no, y conviene saber por qué: quién pertenece a qué empresa lo guarda el servicio de identidad de la plataforma, que acepta la sesión de un visitante solo desde el propio servidor del portal. Su API personalizada no se ejecuta allí (se ejecuta donde están sus tablas), así que a ningún script que pudiera escribir se le permitiría invitar a nadie.
Por eso la plataforma le proporciona las seis llamadas, y usted dibuja la pantalla. En la plataforma no hay ninguna página de personas integrada: la lista de miembros, el cuadro de invitación y el selector de rol los distribuye usted, igual que el resto de su portal.
Las seis llamadas
| Llamada | Qué hace |
|---|---|
startCompany(name) | Crea una empresa con este visitante como su primer Propietario |
invitePerson(email) / invitePerson(email, role) | Envía una invitación por correo electrónico. Solo Propietarios. Member si no se indica rol |
loadCompanyPeople(into) / loadCompanyPeople(into, companyInto) | Pone a las personas en un campo de estado, y la empresa en un segundo campo |
changePersonRole(person, role) | Cambia lo que puede hacer un compañero |
removePerson(person) | Quita a un compañero, o retira una invitación pendiente |
leaveCompany() | Este visitante abandona la empresa |
Los roles son Miembro (Member), Facturación (Billing) y Propietario (Owner), y cada
uno puede hacer todo lo que puede el anterior. Solo los Propietarios invitan, cambian roles y quitan
personas; eso lo decide la plataforma, no su pantalla.
Pasos
-
Dibuje un cuadro de texto y enlace su valor a un campo de estado, por ejemplo
state.text. -
Dibuje un botón y asigne a su controlador de clic:
startCompany(getState("text"));createRecord("par_client", { par_name: getState("text") });loadCompanyPeople("people", "company"); -
Dibuje un segundo botón para invitar:
invitePerson(getState("text"));loadCompanyPeople("people", "company");notify("Invitation sent."); -
En el screenLoad de la pantalla, ponga
loadCompanyPeople("people", "company");para que la página se abra con la lista ya rellena.
startCompany hace dos cosas: crea la empresa y vuelve a apuntar la sesión de este visitante a
ella. Solo a partir de ese momento portalCustomerId() devuelve algo, y eso es lo que lee la API
personalizada que hay detrás de createRecord para dar a su propio registro el id de la empresa.
Hágalo al revés y no habrá ningún id que dar al registro. Su API nunca lo recibe de la página, ni debe recibirlo: lo decide la plataforma, y eso es lo que impide que un visitante reclame la empresa de otra persona.
Qué llega a sus campos de estado
loadCompanyPeople("people", "company") rellena dos campos:
-
state.people: una fila por cada compañero y por cada invitación pendiente:Campo Qué es idmember:…oinvitation:…; páseselo tal cual aremovePersonnameSu nombre, o la dirección a la que se envió una invitación emailLa dirección con la que inicia sesión roleMember,BillinguOwnerstatusMemberoInvitedisYouSi esta fila es la persona que está leyendo la página -
state.company:{ name, role, canManage }. Enlace un rótulo astate.company.namey ponga el enlace visible de su cuadro de invitación enstate.company.canManage, para que a un miembro normal no se le muestre un botón que se le va a rechazar.
Quien no pertenece a ninguna empresa recibe una lista vacía y una empresa vacía, lo que no es un error: para eso está su formulario de «crear una empresa».
Un botón Quitar que funciona con los dos tipos de fila
Repita una tabla sobre state.people y ponga un botón en la fila:
removePerson(row.id);
loadCompanyPeople("people", "company");
Eso quita a un compañero o retira una invitación, porque el id de la fila indica cuál es. No
escribe usted esa condición, ni debe hacerlo, porque para la plataforma son dos actos distintos y
solo ella conoce las reglas de cada uno.
El rol de una invitación no se puede cambiar. changePersonRole sobre una fila invitation: se
rechaza con una explicación: retírela y vuelva a invitar a la persona.
Qué aspecto tiene un rechazo
La propia frase de la plataforma aparece junto al botón que alguien pulsó: «Solo un Propietario puede invitar a personas», «El último Propietario no puede abandonar la empresa», «Esa dirección ya está en esta empresa».
No necesita escribir esos mensajes y no debería intentar adelantarse a ellos: las reglas pertenecen a la plataforma, y una pantalla que tratara de adivinarlas acabaría adivinando mal.
Quien es el único Propietario de una empresa debe convertir antes a un compañero en Propietario. Es deliberado: una empresa con registros detrás no se queda sin nadie que pueda administrarla porque una persona pulse un botón.
Adónde llega una invitación
A la puerta de entrada de su portal, igual que un vínculo de confirmación y un vínculo de restablecimiento de contraseña. Quien ha iniciado sesión se une de inmediato; quien no, ve el formulario de inicio de sesión con Le han invitado encima, y la invitación sigue esperando después de que cree una cuenta y confirme su dirección. Consulte Pedir a los visitantes que inicien sesión.
Para qué sirve
Una empresa es aquello por lo que una directiva de datos acota los registros. Así que estas dos páginas encajan: esta explica cómo alguien llega a tener una empresa, y aquella, cómo las filas de una tabla llegan a pertenecerle.