private string Procesar(string sPorDeadLockTimeout, string strDatos, string sMantenerResponsables) { string sResul = ""; int idPSN = 0; int nNodoOrigen = 0, nNodoDestino = 0; bool bErrorDeadLockTimeout = false; try { string[] aDatos = Regex.Split(strDatos, "///"); CAMBIOESTRUCTURAPSN_AUX.DeleteMyAll(null, (int)Session["IDFICEPI_ENTRADA"]); #region Aparca en tabla auxiliar los datos a procesar foreach (string oProy in aDatos) { if (oProy == "") { continue; } string[] aProy = Regex.Split(oProy, "##"); ///aProy[0] = idPSN ///aProy[1] = idNodo_origen ///aProy[2] = idNodo_destino ///aProy[3] = procesado ///aProy[4] = codigo_excepcion bool?bProcesado = null; if (aProy[3] != "") { bProcesado = (aProy[3] == "1") ? true : false; } CAMBIOESTRUCTURAPSN_AUX.Insertar(null, int.Parse(aProy[0]), (aProy[2] == "") ? null : (int?)int.Parse(aProy[2]), bProcesado, (int)Session["IDFICEPI_ENTRADA"]); } #endregion #region Procesa los datos foreach (string oProy in aDatos) { try { if (oProy == "") { continue; } string[] aProy = Regex.Split(oProy, "##"); ///aProy[0] = idPSN ///aProy[1] = idNodo_origen ///aProy[2] = idNodo_destino ///aProy[3] = procesado ///aProy[4] = codigo_excepcion idPSN = int.Parse(aProy[0]); nNodoOrigen = int.Parse(aProy[1]); nNodoDestino = int.Parse(aProy[2]); if (aProy[3] == "1" || aProy[1] == aProy[2]) { CAMBIOESTRUCTURAPSN_AUX.Modificar(null, idPSN, nNodoDestino, true, "", (int)Session["IDFICEPI_ENTRADA"], null); continue; } if (sPorDeadLockTimeout == "1" && aProy[3] == "0" && aProy[4] != "1505" && aProy[4] != "-2") { continue; } if (!PROYECTO.EsReplicableByPSN(null, idPSN)) { CAMBIOESTRUCTURAPSN_AUX.Modificar(null, idPSN, nNodoDestino, false, "Proyecto no replicable", (int)Session["IDFICEPI_ENTRADA"], null); 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 CAMBIOESTRUCTURAPSN.CambiarEstructuraAProyecto(tr, idPSN, nNodoOrigen, nNodoDestino, (sMantenerResponsables == "1")? true:false); //update proceso OK CAMBIOESTRUCTURAPSN_AUX.Modificar(tr, idPSN, nNodoDestino, true, "", (int)Session["IDFICEPI_ENTRADA"], null); //throw new Exception("Pruebas"); Conexion.CommitTransaccion(tr); //Enviar la comunicación de los consumos borrados. //dsCB.Dispose(); } catch (Exception ex) { Conexion.CerrarTransaccion(tr); //update proceso KO bErrorDeadLockTimeout = false; 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 proyecto.", ex); } CAMBIOESTRUCTURAPSN_AUX.Modificar(null, idPSN, nNodoDestino, false, ex.Message, (int)Session["IDFICEPI_ENTRADA"], nError); return(sResul); } finally { Conexion.Cerrar(oConn); } }// fin foreach CAMBIOESTRUCTURAPSN.CorregirSubcontratacion(null); CAMBIOESTRUCTURAPSN.EliminarAESotrosNodos(null); #endregion #region Recupera de la tabla auxiliar los datos procesados StringBuilder sb = new StringBuilder(); SqlDataReader dr = CAMBIOESTRUCTURAPSN_AUX.CatalogoDestino(null, (int)Session["IDFICEPI_ENTRADA"]); sb.Append("<table id='tblDatos2' class='texto MM' style='WIDTH: 560px;'>"); sb.Append("<colgroup><col style='width:20px;' /><col style='width:20px;' /><col style='width:20px;' /><col style='width:290px;' /><col style='width:190px;' /><col style='width:20px;' /></colgroup>"); sb.Append("<tbody>"); while (dr.Read()) { sb.Append("<tr idPSN='" + dr["t305_idproyectosubnodo"].ToString() + "' "); sb.Append("idProy='" + dr["t301_idproyecto"].ToString() + "' "); sb.Append("categoria='" + dr["t301_categoria"].ToString() + "' "); sb.Append("cualidad='" + dr["t305_cualidad"].ToString() + "' "); sb.Append("estado='" + dr["t301_estado"].ToString() + "' "); sb.Append("nodo_origen='" + dr["t303_idnodo_origen"].ToString() + "' "); sb.Append("nodo_destino='" + dr["t303_idnodo_destino"].ToString() + "' "); if (dr["t777_procesado"].ToString() == "") { sb.Append("procesado='' "); } else if ((bool)dr["t777_procesado"]) { sb.Append("procesado='1' "); } else { sb.Append("procesado='0' "); } sb.Append("excepcion=\"" + Utilidades.escape(dr["t777_excepcion"].ToString()) + "\" "); sb.Append("codigo_excepcion='" + dr["t777_codigoexcepcion"].ToString() + "' "); sb.Append("onclick='mm(event)' onmousedown='DD(event)' "); sb.Append("style='height:20px' >"); sb.Append("<td></td>"); sb.Append("<td></td>"); sb.Append("<td></td>"); sb.Append("<td style='padding-left:3px;'><nobr class='NBR W280' style='noWrap:true;' title=\"cssbody=[dvbdy] cssheader=[dvhdr] header=[<img src='../../../../images/info.gif' style='vertical-align:middle' /> Información] body=[<label style='width:70px;'>Proyecto:</label>" + int.Parse(dr["t301_idproyecto"].ToString()).ToString("#,###") + " - " + dr["t301_denominacion"].ToString().Replace((char)34, (char)39) + "<br><label style='width:70px;'>Responsable:</label>" + int.Parse(dr["t314_idusuario_responsable"].ToString()).ToString("#,###") + " - " + dr["Responsable"].ToString().Replace((char)34, (char)39) + "<br><label style='width:70px;'>Cliente:</label>" + dr["t302_denominacion"].ToString().Replace((char)34, (char)39) + "] hideselects=[off]\">" + int.Parse(dr["t301_idproyecto"].ToString()).ToString("#,###") + " - " + dr["t301_denominacion"].ToString().Replace((char)34, (char)39) + "</nobr></td>"); sb.Append("<td><nobr class='NBR W180' style='noWrap:true;' title=\"cssbody=[dvbdy] cssheader=[dvhdr] header=[<img src='../../../../images/info.gif' style='vertical-align:middle' /> Información] body=[<label style='width:60px;'>" + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + ":</label>" + dr["t303_denominacion"].ToString().Replace((char)34, (char)39) + "] hideselects=[off]\">" + dr["t303_denominacion"].ToString() + "</nobr></td>"); sb.Append("<td></td></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 proyecto.", 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"]; 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); }