Importar un Web Part al servidor WSS

Hasta ahora hemos creado web parts en el mismo ámbito en el que se encuentra nuestro servidor WSS, y gracias a que Visual Studio se encarga de “dar de alta” el web part en el servidor, nosotros no nos damos cuenta de lo que se hace para que pueda funcionar.
Pero ¿Qué pasa cuando necesitamos exportar un web part que hemos creado de manera local e importarlo hacia otro servidor?, pues necesitamos conocer los pasos para incorporarlo, además claro, de conocer las especificaciones de dichos servidores.
A continuación listaremos los pasos para incluir un web part en un servidor WSS.

1.- Copiar los archivos .dll, recursos (script, imágenes, audio, video), archivo feature.xml, .webpart y .xml del webpart, al servidor.

2.- Copiar el archivo .dll en el GAC del servidor.

3.- Modificar web.config agregando un un control en la sección SafeControls:

<SafeControl Assembly=”NombreEnsamblado(.dll), Version=versión, 
     Culture=cultura, PublicKeyToken=keytoken”
     Namespace=” NombreEnsamblado(.dll)” TypeName=” NombreEnsamblado(.dll)” 
     Safe=”True”
/>.

4.- Guardar y cerrar.

5.- Copiar los Features del web part en el directorio Features del servidor.

6.- Crear el directorio de los recursos en el servidor y copiar los archivos de recursos del webpart dentro de el.

7.- Verificar que estos archivos puedan ser interpretados por el servidor, ingresamos al Administrador de IIS y buscamos que en Tipos MIME existan los formatos que necesitamos.

  • En caso de que faltara alguna extensión, creamos un nuevo Tipo MIME .Por ejemplo:

Extension: .xap
Tipo MIME: application/x-silverlight-app

Y reiniciamos IIS.

Luego de esto el web part esta disponible en el servidor para ser agregado a cualquier sitio
dentro de la colección de sitios.

Gracias.

Agregar una aplicación Silverlight a SharePoint

Como anteriormente comentamos, la forma de incrustar una aplicación Silverlight en SharePoint es la misma que utiliza Visual Studio al crear el sitio huésped, es decir agregar un objeto y pasarle como parámetros el archivo .xap y lo que necesite.

Tomando esto en cuenta, diseñaremos en Expression Blend un reproductor de videos o audio Silverlight y agregaremos el archivo .xap en un web part.

Comenzamos creando el proyecto en Expression Blend, agregamos un control ExpressionMediaPlayer y definimos la ruta en donde se encuentra el archivo a reproducir. Compilamos y corremos, verificando que no haya errores.

SilverlightWebPart1

SilverlightWebPart1

Ubicamos el archivo .xap generado y entonces lo copiamos a nuestro servidor WSS.
Luego de esto, en el servidor WSS creamos un proyecto SharePoint web part, y creamos su carpeta de recursos, colocamos ahí el archivo .xap que copiamos antes, y agregamos el método Render:

protected override void Render(HtmlTextWriter writer)
{
    base.RenderContents(writer);

    string html="";
    /*Agregar el objeto silverlight a la pagina SharePoint*/
            html += "<div id="silverlightControlHost">";
            html += "</div>";

     writer.Write(html);
}

Gracias

Paso de parámetros a una aplicación Silverlight

Anteriormente creamos un ejemplo de una aplicación Silverlight y de cómo se incluía dentro de una página web mediante HTML, veíamos que uno de los parámetros del objeto es la ruta donde se encuentra su archivo .xap, entonces, ¿Es posible pasarle parámetros al proyecto Silverlight?, la respuesta es sí.

Supongamos que se desea mostrar una aplicación Silverlight en alguna pagina web, la aplicación debe mostrar una animación fija, pero también debe mostrar el nombre de usuario que esta autenticado en dicha pagina, este es dato variable, dependiendo de qué usuario este dentro de la pagina. En este contexto se tomaría del servidor el nombre de usuario actual, y este dato se pasaría como parámetro a Silverlight, para que este lo muestre.

¿Cómo se soluciona este problema?, a continuación se explica lo que se debe hacer para agregar parámetros a la llamada del objeto Silverlight.

1. Una vez creado el proyecto Silverlight, veremos en el explorador de soluciones los archivos App.xaml y MainPage.xaml, dentro de App.xaml se encuentra el archivo App.xaml.cs, en este archivo localizamos el método Application_Startup(object sender, startupEventArgs e) y dentro de el, agregar los parámetros:

private void Application_Startup(object sender, StartupEventArgs e)
{
      // parámetro llamado nombre
      string n = e.InitParams["nombre"];     
      //Pasar a la página principal como parámetro  
      this.RootVisual = new MainPage(n);   
}

