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.

Libros SharePoint (una propuesta que puede ir mejorando)

Hay preguntas que lo ponen a pensar mucho, y ese fue el caso de una que agradezco ya que me hizo analizar muy bien que debía responder, la pregunta fue “Algún buen libro de Sharepoint?” hecha por Luis Lara Ariza en Facebook, (muchas gracias por tu pregunta).

Que pregunta tan difícil ya que como desarrollador, prefiero los libros que se enfocan hacia ese tema como por ejemplo:

  • Professional SharePoint 2010 Development [Wrox] (Algunos capítulos son algo complejos y hace necesario repasar bien los conceptos que brindan)
  • SharePoint 2010 as a Development Platform (Expert’s Voice in SharePoint) [Apress] (Bueno y entendible en su mayor parte)
  • Microsoft SharePoint 2010 Developer Reference [Microsoft] (Una guía bastante buena pra desarrollo)
  • SharePoint 2010 branding in practice: a guide for web developers (Me gusto, aun que mi fuerte no es éste)
  • Real World SharePoint 2010: Indispensable Experiences from 22 MVPs (Wrox Programmer to Programmer) [Wrox] (Aún no lo he podido ojear, pero por el contenido que he visto, dan ganas de tenerlo)
  • Inside Microsoft SharePoint 2010 [Microsoft] (Otro que no he visto, pero que se parece interesante)

Para Administradores e IT Pros: (No conozco a fondo estos libros, pero la referencia que he tenido es buena)

  • SharePoint 2010 Administration Instant Reference [Sybex]
  • Automating SharePoint 2010 with Windows PowerShell 2.0 [Sybex]

Para iniciarse:

  • Microsoft SharePoint Designer 2010 Step by Step [Microsoft]
  • Microsoft SharePoint Foundation 2010 Step by Step [Microsoft]
  • Microsoft SharePoint 2010 Plain & Simple: Learn the simplest ways to get things done with Microsoft SharePoint 2010 [Microsoft]
  • Beginning SharePoint 2010 Administration: Windows SharePoint Foundation 2010 and Microsoft SharePoint Server 2010 [Wrox]

Realmente, en términos generales es difícil recomendar un libro ya que cada uno tiene su propio estilo y manejo sobre el tema, pero si lo que se necesita es iniciar, pienso que el libro SharePoint, Microsoft SharePoint 2010 Plain & Simple: Learn the simplest ways to get things done with Microsoft SharePoint 2010 [Microsoft] es una buena opción.

Escucho sugerencias sobre este tema, ya que mientras mayor sea el conocimiento, más profundidad tendremos al respecto.

Muchos éxitos a todos.

WebPart con JavaScript SharePoint 2010

Hace algún tiempo tuve que buscar la manera que un código JavaScript corriera dentro de una WebPart desarrollada para SharePoint 2010, después de buscar diferentes ejemplos que funcionaban a medias o solo eran un enredo completo, pude encontrar algunos elementos que me ayudaron. Todo paró ahí y ese código quedó archivado, es lo que normalmente la mayoría de nosotros hacemos, y nunca pensamos que podría ser de ayuda para otros.

Un amigo me llamó pregúntandome sobre algo similar, esto me obligó a desempolvar este código (por lo menos no lo había desechado) y eso me motivó a escribir el presente blog que espero sea de ayuda para otros:

El ejemplo es sencillo, pero permite correr un código JavaScript al hacer clic sobre un botón asp.net

Todo  inicia en VisualStudio 2010, se crea un nuevo proyecto de SharePoint 2010 seleccionando la opción Elemeto Web Visual (Visual WebPart), y a la ventana que nos aparece le agregamos la dirección de nuestro sitio (esto lo trataremos en otro post sobre crear nuestra primera WebPart).

Lo que hacemos acá se puede definir en dos partes, la primera la trabajamos en el evento Load de la página, comprobando si es la primera vez que se carga la página utilizando if(!Page.IsPostBack). Si la página no ha sido refrescada llamamos al evento PreRender para ejecutar el código JavaScript que se desea, al mismo tiempo defino la dirección de la página que vamos a abrir dentro dentro del PopUp modal y establecemos el comportamiento del botón cuando el usuario hace clic sobre éste, agregándole un return false para evitar que al hacer clic
se produzca una recarga de página: this.btnBoton.OnClientClick = @”OpenDialog(‘” +sTargetuRl +”‘); return false;”;.

En la ejecución del evento del PreRender primero se establece el nombre de registro para el bloque de script y para que éste se ejecute: if (!Page.ClientScript.IsClientScriptBlockRegistered(“RunScript”)), se crea un StringBuilder con el fin de cargar nuestro código javascript a través de un ClientScript: Page.ClientScript.RegisterClientScriptBlock(this.GetType(), “RunScript”, sbScript.ToString()); y listo, lo que nos queda es implementar la webpart sobre SharePoint y probarlo.

Las referencias utilizadas son:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Text;

El código completo es el siguiente:

Un vistazo rápido a SharePoint Foundation 2010

Recuerdo que cuando salió SharePoint 2010 en su momento me pregunté si existía el WSS 2010 o 4.0 o algo así y me desconcerté al no encontrarlo por ese nombre, pensé que era una lástima que SharePoint 2010 no incluyera una versión base para las micro y pequeñas empresas que pudieran utilizar esta plataforma solamente teniendo la licencia del servidor.

