SharePoint Latin Rotating Header Image

.NET Framework 2.0

Programando con Listas en Windows SharePoint Services 3.0

Aquí un entrenamiento que di hace muchos años para una empresa en la que trabajé como líder de practica de colaboración. Básicamente preparé esta presentación para mostrar a programadores como manejar listas y elementos de forma programática a fin de introducirlos al mundo de la programación SharePoint.


Durante una revisión a un respaldo me encontré con los archivos fuente de este WebCast y decidí compilarlo como video para subirlo a mi canal de Youtube. Si por alguna razón sigues dando soporte a plataforma SharePoint 2007 (MOSS o WSS 3.0) en temas de programación este video sin duda es una referencia que te permitirá entender los fundamentos de programación de listas en SharePoint.


Además, creo que los temas aquí mencionados también aplican para SharePoint 2010 J



Oportunidad de Negocio

Si usted tiene la necesidad de dar una solución basada en tecnología para resolver algún problema de negocio y requiere de un especialista técnico capaz de hacer su visión realidad, entonces le pido que descargue y llene el siguiente cuestionario inicial de oportunidad y lo haga llegar a haarongo@prodigy.net.mx con la finalidad de revisarlo, evaluarlo y potencialmente producir una propuesta de solución. Gracias!



Inspirado por el artículo Peter Bright sobre WinRT

microsoft-_net-framework-4

 