2. Dentro de MainPage.xaml buscamos el archivo MainPage.xaml.cs, lo abrimos y modificamos el constructor para recibir el parámetro y dentro del constructor hacemos los cambios a la aplicación:

public MainPage(string nombre)
{
  InitializeComponent();

  //En Silverlight debemos tener un textbox para mostrar el nombre
  textbox.Items.Clear();
  textbox.Items.Add(nombre);
}

3. Al momento de incluir el objeto, agregamos el parámetro:

&lt;object data=”data:application/x-silverlight-2,” type=”application/x-silverlight-2″ width=”100%” height=”920px”>
<param name=”source” value=”../ClientBin/Calendario.xap?ignoreme=<%=System.DateTime.Now.ToUniversalTime() %>”/>
<param id=”init” name=”initParams” value=”rpe=<%=Session[“Usuario”] %>, rol=<%=Session[“Rol”] %>” />
<param name=”onError” value=”onSilverlightError” />
<param name=”background” value=”white” />
<param name=”minRuntimeVersion” value=”5.0.61118.0″ />
<param name=”autoUpgrade” value=”true” />
<a href=”http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0” style=”text-decoration:none”>
<img src=”http://go.microsoft.com/fwlink/?LinkId=161376” alt=”Obtenga Microsoft Silverlight” style=”border-style:none”/>
</a>
</object><iframe id=”Iframe1″ style=”visibility:hidden;height:0px;width:0px;border:0px”></iframe&gt;

Gracias

Crear aplicaciones Silverlight

Una aplicación/animación Silverlight puede ser utilizada en SharePoint, dándole a esta plataforma otra poderosa herramienta para desarrollos más completos visualmente y de multimedia.

Silverlight utiliza un lenguaje basado en XML llamado XAML (eXtensible Application Markup Language) es el lenguaje de formato para la interfaz de usuario para la Base de Presentación de Windows (WPF).
De la compilación de este lenguaje se obtiene un paquete de archivos que son comprimidos usando ZIP y almacenados en un archivo .xap, el cual se utilizara como recurso para ser agregado a SharePoint.

Para generar una aplicación Silverlight utilizaremos Microsoft Expression Blend 3, esta herramienta nos ayudara a diseñar la aplicación gracias a su editor WYSIWYG, intellisense y herramientas de compilación y depuración. Cabe mencionar que Visual Studio también puede crear y compilar proyectos Silverlight, pero Expression Blend nos proporciona un mejor manejo de estos proyectos.

Los pasos para crear una aplicación son:

