{{indexmenu_n>1}} ====== Plantillas de Programación ====== =====Código que recorre una colección completa===== \\ \\ \\ En las últimas versiones de la plataforma únicamente se trata **Filter**, que contendrá el filtro que tiene aplicado ahora mismo la colección, linkfilter ya no se interpreta. (**Filter** ha pasado a sustituir a **Linkfilter**) =====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 un 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 =====Mostrar mensajes por pantalla===== 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. | | 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:** =====Pedir datos para poder trabajar con ellos===== \\ 'Con esta ventana se piden datos de tipo texto y se guardan en la variable s1. s1 =appdata.userinterface.getinputstring ("Mensaje de la Ventana","Valor Ventana",0) 'En esta ventana, SOLO se le pide datos de tipo numéricos y se guardan en la variable s2. s2 =appdata.userinterface.getinputstring ("Mensaje de la Ventana","Valor Ventana",1) s="El Presupuesto: " + cstr(s1) + " tiene el valor: " + cstr(s2) 'Solo muestra mensaje d=appdata.userinterface.msgbox (cstr(s),"Presupuesto",0) 'Muestra un mensaje con aceptar o cancelar. Guarda en la variable a el botón pulsado. a=appdata.userinterface.msgbox (cstr(s),"Presupuesto",1) if a=1 then ‘Entra aquí porque se le dio a Aceptar. else ‘Entra aquí porque se le dio a Cancelar. end if \\ Esta sección en las nuevas plataformas (Android, Iphone, Windows Phone...) ya está **DEPRECATED** =====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, solo 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, podrá 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. \\ \\