En mi caso todo empezó con MS-DOS 3.0 pero esa es otra historia. Yo tomé el barco de Microsoft desde 1997, como programador inicié con Visual Basic 5, tuve la oportunidad de utilizar la suite de Office 97 y experimentar lo que fue OLE 2.0, ya como programador Visual Basic 6 construí aplicaciones profesionales que hacían uso de componentes COM construidos por mí y también tuve la oportunidad de compartir con PowerBuilder funcionalidad gracias a COM. El primer libro de programación que compré fue Developing COM/ActiveX Components With Visual Basic 6 de Dan Appleman. Ya durante los cursos oficiales de Visual Basic 6 pude conocer lo que fue Distributed COM (DCOM) y Microsoft Transaction Server (MTS).  A la par HTML y lo que Microsoft llamó DHTML también eran parte de las técnicas de programación que tuve que aprender y dominar, en particular ASP y VBScript fueron para mí una gran oportunidad profesional, en la universidad pude construir aplicaciones web para procesos escolares, así que mí experiencia en ASP mejoró mucho. Después de durar un tiempo construyendo aplicaciones Windows y Web tanto para empresas como para los últimos semestres de pronto escuchamos del Beta de .NET en MSDN, un buen amigo mío lo descargó no sé de dónde y pudimos ver en primer instancia lo que significó el nuevo modelo e acceso a datos, la evolución de DAO por ADO y de ADO a ADO.NET. Recuerdo que el simple el hecho de tener DataSets y DataTables con respecto a Recordsets fue increíble. La posibilidad de trabajar Offline y usar DataSet.WriteXml() para llevarnos los datos en XML y poder trabajar fuera de línea nos dio una y refrescante alternativa. El poder serializar objetos para persistirlos también fue algo emocionante. Tratar de asimilar los tipos de datos por valor y por referencia también fue retador. El 13 de Febrero de 2002 se liberó Visual Studio .NET 2002 en San Francisco, CA donde Bill Gates presidio el lanzamiento y dejó ver la visión que ha venido empujando a Microsoft desde ya hace mucho tiempo "La información disponible a cualquier hora, en cualquier lugar y desde cualquier dispositivo". En ese lanzamiento Grady Booch tuvo una participación durante una demostración justamente hablando de modelado y de ahí conocí el mundo de UML, Design Patterns, etc. También a Tim Huckaby fue parte del Iron Developer contest con quien después tuve la oportunidad de trabajar aquí y algunos otros Speakers en especial a Ari Bixhorn y Chris de DPE de Microsoft. Increíble el lanzamiento y dejó ver todo una nueva visión. En aquel entonces los recursos de capacitación disponibles eran pocos, el .NET Show con Robert Hess y Erica Wiechers, LearVisualStudio.NET con Bob Tabor que después lo hicieron MVP, también me fascinó el concepto del programa VBTV Cheap Show de Chris and Ari donde de una manera muy cómica y relajada dieron a conocer Visual Basic .NET. Tuve la oportunidad de hacer un proyecto en ASP.NET usando Visual Studio .NET 2003 para un evento nacional de la universidad, ahí fue mi primer presentación técnica ante ejecutivos y director nacional de la institución, toda una experiencia nueva pero tan familiar a la vez. Estuve trabajando por un tiempo como programador ASP y de pronto llegó la oportunidad para ser programador .NET de una empresa de software para gobierno importante en mi ciudad. Inicie con Visual Studio .NET 2003 creando aplicaciones ASP.NET 1.1. En ese entonces surge Pattern & Practices y pude conocer el podcast de .NET Rocks de Carl Franklin. Los blogs empezaron a ser más populares. Trabaje bastante con Visual Studio .NET 2003, recibí el nombramiento MVP en el 2004, tome el riesgo y me fui a la ciudad de México a trabajar como instructor y conferencista, surgió Visual Studio 2005 y tuve la oportunidad de participar en el lanzamiento del producto dando platica de ASP.NET 2.0 y conociendo a personas con las sigo frecuentando y que también son MVPs. Lo que más me llamó la atención en aquel entonces fue el modelo proveedor de ASP.NET para soportar la extensibilidad y la implementación de mecanismos muy interesantes para fortalecer la integración. Una vez más Visual Studio 2005 y .NET Framework 2.0 introdujeron muchas mejoras para los programadores en especial el modelo proveedor y sin duda el uso de Generics como parte del modelo de programación y en el caso de Windows Forms el Clickonce Deployment, de hecho .NET Framework 2.0 fue la base de otras versiones de .NET Framework, básicamente se han ido apilando nueva funcionalidad. A mediados entre 2005 y 2008 Microsoft busca unificar los paradigmas de desarrollo y crea WCF, WF, WPF y CardSpace como parte del .NET Framework 3.0. Cabe mencionar que SharePoint 2007 fue construido sobre .NET Framework 2.0 y 3.0. Un cambio radical de nuevo en el modelo de programación y en la forma de construir soluciones conectadas, visualmente atractivas y procesos de negocio. En el 2008 se liberó Visual Studio 2008 con el .NET Framework 3.5 donde por fin LINQ pudo florecer y posicionarse como la respuesta para abstraer el lenguaje que normalmente usamos para manipular una base de datos. LINQ nos dio la posibilidad de seguir usando el lenguaje de programación que conocemos para expresar de forma unificada consultas a bases de datos, colecciones de objetos, archivos XML y cualquier otra fuente de datos para la cual existiera un proveedor, adicional fue la base de Entity Framework como el ORM de Microsoft. Sin duda .NET Data Services (la implementación RESTFull) fue otro nuevo y refrescante enfoque para facilitarnos la construcción de aplicaciones conectadas. También .NET Framework 3.5 y Visual Studio 2008 han sido críticos para la evolución de la plataforma .NET ya que se introdujo de forma muy básica la posibilidad del paralelismo y la noción de facilitarnos la escritura de programas capaces tomar ventaja de los diferentes procesadores y núcleos que el hardware tiene. Se introdujo extensiones para trabajar con patrones como MVC y MVVM para web como para cliente. Ya en la versión .NET Framework 4.0 y Visual Studio 2010 florecieron los patrones con nuevas plantillas de proyecto, pudimos tener integrado en el lenguaje una serie de clases para facilitarnos la escritora y uso de aplicaciones paralelas y asíncronas. Y sin duda Visual Studio fue re construido ofreciendo una UI basada en WPF con un bonche de mejoras para depuración, visualización de código, documentación, análisis, diagramas etc. Visual Studio 2012 también ya fue liberado y sus características a la par del sistema operativo han venido a revolucionar la forma en que construimos aplicaciones así como también el ecosistema para distribuirlas.

Todo este texto ha sido inspirado por un artículo que leí hace un par de días y que quiero recomendar ampliamente para aquel programador avanzado y principiante. Este artículo se llama "Turning to the past to power Windows’ future: An in-depth look at WinRT" y da una explicación del pasado para entender mejor el presente y sin duda el futuro. Si realmente estas interesado en el mundo Microsoft tienes que leerlo.

