20 ago 2009

Escribiendo un archivo de texto en Web

Por alguna razón, necesitaba escribir un archivo de texto a modo de Log con mensajes desde una aplicación web, y dejarlo dentro de la propia estructura del sitio en una carpeta especial parametrizable por web.cofig, y el nombre del archivo siempre debía ser Log.txt

Primeramente en el proyecto que usemos para almacenar las clases utilitarias creamos una nueva o reutilizamos alguna afín. Creamos un método que invocar cuando queramos usar para registrar los mensajes. En la clase que usemos debemos incluir el siguiente import
using System.IO;

y en el método lo siguiente:
String rootPath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath;
string pathLog = ConfigurationSettings.AppSettings["PATHLOG"];
if (!string.IsNullOrEmpty(pathLog))
{
    pathLog = Path.Combine(rootPath, pathLog);
    pathLog = Path.Combine(pathLog, "Log.txt");

    if (!File.Exists(pathLog))
    {
          using (StreamWriter sw = File.CreateText(pathLog))
          {
                sw.WriteLine("Archivo creado " + DateTime.Now.ToString());
                sw.WriteLine();
          }
    }

    using (StreamWriter sw = File.AppendText(pathLog))
    {
          sw.WriteLine("");
          sw.WriteLine("NUEVO EVENTO______Fecha y Hora:" + DateTime.Now.ToString());
          sw.WriteLine("");
          sw.WriteLine("DESCRIPCION:");
          sw.WriteLine("");
          sw.Write(Mensaje);
          sw.WriteLine("");                 
    }
}

Con esta instruccion System.Web.HttpContext.Current.Request.PhysicalApplicationPath encontramos el path fisico donde se encuentra nuestra aplicación web y por medio de Path.Combine vamos formando el path completo donde queremos dejar nuestro archivo.

Por medio del StreamWriter creamos el archivo si no existe (CreateText) y comenzamos a escribir(AppendText) en el mismo. En este ejemplo la variable Mensaje se pasa por parámetro al método con el texto que queremos dejar en nuestro Log.

4 ago 2009

Javascript desde C#

Hace poco necesitaba abrir una ventana emergente luego de dar clic en botón en una página aspx, he inmediatamente después re-direccionar la pantalla "padre" a otra dirección. Para cumplir estos objetivos se me ocurrió registrar un script en el evento del botón (obviamente después de ejecutar/procesar lo que tenía que hacer del lado del servidor) lo cual me quedó mas o menos así:
...

    StringBuilder script = new StringBuilder();
    script.Append(" < script language= ");
    script.Append(Convert.ToChar(34));
    script.Append("javascript");
    script.Append(Convert.ToChar(34));
    script.Append("> ");
    script.Append("window.open(");
    script.Append(Convert.ToChar(34));
    script.Append("PaginaPopup.aspx?Parametro1=");
    script.Append(intParametro1.ToShortDateString());
    script.Append("&Parametro2=");
    script.Append(intParametro2.ToString());  
    script.Append(Convert.ToChar(34));
    script.Append(",");
    script.Append(Convert.ToChar(34));
    script.Append(Convert.ToChar(34));
    script.Append(",");
    script.Append(Convert.ToChar(34));
    script.Append("Width: 400px; Height: 250px; scroll: no; status:yes;");
    script.Append(Convert.ToChar(34));
    script.Append(");");
    script.Append(" window.location=");
    script.Append(Convert.ToChar(34));
    script.Append("PaginaRedireccionar.aspx");
    script.Append(Convert.ToChar(34));
    script.Append(";");        
    script.Append(" < / script >");
        
    ClientScript.RegisterClientScriptBlock(this.GetType(), "popup", 
script.ToString());

...


En este ejemplo usé un StringBuilder para ir creando el script; se utiliza un window.open para abrir la página PaginaPopup.aspx con dos parámetros (Parametro1 y Parametro2) y especificamos las características de la ventana a abrir. Seguidamente usamos window.location para re-direccionar la ventana "padre" a la página PaginaRedireccionar.aspx

finalmente registramos este script por medio del metodo ClientScript.RegisterClientScriptBlock y misión cumplida!