Mecanismo E-2 (entramult.php): Ingreso de datos a través de una forma

Este es el mecanismo para que se puedan varios registros a la vez a una tabla de N2C (Excepto a la tabla AGE). Es usado típicamente para inscribir varias personas a la vez, para ingresar varios ítems, etc. Puede ser invocado desde dentro de Net2Client (Por un usuario) o desde fuera (Por el público), es decir que pertenece tanto a las Interfaces Internas como Externas.

Nota

entramult.php es similar a entraint.php, pero permite el ingreso de varios registros a la vez, de una misma tabla. Es recomendable entender bien el funcionamiento de entraint.php, antes de ver este programa.

entrmult.php: Parámetros de entrada

Nombre Uso
BD La base de datos que se está utilizando
COKCodigo El código del COKO (">Ver anexo V). Solo es obligatorio, cuando el programa es llamado internamente, es decir cuando el Perfil no viene vacío
AAA

Código completo del servidor/base de datos/empresa/aplicación. Ejp: GWT101231

Tabla El nombre interno (Ej: PER, AR1). No puede ser AGE
Cantidad Cantidad de filas que vienen en la forma
ResultadoOK Dirección completa a la cual se debe ir si todo funcionó bien (Ej. http://www.comercio.com/confirmacionsuscripcion.htm). Si se omite, presenta una página en blanco
VerextendidoOK En caso de que el programa de ResultadoOK deba ser invocado desde verextendido, escribir SI
VersupOK En caso de que el programa de ResultadoOK deba ser invocado desde versup, escribir SI
ReturnCok Escribir el COKO que se desea que sea devuelto al programa invocado cuando todo funciona bien, (además del código del registro introducido), en el caso de que el programa sea llamado a través de versup o verextendido
Perfil El nombre del perfil que tiene autorización para ejecutar el programa. Si el programa es invocado desde Net2Client, debe omitirse este parámetro.
Idioma El código de tres letras del idioma. Si no viene se supone que es español (esp)
Agente El código de agente. Se pone una sola vez
Forma Nombre de la forma (Cuando el programa es llamado internamente). Debe incluirse si se quiere que el campo errado quede enfocado, cuando hay un error
Grabar Escribir NO, para que no se grabe (solo se ejecutan las validaciones)
Frame Nombre del frame en donde se quiere recibir el control de la página ResultadoOK. Si se omite, la página que invoca es reemplazada por la dirección especificada en ResultadoOK
MensajeExito Escribir NO, si no se desea que aparezca la notificación de que la actualización fue exitosa y escriba cualquier otro texto si desea que ese sea el mensaje
NombreCampo_i (Escribir uno por uno todos los campos) NombreCampo_i (i va desde 1 hasta Cantidad) son los nombres internos de los campos. Estos campos deben venir en variables tipo text, hidden, textarea, select… Ej: PERNombre_1 (variable PERNombre en la primera “fila”), PERLista5_3 (Variable PERLista5, en la tercera “fila”…)

Funcionamiento

El sistema validará que todos los campos obligatorios estén presentes, y que los campos de enlace tengan un valor válido que exista (a menos que sea cero). El código de Agente (Usuario) en caso de no venir, será puesto en cero, esto significa que el registro no tendrá dueño y podrá ser ubicado únicamente cuando se pidan los registros de "TODOS".

El parámetro “Frame” es de mucha utilidad y se recomienda su uso, sobre todo cuando la llamada es interna. Al usarlo se evita que se estén abriendo páginas nuevas.

Si hay cualquier, se da un mensaje de error para que el problema sea corregido, y no se graba ninguno de los registros. En caso de llamada interna, el campo con error es enfocado (para ello es indispensable incluir el parámetro “Forma”).

En caso de que el parámetro “Grabar” contenga la palabra “NO”, se hacen todas las validaciones, pero no se graban los registros. Esto puede ser muy útil cuando se van a ingresar datos a dos tablas y no se quiere hacerlo a menos que ambas estén bien. Si este es el caso, se puede hacer una doble pasada. La primera para validar que todo esté bien (con el parámetro “Grabar” en NO y la segunda para hacer realmente la grabación.

Cuando todo esté bien, los registros son introducidos en la tabla correspondiente, se graba en el log la dirección IP desde la cual fueron introducidos y se pasa el control al la página indicada en el campo "ResultadoOK", con el número del último registro añadido como parámetro.

Ejemplo

(Tomado de la Aplicación 00-705). Otros ejemplos en la 02-104 y en el Communicator (con múltiples pasadas)

Pantalla de entrada

Código Correspondiente

<body leftmargin="0" topmargin="0" marginwidth="0"    marginheight="0">
<table width="750" height="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr valign="top"> 
    <td colspan="2" align="left">
      <table width="750" border="0" cellpadding="0" cellspacing="10" bgcolor="#FFFFFF">
        <tr> 
          <td class="Textos"><p class="Titulos">Registro</p>
            <form name="forma" method="post" target='Mensajes' 
               action="../../../../<? echo"$COKDirectorio"; ?>/inter/entramult.php">
			<input type='hidden' name='COKCodigo' value='<? echo "$COKCodigo"; ?>'>
<input type='hidden' name='BD' value='00'>
<input type='hidden' name='AAA' value='GWT100705'> <input type='hidden' name='Tabla' value='PER'> <input type='hidden' name='Cantidad' value='0'> <input type='hidden' name='Forma' value='forma'> <div style='visibility:invisible'> <iframe height=1 width=1 name='Mensajes' id='Mensajes' frameborder='0'></iframe> </div> <table> <tr><td>Nombre</td><td>Apellidos</td><td>Email</td><td>Sexo</td></tr> <?php for ($i = 1; $i <= 4; $i++){ echo "<tr> <td><INPUT NAME='PERLinea1_$i' onChange=\"if('$i'>document.forma.Cantidad.value) document.forma.Cantidad.value=$i;\" TYPE='text' SIZE='35'></td> <td><INPUT NAME='PERNombre_$i' TYPE='text' SIZE='35'></td> <td><input name='PEREmail1_$i' type='text' size='35'></td> <td><select name='PERLista1_$i'> <option value='o/a' selected>---</option> <option value='o'>Masculino</option> <option value='a'>Femenino</option> </select></td> </tr>"; }; // Fin del for i ?> </table> <br><input name="submit" type="submit" value="Enviar"> </tr> </table> </body>

Explicación

Obsérvese como se llena el campo Cantidad, a través de un OnChange. Esto supone que las líneas se van llenando en orden. No es la forma más elegante ni segura de hacerlo y solo debe hacerse con usuarios entrenados. Sería conveniente enviar un mensaje indicando que las líneas deben llenarse en orden y sin dejar líneas en blanco.

Cuando hay campos que validar (por ejemplo los email o enlaces a elementos que deben existir), si no se hace una validación por JavaScript, es conveniente hacer una doble pasada, de forma de no grabar ni un registro hasta que todos estén bien.


Enlaces en el mismo capítulo:

Enlaces otros capítulos: