Archive for the ‘ ASP.NET ’ Category

Guardar, modificar y actualizar datos de un XML con ASP.Net en C#

Hace unos días tuve que modificar una aplicación en donde uno de los requerimientos era trabajar con archivos XML para almacenar la información a manera de base de datos. Realmente mi fuerte no es el trabajo con XML (entre otras cosas), pero buscando a través de internet encontré las respuestas, realmente me tomó mucho tiempo la parte de investigación, pero la implementación fué mucho más rápida.

Omitiré algunos detalles técnicos e iré directamente a la parte práctica, ya que si has llegado a este blog es por que quieres ver que hay que hacer, pero sobre todo el como hacerlo.  En este ejemplo trabajaremos cómo dentro de una aplicación web se puede guardar la información de un aspx al XMLver la información utilizando un control repeater de .Net y por último como modificar y borrar los datos almacenados.

SharePoint o no SharePoint / Pensando como consultor

La pregunta que en principio es técnica, realmente termina volviéndose en casi que filosófica, ¿en que casos sería mejor realizar un desarrollo a la medida con ASP.Net y no utilizar SharePoint?

Sharepoint-2010_logo

Mi primer impulso es contestar que SharePoint representa una excelente alternativa todo terreno para implementar casi cualquier tipo de solución empresarial a nivel de intranet o web publica, de acuerdo a como se realice el esquema de desarrollo y programación al respecto.

Pero ¿qué representa implementar SharePoint?

Lo cierto es que para implementar SharePoint, incluso su versión gratuita (WSS en el caso de SP 2007 o la Foundation para SP 2010) se debe contar con una plataforma de servidor preferiblemente integrada a un dominio, esto representa que al menos se debe tener una máquina en la que se pueda montar todo esto (Dominio, Base de datos y SharePoint).

Dejándome llevar por mi primer impulso, diría que al igual que el lado oscuro de la fuerza, SharePoint es más rápido, más fácil, más seductor, pues puedo integrarme fácilmente con el paquete de office o con el directorio activo, incluso como un manejador de contenidos, integrando un versionamiento de documentos, flujos de trabajo, posibilidad de crear un portal de la nada en unas pocas semanas, manejo de roles de usuarios, audiencias, posibilidad de integrar un espacio tipo red social, y un montón de etcéteras que para un adepto a esta plataforma como yo, la frase sería “montémoslo sobre SharePoint”.

Pero no siempre lo que consideramos lo mejor no necesariamente representa la opción más viable. Pensemos en lo que mencioné antes: implementar SharePoint requiere servidores propios, que pasa si lo que deseo es montar mi aplicación en un hosting alquilado, o si mi aplicación va a ser comercializable, o si es una integración a plataformas no Microsoft (Aunque SharePoint permite ciertas integraciones con otras plataformas), o si mi aplicación es de tipo solamente requiere un simple login y password para acceder a ciertas funcionalidades no muy elaboradas, en esos casos es algo que necesitaríamos replantearnos si sería más recomendable crear nuestro propio código, con sus respectivos servicios y librerías.

A la hora de realizar una consultoría o de ver la viabilidad de un desarrollo la recomendación siempre es ver la relación Costo – Beneficio que existe en implementar SharePoint o desarrollar independiente a SharePoint, si en el momento de ver las alternativas, pasa por nuestra cabeza la posibilidad de utilizar ésta plataforma, quiere decir que probablemente sea una buena opción, más aún si el desarrollo es para una empresa que por lo general busca ciertos esquemas estandarizados.

Si en el planteamiento de la solución SharePoint no aparece opcionada, probablemente es por que los requerimientos son simples o por que económicamente no es viable.

Para finalizar expongo un caso de la vida diaria: En un punto específico me fue necesario diseñar y desarrollar una aplicación que permitiera a un equipo de trabajo registrar el número de horas por día, lo que realizó y la fecha, esto asociado a un proyecto que a su vez estaba asociado a una empresa y una serie de usuarios que tenían diferentes niveles de acceso ya sea para registrar información o revisar reportes, ocurrió lo siguiente:

Al hacerlo sobre ASP.Net me tomó cerca de 3 semanas tener una versión trabajable ya que necesité crear el esquema de la base de datos, los formularios, las páginas maestras, las librerías y los demás elementos que requiere la aplicación.

vs2010logo_transparent_large

Hice la prueba, implementando este mismo esquema a punta de listas de SharePoint y un par de formularios personalizados utilizando SharePoint Designer, eso me tomó cerca de 4 días y ya estaba funcional, probado y listo para ser usado.

Hasta ahí SharePoint podría parecer la mejor opción y sí sería la mejor opción si el esquema debe ser implementado dentro de una intranet empresarial, o asociado con los parámetros y políticas restringidas de una empresa.

