{{indexmenu_n>1}} ====== Ejemplos de códigos VBScript====== ===== Plantillas de Programación VBScript===== =====Código que recorre una colección completa===== \\ \\ **coll.filter**, agrega un AND al filtro que tiene aplicado ahora mismo la colección en el atributo **filter** del XML en el SQL de la colección o bien al filter que se haya definido al llamar al contents, **coll.linkfilter** sería para cambiar también éste. (OJO! con cambiar el filtro de una colección, hay que acordarse de restablecerlo después...) =====Recorrer una colección/content con pocos datos===== \\ \\ =====Obtener un objeto (fila) de una colección, teniendo el valor de un campo de dicho objeto===== \\ Dim obj ‘Buscamos el cliente en la coll Clientes, con el valor del ID del cliente. Set obj=appdata.getcollection("Clientes")("ID",CStr(This("IDCLIENTE"))) If not obj is nothing Then obj("PROXIMA")=This("PROXIMA") obj("OBSERVACIONES")=This("FICHA") obj.save End If Set obj=nothing \\ =====Obtener un objeto (fila) de una colección, utilizando una SQL con más de 1 campo (FINDOBJECT)===== \\ AppData.PushValue objLoquesea lanza un objeto en edición. Set cCierre=AppData.GetCollection("Cierre") Set objCierre=cCierre.FindObject("NUMINCIDENCIA='"+This("NUMINCIDENCIA")+"' AND NUMPROGRESO='"+This("NUMPROGRESO")+"'") If objCierre Is Nothing Then set objCierre=cCierre.CreateObject objCierre("MAP_IDINCIDENCIA")=This("ID") objCierre("NUMINCIDENCIA")=This("NUMINCIDENCIA") objCierre("NUMPROGRESO")=This("NUMPROGRESO") ContarPiezas This("NUMINCIDENCIA"),This("NUMPROGRESO") objCierre("MAP_NUMPIEZAS")=This("MAP_NUMPIEZAS") cCierre.additem objCierre AppData.PushValue objCierre Else Appdata.failwithmessage -11888,"Ya ha ejecutado el cierre con anterioridad." End If ===== Mensajes (msgBox showToast) Sonidos Notificaciones ===== Tenemos varias formas de mostrar un mensaje en pantalla. ^ Comando ^ Descripción ^ | ui.MsgBox "Ejemplo", "Mensaje", 0 | Mensaje "normal" del framework, para desaparecer, tiene que darle el usuario al botón de OK. | | ui.ShowNotification 1, “Título”, “Mensaje” | Notificación en la barra superior de notificaciones, se le especifica un ID (1) para si queremos modificar la notificación más adelante, podemos utilizar el mismo comando con otro mensaje y se modificará el que ya existía. | | ui.DismissNotification "1" | Elimina la Notificación de la barra superior de notificaciones realizado con el "ShowNotification", hemos de especificar el ID (1) de la notificación para especificar el mensaje que queremos quitar. El parámetro hay que pasarlo como cadena. | | ui.ShowToast "Se ha recibido un nuevo mensaje " | Mensaje TOAST del sistema operativo, ver la captura de pantalla más abajo. El mensaje desaparece automáticamente tras un par de segundos en pantalla. | \\ **Ejemplo de código:** ===== Nodo para irnos a una colección pasando un parámetro (irColl/abrirColl) ===== \\ Primero tendríamos un botón para llamar a este nodo: El código del nodo quedaría: 'Hemos llamado al nodo irColl pero podríamos haberlo llamado de cualquier otra forma. ===== Nodo para salir de una colección (onback) ===== \\ Lo llamamos onback porque en Android tenemos un evento que atiende al botón de volver atrás que ejecuta éste nodo, de forma que el botón que pongamos para salir y el botón de volver atrás de Android hagan lo mismo. Tendríamos un botón salir o volver para ejecutar este nodo. Este es el código que ejecuta tanto nuestro botón como el volver atrás de Android. ===== Nodo para irnos a otra pestaña (showGroup) ===== \\ En este código también vemos como podemos cambiar una propiedad dinámicamente, en este caso, la imagen de fondo de un frame. ----- ===== CASE en SQL para COLORVIEW ===== Para consulta de algunos que estén oxidados en SQL... SELECT g.*,CASE WHEN g.APROBADO=0 THEN '#FFFFFF' ELSE '#00FF00' END as MAP_COLORVIEW FROM ##PREF##Gastos g ===== MACRO de usuario para filtrar contents ===== Podemos crear una MACRO de usuario en una colección para sustituir en tiempo real la SQL de una colección, pudiendo llegar a sustituir incluso la SQL de la colección completa. Una vez definida la macro en la colección, posteriormente podemos utilizarla para cambiar el valor de dicha macro y por lo tanto cambiar el SQL. ===== Código para Crear/Editar/Borrar un registro de un contents ===== \\ 'Para poder dar de alta un registro en un contents tendríamos que pasarle el ID de la cabecera... function addContents(coll,campoenlace) Set CollCV=appdata.GetCollection(coll) Set ObjCV=CollCV.CreateObject ObjCV(campoenlace) = this("ID") CollCV.AddItem Empty,ObjCV AppData.PushValue ObjCV end function 'A esta función tenemos que pasarle la referencia al contents y el ID que queremos editar. function editContents(coll,idselected) Set CollCV=appdata.GetCollection(coll) Set ObjCV=CollCV.FindObject("ID="+Cstr(idselected)) if not ObjCV is nothing then AppData.PushValue ObjCV end if end function 'Realmente no borramos el registro físicamente, lo que hacemos es cambiar el campo de enlace con la cabecera 'o podemos ponerle un BAJA=1, para darlo de baja lógica. Posteriormente tendríamos un mantenimiento para 'eliminar estos registros del dispositivo (Para que no se replique el borrado físico del registro). function deleteContents(coll,idselected,campoenlace) result = ui.MsgBox("¿Esta seguro de que desea eliminar el registro seleccionado?","¡ALERTA!",4) if result=6 then Set CollCV=appdata.GetCollection(coll) Set ObjCV=CollCV.FindObject("ID="+Cstr(idselected)) if not ObjCV is nothing then ObjCV(campoenlace) = -9999 ObjCV.Save end if ObjCV = nothing CollCV = nothing end if end function =====Mostrar error por pantalla===== \\ \\ =====Tipos de errores===== \\ \\ =====Validación de datos usando PopValue y PushValue para los errores===== \\ Evitar que se pueda guardar un registro con campos con ciertos valores, como vacíos.\\ **Appdata.PopValue** es para coger el valor de fallo de la rule, para posteriormente con **Appdata.PushValue** dárselo. Se le pasará como un Long, de ahí el Clng.\\ \\ \\ =====Botón con Script===== \\ CÓDIGO PARA REALIZAR UN BOTÓN. \\ \\ Está formado por **3 nodos**:\\ \\ |**Nodo 1**|**Prop de tipo "B" (botón)**| Es el nodo que define donde sale el mismo, título y a que nodo llama para ejecutar su código. Tiene el atributo method que es el que realiza la llamada al nodo que tiene su código, el nombre "ExecuteNode", es el nombre del nodo "method", y tiene que llamarse de la misma forma (mayúsculas-minúsculas).| |**Nodo 2**|**Nodo method** name="ExecuteNode"| Es un nodo obligatorio y fijo. (YA NO ES NECESARIO, sólo en frameworks antiguos)| |**Nodo 3**|**Nodo en el que se pone el código que se va a ejecutar**.| El nombre es definido por el usuario, y como único requisito, es el nombre del nodo, tiene que llamarse igual (mayúsculas-minúsculas) que el nodo al que llama el nodo button en su atributo method.| \\ \\ =====Colección Avisos===== \\ COLECCIÓN DE AVISOS. \\ \\ =====Content Imagen===== \\ CONTENT EN MODO IMAGEN.\\ \\ Con este content se mostrarán los datos como una imagen, y el usuario, en ciertas coordenadas de la misma, pondrá poner marcas. \\ Al realizar un click en dicha marca mostrará los datos relativos a ella, sería como dar a una línea de un content normal.\\ \\ Hay que tener en cuenta que el ejemplo es para mostrar en una primera imagen un vehículo, y si se le da a un lugar del mismo, que podrá ser una rueda, un cristal o una puerta, saldrán tipos de daños que puede tener dicha parte del vehículo. \\ \\ DOS CONTENT EN UNA COLL CABECERA. El primero es el content de tipo imagen, que tiene los atributos:\\ \\ |**viewmode**| PARA INDICAR QUE EL CONTENT SE VEA MODO IMAGEN| |**imgbk**| SE LE DICE LA IMAGEN QUE SE MUESTRA| \\ El otro content es el que se pone debajo y que según el lugar donde se marca en el content imagen, saldrán los datos relativos. \\ \\