Después observé que era por falta de investigación de mi parte y que no solamente traía una plataforma que no requería un costo extra además de la licencia Win 2003 Server o Win 2008 server, sino que incluía mejoras considerables en comparación a la versión Windows SharePoint Services 2007 (WSS 3.0), esta nueva versión tiene el nombre de Microsoft SharePoint Foundation 2010.

Lo Bueno

Entre otras cosas incorpora una interfaz gráfica mejorada, Servicios de Conectividad empresarial, autenticación basada en notificaciones, también el SharePoint Health Analyzer que permite realizar supervisiones de estado y el Windows PowerShell para la administración
del sistema.

Por otra parte incluye la posibilidad de desarrollo gráfico de web parts con Visual Studio 2010 y la personalización que también puede realizarse utilizando la herramienta gratuita SharePoint Designer 2010.

Lo Malo

Francamente en comparación a otras plataformas similares e incluso a su predecesor, no hay elementos malos en esta nueva versión de SharePoint. Como siempre, es necesario verlo, comprenderlo y trabajarlo para poder sacarle el máximo provecho a SharePoint.

Lo Feo

Si lo que se requiere es realizar una migración de WSS 3.0 montado sobre un servidor de 32bit a SharePoint Foundation, debemos recordar que las plataformas 2010 de SharePoint corren sobre servidores de 64bit, esto quiere decir que primero se debe pasar nuestro WSS a un servidor de 64bit y después de esto se debe realizar la actualización de SharePoint, lo que representa un esfuerzo extra. De ahí en adelante no debería presentarse ningún inconveniente al respecto.

Espero que esta información les haya sido de utilidad, muchos éxitos!!!

Migrando de WSS 32bit a SharePoint Foundation 2010

No es tan transparente como se quisiera la migración, o mejor, la actualización de Windows SharePoint Services (WSS) a Windows SharePoint Foundation, sobre todo si tenemos implementado nuestro WSS sobre un servidor que corre a 32bit, sin embargo no es un proceso imposible y no es tan difícil como parece al inicio.

Una manera de realizar este proceso es la siguiente:

  • Creamos un BackUp utilizando el STSADM.exe (-obackup) de SharePoint desde consola de comandos del servidor origen.
  • Configurar nuestro servidor de destino preferiblemente Windows 2008 server de 64bit, instalando los service pack requeridos.
  • Si se utiliza un servidor SQL Server independiente no hay problema, se seguirá apuntando al mismo, de lo contrario instalar el SQL Server si es requerido. (64bit si es sobre el mismo servidor).
  • Se instala el WSS 3.0 ade 64bit en el nuevo servidor.
  • Utilizamos el STSADM.exe (-o restore) desde la consola de comandos en la consola de comandos del servidor destino para
    restaurar el backup realizado.
  • Se realiza un chequeo para la actualización de SharePoint con STSADM.exe –o preupgradecheck.

Por último se siguen los pasos de actualización de SharePoint.

En principio esto debe funcionar con la mayoría de los sitios, la cosa se pone un poco más compleja al migrar los sitios personalizados con un alto contenido de WebParts y desarrollo a la medida incorporado.

Espero sea de utilidad la información proporcionada, por lo menos como una base que pueda guiarlos en el proceso de actualización de su plataforma.

SharePoint Autenticación Basada en Notificaciones

SharePoint Foundation 2010 incorpora un nuevo modelo de autenticación que funciona con un sistema de identidad corporativa y que incluye Servicios de dominio de Active Directory, directorios basados en LDAP*, bases de datos específicas de aplicaciones y modelos de identidad centrados en usuarios.

*LADP (Lightweight Directory Acces Protocol). Es un protocolo de tipo cliente-servidor para acceder a un servicio de directorio. Se usó inicialmente como un Front-end o interfaz final para x.500, pero también puede usarse con servidores de directorio únicos y con otros tipos de servidores de directorio.

Servicios de Conectividad Empresarial en SharePoint Foundation 2010

Microsoft SharePoint Foundation 2010 incluye Servicios de conectividad empresarial de Microsoft.

¿Qué es esto?

Representan un conjunto de servicios y características que proporcionan un método para conectar soluciones de SharePoint a orígenes de datos externos y para definir los tipos de contenido externo que se basan en esos datos.

¿Pará qué se utilizan?

Los tipos de contenido permiten la presentación y la interacción con datos externos en listas de SharePoint conocidos como listas externas, y elementos web. Los Servicios de conectividad empresarial de Microsoft incluyen bases de datos de SQL Server, aplicaciones SAP, servicios web incluso servicios de Windows Communication Foundation (WCF), aplicaciones personalizadas y sitios web basados en SharePoint.

También se puede designar y crear soluciones que extienden las capacidades de colaboración de SharePoint para incluir datos profesionales externos y los procesos que se asocian con los datos.

¿Qué beneficios nos brindan?

Para todo lo mencionado utiliza un conjunto de interfaces estándares para proporcionar acceso a datos profesionales, sobre decir que como desarrolladores de soluciones, esto es un alivio ya que no es necesario aprender prácticas de programación que se apliquen a un sistema o adaptador específico de cada origen de datos externo.

Por último, los Servicios de conectividad empresarial de Microsoft proporcionan el entorno de tiempo de ejecución en el que se cargan, se integran y se excluyen soluciones que incluyen datos externos.

Para una mayor información al respecto los invito al sitio de TechNet sobre productos SharePoint, ahí se muestran dos ejemplos:
Servicio de Asistencia y Panel de Ventas, esto podría dar una mejor visión al respecto: http://technet.microsoft.com/es-es/library/ee661738.aspx

Muchos éxitos!!!

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.