1. Abrir Expression Blend.
2. Crear un Nuevo Proyecto de tipo Silverlight.
Aquí elegiremos también si aplicación estará hospedada en un sitio web, o estará sola.
Esto es indiferente a la aplicación en sí, pero escogeremos que quede hospedada en un sitio web para darnos cuenta cómo es que la pagina hace uso de la aplicación Silverlight.
3. Elegimos el nombre, la ubicación y el lenguaje (C# o Basic). Yo escogeré C#.
4. Luego de esto, se abrirá el proyecto mostrándonos el LayoutRoot, es decir la capa sobre la cual se agregaran los controles, imágenes, textos, comportamientos, eventos, etc.
5. Como ejemplo, crearemos un círculo, y agregamos sobre él, el comportamiento MouseDragElementBehavior, quedando el código XAML de la siguiente manera:

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:il="clr-namespace:Microsoft.Expression.Interactivity.Layout;assembly=Microsoft.Expression.Interactions"
	x:Class="Efectos.MainPage"
	Width="640" Height="480">
	<Grid x:Name="LayoutRoot" Background="White">
		<Ellipse Fill="#FFA37171" Stroke="Black" HorizontalAlignment="Left" Margin="145,84,0,0" Width="104" Height="83" VerticalAlignment="Top">
			<i:Interaction.Behaviors>
				<il:MouseDragElementBehavior/>
			</i:Interaction.Behaviors>
		</Ellipse>
	</Grid>
</UserControl>

6. Compilamos y verificamos que todo esté bien.
7. Corremos la aplicación y listo.

Por último, es interesante saber como la pagina web host, incluye el proyecto Silverlight, lo podemos ver abriendo el archivo EjemploTestPage.html y en la parte del body, observamos la etiqueta y dentro de este la etiqueta . Este método es el mismo que utilizaremos para incluir Silverlight en SharePoint.


Gracias

Web Parts con Java Script

Anteriormente hemos comentado acerca del uso de recursos por parte de un web part, en este post haremos un ejemplo utilizando un script de Java como recurso.

Haremos un botón HTML, agregaremos el evento onclick y este ejecutara la función hola, localizada en el archivo MiScript.js dentro de wpresources.

1.-Abrimos VS2008 y creamos un nuevo proyecto SharePoint, con plantilla web part, colocamos el nombre, ruta y finalmente que se quede en el GAC.
2.-Hacemos Deploy a la solución para generar el .dll en el GAC.
3.- Obtener los datos del .dll y crear los directorios de recursos dentro de wpresources.
4.- Dentro del directorio de recursos del web part, creamos un archivo “MiScript.js” con el siguiente código:

function hola()
{
       alert("Hola JavaScript");
}

5.- Guardar y salir.
6.- En el proyecto VS2008, dentro del costructor, colocamos la llamada al evento Pre_Render:

this.PreRender += new EventHandler(JSWebPart_PreRender);

7.- Una vez creado el metodo Pre_Render:

  • Obtener la ruta de los recursos:
SPWeb currentWeb = SPControl.GetContextWeb(Context);
Type currentType = GetType();
recursos = SPWebPartManager.GetClassResourcePath(currentWeb, currentType);
JSlocation = recursos+"/";
  • Registrar al script
//nombre del script
private const string JSFileName = "MiScript.js";
//nombre de la llave
private const string JSIncludeScriptKey = "miIncludeScript";
//Encabezado del script
private const string IncludeScriptFormat = @"<script language=""{0}"" src=""{1}{2}""></script>";
void JSWebPart_PreRender(object sender, EventArgs e)
{
       ClientScriptManager clientScript = Page.ClientScript;
       // Asegurarse que el script no este cargado ya en la pagina.
       if (!clientScript.IsClientScriptBlockRegistered(JSIncludeScriptKey))
       {
            // Crear el bloque cliente para el script.
            string includeScript = String.Format(IncludeScriptFormat, "javascript", JSlocation,
            JSFileName);
            //Registrar el script en la pagina
            clientScript.RegisterClientScriptBlock(typeof(Page), JSIncludeScriptKey, includeScript);
       }
}

Luego de esto, creamos el Botón en el método Render, con el evento onclick que llama a la función hola.

protected override void Render(HtmlTextWriter writer)
{
       string html = "";
       html += "<input value="Hola JavaScript" type="button" onclick="hola();">";
       writer.Write(html);
}

8.- Hacemos Deploy a la solución.
9.- Agregar el web part al sitio.

Web Part Java Script

Web Part Java Script

Gracias

Web Parts y sus recursos (wpresources)

Ahora hablaremos sobre el uso de recursos en un web part, como pueden ser: una aplicación Silverlight, una aplicación Flash, imágenes, videos, música, scripts, etc.

Todos sabemos que para que una aplicación pueda utilizar algún recurso, este debe estar físicamente en algún lugar (un servidor o localmente), y debemos conocer esta ruta para poder hacer uso de estos archivos. En el caso de WSS 3.0 recomendamos utilizar el directorio wpresources local del servidor ubicado en:  “C:Program FilesCommon FilesMicrosoft Sharedweb server extensionswpresources”, de esta manera se evita direccionar los archivos de manera externa previniendo que estos sean movidos o eliminados.

Ya que decidimos utilizar el directorio wpresources del servidor WSS para almacenar los recursos, hablemos acerca de como se hace esto, he aquí los pasos:

1.- Una vez creado el proyecto del web part, nos vamos al directorio GAC (C:WINDOWSassembly) y buscamos el ensamblado (.dll) de nuestro web part.

2.- Una vez localizado el ensamblado obtenemos su nombre, su versión, su cultura, y su key token.

3.- Teniendo los datos del ensamblado, abrimos el directorio wpresources de WSS, y creamos un nuevo directorio cuyo nombre será el mismo que el nombre del ensamblado. Quedando: ”C:Program FilesCommon FilesMicrosoft Sharedweb server extensionswpresources”NombreEnsamblado””

4. – Abrimos el nuevo directorio y crearemos otro directorio cuyo nombre se formara de la siguiente manera:  “versión_cultura_keytoken”. NOTA: si la cultura es igual a “neutral” puede omitirse del nombre del directorio quedando:  “versión__keytoken” .

5.- Por último, dentro de:”C:Program FilesCommon FilesMicrosoft Sharedweb server extensionswpresources”NombreEnsamblado” “versión__keytoken””  colocamos los recursos que sean necesarios para el funcionamiento del web part.

Una vez colocados los recursos en el directorio, podremos acceder desde el web part a ellos mediante el método GetClassResourcePath de la clase SPWebPartManager.

WebPartRecursos1

WebPartRecursos1

WebPartRecursos2

WebPartRecursos2

WebPartRecursos3

WebPartRecursos3

WebPartRecursos4

WebPartRecursos5

WebPartRecursos5

WebPartRecursos6

WebPartRecursos6

Creación de Web Parts con Visual Studio 2008

En esta ocasión mostraremos como crear un web part utilizando Visual Studio 2008, con la extensión para SharePoint instalada.
1.- Abrimos Visual Studio 2008.
2.- Creamos un nuevo proyecto.
3.- En tipos de proyecto, seleccionamos SharePoint.
4.- Dentro de las plantillas de SharePoint escogemos Web Part.
5.- Escribimos el nombre y ubicación del proyecto.
6.- Seleccionar en donde se va colocar el .dll del Web Part. Bin o GAC. Y Aceptar
A continuación se abrirá el proyecto, y aparecerá la siguiente estructura:

namespace HolaMundo
{
     [Guid("4833d485-6686-4c4a-b351-ae39d2500f84")]
     public class HolaMundo : System.Web.UI.WebControls.WebParts.WebPart
     {
          public HolaMundo()
          {
          }
          protected override void CreateChildControls()
          {
               base.CreateChildControls();
               // TODO: add custom rendering code here.
               // Label label = new Label();
               // label.Text = "Hello World";
               // this.Controls.Add(label);
          }
     }
}

El método CreateChildControls nos permitirá insertar al web part  controles ASP, AJAX, etc., por ejemplo: Para un web part con la leyenda “Hola Mundo”,  crearemos una nueva instancia del control Label, colocaremos la información dentro de el, y al final lo agregamos  a los controles del web part. Quedando  así:

namespace HolaMundo
{
     [Guid("4833d485-6686-4c4a-b351-ae39d2500f84")]
     public class HolaMundo :  System.Web.UI.WebControls.WebParts.WebPart
     {
          public HolaMundo()
          {
          }
          protected override void CreateChildControls()
          {
                base.CreateChildControls();

               // TODO: add custom rendering code here.
               Label label = new Label();
               label.Text = "Hola Mundo";
               this.Controls.Add(label);
          }
     }
}
Creacion de Web Part

Creacion de Web Part

Luego de esto hacemos Deploy a la Solución, en menú Build->Deploy Solution y automáticamente Visual Studio colocara el web part en los Features de SharePoint y reiniciara IIS, esto debido a que estamos compilando el web part en el mismo ámbito en el que está instalado el servidor WSS. Más adelante comentaremos como importar un web part creado en otro lado.

Creacion de Web Part

Creacion de Web Part

Una vez compilado el web part, abrimos nuestra colección de sitios y editamos la pagina para agregar el web part.

Creacion de Web Part

Creacion de Web Part

 

Creacion de Web Part

Creacion de Web Part

 

Gracias

Dar acceso a usuarios anónimos

Un problema con el que nos encontramos en Secretaria Académica es, el de crear un sitio público, al que todas las personas puedan acceder pero con el plus de que también puedan participar agregando comentarios o llenando formularios y que estos datos sean guardados en una lista sin que se le pida autenticarse. Esto con el fin de personas que no estén incorporadas a la plataforma puedan participar también. 

Una vez creado el sitio y habilitado el acceso anónimo a este, solo basta añadir la lista y configurar su máscara de Acceso Anónimo, para determinar qué es lo que los usuarios pueden hacer.

 Asignación de permisos para usuarios anónimos para sitios o listas

 

listaChat = currentWeb.Lists["Formulario"];
//La Mascara AnonymousPermMask64 se puede utilizar para sitios y/o listas
listaChat.AnonymousPermMask64 = SPBasePermissions.AddListItems;

Con esto lograremos que los usuarios anónimos puedan agregar registros a la lista sin que se  les pidan autenticarse.

Gracias

Crear un nivel de permisos

Muchas veces nos encontramos con la necesidad de otorgar permisos a usuarios dependiendo de lo que queramos que puedan hacer, tanto para los sitios como para las listas y bibliotecas, para esto podemos crear nuestros propios niveles de permisos permitiendo o no la interaccion de los usuarios con la plataforma.

Para esto se muestran ejemplos de creación de permisos:

Creacion de permisos

static void Main(string[] args)
 {
            using (SPSite site = new SPSite("http://sps3"))
            {
                using (SPWeb web = site.AllWebs[0])
                {
                    //SPRoleDefinition es la clase para los Niveles de Permisos!
                     SPRoleDefinition nivelPermiso = new SPRoleDefinition();
                     nivelPermiso.Name = "Mi Nivel de Permiso";
                     nivelPermiso.Description = "Este es un nuevo Nivel";
                    //Agregar los permisos que se requieran
                     nivelPermiso.BasePermissions=SPBasePermissions.OpenItems;
                      web.RoleDefinitions.Add(nivelPermiso);
                 }
           }
 }

Gracias

Consultar usuarios

Este es un ejemplo que nos muestra los usuarios que tienen los permisos para entrar a este sitio:

static void Main(string[] args)
{
          using (SPSite site = new SPSite("http://sps3"))
         {
               using (SPWeb web = site.RootWeb)
              {
                    foreach (SPUser item in web.SiteUsers)
                   {
                      Console.WriteLine(item.Name);
                   }
             }
      }
}

Gracias