Usando los controles de SharePoint en WebParts

Sin duda, con el poder viene la responsabilidad. En pasados días publiqué un post acerca de cómo utilizar los controles de ASP.NET y toda su experiencia gloria dentro de WebParts de SharePoint. Sin embargo, al utilizar esta estrategia un conjunto de consideraciones subsecuentes deberán ser contempladas como hacer uso de los mismos controles SharePoint dentro de estos WebParts.


En ese sentido, debido a que sin problema alguno puedo utilizar el GridView y/o cualquier control ASP.NET al principio suena atractiva la posibilidad pero como siempre la realidad se asoma y nos muestra al que un día fue novedoso control Calendar de ASP.NET y con todo el debido respeto, hoy no es la mejor opción para la captura de una fecha dentro de una forma en SharePoint, al menos la mejor opción es usar el mismo control que se usa en SharePoint, ¿estás de acuerdo?


Vamos a nuestro Web User Control y registramos los controles web de SharePoint. Estos son los controles mejorados que SharePoint internamente utiliza en su capa de presentación.


image


Después dentro de nuestro código Markup agregamos el control SharePoint que requerimos:


image


Lo interesante es que tenemos una gama de controles de SharePoint disponibles.


image


A continuación dentro del código hacemos referencia al control de SharePoint para poder adjuntar algún evento o leer su valor.


image


Y el resultado es:


image


Estos controles cuentan con validaciones, propiedades y eventos que podemos utilizar a nuestro favor. Créditos a Luis Edmundo Teos por el reto y escenario.


Suerte!

Programación ASP.NET en WebParts de SharePoint

Si eres un de desarrollador ASP.NET que se está iniciando en desarrollo SharePoint este ejemplo puede ser de utilidad. Básicamente, usaremos un enfoque de desarrollo de WebParts basado en el uso de Web User Controls de ASP.NET 2.0.

Antes que nada utilizaremos las siguientes herramientas:

Dentro de nuestro servidor de desarrollo SharePoint cargamos Visual Studio 2008 y elegimos la creación de un proyecto SharePoint en blanco, este proyecto lo nombraremos ASPNETWebPart.

clip_image002

Especificaremos que el nivel de confianza de esta solución SharePoint sea Full Trust y la razón es que usaremos un método Page.LoadControl que requiere de permisos elevados para ejecutarse, me parece que la razón es porque este método lee de la ruta de archivos SharePoint “12 hive” y para ello requiere que el proceso w3wpg.exe solicite los permisos necesarios.

clip_image004

Usando la solución generada por Visual Studio 2008 dentro del Solution Explorer agregamos un nuevo Empty Web Site de ASP.NET llamado ASPNETWebPArtsWebSite ubicándolo en la misma carpeta creada por nuestro proyecto anterior.

clip_image006

Dentro de nuestro proyecto ASPNETWebPartWebSite agregamos un Web User Control llamado ASPNETWebUserControl y es muy importante que no deseleccionemos el cuadro de verificación Place Code in separate file.

clip_image008

Esto nos crea un simple archivo con extensión .ascx dentro de nuestro proyecto ASP.NET. A estas alturas podremos realizar cualquier funcionalidad ASP.NET. Solo hay que asegurarnos de no generar dependencias a otras carpetas como App_Code, tratemos de generar todo el código y funcionalidad sobre el Web User Control. En mi caso usare las características de vinculación de controles de ASP.NET para crear el más humilde de los GridView de ASP.NET. Podemos crear una página Defaullt.aspx para probar el funcionamiento del mismo. A continuación agregare un cuadro de texto , un botón y un label.

clip_image010

El resultado es un código Markup que podría tener sin duda código C#. En la sección de Script runat=”Server” estarían los eventos disparados por los controles de nuestro Web User Control. Solo que para propósitos de este ejemplo quiero hacer que los eventos sean disparados desde un WebPart de SharePoint y no necesariamente desde aquí.

A continuación en nuestro proyecto SharePoint agregamos un elemento de tipo Template, el cual nos creara un archivo dentro de la ruta interna de archivos de SharePoint o más conocida como 12 hive “C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\”.

clip_image012

Eliminamos el archivo generado TemplateFile.txt y agregamos la carpeta CONTROLTEMPLATES y dentro la carpeta ASPNETWebParts. Esto permite incluir en nuesdttro paquete de deployment generado por nuestro proyecto SharePoint una nueva carpeta que será aprovisionada de forma confiable en la ruta 12 hive de cada Web Front End de la granja SharePoint. Agregara una nueva carpeta llamada ASPNETWebParts. Dentro de esta carpeta agregaremos como elemento existente nuestro archivo .ascx. El resultado es algo asi:

clip_image014

Ya casi terminamos, a continuación agregamos el código de un WebPart de SharePoint que nos permitirá cargar en tiempo de ejecución el .ascx recién desarrollado. Dentro de nuestro proyecto ASPNETWebPart damos clic derecho y agregamos un nuevo elemento de tipo Web Part bajo el nombre ASPNETWebPart. En realidad puede ser cualquier nombre.

clip_image016

Abrimos el código de nuestro WebPart y agregaremos lo siguiente:

  1. Una variable miembro de tipo UserControl, esta se utilizara como un placeholder de todo el ASPNETWebUserControl.ascx.
  2. Sobre escribimos el método Render para escribir en el flujo de salida de nuestro WebPart el contenido del WebUserControl.
  3. Múltiples variables miembro que representan cada uno de los controles que existen en nuestro archivo ASPNETWebUserControl.ascx
  4. En el evento CreateChaldControls hacemos una instancia de UserControl mediante Page.LoadControl y de cada uno de los controles;

Básicamente podremos tener el control de la funcionalidad desde el WebPart y esto facilita el hacer uso del modelo de objetos de SharePoint para leer datos de otras listas o hacer querys que podamos usar para después presentarlos en el Web User Control.

using System;

using System.Runtime.InteropServices;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Serialization;

using Microsoft.SharePoint;

using Microsoft.SharePoint.WebControls;

using Microsoft.SharePoint.WebPartPages;

namespace ASPNETWebPart

{

[Guid("7625d718-fb33-4bbc-b05f-2f1ff0dd4a88")]

public class ASPNETWebPart : System.Web.UI.WebControls.WebParts.WebPart

{

public ASPNETWebPart()

{

this.ExportMode = WebPartExportMode.All;

}

protected override void Render(HtmlTextWriter writer)

{

this.ascxControl.RenderControl(writer);

}

UserControl ascxControl;

Button button1;

TextBox textbox1;

Label label1;

GridView gridView1;

protected override void CreateChildControls()

{

base.CreateChildControls();

ascxControl = (UserControl)Page.LoadControl(@"/_controltemplates/ASPNETWebParts/ASPNETWebUserControl.ascx");

button1 = (Button)this.ascxControl.FindControl("Button1");

textbox1 = (TextBox)this.ascxControl.FindControl("TextBox1");

label1 = (Label)this.ascxControl.FindControl("Label1");

gridView1 = (GridView)this.ascxControl.FindControl("GridView1");

button1.Click += new EventHandler(button1_Click);

this.Controls.Add(ascxControl);

}

void button1_Click(object sender, EventArgs e)

{

label1.Text = textbox1.Text;

}

}

}

El resultado:

clip_image018

Configurando acceso anónimo y restringido a una Extranet de SharePoint 2007 en 30 minutos

ahorrar_en_proveedores_articulo_portraitContinuando con el tema de la Intranet-Extranet configurada aquí, me di a la tarea de acércame al siguiente reto una vez que enfrentamos un escenario de extranet. Este reto consiste en ofrecer a los usuarios externos algún mecanismo de registro y de gestión de perfiles. En este video vemos como configurar el acceso anónimo en la zona de Extranet, vemos como utilizando SharePoint Designer 2007 podemos personalizar páginas que hagan uso de controles de servidor de ASP.NET 2.0 y de WebParts de SharePoint.


Adicional vemos como romper con la herencia de permisos para poder contar con porciones de contenido privadas y públicas. Las públicas, son páginas de registro y de inicio de sesión, las privadas son páginas restringidas que muestran mediante WebParts listas personalizadas configuradas especialmente.


