private void pPostEndPoint(DataTable datos, string llave, string node, Data.clsSincronizar objDal, string strSpu, Int64 idTablaSincronizada) { string JSon = ""; string EndPoint = ""; clsParametros param = new clsParametros(); try { //OBTIENE LOS DATOS DEL NODO EndPoint = param.FireBaseDb + "/" + param.FireBaseCoreData; FirebaseDB firebaseDBGet = new FirebaseDB(EndPoint); // se recorre foreach (DataRow row in datos.Rows) { try { DataTable dtRow = datos.Clone(); dtRow.LoadDataRow(row.ItemArray, true); FirebaseDB firebaseDBGetNode = firebaseDBGet.NodePath(node + "/" + row[llave].ToString()); FirebaseResponse getResponse = firebaseDBGetNode.Get(); if (getResponse.JSONContent != "null") { // el contenido trae datos del GET // elimina el nodo FirebaseResponse delResponse = firebaseDBGetNode.Delete(); if (delResponse.Success) { funciones.Mensaje("response delete existing :" + row[llave].ToString()); } } JSon = JsonConvert.SerializeObject(funciones.DatatableToDictionary(dtRow, llave), Newtonsoft.Json.Formatting.Indented); ////post FirebaseDB firebaseDB = new FirebaseDB(EndPoint); FirebaseDB firebaseDBNode = firebaseDB.NodePath(node); FirebaseResponse patchResponse = firebaseDBNode.Patch(JSon); if (patchResponse.Success) { funciones.Mensaje("datos grabados :" + row[llave].ToString()); //marcar la fila en la base de datos para no volver a sincronizar //marca la tabla para no volverla a sincronizar Boolean actulizado = objDal.fnSet(strSpu, idTablaSincronizada, Convert.ToInt64(row["id_sinc_proc"].ToString())); } else { funciones.Mensaje("response failed :" + patchResponse.ErrorMessage.ToString()); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } }
// lee los datos de una ubicacion non-sql y la graba en el servidor local private void pPostLocalFromNonSql(string node, string strSpi, string strOrdenParametros) { string EndPoint = ""; clsParametros param = new clsParametros(); Data.clsSincronizar objDal = new Data.clsSincronizar(param.StringDeConexion); try { //OBTIENE LOS DATOS DEL NODO EndPoint = param.FireBaseDb + "/" + param.FireBaseAppData; FirebaseDB firebaseDBGet = new FirebaseDB(EndPoint); FirebaseDB firebaseDBGetNode = firebaseDBGet.NodePath(node); FirebaseResponse getResponse = firebaseDBGetNode.Get(); if (getResponse.JSONContent != "null") { //recpuera los valores del nodo string jsonstr = getResponse.JSONContent.ToString(); JObject Obj = JObject.Parse(jsonstr); //recorre los valores del nodo en arreglos foreach (JToken arreglo in Obj.SelectToken("$")) { if (arreglo.HasValues) { //se recorren los cada uno de las llaves nivel 2 foreach (JObject tupla in arreglo.Children <JObject>()) { try { string LlaveNivel1 = tupla.Path.ToString(); //recorre los valores foreach (JProperty prop in tupla.Properties()) { string LlaveNivel2 = prop.Name; JObject item = JObject.Parse(prop.Value.ToString()); List <OleDbParameter> Parametros = new List <OleDbParameter>(); foreach (JProperty registro in item.Properties()) { string campo = registro.Name; string tipoDato = registro.Value.Type.ToString().ToUpper(); OleDbParameter itemParam = new OleDbParameter(); itemParam.ParameterName = "@" + campo; switch (tipoDato) { case "FLOAT": itemParam.OleDbType = OleDbType.Decimal; break; case "STRING": itemParam.OleDbType = OleDbType.VarChar; break; case "OBJECT": itemParam.OleDbType = OleDbType.VarChar; break; case "INTEGER": itemParam.OleDbType = OleDbType.Integer; break; default: break; } itemParam.Value = (tipoDato == "OBJECT") ? registro.Value.ToString() : registro.Value; Parametros.Add(itemParam); } if (Parametros.Count != 0) { DataTable dtResultado = new DataTable(); Int64 RegistroInsertados = 0; string strCodAccion = ""; dtResultado = OrdenarParametrosYGrabar(Parametros, LlaveNivel1, LlaveNivel2, strOrdenParametros, objDal, strSpi, node); RegistroInsertados = Convert.ToInt64(dtResultado.Rows[0]["REGISTROS"].ToString()); strCodAccion = dtResultado.Rows[0]["COD_ACCION"].ToString(); if (RegistroInsertados != 0) { funciones.Mensaje("Registros (" + RegistroInsertados.ToString() + ") grabados de :" + node + " | " + LlaveNivel1.ToString() + " | " + LlaveNivel2.ToString()); } // acciones a tomar con los nodos despues de insertados los datos switch (strCodAccion) { case "ELIMINAR_SI": //elimina el insertado FirebaseDB firebaseDBNode = firebaseDBGet.NodePath(node + "/" + LlaveNivel1 + "/" + LlaveNivel2); FirebaseResponse delResponse = firebaseDBNode.Delete(); if (delResponse.Success) { funciones.Mensaje("elimina datos en :" + node + "|" + LlaveNivel1.ToString() + "|" + LlaveNivel2.ToString()); } break; default: break; } } } } // try for each catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR AL PROCESAR : " + arreglo.ToString() + " Exeption " + ex.ToString()); } // catch } // for each jobj tupla } // if arreglo has values } // for each arreglo in ojb } // if get response else { funciones.Mensaje("Sin datos que actualizar :" + node); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } }
public void CorrimientoAsignacion() { string EndPoint = ""; clsParametros param = new clsParametros(); funciones.Mensaje("PROC_CORRIMIENTO_ASIGNACION Corrimiento por reasignación de fechas"); try { //OBTIENE LOS DATOS DEL NODO EndPoint = param.FireBaseDb + "/" + param.FireBaseAppData + "/employee_tasks"; FirebaseDB firebaseDBGet = new FirebaseDB(EndPoint); FirebaseResponse getResponse = firebaseDBGet.Get(); if (getResponse.JSONContent != "null") { //con datos //recpuera los valores del nodo string jsonstr = getResponse.JSONContent.ToString(); JObject Obj = JObject.Parse(jsonstr); //recorre los valores del nodo en arreglos foreach (JToken arreglo in Obj.SelectToken("$")) { if (arreglo.HasValues) { //se recorren los cada uno de las llaves nivel 2 foreach (JObject tupla in arreglo.Children <JObject>()) { try { string LlaveNivel1 = tupla.Path.ToString(); //recorre los valores foreach (JProperty prop in tupla.Properties()) { string LlaveNivel2 = prop.Name; JObject item = JObject.Parse(prop.Value.ToString()); int finalizado = 0; List <OleDbParameter> Parametros = new List <OleDbParameter>(); //determina si la tarea esta finalizada //para hacer el corrimiento finalizado = Convert.ToInt16(item.Property("finalizado").Value.ToString()); if (finalizado == 0) { //verifica la fecha string fechaInicio = item.Property("fecha_inicio").Value.ToString(); string fechaParse = fechaInicio.Substring(0, 4) + "-" + // año fechaInicio.Substring(4, 2) + "-" + // mes fechaInicio.Substring(6, 2) + " " + // dia fechaInicio.Substring(9, 8); // hora DateTime fechaMov; DateTime.TryParse(fechaParse, out fechaMov); Double dias = Math.Floor((DateTime.Now - fechaMov).TotalDays); if (dias > 0) { // existe corrimiento //leva los dias la fecha del dia fechaMov = fechaMov.AddDays(Convert.ToInt64(dias)); //parsea para devolver datos string fechaNueva = fechaMov.ToString("yyyyMMdd HH:MM:ss"); item.Property("fecha_inicio").Value = fechaNueva; string ItemNuevo = item.ToString(); ////put (solo remplaza) FirebaseDB firebaseDB = new FirebaseDB(EndPoint); FirebaseDB firebaseDBNode = firebaseDB.NodePath(LlaveNivel1 + "/" + LlaveNivel2); FirebaseResponse putResponse = firebaseDBNode.Put(ItemNuevo); if (putResponse.Success) { funciones.Mensaje("Se procesó una reasignación por fecha anterior " + LlaveNivel1 + "/" + LlaveNivel2); } else { funciones.Mensaje("response failed :" + putResponse.ErrorMessage.ToString()); } } //if (dias > 0) } //if (finalizado == 0) } // foreach (JProperty prop in tupla.Properties()) } // try for each catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR AL PROCESAR : " + arreglo.ToString() + " Exeption " + ex.ToString()); } // catch } // for each jobj tupla } // if arreglo has values } // for each arreglo in ojb } //if (getResponse.JSONContent != "null") } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); } }
public void CoreData() { try { funciones.Mensaje("SYNC_CORE_DATA Sincronizando a CORE_DATA"); //leer las tablas que necesitan actualizarse clsParametros clsParametros = new clsParametros(); string StringDeConexion = clsParametros.StringDeConexion; DataTable dtResultado = new DataTable(); Data.clsSincronizar objDal = new Data.clsSincronizar(StringDeConexion); dtResultado = objDal.fnGetTablasSincronizar(); if (dtResultado != null && dtResultado.Rows.Count > 0) { //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase foreach (DataRow row in dtResultado.Rows) { Int64 id = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0; string strSpc = row["nombre_spc"] != DBNull.Value ? Convert.ToString(row["nombre_spc"]) : ""; string strSpu = row["nombre_spu"] != DBNull.Value ? Convert.ToString(row["nombre_spu"]) : ""; string strTbl = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : ""; string strLlave = row["llave"] != DBNull.Value ? Convert.ToString(row["llave"]) : ""; string strNode = row["node_destino"] != DBNull.Value ? Convert.ToString(row["node_destino"]) : ""; if (strSpc == "" || strTbl == "" || strLlave == "" || strNode == "" || strSpu == "") { funciones.Mensaje("No se especifico nombre de tabla, SPC, llave o Node verifique "); } else { funciones.Mensaje("Leyendo datos de: " + strTbl + ' ' + strSpc); //se manda a llamar el spc DataTable dtDatos = new DataTable(); dtDatos = objDal.fnGetDatosGenericos(strSpc); if (dtDatos != null && dtDatos.Rows.Count > 0) { //tiene datos los manda a EndPoint //dtDatos -- lleva en conjunto de datos pendiente de sincronizar, lo que devuelve el spc //strLlave -- lo que usara para grabar los datos en firebase como llave, es lo mismo que esta en el Db2 //obDal -- servira para llamar el spu //strSpu -- spu de actualización de la tupla sincronizada //id -- id del proceso o tabla que se esta sincronizando corresponde a app_tbl_tablas_sinc pPostEndPoint(dtDatos, strLlave, strNode, objDal, strSpu, id); } else { funciones.Mensaje("Sin datos en " + strSpc); } } } } else { funciones.Mensaje("Sin datos que sincronizar"); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); //throw new Exception(lStrMethodName, ex); } //Console.ReadLine(); }
public void RemoteToLocal() { try { funciones.Mensaje("SYNC_REMOTE_LOCAL Sincronizando de REMOTE a LOCAL"); //leer las tablas que necesitan actualizarse clsParametros clsParametros = new clsParametros(); string StringDeConexionRemoto = clsParametros.StringDeConexionRemoto; DataTable dtResultado = new DataTable(); Data.clsSincronizar objDal = new Data.clsSincronizar(StringDeConexionRemoto); dtResultado = objDal.fnGetTablasSincronizar(); if (dtResultado != null && dtResultado.Rows.Count > 0) { //recorre la tabla para llamar cada sp y enviar a sincronizar a firebase foreach (DataRow row in dtResultado.Rows) { Int64 id = row["id"] != DBNull.Value ? Convert.ToInt64(row["id"]) : 0; string strSpc = row["nombre_spc"] != DBNull.Value ? Convert.ToString(row["nombre_spc"]) : ""; string strSpu = row["nombre_spu"] != DBNull.Value ? Convert.ToString(row["nombre_spu"]) : ""; string strTbl = row["objeto"] != DBNull.Value ? Convert.ToString(row["objeto"]) : ""; string strSpi = row["nombre_spi_destino"] != DBNull.Value ? Convert.ToString(row["nombre_spi_destino"]) : ""; if (strSpc == "" || strTbl == "" || strSpi == "" || strSpu == "") { funciones.Mensaje("No se especifico nombre de tabla, SPC, spi, spu en tabla sincronizacion remota "); } else { funciones.Mensaje("Leyendo datos remotos de: " + strTbl + ' ' + strSpc); //se manda a llamar el spc DataTable dtDatos = new DataTable(); dtDatos = objDal.fnGetDatosGenericos(strSpc); if (dtDatos != null && dtDatos.Rows.Count > 0) { //pega los datos en el servidor local pPostLocal(id, dtDatos, strSpi, strSpu); } else { funciones.Mensaje("Sin datos en " + strSpc); } } } } else { funciones.Mensaje("Sin datos que sincronizar"); } } catch (Exception ex) { string lStrMethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; funciones.Mensaje("ERR: " + lStrMethodName + ' ' + ex.ToString()); //throw new Exception(lStrMethodName, ex); } funciones.Mensaje("Fin de la sincronizacion "); //Console.ReadLine(); }