View Type según usuario

Hola a todos!

Soy bastante novato en AppSheet, pero he avanzado bastante en un mes.

Tengo el siguiente dilema:

Entre mis tablas, tengo una llamada “Registros”, que es para cuando un trabajador registre su horario de entrada o salida (por medio de un código QR).

Lo que quisiera es que según el usuario de USERSETTINGS, cambie el “view type”. Me refiero a que si el rol del usuario es “Trabajador”, se muestre como “Form”, pero si entra como “ADMIN”, se muestre como “Table”. Ya que como Form es para registrar el horario de entrada y salida, mientras que para el Admin necesita verlo como tabla, para modificar o eliminar registros.

Acá el menu cuando ingreso como ADMIN

Y acá cuando ingreso como Trabajador

El problema es que cuando entro, en amabos se ve como “Form”. Pero es una vista que no me sirve para “ADMIN”.

Intenté duplicar la Vista de mi tabla “Registros”, pero no sirve, porque el menu interactivo no me lleva a ella (o tal vez no sé cómo hacerlo).

He buscado mucho y me imagino que es sencillo, pero no doy con la solución.

Accedo a través de un menu, que cambia según el usuario. No sé si tendría que duplicar o generar algún Slice. Ya que no quisiera tener que duplicar una tabla completa, para que se pueda ver diferenciada, por ejemplo.

Desde ya, muchísimas gracias!

Construye una acción de navegación (p.e. LINKTOVIEW()) que enviará al usuario a una vista u otra según su rol. Luego en la configuración de la vista, bájate hasta Behavior y usa esta acción como Row Selected Event Action.

Hola Joseph,

En primer lugar, muchas gracias por tu tiempo al responder.

Hice una acción LinktoView a la Vista “Registros2” (la verdad creo que acá estoy fallando)

Direccioné entonces la acción a la Vista mencionada, y en Behavior usé la acción creada. Pero sigue sin permitirme acceder a modificar los datos.

Tal vez falta un poco de contexto:

En la Hoja de cálculo (GSheet), esta es la tabla “MENU”. Obviamente también está la tabla “REGISTROS”:

El menú visual está construído con una acción LINKTOVIEW. Limitado al Rol del USERSETTINGS. Por lo que al entrar como Rol “TRABAJADOR”, sólo ve esto:

Al ingresar, tiene la forma de Vista de “FORM”, para que pueda registrar su inicio o salida por QR:

Hasta acá, todo perfecto. Lo que quisiera es que al ingresar como “ADMIN”, al Menu REGISTROS, pueda ver una tabla con todos los registros de los distintos trabajadores, y poder editarlos, agregar o eliminar.

Este es el Menú que puede ver ADMIN al ingresar:

Si ingreso a REGISTRO, pues veo la misma vista de “FORM”.

Intenté agregar un “segundo” Menú de REGISTROS, así:

Pero no dupliqué la hoja de REGISTROS, sólo agregué esta línea.
Agregué una vista de REGISTROS, como Tabla, y que sólo aparezca cuando ingreso como ADMIN.

Ahora, al ingresar a la App como “ADMIN”, el menu es este:

Pero si pincho en el segundo menú de REGISTRO, pues me lleva a una Tabla que no puedo modificar, y si pincho en algún registro, ingresa como si lo hiciera al primer REGISTRO (como si fuera rol TRABAJADOR) para marcar asistencia. No permitiendo modificar los registros.

Intenté con la respues que me diste anteriormente, pero no surtió efecto, o tal vez mi estructura no es la correcta.

Finalmente, y como una ayuda “parche” momentánea, en la Vista de REGISTROS2 que creé:

En Row Selected, lo cambié a “Edit”:

Qué me permite esto?, pues puedo editar desde el encabezado superior, pero no puedo editar o eliminar de manera intuitiva. Puedo hacerlo desde esta opción:

Si pincho, se vuelven editables estas 3 columnas:

Ya que si pincho en cualquiera de los registros de prueba, aunque hayan sido ingresados por un usuario con el Rol de TRABAJADOR:

Me lleva de todas formas a la vista de “FORM”, con el usuario “ADMIN”, lo cual no tiene sentido, ya que Admin no registra asistencia y esta vista sólo debería ser para Rol TRABAJADOR:

Lamento mi intención de explicarlo de la mejor manera. Pero me está volviendo loco la manera de hacerlo. Me imagino que es mi poca experiencia en la plataforma, pero sigo entendiendo su funcionamiento.

Gracias desde ya.
Saludos.

La idea era hacer una nueva acción no utilizar la acción Edit. Ten en cuenta también por favor que no se necesita duplicar la vista o añadir una línea adicional al menú.

Primero haz una nueva acción de tipo: “App: go to another view within this app”. Nómbrala por ejemplo: navegar. Su expresión sería así:
IF(
“Admin” = [_ThisUser].[Rol],
LINKTOVIEW(“nombreVistaTable”),
LINKTOVIEW(“nombreVistaForm”)
)

Luego, en la configuración de la vista del menú, utiliza la acción navegar como Row Selected Event Action.