Dicho lo anterior, esto permite ofrecer un mecanismo para restringir el acceso a ciertas listas y solo hasta que el usuario se registre, alguien con permisos elevados desde la Intranet otorgue el rol “Extranet” al usuario en cuestión (esto permite contar con un proceso de validación del usuario antes de darle acceso a cualquier contenido restringido) este podría acceder a subir la información requerida.


Adicional, vemos como configurar una lista personalizada de SharePoint para que la información que el usuario externo aporte sea visible solo para él y para cualquier usuario de la Intranet, permitiendo con esto aplicar algunas otras funcionalidades de SharePoint para colaboración o seguimiento interno por parte de empleados de la organización.


El ejemplo se basa en un escenario de extranet para proveedores donde estos pueden subir documentación e información de negocio que permita a la empresa iniciar con los trámites necesarios para darlo de alta como proveedor. Adicional, este ejemplo podría utilizarse como un mecanismo para concurso de RFPs o para recopilación de información provista por actores externos a la empresa pero que participan en la cadena de valor.


Espero sea de utilidad, está por demás decir que este es un ejemplo de tan solo 30 minutos que ilustra conceptos y aspectos tecnológicos que pudiesen acercarse a una solución.


 



 


Utilizar estos consejos es bajo tu propio riesgo, explora, aprende y comparte!.


HG

Configurando y trabajando con el idioma español del .NET Framework 4

Desde el punto de vista de programador cuando construimos una aplicación ASP.NET usando el motor de ejecución .NET Framework instalado en el idioma inglés, vemos que los mensajes auto generados por el motor de ejecución estan en inglés. Mensajes como las descripciones de los controles de validación, mensajes de un control de tipo LogIn, los títulos de las acciones de un GridView que soporta edición o eliminación, los títulos de los opciones de un control de tipo calendario e innumerables ejemplos más.


Control LogIn con la configuración predeterminada en ingles


image


Control GridView con la configuración predeterminada en ingles


image


Para resolver este tema de la auto generación de mensajes en el idioma que requerimos, necesitamos configurar las características de Globalización en el web.config y también necesitamos ejecutar la instalación del paquete de idioma del .NET Framework en español. Esta demás mencionar que podemos mejorar nuestra productividad respecto a la edición manual de tanto mensaje.


Lo que haremos es descargar el paquete de Idioma en español del .NET Framework, en este caso descargaremos el paquete de idioma en español del .NET Framework 4 de aquí. Ojo, este paquete no contiene los ensamblados o el motor de ejecución del .NET Framework sino más bien los mensajes en español de los controles, errores y elementos internos del motor de ejecución.


image


Toma las consideraciones pertinentes en caso de utilizar esta alternativa, ya que tendrás que llevarte a tus servidores de producción el mismo instalador de paquete de idioma que estés usando para continuar con estos beneficios.


Una vez que tengas instalado el paquete de idioma en español del .NET Framework 4.0, lo que falta es implementar la configuración a nivel Globalización y Localización. Globalización y localización en el contexto de.NET se refiere a especificar en nuestro aplicativo las características de idioma y manejo de datos de tipo moneda, calendarios y formatos de fecha correspondientes, esta configuración puede aplicarse en distintos niveles, a nivel global “toda la aplicación” o a nivel página “solo una página” o a nivel programático “comúnmente usado para cálculos monetarios o de fechas en ciertas porciones de nuestra aplicación”.


Vamos a configurar a nivel global la globalización de nuestra aplicación web. Accedemos al archivo web.config de nuestro aplicativo y agregamos la siguiente línea:


<globalization culture=”es-MX” uiCulture=”es-MX”/>


Esto sobre escribe cualquier configuración relacionada con el idioma en nuestra aplicación web especificando que usaremos las características del idioma español y en particular moneda en pesos. Por ejemplo si usamos es-ES también estaríamos usando idioma español solo que con moneda de en euros. También podemos usar la palabra auto dentro de estos atributos para especificar que la configuración de la localización provenga de las opciones de configuración del idioma establecidas en el navegador de internet del usuario que esté haciendo la petición a la aplicación.


