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:

<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

Añadiendo columnas a una lista creada programáticamente

Luego de crear una lista programáticamente, podemos añadir columnas con diferentes tipos de contenido, nombres, longitudes, etc.

Para esto, mostramos un ejemplo de cómo agregar columnas a una lista ya creada, esto desde una aplicación de consola en Visual Studio 2008:

//Obtener la lista de la web donde la tengamos, puede ser la raiz o cualquier subsitio
SPList lista= web.Lists["ListaConversacion"];
//Obtener la coleccion de campos
SPFieldCollection campos = lista.Fields;
//Agregar los campos (nombre, tipo, requerido)
string horaMensaje = campos.Add("HoraMensaje", SPFieldType.Text, false);
string de = campos.Add("De", SPFieldType.Text, false);
string sesion = campos.Add("Sesion", SPFieldType.Text, false);
string mensaje = campos.Add("Mensaje", SPFieldType.Text, false);
//Obtenerlos como SPFields
SPField fhoraMensaje = campos.GetField(horaMensaje);
SPField fde = campos.GetField(de);
SPField fsesion = campos.GetField(sesion);
SPField fmensaje = campos.GetField(mensaje);
//Obtener la Vista
SPView oView = lista.DefaultView;
//Y colocarlos en la vista
SPViewFieldCollection collViewFields = oView.ViewFields;
collViewFields.Add(fhoraMensaje);
collViewFields.Add(fde);
collViewFields.Add(fsesion);
collViewFields.Add(fmensaje);
//Actualizar La vista
oView.Update();

Quedando asi:

Añadir Columnas a Lista

Añadir Columnas a Lista

Gracias

Crear una lista o biblioteca programáticamente

Comenzaremos mostrando un ejemplo de cómo crear una lista en el sitio raíz o en un  subsitio de SharePoint, a continuación se muestra cómo hacerlo en el contexto actual,esto desde una aplicación de consola en Visual Studio 2008: 

//Variable tipo SPWeb
SPWeb currentWeb;  
//Obtenemos la web del contexto actual                                                              
currentWeb = SPControl.GetContextWeb(Context);   
//Variable SPList
SPList formulario;                                                                               
//Agregar una nueva lista
Guid nuevoID = currentWeb.Lists.Add("Formulario", "Lista donde se guarda la Encuesta", SPListTemplateType.CustomGrid);
//Obtener la lista que se ha creado
formulario = currentWeb.Lists["Formulario"];
//Propiedad de la lista de aparecer en el menu
formulario.OnQuickLaunch = true;                                            
//Actualizar la lista
formulario.Update();
//Actualizar el Web actual                                                                        
currentWeb.Update();

                                                                       

Para crear la lista en la raíz de la colección de sitios (RootWeb) 

//Obtener el Sitio Raiz
SPSite site = new SPSite("http://sps3");                                   
//Obtener la Web Raiz
SPWeb web = site.RootWeb;

                                                         
//Una vez obtenido el web, lo demas es igual 

Quedando de esta manera….. 

 

 

Gracias