//======================================================================= // Instituto Costarricense de Acueductos y Alcantarillados. - 2012 // Sistema de Autoevaluación para Control Interno // // Explicación de los contenidos del archivo. // ========================================================================= // Historial // PERSONA DIA – MES - AÑO DESCRIPCIÓN // Pedro Leiva Cerdas 10 – Febrero - 2014 Entrega del sistema. (Versión original del archivo) // Clase para trabajar con VISION 2020 // //====================================================================== // Derechos Reservados (C) 2012 AyA. // ESTE CÓDIGO ES PROVEÍDO “TAL CUAL ES” SIN GARANTÍA ALGUNA // DE NINGÚN TIPO, SEA IMPLICITA O EXPLICITA. // NO SE PERMITE SU REPRODUCCIÓN PARCIAL O TOTAL, NI SU COMERCIALIZACIÓN //====================================================================== using System; using BASEBL; // Para usar a enumsBL using System.IO; using System.Web; using System.Text; using System.Data; using System.Linq; using System.Web.UI; using System.Collections; using System.Configuration; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Collections.Generic; using System.Security.Cryptography; using System.Text.RegularExpressions; using System.Net; public partial class Documento : General { //Se hace referencia del WS vision2020serverapionline.wsapi wsVision2020; public string const_strUsuario = ConfigurationSettings.AppSettings["const_strUsuario"].ToString(); public string const_strClave = ConfigurationSettings.AppSettings["const_strClave"].ToString(); public string const_strArchivadores = ConfigurationSettings.AppSettings["const_strArchivadores"].ToString(); public string const_strGaveta = ConfigurationSettings.AppSettings["const_strGaveta"].ToString(); public string strIdGaveta = ""; //para este sistema sevri simpre serà ="00000035" pero mejor lo buscamos public string const_strLlaves = ConfigurationSettings.AppSettings["const_strLlaves"].ToString(); //para este sistema SDI estas son las llaves por default //public const string const_strUsuario = "sdaa"; //public const string const_strClave = "usersdaa"; //public const string const_strGaveta = "Disponibilidades"; /// /// Método que se utiliza para retornar un DS con el àrbol Estructura /// /// public DataSet dsEstructura(string strUsuario, string strClave, bool bolMappingTypeAttribute) { DataSet dsArbolEstructura = new DataSet(); try { wsVision2020 = new vision2020serverapionline.wsapi(); dsArbolEstructura = wsVision2020.Arbol_Estructura(strUsuario, strClave, bolMappingTypeAttribute); } catch (Exception ex) { return null; } return dsArbolEstructura; } /// /// Método que se utiliza para retornar el id de la Carpeta o sea la DEPENDENCIA que nos interesa /// si retorna un null es que no encontro la Carpeta /// /// private string Id_Carpeta(string strLlaves, string strValores) { DataSet dsCarpeta = new DataSet(); string strId_Carpeta = null; try { wsVision2020 = new vision2020serverapionline.wsapi(); dsCarpeta = wsVision2020.Devuelve_Ids_Gaveta_Carpeta(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strLlaves, strValores); if (dsCarpeta.Tables[0].Rows.Count > 0) { strId_Carpeta = dsCarpeta.Tables[0].Rows[1]["valor"].ToString(); } } catch (Exception ex) { return strId_Carpeta; } return strId_Carpeta; } /// /// Método que se utiliza para retornar un DS con la lista de los archivos soportados /// /// public DataSet dsLista_archivos_soportados() { DataSet dsLista_archivos_soportados = new DataSet(); try { wsVision2020 = new vision2020serverapionline.wsapi(); dsLista_archivos_soportados = wsVision2020.Lista_De_Archivos_Soportados(); } catch (Exception ex) { return null; } return dsLista_archivos_soportados; } /// /// Método que se utiliza para retornar un DS con la lista de las carpetas /// Ejemplo: wsVision2020.Buscar_Carpetas("sisproap", "usersisproap", "Sistemas", "sisproap", "", "Dependencias|Region|Area|Sistema|Estacion|Equipo|Horimetro|Usuario Sistema"); /// /// private DataSet dsLista_Carpetas(string strLlaves, string strValoresLlaves) { DataSet dsBuscar_Carpetas = new DataSet(); try { // Para el caso de sisproap siempre el strId_Gaveta = 0000003N wsVision2020 = new vision2020serverapionline.wsapi(); dsBuscar_Carpetas = wsVision2020.Buscar_Carpetas(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strIdGaveta, strLlaves, strValoresLlaves); } catch (Exception ex) { throw ex; } return dsBuscar_Carpetas; } /// /// Método que se utiliza para retornar un DS con la lista de documentos de una carpeta /// Ejemplo: DataSet dsLista_De_Documentos = wsVision2020.Lista_De_Documentos(dsBuscar_Carpetas.Tables[0].Rows[0]["IDE_REG"].ToString()); /// /// private DataSet dsLista_Simple_Documentos_Carpeta(string strId_Carpeta) { DataSet dsLista_De_Documentos = new DataSet(); try { wsVision2020 = new vision2020serverapionline.wsapi(); dsLista_De_Documentos = wsVision2020.Lista_De_Documentos(strId_Carpeta); } catch (Exception ex) { throw ex; } return dsLista_De_Documentos; } /// /// Método que retorna un string con la URL de un id_objeto /// /// public string strURLArchivo(string strID_Carpeta, string strIde_obj) { DataSet dsObtener_URLArchivo = new DataSet(); string strURLArchivo = ""; try { wsVision2020 = new vision2020serverapionline.wsapi(); strURLArchivo = wsVision2020.Descargar_Documento(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strID_Carpeta, strIde_obj, true); } catch (Exception ex) { return ""; } return strURLArchivo; } /// /// Método que retorna un string con la descripción del archivo /// /// public string strDescripcionArchivo(string strIde_obj) { DataSet dsObtener_DescripcionArchivo = new DataSet(); string strDescripcionArchivo = ""; try { wsVision2020 = new vision2020serverapionline.wsapi(); dsObtener_DescripcionArchivo = wsVision2020.Lista_Notas_Documento(const_strUsuario, const_strClave, strIde_obj); if (dsObtener_DescripcionArchivo.Tables.Count > 0) { strDescripcionArchivo = dsObtener_DescripcionArchivo.Tables[0].Rows[0]["Nota"].ToString(); } } catch (Exception ex) { return "Sin descripción"; } return strDescripcionArchivo; } /// /// Método que inserta una nota al documento /// /// public bool bolInsertar_DescripcionArchivo(string strIde_carpeta, string strIde_objeto, string strDescripcion_obj) { bool Respuesta = false; try { wsVision2020 = new vision2020serverapionline.wsapi(); wsVision2020.Insertar_Nota_Documento(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strIde_carpeta, strIde_objeto, strDescripcion_obj); Respuesta = true; } catch (Exception ex) { return Respuesta; } return Respuesta; } /// /// Método que inserta una nota a la carpeta del riesgo, esto es para darle un nombre conocido a cada una de ellas /// /// public bool bolInsertar_DescripcionCarpeta(string strArchivadores, string strIde_carpeta, string strDescripcion_obj) { bool Respuesta = false; try { wsVision2020 = new vision2020serverapionline.wsapi(); wsVision2020.Insertar_Nota_Expediente(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strIde_carpeta, strDescripcion_obj); Respuesta = true; } catch (Exception ex) { return Respuesta; } return Respuesta; } /// /// Este método devuelve un DS completo con la siguiente estructura (invoca los WebService necesarios) ///--------------------------------------------------------------------------------------------------------------------- /// Dependencia | ide_reg | ide_obj | des_obj | archivado | MB | ext_tipo | URL | ESTADO ///---------------------------------------------------------------------------------------------------------------------- /// /// estructura de la llave: ejemplo:"Dependencias|Region|Area|Sistema|Estacion|Equipo|Horimetro|Usuario Sistema" /// valores de la llave:ejemplo: 1|2|3|1|1|318|sisproap /// /// public DataSet dsLista_Completa_Documentos_Carpeta(string strLlaves, string strValoresLlaves) { DataSet dsCarpeta = new DataSet(); DataSet dsListaDocumentos = new DataSet(); DataSet dsArchivo = new DataSet(); try { // Obtener el id_reg (ID de la carpeta) y cantidad de documentos contenidos en ella dsCarpeta = dsLista_Carpetas(strLlaves, strValoresLlaves); if (dsCarpeta.Tables.Count.Equals(0)) { // no existe una carpeta } else if (dsCarpeta.Tables[0].Rows.Count > 0) //PENDIENTE: ojo si encuentra mas de dos registros debe de enviar un correo al administrador indicando que encontró //directorios duplicados con la misma estructura y esto debe de correjirse. { // Obtiene la lista de los archivos (aun no tiene el URL) dsListaDocumentos = dsLista_Simple_Documentos_Carpeta(dsCarpeta.Tables[0].Rows[0]["ide_reg"].ToString()); if (dsListaDocumentos.Tables.Count > 0) { //Construir el DataTable DataTable dtArchivo = new DataTable(); dtArchivo.Columns.Add("ide_carpeta", typeof(string)); dtArchivo.Columns.Add("ide_objeto", typeof(string)); dtArchivo.Columns.Add("des_objeto", typeof(string)); dtArchivo.Columns.Add("FechaArchivado", typeof(DateTime)); dtArchivo.Columns.Add("MB", typeof(string)); dtArchivo.Columns.Add("ext_objeto", typeof(string)); dtArchivo.Columns.Add("descripcion_objeto", typeof(string)); dtArchivo.Columns.Add("Estado", typeof(string)); //se recorre el DS para obtener la descripción del los archivos foreach (DataRow drTemp in dsListaDocumentos.Tables[0].Rows) { //Cargar valores al ROW y agregar al DataTable dtArchivo.Rows.Add(dsCarpeta.Tables[0].Rows[0]["ide_reg"].ToString(), drTemp["ide_obj"].ToString(), drTemp["des_obj"].ToString(), drTemp["Archivado"].ToString(), drTemp["MB"].ToString(), drTemp["ext_tip"].ToString(), strDescripcionArchivo(drTemp["ide_obj"].ToString()).ToString(), "~/App_Themes/Estados/imgBolita_Verde.png"); } // Convertir el DataTable a DataSet dsArchivo.Tables.Add(dtArchivo); } } } catch (Exception ex) { throw ex; } return dsArchivo; } /// /// Este método crea una carpeta, en la GAVETA="SEVRI" Id_Gaveta="00000035" /// /// public string strInsertar_Carpeta(string strArchivadores, string strLlaves, string strValoresLlaves) { string strId_Carpeta = null; try { // Me aseguro que no exista esa carpeta o sea que no no se ha creado esa dependencia, ya que // aunque exista siempre ella crea una carpeta nueva, porque lo que importa es el ID y no el nombre de la dependencia // que trae en la llave wsVision2020 = new vision2020serverapionline.wsapi(); if (!(wsVision2020.Existe_Carpeta(const_strArchivadores, const_strGaveta, strLlaves, strValoresLlaves))) { // Se crea la carpeta y se obtiene el id de la nueva carpeta strId_Carpeta = wsVision2020.Insertar_Carpeta(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strLlaves, strValoresLlaves); } else { // En el caso que si exista la carpeta, solo se solicita el id_carpeta invocando al método Id_Carpeta strId_Carpeta = Id_Carpeta(strLlaves, strValoresLlaves); } } catch (Exception ex) { } return strId_Carpeta; } /// /// Este método sube un archivo a una carpeta especifica, y agrega una descripción a al archivo, /// En caso de no exisistir la carpeta, esta será creada automáticamente y se le agrega una etiqueta o nombre a dicha carpeta /// /// public bool Archivar_Documento_Byte(string strEtiquetaCarpeta, string strLlaves, string strValoresLlaves, string strNombreArchivo, Byte[] byteArchivoEnByte, string strDescripcionDocumento) { string strId_Carpeta = null; bool valor_retornado = false; string str_idObjeto = ""; //id del objeto luego de ser guardado try { wsVision2020 = new vision2020serverapionline.wsapi(); //Paso 1: asegurarse que la carpeta exista if (!(wsVision2020.Existe_Carpeta(const_strArchivadores, const_strGaveta, strLlaves, strValoresLlaves))) { // Se crea la carpeta y se obtiene el id de la nueva carpeta strId_Carpeta = wsVision2020.Insertar_Carpeta(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strLlaves, strValoresLlaves); // Se coloca una nota o etiqueta a la carpeta, esto es para personalizar el nombre, en este casa // se le esta asignando el codigo del riesgo. wsVision2020.Insertar_Nota_Expediente(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strId_Carpeta, strEtiquetaCarpeta); } else { // En el caso que si exista la carpeta, solo se solicita el id_carpeta invocando al método Id_Carpeta strId_Carpeta = Id_Carpeta(strLlaves, strValoresLlaves); } //Verificar si encontro el id_carpeta if (strId_Carpeta.ToString().Trim() != "") { //Paso 2: Archivar documento en Byte str_idObjeto = wsVision2020.ArchivarDocumentoByteDevuelveIdObjeto(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strId_Carpeta, strNombreArchivo, byteArchivoEnByte); } //Paso 3: Subir descripción del archivo (si es que existe) if (!(strDescripcionDocumento.ToString() == string.Empty && str_idObjeto == string.Empty)) { valor_retornado = bolInsertar_DescripcionArchivo(strId_Carpeta, str_idObjeto, strDescripcionDocumento); } } catch (Exception ex) { return valor_retornado; } return valor_retornado; } /// /// Carga el grid de documento /// /// cantidad de registros que posee el grid de documento /// grid para la carga de datos /// estructura de la llave - ejemplo: Dependencias|Region|Area|Sistema|Estacion|Equipo|Horimetro|Usuario Sistema /// valores de la llave - ejemplo: 1|2|3|1|1|318|sisproap /// /// public Boolean LlenarGridView_Documento(Label lblTotalDocumento, GridView grvDocumento, String strLlave, String strLLavePK) { DataSet ListaArchivosDS = new DataSet(); String strDependencia = String.Empty; try { if (strLLavePK.ToString() != "0") { //Se construye el campo con los valores de las llaves, se agrega el cambio de la biblioteca verificando si el // se coloca la validacion, para verificar si la llave que ingresa es de Biblioteca o no //esto para mantener el PKDEPENDENCIA siempre en 1 para la llave biblioteca ListaArchivosDS = dsLista_Completa_Documentos_Carpeta(strLlave, (strLLavePK == (ConfigurationSettings.AppSettings["estructuraLlaveBiblioteca"] + "|" + ConfigurationManager.AppSettings["prmUsuario_VISION2020"].ToString()) ? ConfigurationSettings.AppSettings["PKBiblioteca"] : Session["PKDEPENDENCIA"].ToString().Trim()) + "|" + strLLavePK.ToString()); if (ListaArchivosDS.Tables.Count.Equals(0)) //Si el DS viene vacio { GlobalBL.InstanciaGlobalBL().sCantidadRegistros = "Documentos(0)"; lblTotalDocumento.Text = "0 Registros encontrados"; } else { Session["CANTIDAD"] = 0; detalleGridView(ListaArchivosDS, grvDocumento, lblTotalDocumento); Session["CANTIDAD"] = ListaArchivosDS.Tables[0].Rows.Count.ToString(); GlobalBL.InstanciaGlobalBL().sCantidadRegistros = "Documentos" + "(" + ListaArchivosDS.Tables[0].Rows.Count.ToString() + ")"; } } return true; } catch (Exception ex) { return false; // no se logró conetar al web Service } } /// /// Guardar documentos en base a la llave establecida /// /// descripcion de la carpeta, lo que se va almacenar /// Nombre del archivo /// Descripcion del archivo /// Url: pendiente /// archivo a almacenar /// la estructura de la llave: ejemplo:"Dependencias|Region|Area|Sistema|Estacion|Equipo|Horimetro|Usuario Sistema" /// valores de la llave:ejemplo: 1|2|3|1|1|318|sisproap /// TextBox txtURL- public void GuardarDatos_Documento(string strEtiquetaCarpeta, TextBox txtNombreDeseadoAchivo, TextBox txtDescripcionDocumento, TextBox txtURL, AjaxControlToolkit.AsyncFileUpload afuArchivo, String strLlave, String strLLavePK) { Documento Archivar_documento = new Documento(); Documento dtDocumento = new Documento(); bool boolValorRetorno = false; //Ajustar nombre archivo, por si trae extensión if (txtNombreDeseadoAchivo.Text.ToString().Trim().IndexOf(".") > 0) { txtNombreDeseadoAchivo.Text = txtNombreDeseadoAchivo.Text.Remove(txtNombreDeseadoAchivo.Text.ToString().Trim().IndexOf("."), txtNombreDeseadoAchivo.Text.ToString().Trim().Length); } //Subir el archivo y descripción del archivo if (afuArchivo.HasFile) { boolValorRetorno = Archivar_documento.Archivar_Documento_Byte( strEtiquetaCarpeta, //ConfigurationManager.AppSettings["prmGaveta_SISPROAP_VISION2020"], strLlave.ToString(), //"Dependencias|Region|Area|Sistema|Estacion|Equipo|Horimetro|Usuario Sistema" //Parámetro 2: construir valores de las llaves ------------------------------- /* se coloca la validacion, para verificar si la llave que ingresa es de Biblioteca o no ,esto para mantener el PKDEPENDENCIA siempre en 1 para la llave biblioteca*/ (strLLavePK == (ConfigurationSettings.AppSettings["estructuraLlaveBiblioteca"]) ? ConfigurationSettings.AppSettings["PKBiblioteca"] : Session["PKDEPENDENCIA"].ToString().Trim()) + "|" + strLLavePK.ToString(), //Fin contrucción parámetro llave --------------------------------------------------- //Parámetro 3: Nombre Archivo txtNombreDeseadoAchivo.Text.ToString().Trim().Equals("") ? afuArchivo.FileName : (txtNombreDeseadoAchivo.Text.Trim() + ".pdf"), //Parámetro 4: Archivo en Byte afuArchivo.FileBytes, //Parámetro 6: Descripción del archivo txtDescripcionDocumento.Text); //PENDIENTE:Subir el archivo con el URL (ruta de INTERNET) // aqui implementar subir archivo cuando ponen la URL txtNombreDeseadoAchivo.Text = ""; txtDescripcionDocumento.Text = ""; txtURL.Text = ""; } txtNombreDeseadoAchivo.Focus(); } /// /// Guarda en base de datos todo lo relacionado al archivo una vez que este fue subido al servidor /// /// ejemplo Cedula|Tipoadjunto se dividen con el siguiente caracter "|" /// ejemplo 1-1044-0505|LISTACERTIFICACIONLITERAL /// Mensaje de el estado de la operacion public string Archivar_Documento(string strValoresLlaves, string strNombreArchivo, Byte[] byteArchivoEnByte) { string strId_Carpeta = null; string valor_retornado = "Error al guardar el archivo"; try { wsVision2020 = new vision2020serverapionline.wsapi(); //Paso 1: asegurarse que la carpeta exista if (!(wsVision2020.Existe_Carpeta(const_strArchivadores, const_strGaveta, const_strLlaves, strValoresLlaves))) { // Se crea la carpeta y se obtiene el id de la nueva carpeta strId_Carpeta = wsVision2020.Insertar_Carpeta(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, const_strLlaves, strValoresLlaves); // Se coloca una nota o etiqueta al carpeta, esto es para personalizar el nombre, en este casa // se le esta asignando el codigo del riesgo. //wsVision2020.Insertar_Nota_Expediente(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strId_Carpeta, strEtiquetaCarpeta); } else { // En el caso que si exista la carpeta, solo se solicita el id_carpeta invocando al método Id_Carpeta strId_Carpeta = Id_Carpeta(const_strLlaves, strValoresLlaves); } //Verificar si encontro el id_carpeta if (strId_Carpeta.ToString().Trim() != "") { //Paso 2: Archivar documento en Byte valor_retornado = wsVision2020.Archivar_DocumentoByte(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, const_strLlaves, strValoresLlaves, strNombreArchivo, byteArchivoEnByte); } } catch (Exception ex) { throw ex; //return valor_retornado; } return valor_retornado; } /// /// Este método devuelve la ruta html para ver un documento en especifico /// public string Visor_Documento(string strValoresLlaves, string strCarpeta, string ruta, string strNombreDocumento) { wsVision2020 = new vision2020serverapionline.wsapi(); string valor_retornado = ""; string id_Carpeta = ""; string id_Obj = ""; DataSet ds = new DataSet(); bool descargado = true; string strResultado = string.Empty; try { if (wsVision2020.Existe_Carpeta(const_strArchivadores, const_strGaveta, const_strLlaves, strValoresLlaves)) { ds = wsVision2020.Buscar_Carpetas(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strIdGaveta, const_strLlaves, strValoresLlaves); id_Carpeta = ds.Tables[0].Rows[0]["ide_reg"].ToString(); ds = wsVision2020.Lista_De_Documentos(id_Carpeta); if (ds.Tables[0].Rows.Count > 0) { DateTime fecha = Convert.ToDateTime(ds.Tables[0].Rows[0]["Archivado"].ToString()); fecha = fecha.AddDays(-10); foreach (DataRow row in ds.Tables[0].Rows) { if (Convert.ToDateTime(row["Archivado"].ToString()) >= fecha) { if (row["des_obj"].ToString().Replace(" ", "_") == strNombreDocumento.Replace(" ", "_")) { fecha = Convert.ToDateTime(row["Archivado"].ToString()); id_Obj = row["ide_obj"].ToString(); } } } using (vision2020serverapionline.wsapi wsVision2020Descarga = new vision2020serverapionline.wsapi()) { strResultado = wsVision2020Descarga.Descargar_Documento(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, id_Carpeta, id_Obj, true); valor_retornado += GetFileName(strResultado.Replace(@"|", "")) + "|"; if (strResultado != string.Empty) descargado = DescargarArchivo2020(strResultado, ruta, strCarpeta); } } else { return "No existe"; } } else { return "No existe"; } } catch (Exception ex) { return valor_retornado; } return valor_retornado; } private string GetFileName(string hrefLink) { string[] parts = hrefLink.Split('/'); string fileName = ""; if (parts.Length > 0) fileName = parts[parts.Length - 1]; else fileName = hrefLink; return fileName; } private bool DescargarArchivo2020(string url, string ruta, string strCarpeta) { bool respuesta = false; try { WebRequest request = WebRequest.Create(url); WebResponse response = request.GetResponse(); string targetUrl = ConfigurationManager.AppSettings["DocumentosPDF"].ToString() + @"\" + strCarpeta + @"\";// Server.MapPath("../../DocumentosPDF/" + strCarpeta + "/"); //if (Directory.Exists(targetUrl)) //{ // Directory.Delete(targetUrl,true); //} Directory.CreateDirectory(targetUrl); Directory.CreateDirectory(targetUrl + @"\DocumentosREQ\"); string originalFileName = request.RequestUri.ToString().Substring(request.RequestUri.ToString().LastIndexOf("/") + 1);// response.ResponseUri.AbsolutePath.Substring(response.ResponseUri.AbsolutePath.LastIndexOf("/") + 1); Stream streamWithFileBody = response.GetResponseStream(); using (Stream output = File.OpenWrite(ruta)) { streamWithFileBody.CopyTo(output); streamWithFileBody.Close(); } respuesta = true; } catch (Exception ex) { throw ex; } return respuesta; } /// /// Este método devuelve la ruta html para ver un documento en especifico /// public string Consultar_Documento(string strValoresLlaves, string strCarpeta, string strNombreDocumento) { wsVision2020 = new vision2020serverapionline.wsapi(); string valor_retornado = ""; string id_Carpeta = ""; string id_Obj = ""; DataSet ds = new DataSet(); bool descargado = true; try { if (wsVision2020.Existe_Carpeta(const_strArchivadores, const_strGaveta, const_strLlaves, strValoresLlaves)) { ds = wsVision2020.Buscar_Carpetas(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, strIdGaveta, const_strLlaves, strValoresLlaves); id_Carpeta = ds.Tables[0].Rows[0]["ide_reg"].ToString(); ds = wsVision2020.Lista_De_Documentos(id_Carpeta); DateTime fecha = Convert.ToDateTime(ds.Tables[0].Rows[0]["Archivado"].ToString()); fecha = fecha.AddDays(-10); int nTamanno = 0; foreach (DataRow row in ds.Tables[0].Rows) { if (Convert.ToDateTime(row["Archivado"].ToString()) >= fecha) { if (row["des_obj"].ToString().Replace(" ", "_") == strNombreDocumento.Replace(" ", "_")) { id_Obj = row["ide_obj"].ToString(); fecha = Convert.ToDateTime(row["Archivado"].ToString()); } } } using (vision2020serverapionline.wsapi wsVision2020Descarga = new vision2020serverapionline.wsapi()) { valor_retornado = wsVision2020Descarga.Descargar_Documento(const_strUsuario, const_strClave, const_strArchivadores, const_strGaveta, id_Carpeta, id_Obj, false); } } else { return "No existe"; } } catch (Exception ex) { return valor_retornado; } return valor_retornado; } }