Ahora sí, cualquier control con el que arrastremos sobre nuestro paginas ASP.NET en tiempo de ejecución tendrán su descripción totalmente en español.


Control LogIn con la configuración del idioma en español


image


Control GridView con la configuración del idioma en español


image


Suerte!

Configurando controles ASPXGridView de DevExpress en SharePoint

Sabemos que SharePoint está construido sobre ASP.NET 2.0 y esto nos da una gran cantidad de ventajas disponibles para utilizar componentes de terceros ricos en funcionalidad. Tal es el caso de los componentes de DevExpress empresa de Mark Miller un pionero en la construcción de herramientas de productividad para el desarrollador Delphi y .NET.

En el último proyecto donde participe como programador tuve la oportunidad de implementar la Suite de controles ASPXGridView de DevExpress para soportar un escenario el despliegue de datos de manera jerárquica y la flexibilidad de agrupación dinámica sobre SharePoint.

Utilice el ASPXTreeList y el ASPXGridView, a continuación los pasos para configurar y usar estos objetos. La misma suite tiene archivos WSP para implementar sobre SharePoint los controles, estos WSP automáticamente configuran todo lo necesario para poder usarlos. Sin embargo, aquí dejo los pasos manuales.

Registrar en el Global Assembly Cache los componentes de DevExpress.

  • DevExpress.Data.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Data.v9.3.Linq, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Utils.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.ASPxEditors.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.ASPxGridView.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.ASPxHtmlEditor.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.ASPxSpellChecker.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.ASPxThemes.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.ASPxTreeList.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
  • DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

Manipular archivos web.config de nuestra aplicación web donde estaremos usando estos componentes y dentro de <SafeControls> agregar lo siguiente:

  • <SafeControl Assembly="DevExpress.Data.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Data" TypeName="*" Safe="True" />
  • <SafeControl Assembly="DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web" TypeName="*" Safe="True" />
  • <SafeControl Assembly="DevExpress.Web.ASPxEditors.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxEditors" TypeName="*" Safe="True" />
  • <SafeControl Assembly="DevExpress.Web.ASPxSpellChecker.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxSpellChecker" TypeName="*" Safe="True" />
  • <SafeControl Assembly="DevExpress.Web.ASPxHtmlEditor.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxHtmlEditor" TypeName="*" Safe="True" />

Dentro de <httpHandlers> agregar:

  • <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" verb="GET" path="DX.ashx" validate="false" />

Dentro de <httpModules> agregar:

  • <add type="DevExpress.Web.ASPxClasses.ASPxHttpHandlerModule, DevExpress.Web.v9.3, Version=9.3.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule" />

Manipulación programática de archivos de Microsoft Project *.mpp con .NET

Si por alguna extraña razón cósmica en este mundo ultra moderno de la programación de software bajo plataforma .NET  te encuentras con la necesidad de manipular programáticamente archivos de Microsoft Office te recomiendo uses el proyecto open source MPXJ.

La biblioteca MPXJ permite la lectura y escritura de diversos formatos de archivo de Microsoft Project usando un API en .NET o Java.  Estas API ofrecen clases que representan los componentes de un archivo de Project como Tareas, Recursos, Calendario, Asignaciones, etc. Y los métodos para poder acceder, operar y manipular dichos objetos.

Estoy seguro que este modelo de objetos te permitirá darte una idea de cómo inter operar con Project desde tus aplicativos. En mi caso, con la ayuda de @juankaram “que en definitiva fue estratégica su intervención”, tuvimos que integrar en SharePoint un WebPart lector de archivos de Project.

El resultado:

landetrabajo

Instalador del .NET Framework 2.0 Configuration Tool

image

Ya en un entorno de producción no siempre contamos con las mismas herramientas que tenemos en un ambiente de desarrollo. Este   es el caso del .NET Framework 2.0 Configuration Tool que particularmente cuando construimos add ins para Office en ocasiones necesitamos tener en el equipo final para establecer o configurar algo en el Code Access Security o Global Assembly Cache.

Bien, pues aquí dejo el URL donde puedes descargar el instalador de esta herramienta.

Configuration tool installer for .NET Framework 2.0