private string Grabar(string sCodPE, string sCadena) {//En el parametro de entrada tenemos una lista de codigos de personas separados por comas //Además de grabar en el pool hay que asignarlos como RTPTs en todos los PT del PE string sCad, sResul = "", sCadPTs, sProf, sOp; //short iCodCR; int iCodPE, iCodPT, idRecurso; SqlConnection oConn = null; SqlTransaction tr = null; try { iCodPE = int.Parse(sCodPE); oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccion(oConn); //Borrar los integrantes existentes //POOLRPT.DeleteByProyecto(tr, iCodPE); if (sCadena != "") {//Con la cadena generamos una lista y la recorremos para grabar cada elemento //Obtengo una cadena con los proyectos técnicos del proyecto económico sCadPTs = PROYECTO.ObtenerPTs(iCodPE); string[] aPTs = Regex.Split(sCadPTs, @"@#@"); //Para cada integrante del pool, lo intentamos insertar en cada proyecto técnico string[] aProf = Regex.Split(sCadena, @"##"); for (int i = 0; i < aProf.Length - 1; i++) { sCad = aProf[i]; if (sCad != "") { string[] aTareas = Regex.Split(sCad, @","); sOp = aTareas[0]; sProf = aTareas[1]; if (sProf != "") { idRecurso = int.Parse(sProf); switch (sOp) { case "I": POOLRPT.Insert(tr, iCodPE, idRecurso); for (int j = 0; j < aPTs.Length - 1; j++) { //Si el recurso no es RTPT lo inserto sCad = aPTs[j]; if (sCad != "") { iCodPT = int.Parse(sCad); if (!RTPT.ExisteRTPT(tr, iCodPT, idRecurso)) { RTPT.Insert(tr, iCodPT, idRecurso); } } } break; case "D": POOLRPT.Delete(tr, iCodPE, idRecurso); break; } } } }//for } Conexion.CommitTransaccion(tr); //sResul = "OK@#@" + strTablaHTMLIntegrantes; sResul = "OK@#@";// +sCad; } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al grabar la lista de integrantes", ex); } finally { Conexion.Cerrar(oConn); } return(sResul); }