design - cfif - cfset
Consejos de diseƱo: sitio de presentaciĆ³n multiusuario para varios dispositivos (2)
Como los dispositivos se pueden asignar a diferentes usuarios, necesita una convención de nomenclatura que le permita asociar cada ID de dispositivo con sus campos relacionados, es decir, ID de usuario, comentarios, etcétera. Una opción es agregar el "ID del dispositivo" como un sufijo para cada conjunto de campos:
<cfoutput query="yourQuery">
Device ID <input type="checkbox" name="deviceID" value="#deviceID#">
UserID:<input type="text" name="userID_#deviceID#" ...>
Comment:<input type="text" name="comment_#deviceID#" ...>
</cfoutput>
Supongamos que su consulta contiene tres ID de dispositivo, es decir, 35,48,52
los nombres de campo resultantes se verían así. Observe que cada conjunto de campos comparte el mismo ID de dispositivo.
<input type="checkbox" name="deviceID" value="35">
<input type="text" name="userID_35" ...>
<input type="text" name="comment_35" ...>
<input type="checkbox" name="deviceID" value="48">
<input type="text" name="userID_48" ...>
<input type="text" name="comment_48" ...>
<input type="checkbox" name="deviceID" value="52">
<input type="text" name="userID_52" ...>
<input type="text" name="comment_52" ...>
Luego, cuando se form.deviceID
el formulario, form.deviceID
contendrá una lista delimitada por comas de los dispositivos form.deviceID
. Puede recorrer esa lista y usar la identificación actual para tomar los valores de comentario y el ID de usuario asociado. Una vez que tenga esos valores, use el tipo de action
para ejecutar un INSERTAR, ACTUALIZAR o lo que sea que necesite hacer.
Tenga en cuenta que, una vez más, dado que cada dispositivo puede asignarse a un usuario diferente, no puede hacer el INSERT en una sola instrucción
<cfparam value="form.deviceID" default="">
<!--- for each device id .. --->
<cfloop list="#form.deviceID#" index="currDeviceID">
<!--- grab the associated user and comment --->
<cfset userID = FORM["userID_"& currDeviceID]>
<cfset comment = FORM["comment_"& currDeviceID]>
... validate ...
<cfquery ...>
run your query
</cfquery>
</cfloop>
( Editar : esta es una continuación de una pregunta anterior )
Estoy trabajando en el rediseño completo de un sitio que permite a los usuarios ver múltiples máquinas para múltiples usuarios.
Esto es lo que tengo hasta ahora.
Una página frontal que genera dos cfqueries.
Una consulta es la de las máquinas activas (es decir, ya está desprotegida) Es una consulta básica de salida y muestra la información en función de los valores de la consulta. Uso una declaración cfif para filtrar solo las máquinas activas (valor = 1 si está activo en SQL)
También produce cosas como MAC, IP OS, etc.
La otra consulta son las máquinas inactivas que un usuario puede verificar. También se filtra en función de si está activo, esta vez mediante cfif query.active eq 0. Esta consulta tiene unos pocos campos de formulario para que el usuario pueda marcar las casillas de verificación de los dispositivos a controlar, ingrese los campos requeridos (userID y comentarios, básicamente) y enviarlo.
Hay un menú desplegable al pie de esta página que le permite seleccionar la acción, y el formulario pasa un número de acción (form.choose_action) que le dice al cfc qué debe hacer. IE si el número de acción es 4, le dice al cfc que envíe a la persona a la página de edición y pasa el ID del dispositivo junto con ella.
Así que, básicamente, paso el DeviceID en cada situación, y el ID de usuario solo si la máquina está activa.
Cuando el usuario hace clic en enviar, va directamente a una página que llama a un cfc que hace la mayor parte del trabajo pesado.
Con todo, esta es una solución extremadamente pobre, ya que solo funciona bien cuando una máquina se registra o se retira a la vez.
Aquí hay una imagen para explicar mejor lo que está pasando.
Esto es lo que me gustaría:
Se pueden seleccionar múltiples dispositivos y registrarlos / registrarlos, es de esperar que utilicen casillas de verificación de alguna manera.
Si se comprueba una máquina para un usuario, los ID de usuario deben adjuntarse de algún modo a los dispositivos respectivos en el formulario de entrada (la consulta de salida inactiva) y se deben ingresar junto con el ID del dispositivo en una sola inserción, si es posible.
Quiero poder verificar en varios dispositivos, pero también evitar que las personas revisen las máquinas que están activas (ya que ya están desprotegidas). Lo mismo ocurre con las máquinas inactivas. Me gustaría evitar que un usuario controle una máquina que aún no se ha comprobado. A partir de ahora estoy usando el número (es decir, si el campo es mayor que 0)
Algunas notas: Solo un usuario va a usar esto a la vez, por lo que no tengo que preocuparme por las cosas de la sesión o por tener muchas personas intentando verificar en el mismo dispositivo.
En el momento en que actualmente envío variables a una página que luego pasa los datos del formulario a un CFC, esta podría no ser la mejor manera de hacerlo.
Realmente el gran problema que tengo es desde el punto de vista del diseño, mi lógica es muy intrincada e ineficiente. Por el momento, lo único que se me ocurre es pasar los valores del dispositivo a través de una matriz. Pero no estoy seguro de si podría hacer esto en una casilla de verificación.
Gracias por tu tiempo.
P: Por el momento, lo único que se me ocurre es pasar los valores del dispositivo a través de una matriz. Pero no estoy seguro de si podría hacer esto en una casilla de verificación.
R: Cuando se verifican múltiples casillas de verificación, ColdFusion las ve como una lista de valores. Entonces obtendrías algo como
checkedout=4312,5231,51
si se marcaron tres casillas de verificación
checkedin=31,9876
si dos artículos fueron marcados