public static string Grabar(string sGrupoFuncional, string sIntegrantes)
        {   //En el primer parametro de entrada tenemos codGf#descGF
            //y en el segundo una lista de codigos de personas separados por comas (persona#responsable,)
            string         sCad, sResul = "", sDesGP, sOperacion, sCodGP, sCodRed;
            bool           bAlta = false;
            int            iEmpleado, iPos;
            SqlConnection  oConn = null;
            SqlTransaction tr    = null;

            try
            {
                //Recojo el código de GF
                iPos   = sGrupoFuncional.IndexOf("#");
                sCodGP = sGrupoFuncional.Substring(0, iPos);
                sDesGP = Utilidades.unescape(sGrupoFuncional.Substring(iPos + 1));
                //Abro transaccion
                oConn = Conexion.Abrir();
                tr    = Conexion.AbrirTransaccionSerializable(oConn);

                if (sCodGP != "")
                {
                    GrupoProf.ModificarGrupo(null, sCodGP, sDesGP);
                }
                else
                {
                    bAlta  = true;
                    sCodGP = GrupoProf.InsertarGrupo(null, sDesGP);
                    HttpContext.Current.Session["nIdGrupo"] = sCodGP;
                    GrupoProf.InsertarProfesional(tr, sCodGP, int.Parse(HttpContext.Current.Session["IDFICEPI_PC_ACTUAL"].ToString()));
                }
                ArrayList aListDestinatarios = new ArrayList();

                //Borrar los integrantes existentes
                //GrupoFun.BorrarIntegrantes(tr,iCodGF);
                if (sIntegrantes == "")
                {//Tenemos lista vacía. No hacemos nada
                }
                else
                {//Con la cadena generamos una lista y la recorremos para grabar cada elemento
                    string[] aTareas = Regex.Split(sIntegrantes, @",");

                    for (int i = 0; i < aTareas.Length - 1; i++)
                    {
                        sCad = aTareas[i];
                        if (sCad != "")
                        {
                            string[] aElem = Regex.Split(sCad, @"##");
                            sOperacion = aElem[0];
                            iEmpleado  = System.Convert.ToInt32(aElem[1]);
                            sCodRed    = aElem[2];
                            if (bAlta && int.Parse(HttpContext.Current.Session["IDFICEPI_PC_ACTUAL"].ToString()) == iEmpleado)
                            {
                                continue;
                            }

                            //GrupoFun.InsertarIntegrante(tr, iCodGF, iEmpleado, iResponsable);
                            switch (sOperacion)
                            {
                            case "D":
                                GrupoProf.BorrarProfesional(tr, sCodGP, iEmpleado);
                                aListDestinatarios.Add(sCodRed);
                                break;

                            case "I":
                                GrupoProf.InsertarProfesional(tr, sCodGP, iEmpleado);
                                break;
                            } //switch
                        }
                    }         //for
                }
                //Cierro transaccion
                Conexion.CommitTransaccion(tr);

                string sTexto  = "";
                string sAsunto = "";
                string sTO     = "";

                sAsunto = "Borrado de un integrante de un grupo de profesionales";
                sTexto  = @" <LABEL class='TITULO'>Informarle que el profesional " + HttpContext.Current.Session["APELLIDO1"] + " " + HttpContext.Current.Session["APELLIDO2"] + ", " + HttpContext.Current.Session["NOMBRE"] + ", te ha borrado del grupo '" + sDesGP + "' del que eres integrante. </LABEL>";

                ArrayList aListCorreo = new ArrayList();

                for (int i = 0; i < aListDestinatarios.Count; i++)
                {
                    sTO = (string)aListDestinatarios[i];
                    string[] aMail = { sAsunto, sTexto, sTO, "" };
                    aListCorreo.Add(aMail);
                }

                Correo.EnviarCorreosCAUDEF(aListCorreo);
                sCad   = DetalleIntegrantes(sCodGP);
                sResul = "OK@#@" + sCodGP + "@#@" + sCad;
            }
            catch (Exception ex)
            {
                Conexion.CerrarTransaccion(tr);
                sResul = "Error@#@" + Errores.mostrarError("Error al grabar", ex);
            }
            finally
            {
                Conexion.Cerrar(oConn);
            }
            return(sResul);
        }
        public static string Eliminar(string strGrupo)
        {
            string         sResul = "";
            SqlConnection  oConn  = null;
            SqlTransaction tr     = null;
            SqlDataReader  dr     = null;

            #region abrir conexión y transacción
            try
            {
                oConn = Conexion.Abrir();
                tr    = Conexion.AbrirTransaccion(oConn);
            }
            catch (Exception ex)
            {
                if (oConn.State == ConnectionState.Open)
                {
                    Conexion.Cerrar(oConn);
                }
                throw (new Exception("Error al abrir la conexión. " + ex.Message));
            }
            #endregion

            try
            {
                string[]  aGP                = Regex.Split(strGrupo, "##");
                string    sDenomGrupo        = "";
                ArrayList aListDestinatarios = new ArrayList();
                foreach (string oGP in aGP)
                {
                    if (oGP != "")
                    {
                        //Leo integrantes para notificar correo
                        dr = SUPER.Capa_Datos.GrupoProf.Integrantes(oGP);
                        while (dr.Read())
                        {
                            aListDestinatarios.Add(dr["t001_codred"].ToString());
                        }

                        dr.Close();
                        dr.Dispose();
                        //Leo denominación grupo
                        GrupoProf miGP = new GrupoProf();
                        miGP.Obtener(oGP);
                        sDenomGrupo = miGP.sDesGP;
                        miGP        = null;

                        GrupoProf.BorrarGrupo(tr, oGP);
                    }
                }

                Conexion.CommitTransaccion(tr);

                string sTexto  = "";
                string sAsunto = "";
                string sTO     = "";

                sAsunto = "Borrado de equipo de profesionales";
                //sTexto = @" <LABEL class='TITULO'>Informarle que el profesional " + HttpContext.Current.Session["APELLIDO1"] + " " + HttpContext.Current.Session["APELLIDO2"] + ", " + HttpContext.Current.Session["NOMBRE"] + ", ha procedido a borrar el grupo '" + sDenomGrupo + "' del que eres integrante. </LABEL>";
                sTexto = @" <LABEL class='TITULO'>El profesional " + HttpContext.Current.Session["APELLIDO1"] + " " + HttpContext.Current.Session["APELLIDO2"] + ", " + HttpContext.Current.Session["NOMBRE"] + ", ha procedido a borrar el grupo '" + sDenomGrupo + "' del que eres integrante. </LABEL>";

                ArrayList aListCorreo = new ArrayList();

                for (int i = 0; i < aListDestinatarios.Count; i++)
                {
                    sTO = (string)aListDestinatarios[i];
                    string[] aMail = { sAsunto, sTexto, sTO, "" };
                    aListCorreo.Add(aMail);
                }

                Correo.EnviarCorreosCAUDEF(aListCorreo);
            }
            catch (Exception ex)
            {
                Conexion.CerrarTransaccion(tr);
                sResul = Errores.mostrarError("Error al eliminar el grupo de profesionales.", ex);
            }
            finally
            {
                Conexion.Cerrar(oConn);
                if (sResul != "")
                {
                    throw (new Exception(sResul));
                }
            }

            // Enviar correos a los integrantes del grupo

            return("OK@#@" + sResul);
        }