private string Procesar(string sPorDeadLockTimeout, string strDatos) //, string sMantenerResponsables { string sResul = "", sArrastraProy = ""; //, sToolTipResponsable = "" int idContrato = 0; int nNodoOrigen = 0, nNodoDestino = 0; bool bErrorDeadLockTimeout = false; int idFicepiEntrada = (int)Session["IDFICEPI_ENTRADA"]; try { string[] aDatos = Regex.Split(strDatos, "///"); CAMBIOESTRUCTURACONTRATO_AUX.DeleteMyAll(null, (int)Session["IDFICEPI_ENTRADA"]); #region Aparca en tabla auxiliar los datos a procesar foreach (string oCont in aDatos) { if (oCont == "") { continue; } string[] aCont = Regex.Split(oCont, "##"); ///aCont[0] = idContrato ///aCont[1] = idNodo_origen ///aCont[2] = idNodo_destino ///aCont[3] = ArrastraProy ///aCont[4] = Gestor origen ///aCont[5] = Gestor destino ///aCont[6] = Arrastrar gestor ///aCont[7] = Cliente HERMES origen ///aCont[8] = Cliente HERMES destino ///aCont[9] = Arrastra cliente ///aCont[10] = Responsable origen ///aCont[11] = Responsable destino ///aCont[12] = Comercial origen ///aCont[13] = Comercial destino ///aCont[14] = procesado ///aCont[15] = codigo_excepcion ///aCont[16] = recuperado (era un contrato aparcado) bool?bProcesado = null; if (aCont[14] != "") { bProcesado = (aCont[14] == "1") ? true : false; } CAMBIOESTRUCTURACONTRATO_AUX.Insertar(null, idFicepiEntrada, int.Parse(aCont[0]), aCont[3], int.Parse(aCont[1]), int.Parse(aCont[2]), //Nodo aCont[6], int.Parse(aCont[4]), int.Parse(aCont[5]), //Gestor aCont[9], int.Parse(aCont[7]), int.Parse(aCont[8]), //Cliente int.Parse(aCont[10]), int.Parse(aCont[11]), //Responsable int.Parse(aCont[12]), int.Parse(aCont[13]), //Comercial bProcesado); } #endregion #region Procesa los datos foreach (string oCont in aDatos) { try { if (oCont == "") { continue; } string[] aCont = Regex.Split(oCont, "##"); idContrato = int.Parse(aCont[0]); nNodoOrigen = int.Parse(aCont[1]); nNodoDestino = int.Parse(aCont[2]); sArrastraProy = aCont[3]; //if (aCont[9] == "1" || aCont[1] == aCont[2]) if (aCont[14] == "1") { //CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idContrato, nNodoDestino, aCont[3], true, "", idFicepiEntrada, null); CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, true, null, ""); continue; } if (nNodoOrigen == nNodoDestino) { string sAux = "El " + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + " origen y el destino no pueden ser el mismo"; CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, false, 1, sAux); continue; } #region Abrir conexión y transacción try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccionSerializable(oConn); } catch (Exception ex) { if (oConn.State == ConnectionState.Open) { Conexion.Cerrar(oConn); } sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex); return(sResul); } #endregion #region Cambio de nodo if (nNodoOrigen != nNodoDestino) { if (sArrastraProy != "") { DataSet dsPSN = PROYECTOSUBNODO.ObtenerContratantesCambioEstructuraDS(tr, idContrato, sArrastraProy); foreach (DataRow oPSN in dsPSN.Tables[0].Rows) { CAMBIOESTRUCTURAPSN.CambiarEstructuraAProyecto(tr, (int)oPSN["t305_idproyectosubnodo"], (int)oPSN["t303_idnodo"], nNodoDestino, true); //(sMantenerResponsables == "1") ? true : false); } dsPSN.Dispose(); } //CONTRATO.ModificarNodo(tr, idContrato, nNodoDestino); CONTRATO.Modificar(tr, idContrato, nNodoDestino, null, null, null, null); } #endregion #region Gestor if (aCont[4] != aCont[5]) { if (aCont[6] != "")//Arrastra Gestor de producción como responsable de proyecto { CONTRATO.SetResponsableProyectos(tr, idContrato, int.Parse(aCont[5])); } CONTRATO.Modificar(tr, idContrato, null, int.Parse(aCont[5]), null, null, null); } #endregion #region Cliente if (aCont[7] != aCont[8]) { if (aCont[9] != "")//Arrastra Cliente como cliente de proyecto { CONTRATO.SetClienteProyectos(tr, idContrato, int.Parse(aCont[8])); } CONTRATO.Modificar(tr, idContrato, null, null, int.Parse(aCont[8]), null, null); } #endregion #region Responsable de contrato if (aCont[10] != aCont[11]) { CONTRATO.Modificar(tr, idContrato, null, null, null, int.Parse(aCont[11]), null); } #endregion #region Comercial HERMES if (aCont[12] != aCont[13]) { CONTRATO.Modificar(tr, idContrato, null, null, null, null, int.Parse(aCont[13])); } #endregion //update proceso OK //CAMBIOESTRUCTURACONTRATO_AUX.Modificar(tr, idContrato, nNodoDestino, aCont[3], true, "", idFicepiEntrada, null); CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, true, null, ""); //throw (new Exception("Error tonto")); //Si es un contrato recuperado lo eliminamos de los aparcados if (aCont[16] == "S") { CAMBIOESTRUCTURACONTRATO.Delete(tr, idContrato); } Conexion.CommitTransaccion(tr); } catch (Exception ex) { Conexion.CerrarTransaccion(tr); //update proceso KO int?nError = null; if (ex.GetType().ToString() == "System.Data.SqlClient.SqlException") { nError = ((System.Data.SqlClient.SqlException)ex).Number; if (nError == 1505 || nError == -2) //DeadLock o Timeout { bErrorDeadLockTimeout = true; } } //CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idContrato, nNodoDestino, sArrastraProy, false, ex.Message, idFicepiEntrada, nError); CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, false, nError, ex.Message); if (bErrorDeadLockTimeout) { sResul = "OK@#@"; } else { sResul = "Error@#@" + Errores.mostrarError("Error al realizar el cambio de estructura de contrato.", ex); } } finally { Conexion.Cerrar(oConn); } }// fin foreach #endregion #region Recupera de la tabla auxiliar los datos procesados StringBuilder sb = new StringBuilder(); SqlDataReader dr = CAMBIOESTRUCTURACONTRATO_AUX.CatalogoDestino(null, idFicepiEntrada); sb.Append("<table id='tblDatos2' class='texto MM' style='WIDTH: 580px; table-layout:fixed;' cellspacing='0' cellpadding='0' border='0'>"); sb.Append("<colgroup><col style='width:160px;' /><col style='width:20px;' /><col style='width:80px;' />"); sb.Append("<col style='width:20px;' /><col style='width:80px;' /><col style='width:20px;' /><col style='width:80px;' />"); sb.Append("<col style='width:100px;' /><col style='width:20px;' /></colgroup>"); sb.Append("<tbody>"); while (dr.Read()) { sb.Append("<tr id='" + dr["t306_idcontrato"].ToString() + "' "); sb.Append("nodo_origen='" + dr["t303_idnodo_origen"].ToString() + "' "); sb.Append("nodo_destino='" + dr["t303_idnodo_destino"].ToString() + "' "); sb.Append("arrastraproy='" + dr["t778_arrastraproy"].ToString() + "' "); sb.Append("arrastra_gestor='" + dr["t778_arrastra_gestor"].ToString() + "' "); sb.Append("arrastra_cliente='" + dr["t778_arrastra_cliente"].ToString() + "' "); sb.Append("responsable_origen='" + dr["t314_idusuario_responsable_origen"].ToString() + "' "); sb.Append("resp_destino='" + dr["t314_idusuario_responsable_destino"].ToString() + "' "); sb.Append("nom_responsable='" + dr["Responsable"].ToString() + "' "); sb.Append("gestor_origen='" + dr["t314_idusuario_gestorprod_origen"].ToString() + "' "); sb.Append("gest_destino='" + dr["t314_idusuario_gestorprod_destino"].ToString() + "' "); sb.Append("cliente_origen='" + dr["t302_idcliente_origen"].ToString() + "' "); sb.Append("clie_destino='" + dr["t302_idcliente_destino"].ToString() + "' "); sb.Append("comercial_origen='" + dr["t314_idusuario_comercialhermes_origen"].ToString() + "' "); sb.Append("come_destino='" + dr["t314_idusuario_comercialhermes_destino"].ToString() + "' "); if (dr["t778_procesado"].ToString() == "") { sb.Append("procesado='' "); } else if ((bool)dr["t778_procesado"]) { sb.Append("procesado='1' "); } else { sb.Append("procesado='0' "); } sb.Append("excepcion=\"" + Utilidades.escape(dr["t778_excepcion"].ToString()) + "\" "); sb.Append("codigo_excepcion='" + dr["t778_codigoexcepcion"].ToString() + "' "); sb.Append("onclick='mm(event)' onmousedown='DD(event)' "); sb.Append("style='height:20px' >"); //Contrato sb.Append("<td style='padding-left:3px;'><nobr class='NBR W160' style='noWrap:true;'>" + int.Parse(dr["t306_idcontrato"].ToString()).ToString("#,###") + " - " + dr["t377_denominacion"].ToString().Replace((char)34, (char)39) + "</nobr></td>"); //Nodo sb.Append("<td></td>"); sb.Append("<td><nobr class='NBR W80' style='noWrap:true;'>" + dr["t303_denominacion"].ToString() + "</nobr></td>"); //Gestor sb.Append("<td></td>"); sb.Append("<td><nobr class='NBR W80' style='noWrap:true;'>" + dr["Gestor"].ToString() + "</nobr></td>"); //Cliente sb.Append("<td></td>"); sb.Append("<td><nobr class='NBR W80' style='noWrap:true;'>" + dr["t302_denominacion"].ToString() + "</nobr></td>"); //Comercial sb.Append("<td><nobr class='NBR W100' style='noWrap:true;'>" + dr["Comercial"].ToString() + "</nobr></td>"); //Resultado sb.Append("<td></td>"); sb.Append("</tr>"); } dr.Close(); dr.Dispose(); sb.Append("</tbody>"); sb.Append("</table>"); #endregion sResul = "OK@#@" + sb.ToString() + "@#@" + ((bErrorDeadLockTimeout) ? "1" : "0"); } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al realizar el cambio de estructura de contrato.", ex); } return(sResul); }
private string Procesar(string sPorDeadLockTimeout, string strDatos) //, string sMantenerResponsables { string sResul = "", sArrastraProy = ""; //, sToolTipResponsable = "" int idContrato = 0; int nNodoOrigen = 0, nNodoDestino = 0; bool bErrorDeadLockTimeout = false; int idFicepiEntrada = (int)Session["IDFICEPI_ENTRADA"]; StringBuilder sb = new StringBuilder(); try { string[] aDatos = Regex.Split(strDatos, "///"); #region Procesa los datos ///aCont[0] = idContrato ///aCont[1] = idNodo_origen ///aCont[2] = idNodo_destino ///aCont[3] = ArrastraProy ///aCont[4] = Gestor origen ///aCont[5] = Gestor destino ///aCont[6] = Arrastrar gestor ///aCont[7] = Cliente HERMES origen ///aCont[8] = Cliente HERMES destino ///aCont[9] = Arrastra cliente ///aCont[10] = Responsable origen ///aCont[11] = Responsable destino ///aCont[12] = Comercial origen ///aCont[13] = Comercial destino ///aCont[14] = procesado ///aCont[15] = codigo_excepcion ///aCont[16] = recuperado (era un contrato aparcado) foreach (string oCont in aDatos) { try { if (oCont == "") { continue; } string[] aCont = Regex.Split(oCont, "##"); idContrato = int.Parse(aCont[0]); nNodoOrigen = int.Parse(aCont[1]); nNodoDestino = int.Parse(aCont[2]); sArrastraProy = aCont[3]; #region Abrir conexión y transacción try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccionSerializable(oConn); } catch (Exception ex) { if (oConn.State == ConnectionState.Open) { Conexion.Cerrar(oConn); } sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex); return(sResul); } #endregion #region Gestor if (aCont[4] != aCont[5]) { if (aCont[6] != "")//Arrastra Gestor de producción como responsable de proyecto { CONTRATO.SetResponsableProyectos(tr, idContrato, int.Parse(aCont[5])); } CONTRATO.Modificar(tr, idContrato, null, int.Parse(aCont[5]), null, null, null); } #endregion #region Cliente if (aCont[7] != aCont[8]) { if (aCont[9] != "")//Arrastra Cliente como cliente de proyecto { CONTRATO.SetClienteProyectos(tr, idContrato, int.Parse(aCont[8])); } CONTRATO.Modificar(tr, idContrato, null, null, int.Parse(aCont[8]), null, null); } #endregion #region Responsable de contrato if (aCont[10] != aCont[11]) { CONTRATO.Modificar(tr, idContrato, null, null, null, int.Parse(aCont[11]), null); } #endregion #region Comercial HERMES if (aCont[12] != aCont[13]) { CONTRATO.Modificar(tr, idContrato, null, null, null, null, int.Parse(aCont[13])); } #endregion //Construyo un array para a la vuelta indicar para cada contrato si se ha procesado o no sb.Append(idContrato.ToString() + "#1#,"); Conexion.CommitTransaccion(tr); } catch (Exception ex) { Conexion.CerrarTransaccion(tr); //update proceso KO sb.Append(idContrato.ToString() + "#0#" + ex.Message + ","); int?nError = null; if (ex.GetType().ToString() == "System.Data.SqlClient.SqlException") { nError = ((System.Data.SqlClient.SqlException)ex).Number; if (nError == 1505 || nError == -2) //DeadLock o Timeout { bErrorDeadLockTimeout = true; } } if (bErrorDeadLockTimeout) { sResul = "OK@#@"; } else { sResul = "Error@#@" + Errores.mostrarError("Error al realizar el cambio de estructura de contrato.", ex); } } finally { Conexion.Cerrar(oConn); } }// fin foreach #endregion sResul = "OK@#@" + sb.ToString() + "@#@" + ((bErrorDeadLockTimeout) ? "1" : "0"); } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al realizar el cambio de estructura de contrato.", ex); } return(sResul); }