Historial de acciones realizadas

Estoy pensando en agregar a mi app una tabla donde se registren todas las acciones básicas (add, delete, edit) realizadas en las diferentes tablas de mi app

Ejemplo de uso:
Agregar una fila en mi tabla Tratamientos,automáticamente desencadenaría crear una nueva fila en mi tabla Historial, esta nueva fila contendrá:
- [ID Historial] 
- [Correo] con valor inicial de Usermail()
- [Tabla] indica la tabla en la que se ejecutó la acción
- [Acción] indica la acción que se ejecutó
- [ID Row] indicaría el id correspondiente a la fila sobre la que se aplicó la acción

Cómo podría lograr esta funcionalidad?? existe un best practice?

Imagino 2 formas de lograr la funcionalidad que busco, la primera a través de automatización y la otra a través de acciones. cualquier ayuda es bien recibida 


Solved Solved
0 3 317
1 ACCEPTED SOLUTION

No me gustan los monólogos pero estoy casi seguro de que voy a olvidar cómo logré esta funcionalidad, así que la documentare aquí para que también pueda servirle a alguien más.

Para contextualizarlos un poco mi app es para gestión de registros médicos pero fácilmente puedes adaptar esta idea a tu caso particular.

1.-Crear una Tabla de Historial con las siguientes columnas con sus respectivos valores iniciales:

[ID Historial] - UNIQUEID()
[Fecha] - TODAY()
[Hora] - NOW()
[ID Usuario]
[Usuario] - [ID Usuario].[Nombre]
[ID Paciente]
[Paciente] - [ID Paciente].[Nombre]
[Tabla]
[Fila]
[ID]
[Actividad]
[Detalle Actividad] - CONCATENATE([Usuario]," | ",[Actividad]," | ",[Tabla]," | ",[Paciente])
[Columnas Antes]
[Columnas Después]

2.-Crear una acción para la tabla de la cual nos interesa generar el Historial (Esta acción la podrás duplicar y adaptar a cada una de las tablas que quieras)

a. For a record of this table: la tabla de la cual quieres el historial
b. Do this: Data: add a new row to another table using values from this row
c. Table to add to: Historial
d. Set these columns:
[ID Usuario]= USEREMAIL()
[ID Paciente]= [_THISROW].[ID Paciente]
[Tabla]= Context("Table")
[Fila]= [_RowNumber]
[ID]= [_THISROW]
[Actividad]= 

IFS
(
AND(ISBLANK([_THISROW_BEFORE]),ISNOTBLANK([_THISROW_AFTER])),
"Agregregó",
AND(ISNOTBLANK([_THISROW_BEFORE]),ISBLANK([_THISROW_AFTER])),
"Eliminó",
AND(ISNOTBLANK([_THISROW_BEFORE]),ISNOTBLANK([_THISROW_AFTER])),
"Editó"
)

[Columnas Antes]=

CONCATENATE(
IFS(
[_THISROW_BEFORE].[Columna 1]<>[_THISROW_AFTER].[Columna 1],
CONCATENATE("[Columna 1]: ", [_THISROW_BEFORE].[Columna 1]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 2]<>[_THISROW_AFTER].[Columna 2],
CONCATENATE("[Columna 2]: ", [_THISROW_BEFORE].[Columna 2]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 3]<>[_THISROW_AFTER].[Columna 3],
CONCATENATE("[Columna 3]: ", [_THISROW_BEFORE].[Columna 3])
)
)

[Columnas Después]=

CONCATENATE(
IFS(
[_THISROW_BEFORE].[Columna 1]<>[_THISROW_AFTER].[Columna 1],
CONCATENATE("[Columna 1]: ", [_THISROW_AFTER].[Columna 1]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 2]<>[_THISROW_AFTER].[Columna 2],
CONCATENATE("[Columna 2]: ", [_THISROW_AFTER].[Columna 2]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 3]<>[_THISROW_AFTER].[Columna 3],
CONCATENATE("[Columna 3]: ", [_THISROW_AFTER].[Columna 3])
)
)

(En las columnas antes y después puedes ir repitiendo la estructura para cada una de las columnas en tu tabla o hacerlo sólo para las columnas que te interesen para generar el historial)


3.- Crear un Bot con las siguientes especificaciones:
Event Type: All changes
Table: La tabla para la que creaste la acción y quieres generar el Historial

(En caso de que no quieras que el bot se active al realizar cambios en ciertas columnas deberás establecer una condición, te doy un ejemplo para que el bot no se active al detectar cambios en las columnas 2 y 5, para una tabla que cuenta con un total de 7 columnas)

Condition: 

OR(
[_THISROW_BEFORE].[Columna 1]<>[_THISROW_AFTER].[Columna 1],
[_THISROW_BEFORE].[Columna 3]<>[_THISROW_AFTER].[Columna 3],
[_THISROW_BEFORE].[Columna 4]<>[_THISROW_AFTER].[Columna 4],
[_THISROW_BEFORE].[Columna 6]<>[_THISROW_AFTER].[Columna 6],
[_THISROW_BEFORE].[Columna 7]<>[_THISROW_AFTER].[Columna 7]
)

Agrega un step al proceso del BOT (Run a data action) y selecciona la Acción que creamos en el paso 2

Si no me equivoqué en algo esto debería ser suficiente para crear tu historial de acciones.

Si tienes dudas al respecto, pregunta, te voy a ayudar en lo que me sea posible.

Si tienes una mejor forma de crear un Historial como éste ó si tienes una idea de como mejorar este Historial , por favor comparte tu conocimiento.

View solution in original post

3 REPLIES 3

No me gustan los monólogos pero estoy casi seguro de que voy a olvidar cómo logré esta funcionalidad, así que la documentare aquí para que también pueda servirle a alguien más.

Para contextualizarlos un poco mi app es para gestión de registros médicos pero fácilmente puedes adaptar esta idea a tu caso particular.

1.-Crear una Tabla de Historial con las siguientes columnas con sus respectivos valores iniciales:

[ID Historial] - UNIQUEID()
[Fecha] - TODAY()
[Hora] - NOW()
[ID Usuario]
[Usuario] - [ID Usuario].[Nombre]
[ID Paciente]
[Paciente] - [ID Paciente].[Nombre]
[Tabla]
[Fila]
[ID]
[Actividad]
[Detalle Actividad] - CONCATENATE([Usuario]," | ",[Actividad]," | ",[Tabla]," | ",[Paciente])
[Columnas Antes]
[Columnas Después]

2.-Crear una acción para la tabla de la cual nos interesa generar el Historial (Esta acción la podrás duplicar y adaptar a cada una de las tablas que quieras)

a. For a record of this table: la tabla de la cual quieres el historial
b. Do this: Data: add a new row to another table using values from this row
c. Table to add to: Historial
d. Set these columns:
[ID Usuario]= USEREMAIL()
[ID Paciente]= [_THISROW].[ID Paciente]
[Tabla]= Context("Table")
[Fila]= [_RowNumber]
[ID]= [_THISROW]
[Actividad]= 

IFS
(
AND(ISBLANK([_THISROW_BEFORE]),ISNOTBLANK([_THISROW_AFTER])),
"Agregregó",
AND(ISNOTBLANK([_THISROW_BEFORE]),ISBLANK([_THISROW_AFTER])),
"Eliminó",
AND(ISNOTBLANK([_THISROW_BEFORE]),ISNOTBLANK([_THISROW_AFTER])),
"Editó"
)

[Columnas Antes]=

CONCATENATE(
IFS(
[_THISROW_BEFORE].[Columna 1]<>[_THISROW_AFTER].[Columna 1],
CONCATENATE("[Columna 1]: ", [_THISROW_BEFORE].[Columna 1]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 2]<>[_THISROW_AFTER].[Columna 2],
CONCATENATE("[Columna 2]: ", [_THISROW_BEFORE].[Columna 2]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 3]<>[_THISROW_AFTER].[Columna 3],
CONCATENATE("[Columna 3]: ", [_THISROW_BEFORE].[Columna 3])
)
)

[Columnas Después]=

CONCATENATE(
IFS(
[_THISROW_BEFORE].[Columna 1]<>[_THISROW_AFTER].[Columna 1],
CONCATENATE("[Columna 1]: ", [_THISROW_AFTER].[Columna 1]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 2]<>[_THISROW_AFTER].[Columna 2],
CONCATENATE("[Columna 2]: ", [_THISROW_AFTER].[Columna 2]," ,
")),
IFS(
[_THISROW_BEFORE].[Columna 3]<>[_THISROW_AFTER].[Columna 3],
CONCATENATE("[Columna 3]: ", [_THISROW_AFTER].[Columna 3])
)
)

(En las columnas antes y después puedes ir repitiendo la estructura para cada una de las columnas en tu tabla o hacerlo sólo para las columnas que te interesen para generar el historial)


3.- Crear un Bot con las siguientes especificaciones:
Event Type: All changes
Table: La tabla para la que creaste la acción y quieres generar el Historial

(En caso de que no quieras que el bot se active al realizar cambios en ciertas columnas deberás establecer una condición, te doy un ejemplo para que el bot no se active al detectar cambios en las columnas 2 y 5, para una tabla que cuenta con un total de 7 columnas)

Condition: 

OR(
[_THISROW_BEFORE].[Columna 1]<>[_THISROW_AFTER].[Columna 1],
[_THISROW_BEFORE].[Columna 3]<>[_THISROW_AFTER].[Columna 3],
[_THISROW_BEFORE].[Columna 4]<>[_THISROW_AFTER].[Columna 4],
[_THISROW_BEFORE].[Columna 6]<>[_THISROW_AFTER].[Columna 6],
[_THISROW_BEFORE].[Columna 7]<>[_THISROW_AFTER].[Columna 7]
)

Agrega un step al proceso del BOT (Run a data action) y selecciona la Acción que creamos en el paso 2

Si no me equivoqué en algo esto debería ser suficiente para crear tu historial de acciones.

Si tienes dudas al respecto, pregunta, te voy a ayudar en lo que me sea posible.

Si tienes una mejor forma de crear un Historial como éste ó si tienes una idea de como mejorar este Historial , por favor comparte tu conocimiento.

hola que tal @Kabuliño , estoy tratando de hacer algo similar a esto que realizaste, y me sirve la idea, pero estoy recién iniciando en esto de appsheet, y tengo duda de a que hace referencia el _THISROW_AFTER Y _THISROW_BEFORE, ya que obviamente si inserto esa formula no me reconoce ese parámetro, asi debo nombrar las columnas de antes y después?

Agradezco tu apoyo

Gracias

[_THISROW_BEFORE]y [_THISROW_AFTER]son referencias, se utiliza una expresión de desreferencia para acceder al valor de una columna específica en la fila a la que se hace referencia.

Top Labels in this Space