* Se notó que había un pequeño error con el SP que reciba los datos del usuario al iniciar sesión, esto se dio porque antes los tipos de usuario eran "administrador" y "normal", y en los xml nuevos ahora son "admin" y "cliente" por lo que hubo que hacer este cambio en el SP.
* Se actualizó el SP que selecciona los recibos de una propiedad, como este no se usó en la parte 1 del proyecto, no funcionaba. Se le actualizo para que reciba el numero de finca de una propiedad y con este busque el id interno de esta, usándolo para seleccionar todos sus recibos.
* Se conecto la pagina web del usuario cliente con el SP que muestra los recibos de una propiedad.
* Se conecto la página web del administrador con el SP que retorna todos los cambios de un tipo de entidad en un rango de fechas. Por ahora el json se muestra como texto plano, se esta investigando como mejorar esto.
Para separar los json se decidió tener una tabla por fechas, y al hacer click en alguna fecha se van a mostrar los cambios que se dieron ese día.
La información ahora se liga a la tabla de manera distinta. antes se le asignaba la tabla que devuelve el SP directamente al grid de la pagina web, ahora se crea una tabla temporal en el backend, los json se guardan en un mapa y en pantalla solo se muestran las fechas.
DataTable newTable = new DataTable();
DataColumn col1 = new DataColumn("Fecha De cambio");
newTable.Columns.Add(col1);
DataColumn col2 = new DataColumn("Usuario");
newTable.Columns.Add(col2);
DataColumn col3 = new DataColumn("Ip");
newTable.Columns.Add(col3);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
DataRow newRow = newTable.NewRow();
newRow["Fecha De cambio"] = dr[5];
newRow["Usuario"] = dr[6];
newRow["Ip"] = dr[7];
newTable.Rows.Add(newRow);
}
GridFechas.DataSource = newTable;
GridFechas.DataBind();
La tabla de fechas no muestra fechas repetidas, para esto se plantea usar un diccionario que usa como llaves las fechas, y de valores una lista con los json de cada cambio que se dio en esa fecha.
Tras investigar, se finalizo usando un diccionario para guardar las fechas, en los valores se guarda un objeto list, que contiene arreglos pares con el json antes y después del cambio.
Dictionary<string, List<string[]>> cambiosPorFecha;
Por cada cambio que devuelve la base de datos se revisa si la fecha ya existe en el diccionario, en caso de hacerlo se añade a su lista un arreglo con el json antes y después del cambio, así la tabla que ve el administrador no tiene fechas repetidas. También se valida si los json son nulos, en cuyo caso se guarda un string vacío.
while (dr.Read())
{
string fechaCambio = ((DateTime)dr[5]).ToString("dd/MM/yyyy");
string JsonAntes = dr[3] == DBNull.Value ? "" : (string)dr[3];
string JsonDespues = dr[4] == DBNull.Value ? "" : (string)dr[4];
string[] ambosJson = { JsonAntes, JsonDespues};
if (cambiosPorFecha.ContainsKey(fechaCambio))
{
cambiosPorFecha[fechaCambio].Add(ambosJson);
continue;
}
else
{
cambiosPorFecha[fechaCambio] = new List<string[]> { ambosJson };
}
DataRow newRow = newTable.NewRow();
newRow["Fecha De cambio"] = fechaCambio;
newRow["Usuario"] = dr[6];
newRow["Ip"] = dr[7];
newTable.Rows.Add(newRow);
}
+Problemas encontrados:
* Como añadir manualmente los datos que devuelve el SP a un gridview en la parte web. Este problema se resolvió creando un objeto DataTable, que funciona como una tabla temporal, acá se añaden solo las filas o columnas que queremos. Para hacer esto se debe crear un objeto SqlDataReader, que es el que guarda toda la información que devuelve el SP, con un ciclo while se llama a la función Read del objeto SqlDataReader hasta que no haya mas filas, y para acceder al valor de cada columna solo se usa el objeto como si fuera un arreglo con acceso aleatorio.
Una vez que en la tabla temporal se añadieron las filas que cumplen las condiciones, solo se agrega esta como el DataSource del gridView.
* Poco conocimiento sobre las estructuras disponibles en c#, por lo que se tuvo que investigar como crear, actualizar y acceder a diccionarios, listas, etc. Esto causo problemas para guardar los json con los cambios, al final se resolvió usando un diccionario que usa de llave la fecha, y de valor una lista de arreglos pares que contienen los dos json de cada cambio.
+ Se trabajo durante 4 horas.
Referencias:
No hay comentarios:
Publicar un comentario