Volviendo a este ejemplo, en mi caso deseaba utilizar esta aplicación fuera de este ambiente y darle acceso a usuarios de diferentes empresas y de diferentes proyectos, es más tener un producto que pudiera ser un activo propio y tal vez pulirlo mejor, dejarlo madurar y luego comercializarlo, en ese punto lo mejor era continuar con mi proyecto elaborado en ASP.Net.

Espero que este ejemplo ilustre un poco la duda que se presenta de si utilizar o no SharePoint, en donde la respuesta realmente es tan simple como queramos y es: Depende de los alcances que tengamos en el desarrollo que deseemos realizar.

Lo demás realmente son posiciones técnicas, de si los servicios, de si las plataformas, de si los servidores, etc.

Para finalizar quiero dejar en claro que más que una respuesta quiero dar una posición de trabajo, en donde la conclusión esta dirigida a quienes vemos el desarrollo y las implementaciones más allá de las líneas de código.

Crear un PDF de una página ASPX con itextsharp.dll

Como siempre, nos metemos a realizar cosas que desconocemos con el fin de aprender y mejorar, y de ganarse problemas gratuitos por que no pagan por resolverlos, sinembargo el conocimiento que nos queda es lo que nos empieza a dar un valor ante nuestros clientes y usuarios.

En este caso el requerimiento era crear un PDF de una página ASPX, espécíficamente e uno o de algún control de nuestro código.

En medio de muchas consultas y de encontrar alternativas gratuitas que no se adaptaban a los requerimientos, así como alternativas pagas que eran muy completas pero que estaban en el orden entre los 200 y  los 1000 dolares encontré en diferentes artículos referencia a una dll que aunque no es muy vistosa en principio, permite integrar muchos elementos para ser trabajados a la hora de imprimir parte o partes de una página en PDF.

Esta biblioteca se llama itextsharp que se puede encontrar en http://sourceforge.net/projects/itextsharp/, me ha parecido una excelente librería gratuita OpenSource que permite ser trabajada con .net económizando buena parte del trabajo, sinembargo sé que se puede realizar una aplicación a la medida dependiendo de las necesidades de cada uno.

Un ejemplo sencillo fué crear una aplicación en la que tengo una imágen, además tengo texto dentro de una etiqueta (Label), a esto le añadimos un botón que nos ejecutará el código correspondiente.

Al descargar itextsharp se incluye la referencia a los dll dentro de la aplicación: itextsharp.dll / itextsharp.xtra.dll.

Referencias iTextSharp

El código para este ejercicio es sencillo, sinembargo por lo alcanzado a leer, existen varias clases dentro de esta librería que permite realizar cosas más complejas e incluir estilos, imágenes, estructuras e hipervínculos entre otras cosas.

Para ver la funcionalidad, en mi caso creé una aplicación web desde Visual Studio y dentro de la página Default.aspx incluí una Label lblContenido llamada  que me incluyéndole un texto cualquiera :

<asp:Label ID=“lblContenido” runat=“server”>
Primero hay que comentar que para que un control, como el Image o el ImageBrush, pueda mostrar una imagen hay que crear un objeto que herede de la clase ImageSource y establecerle la propiedad Source del control.  El objeto que hereda de ImageSource y que comúnmente se utiliza para la carga de imágenes es el BitmapImage, al cual hay que pasarle un Uri con la ubicación de la imagen a utilizar.  Al establecer la propiedad Source de los controles en el XAML el objeto TypeConverter de ésta es el encargado de crear el BitmapImage con la Uri correspondiente.
</asp:Label>

En el código utilizaremos las referencias:
using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;

El botón de ejecución se llamó btnImprimir, el código asociado al evento clic de éste botón es:

protected void btnImprimir_Click(object sender, EventArgs e)
{
//System.Web.Exception opcional para manejar datos de respuesta HTTP a un cliente
Response.Clear();
Response.ContentType =“application/pdf”;
Response.Cache.SetCacheability(HttpCacheability.NoCache);

//Para crear una instancia de documento de iTextSharp con el tamaño de página y tamaño de margenes correspondientes
Document doc = new Document(PageSize.LETTER.Rotate(), 10, 10, 10, 10);
//La ruta en donde será guardado el pdf dentro del servidor
String path = this.Server.MapPath(“.”) + “Archivos\\MiArchivo.pdf”;

//Utilizamos System.IO para crear o sobreescribir el archivo si existe
FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

//iTextSharp para escribir en el documento PDF
PdfWriter.GetInstance(doc, file);
doc.Open();
//Agregamos  el texto que esta dentro de la etiqueta
     //Se pueden agregar varios solamente añadiendo varias sentencias doc.Add(…)    
doc.Add(new Paragraph(lblContenido.Text));
doc.Close();

Process.Start(path);
}

Al ejecutar el código anterior se crea el documento PDF dentro del la ruta que se especifico dentro del servidor, debemos recordar crear la carpeta Archivos dentro del directorio raiz de nuestra aplicación que es el lugar que estamos apuntándole dentro de la variable path.

Como se mencionó, esto solo exporta texto al PDF, seguiremos explorando en esta librería en la medida de las posibilidades y las necesidades, espero que esto les haya servido como base al respecto del tema.

Colección de datos con Silverlight y C#

Este es un ejemplo sencillo realizado sobre C# y utilizando la interfaz de Silverlight, el objetivo es cargar información en una colección y mostrarla en un DataGrid.

Para iniciar crearemos un nuevo proyecto tipo Aplicación de Silverlight.

Para este ejemplo creamos un formulario:

Dos TextBox (txtNombres, txtUsuario), un control PasswordBox (txtPass) un control DataPicker (dptNacimiento) y un botón (btnGuardar). Además agregaremos un control DataGrid (grdUsuarios).

El código XAML de nuestro formulario sería el siguiente:

<Grid x:Name=”LayoutRoot” Background=”White”>

        <ScrollViewer Height=”Auto” Width=”Auto”>

            <Canvas>

                <TextBox Canvas.Left=”155″ Canvas.Top=”25″ Height=”23″ Name=”txtNombres” Width=”150″ TabIndex=”0″ />

                <TextBox Canvas.Left=”155″ Canvas.Top=”54″ Height=”23″ Name=”txtUsuario” Width=”150″ TabIndex=”1″ />

                <PasswordBox Canvas.Left=”155″ Canvas.Top=”83″ Height=”23″ Name=”txtPass” Width=”150″ TabIndex=”2″ />

                <control:DatePicker Canvas.Left=”155″ Canvas.Top=”112″ Height=”23″ Name=”dtpNacimiento” Width=”150″ TabIndex=”3″ />

                <Button Canvas.Left=”300″ Canvas.Top=”149″ Content=”Registrar” Height=”23″ Name=”btnGuardar” Width=”75″ Click=”btnGuardar_Click” />

                <sdk:DataGrid AutoGenerateColumns=”True” Canvas.Left=”6″ Canvas.Top=”198″ Height=”Auto” Name=”grdUsuarios” Width=”Auto” />

                <TextBlock Canvas.Left=”29″ Canvas.Top=”25″ Height=”28″ Name=”label1″ Width=”120″ Text=”Nombres Completos:” />

                <TextBlock Canvas.Left=”29″ Canvas.Top=”54″ Height=”28″ Name=”label2″ Width=”120″ Text=”Nombre Usuario:” />

                <TextBlock Canvas.Left=”29″ Canvas.Top=”83″ Height=”28″ Name=”label3″ Width=”120″ Text=”Password:” />

                <TextBlock Canvas.Left=”29″ Canvas.Top=”112″ Height=”28″ Name=”label4″ Width=”120″ Text=”Fecha Nacimiento:” />

            </Canvas>           

        </ScrollViewer>

</Grid>

Para que nos funcione sin inconvenientes el DataGrid y el DatePicker debemos agregar dos referencias dentro de nuestro código XAML:

xmlns:sdk=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data”

        xmlns:control=”clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls”

Por otra parte crearemos la clase Usuarios (Usuarios.cs) con la que podamos trabajar una colección de objetos.

public class Usuarios : Collection<Usuarios>

{
   public String Nombres { get; set; }

    public String Usuario { get; set;}

    public String Pass { get; set; }

    public DateTime Nacimiento { get; set;}

    public DateTimeIngreso { get; set;}

}

Al final en el evento clic del botón agregamos el código que nos permite llenar nuestra colección y lista en el DataGrid los datos que vamos agregando.

//Creamos una lista de nuestra clase Usuarios

List<Usuarios>
lUsr = new List<Usuarios>();

 private void btnGuardar_Click(object sender, RoutedEventArgs e)

{

       //Limpiamos el datagrid

      grdUsuarios.ItemsSource = null;      

       //Creamos el objeto oUsr (instancia de nuestra clase Usuarios)

      Usuarios oUsr = new Usuarios(); 

       //Asignamos los valores correspondientes al objeto que hemos creado

      oUsr.Nombres = txtNombres.Text;

      oUsr.Usuario = txtUsuario.Text;

      oUsr.Pass = txtPass.Password;

      oUsr.Nacimiento = Convert.ToDateTime(dtpNacimiento.Text);

      oUsr.Ingreso = DateTime.Now; 

       //Agregamos el nuevo objeto a nuestra colección

      lUsr.Add(oUsr); 

       //Cargamos el DataGrid con la colección de datos

      grdUsuarios.ItemsSource = lUsr;

 }

Al ejecutarlo podremos observar que por cada dato que ingresamos va apareciendo en nuestro DataGrid:

Esto no reemplaza el almacenamiento de los datos, pero es un ejercicio que nos ayuda a comprender un poco el manejo y la construcción de colecciones integrándolo a Silverlight.

A %d blogueros les gusta esto: