Agregar fila en otra tabla y editarla con un Form

Estimados

Tengo una tabla "A" para la que he creado la "Accion 1".

Esa accion agrega datos de la fila que estoy visualizando ("Tabla A") en otra tabla ("Tabla B"). Utilizzo "Add a new row ussing data from this row" y funciona perfectamente.

Lo que necesito es que luego de agregar esa nueva fila en la "Tabla B" pueda ir a un formulario para editar ese nuevo registro creado por la "Accion 1" en la "Tabla B". En realidad necesito editar solo algunos campos, pero esa es otra historia.

Lo que hice fue crear una View "Formulario de la tabla B" , y cree una "Accion 2" que hace un LINKTOVIEW(Formulario de la tabla B). Tambien funciona OK

Luego cree una Accion 3 con la Opcion "Excecute a secuence of actions" en la que puse en secuencia "Accion 1" + "Accion 2",

El tema es que cuando me muestra view "Formulario de la tabla B" , me agrega un registro nuevo, y yo lo que necesito es editar el ultimo registro creado en la tabla B

Espero haberme explicado y que me puedan orientar

Gracias de antemano

 

Omar 

 

Solved Solved
0 9 1,726
1 ACCEPTED SOLUTION

Bueno, encontre una "solucion".

Agrege una columna de TimeStamp con valor inicial =Now().

Ahora cuando ejecuto la Accion 2

LINKTOROW(MAXROW("Tabla B","TIMESTAMP"),"vi_EditConsPower")

Encuentro el ultimo registro... No me parece muy "elegante" pero funciona.

Aguardo comentarios .....

View solution in original post

9 REPLIES 9

Hola Omar,

Lo que tendrรญas que utilizar es: LINKTOROW(), en lugar de LINKTOVIEW(). 

Otra opciรณn, si ya sabes que valores deberรญas poner en las columnas a actualizar, podrรกs tambiรฉn lanzar una acciรณn tipo Data: set the values of some columns in this row, sin abrir un formulario.

Gracias @Joseph_Seddik por tu respuesta.

El problema con el que me encuentro es que desconozco la clave de la nueva fila en la "Tabla B", que esta con valor inicial UNIQUEID() . Usar el UNIQUEID() generado es la unica manera de ubicar la fila porque los demas valores  pueden duplicarse.

Probe escribiendo el campo clave en Linktorow() y funciona perfectamente. Lo que no encuentro es la manera de guardar la ultima clave para agregarla al Linktoview() o hacer un tipo "Last Row" o "EOF" en la tabla.

 Gracias !

ยฟhay referencias entre las dos tablas? ยฟpuedes mostrar tus columnas por favor? 

Hola @Joseph_Seddik  No, las tablas no estan relacionadas, porque no lo pense necesario pero puedo hacerlo, sin dudas. El concepto es que esten absolutamente separadas.

Tabla A (VisContratos) -Excel- para la APP es estatica. Se actualiza desde la PC.

Por eso puedo usar el _RowNumber como Key . Contiene una linea por Equipo de cada Cliente. Se puede optimizar separando en dos tablas pero no seria el momento de hacerlo.

GSuite_Omar_Poc_1-1649786522113.png

 

Tabla B ActConsumiblesPower -GSheet- Es dinamica. Cuando el tecnico que hace un servicio en un equipo ve que hay un dato mal an la "Tabla A" envia una "novedad" a traves de un nuevo registro en la "Tabla B". En Administracion se verifica y si el dato que envia el tecnico es correcto y si es asi se actualiza el Excel desde la PC

GSuite_Omar_Poc_0-1649786444319.png

Aqui se ve el _Detail de la Tabla A. Hay tres acciones para la "tabla A"

GSuite_Omar_Poc_4-1649787431087.png

La primera accion (verde) agrega una linea en la tabla B , y le pasa todos los datos necesarios a la tabla B , la segunda accion (Violeta) muestra el formulario que deberia mostrar este ultimo registro agregado para editar, y el tercer boton (marron)  hace las dos acciones anteriores con un solo boton .

Hice una prueba utilizando como index _ROWNUMBER con MAXROW

LINKTOROW(MAXROW("ActConsumiblesPower","_ROWNUMBER"),"vi_EditConsPower")

Y funciona, pero no se si aplica al hecho de que pueda haber una simultaneidad en la actualizacion de la tabla B.

Perdon por la extension de la respuesta, pero queria detallar lo mas posible

 

Gracias de antemano

 

Omar

 

 

 

Hola Omar, gracias por los detalles. 

Primero, no deberรญas utilizar el RowNumber como key, รฉste es peligroso. Tendrรญas que aรฑadir una columna key a tu Tabla A, con el Initial value: UNIQUEID().

Regresemos al asunto principal.

Cuando estรกs visualizando una fila, las acciones que lances desde esta vista tienen acceso a los valores de todas las columnas de esta fila. Asรญ, al crear una nueva fila en la Tabla B, puedes copiar tambiรฉn el valor de tu key en la Tabla A a la nueva fila en la Tabla B. Asรญ tambiรฉn tendrรกs la key a utilizar con LINKTOROW(). 

Hola Joseph. No se como agradecerte el tiempo que te estas tomando en ayudarme a resolver este problema, que seguramente no logro ver como resolver porque no conozco como utilizar bien todos los recursos de Appsheet.

Entiendo lo que me dices de la Tabla A, de utilizar un campo con UNIQUEID() como key. Pero el hecho es que para la APP, la Tabla A (que es un excel) es de solo lectura. Esa tabla solamente se actualiza desde una PC.

Por lo anterior, cuando hay "Novedades" las quiero registrar en la Tabla B, pasรกndole a รฉsta la data que necesito para reconocer luego el registro (Accion 1), e ir luego a un Form para editar los campos del nuevo registro de la Tabla B (Accion 2). Pero volvemos al principio.

El problema es que no encuentro la manera de ir al ultimo registro de la Tabla B y abrir el Form.

Con LINKTOROW() si puedo hacerlo poniendo como parametro el KEY de la tabla B (UNIQUEID()) pero no se como almacenar ese dato en forma temporal cuando se crea el nuevo registro en la tabla B para luego utilizarlo en la accion 2 con el LINKTOROW()

Este dato "virtual" no podria almacenarse en la Tabla A.

En otros lenguajes, podria para esto podria crear una variable y almacenar el dato ahi para luego utilizarlo. Pero entiendo que esto no es posible en Appsheet (o no encuentro la manera de emularlo) ๐Ÿ˜„

Muchisimas gracias nuevamente

Omar

Bueno, encontre una "solucion".

Agrege una columna de TimeStamp con valor inicial =Now().

Ahora cuando ejecuto la Accion 2

LINKTOROW(MAXROW("Tabla B","TIMESTAMP"),"vi_EditConsPower")

Encuentro el ultimo registro... No me parece muy "elegante" pero funciona.

Aguardo comentarios .....

Bien hecho! 

Esta soluciรณn implica el pequeรฑo riesgo que dos usuarios aรฑadan dos filas al mismo tiempo en el mismos segundo. Pero, si no se puede aรฑadir columnas en la Tabla A, รฉsta es tu mejor opciรณn. Bravo ๐Ÿ™‚ 

Mil gracias por tu ayuda @Joseph_Seddik  !

Top Labels in this Space