Hola Joseph, muchas gracias por tu valioso tiempo. Siento que este fue un gran avance, pero aún me lleva a la vista de “FORM”. Y siento que es porque creé esl menu inicial, también con LINKETOVIEW. Entonces la tabla REGISTROS tiene seleccionada la View Type como “FORM” (porque hay que elegir uno). Entonces, a pesar de haber creado la acción de “Navegar” y aplicarla, sigue llevándome a la vista FORM. De hecho, no aparece “Row Selected Event Action”, para poner la acción de “Navegar”:

*esta captura de pantalla es de la vita de la tabla “REGISTROS”.

Siento que estoy tan cerca. Agradezco tu ayuda, en serio.

has intentado cambiarle en el menu de setting la opcion que se llama “Starting view”, cambialo a Assistant para que la primera ves que alguien acceda a la aplicacion lo lleve al asistente y de ahi solo le permita acceder al modulo que le corresponde.

Si la definición de la acción es correcta, entonces lo que remplaza esta parte: “Admin” = [_ThisUser].[Rol], no se resuelva correctamente. No tiene nada que ver con ser el menú inicial.

¿Me puedes por favor mostrarme la expresión de tu acción?

Hola Joseph,
Muchas gracias nuevamente. Acá está el código de la acción que me recomendaste anteriormente y que escribí:

IF(
“ADMIN” = [_ThisUser].[Rol],
LINKTOVIEW(“REGISTROS”),
LINKTOVIEW(“ASISTENCIA_Form”)
)

Y acá la vista fuera del código:

Sigo muy atento y agradecido como no te imaginas :flexed_biceps:

Hola Daniel, muchas gracias por desear aportar!

El caso es que cuando abre la aplicación, muestra el Menú inicial.

  • Para los que ingresen con Rol “TRABAJADOR”:

  • Y los que ingresen con Rol “ADMIN”:

Todo esto está hecho con un Linktoview. Hasta ahí todo bien. La situación es que al “pinchar” en el Menú “REGISTRO”, los trabajadores van a una vista de Form, que es la que le di cuando creé la vista. El problema es que cuando ingreso como “ADMIN”, desearía que al pinchar en el mismo menú “REGISTROS”, m e llevara a una vista de Tabla en vez de Form, para así poder modificar, cambiar o eliminar registros.

Joseph me ha ayudado mucho, pero aún no lo logro, y siento que estoy muy cerca, pero no llego al punto final deseado todavía.

¿Tienes en el nombre de la vista? ¿es correcto esto?

¿Tienes una columna que se llama “Rol” en los User Settings? ¿Su valor actual es “ADMIN”?

Se me pasaron esos corchetes al escribir, perdón.
Sólo tengo esto en la acción:
IF(
“ADMIN” = [_ThisUser].[Rol],
LINKTOVIEW(“REGISTROS”),
LINKTOVIEW(“ASISTENCIA_Form”)
)

¿Debería tener algo entre los corchetes o está bien así?

Sí, confirmado. Acá un una captura de pantalla del Logg In (Según columnas de User Settings):

Gracias como siempre por tu ayuda.

Enséñame esta tabla por favor.

Acá hay una captura de pantalla de la tabla User Settings:

El Rol tiene la siguiente fórmula (es sólo para que me traiga el Rol de la tabla USUARIOS, donde fue asignado):
**ANY(**SELECT(USUARIOS[UsuarioRol],[UsuarioCodigo]=USERSETTINGS(“Usuario”)))

Sigo atento y agredecido de tu invaluable ayuda.
Gracias!

  • AppSheet no ofrece ninguna manera segura de gestionar los logins de los usuarios e intentar hacerlo infringe los términos de uso de AppSheet. La autenticación de los usuarios debe ser exclusivamente a través de los proveedores de login facilitados, como Google y Microsoft entre otros, a través de su cuenta de correo pertinente.
  • Por favor ten en cuenta también que los datos de User Settings se guardan localmente dentro del dispositivo del usuario y es independiente del usuario autenticado. Cualquier persona con acceso a la app en el dispositivo podría acceder a las contraseñas de los demás.

Lo correcto con AppSheet sería gestionar usuarios autentificados a través de una tabla de asignación de roles a los usuarios identificados por su correo de login.

Hola Joseph,
Entiendo y agradeazco mucho tu observación, ya que sólo llevo un mes con Appsheet. Pero es sólo el prototipo y lo había hecho así para pruebas de emails que no sean gmail y entender su funcionamiento.
¿Entonces si no lo tengo con acceso mediante loggins de Google o Microsoft, no funcionará?

Gracias nuevamente

No, User Settings no se puede usar para esta finalidad.

Cambiaré a que el log in sea mediante Gmail e intentaré a ver si resulta nuevamente. Muchas gracias y buen día

1 Like

Igualmente :tulip:

Hola Joseph, buenas noches.
Te comento que finalmente lo hice, pero no me funcionó con [_ThisUser].[Rol]
Finalmente lo logré de la siguiente manera:
IF(LOOKUP(USEREMAIL(),USUARIOS,Usuario_Email,Rol_ID)=“ADMIN”,
LINKTOVIEW([Menu_Vistas]),
LINKTOVIEW(REGISTROS_Form))

Así que sólo me queda agradecerte por toda la ayuda.
Saludos y que tengas buena semana.

1 Like