Microsoft Office SharePoint Catalogue > Open XML Blog

 ‭(oculto)‬ Filtro: NombreCategoria

 Entradas de blog

Construimos un maestro detalle en 30' sin salir del navegador

Ver video

Sharepoint es una gran aplicación y tiene "un modo de ser", por así decirlo: se necesita un equilibrio en la personalización.

  1. En el navegador
  2. Usando Sharepoint Designer
  3. Utilizando herramientas públicas (típicamente Codeplex)
  4. Programando (.Net, XSLT, Javascript, etc.)

La idea es no escalar en la dificultad si se puede conseguir lo mismo fácilmente. No se trata de no programar sino de no hacerlo cuando no es necesario.

Para graficar el punto voy a construir una pequeña aplicación de administración de eventos y salas muy rápidamente sin salir del navegador.

Ésta es la idea:

        
Vincularemos 2 web parts que presentan vistas de 2 listas conectadas por un campo lookup

         Modificaremos la página estándar de Sharepoint (NewForm) agregándole Javascript que opere con el Sharepoint Form Field    Assistant para que – si hemos seleccionado una sala – todo evento nuevo tome por defecto el ID de la sala seleccionada.

         Crearemos una interfaz tabulada fácilmente utilizando Easy Tabs y nos agregaremos una utilidad práctica basada en JQuery (Form Field Assistant o SPFF).

         El resto es un poco de rutina.

 El javascript de NewForm. Aspx es éste:

<script type="text/javascript" for="load" >

//Agrega lo necesario al query String como para que SPFF modifique el valor del ID primario

    var currentURL = window.location;

    var query = currentURL.search.slice(1);

    if( query !='')

        {

            var pageArgs=new Array;

            pageArgs=query.split('&');

            var SelectedID=null;

            var flagExists=false;

            var fld='ID_Sala'

             for (var i = 0; i < pageArgs.length; i++)

             {    

                 if (pageArgs[i].indexOf('SelectedID')> -1)

                 {

            SelectedID=pageArgs[i].split('SelectedID%3D')[1].split('%')[0];        

                }

                 if (pageArgs[i].indexOf(fld)==0)

                 {

            flagExists=true;        

                }

        }    

if (!flagExists)

{

window.location= currentURL + '&'+ fld+ '=' + SelectedID;

}

}

</script>

  1. Easy Tabs está en http://www.pathtosharepoint.com/pages/easyTabs.aspx (allí hay un video muy claro)
  2. Form Field Assistant está en http://spff.codeplex.com/ bien documentado.

  

IT & Developers comunicándose: Windows Powershell

Ver video

Scripting siempre ha sido una bisagra entre administradores y desarrolladores, Powershell (implementación de .Net CLI y el futuro estándar de scripting de Microsoft Sharepoint ) permite reutilizar librerías .Net y COM.

Powershell mantiene un mecanismo de referencia similar al que estamos acostumbrados a trabajar en .Net – en términos conceptuales – pero no tiene una IDE que permita administrar esas referencias.

Para bien o para mal todo se hace en el archivo de texto, por ejemplo para establecer parámetros iniciales hay que colocar algo parecido a esto al principio:

param( [string]$strSourceFolder = $(throw "Indique la carpeta a respaldar"), [string]$strDestinationFolder = $(throw "Indique la carpeta de destino"))

(No lo pongan en otro lugar que al principio).

Si quieren saber que ensamblados están referenciados (Powershell es una aplicación .Net):

[appdomain]::currentdomain.getassemblies()

Tal como puede inferirse ejecutamos así el método estático CurrentDomain en System.AppDomain para obtener el conjunto de ensamblados en el domino activo.

Tenemos toda la disponibilidad de objetos que nos permita la seguridad del SO, así que pueden ir al explorador de objetos de Visual Studio y ejecutar los métodos que quieran del tipo – en este caso – appDomain.

Y así siempre…

¿Quieren cargar librerías de Sharepoint?

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")

¿Quieren referenciar sus propias librerías sin agregarlas al GAC?

[System.Reflection.Assembly]::Loadfile("C:\ElPathDeLaDLLCOMPLETO\MiLibreria.dll")

En esto nos vamos a basar para escribir una librería que funciona en Sharepoint y puede ser invocada desde Powershell.

Hay un problema histórico de fácil resolución que pocas veces se resuelve: alguien se olvida del Dispose.

Y se va a volver a olvidar: él u otro. Condición del ser humano, ¿vió señora?.

So, so…en vez de pasar un objeto que necesita ser liberado invertimos el proceso y pasamos de ser proveedores de objetos a consumidores de funciones.

No proveemos un objeto SPSite ó SPWeb sino que recibimos una función como parámetro utilizando delegados.

public delegate void ConsumeSiteWeb(SPSite sitio, SPWeb web);

Cualquier subrutina sin valor de retorno con esos parámetros puede ser recibida por una función con una firma como ésta:

public static void ProvideSiteWeb(string url, List<ConsumeSiteWeb> funcs)

¿Por qué una lista como parámetro?

Porque puedo recibir un conjunto de llamados si es necesario y optimizar la instanciación de los objetos.

¿Le voy a pedir a un administrador que maneje el Dispose y le voy a explicar el modelo línea a línea de proceso en Powershell para que haga todo en la misma línea?

¡Con el siguiente Script puedo importar los datos de una tabla de SQL Server a una lista de Sharepoint!

$splib= [System.Reflection.Assembly]::Loadfile("C:\Users\Administrator\Desktop\Carpetas\Proyectos\SP_Library\bin\Debug\SP_Library.dll")

 

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = "Server=MOSS;Database=AdventureWorks;Integrated Security=True"

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

 

$SqlCmd.CommandText = "SELECT TOP 1000 [ContactID]

,[FirstName]

,[MiddleName]

,[LastName]

,[Suffix]

,[EmailAddress]

,[Phone]

,[ModifiedDate]

FROM [AdventureWorks].[Person].[Contact]"

$SqlConnection.Open()

$SqlCmd.Connection = $SqlConnection

$SqlCmd.CommandTimeout = 0

 

$dr = $SqlCmd.ExecuteReader()

[SP_Library.Importer]::ToList("Contacts", $dr)

 

$SqlConnection.Close()

Powershell usa "$" en las variables como XSL, "{}" como C# y no es Case Sensitive como Visual Basic, cuando quieran comentar un párrafo no hagan pruebas: es "#". La vida es dura…

Les dejo la solución completa para que prueben aquí

MVPs, SharePoint, HISPAPOINT, Congresos...¿te enteraste?

Como muchos de ustedes saben, hace algo más de una semana hemos creado una nueva comunidad de SharePoint de habla hispana con el fin principal de compartir conocimientos y enriquecernos todos en lo profesional. Leer más en: Comunidad de SharePoint de habla hispana y Comunidad SharePoint habla-hispana - La noticia vuela!.

Quería compartir con ustedes algunas novedades al respecto:

  • La comunidad ya tiene 151 miembros
  • La comunidad ya tiene un nombre: HISPAPOINT
  • La comunidad está impulsada por varios MVPs, MCTs y referentes de los grupos de usuarios de distintos países, lo cual es un verdadero lujo. Los enumero:

   

Vladimir Medina García
Fernando García Loera
Héctor Insúa
Juan Carlos González
Fabián Imaz
Ricardo Muñoz
Mario Cortés Flores
Mauricio Grimberg
Gustavo Vélez
Daniel Seara

   

Esta lista no está completa, ya que estamos hablando con más referentes para que se unan y para que podamos alcanzar toda la geografía hispano parlante.

Sería interesante que se sumen a esta iniciativa aquellos que quieran:

  • Enterarse de las últimas noticias de SharePoint
  • Hacer consultas
  • Iniciar debates sobre esos temas de SharePoint que no están tan claros y necesitan ser discutidos
  • Alentar la creación de congresos de SharePoint de habla hispana en distintos países
  • Estar en contacto directo con los MVPs de SharePoint

¿Qué necesitamos?

Necesitamos ser más. No sólo por el hecho de que entendemos que a cualquiera que esté relacionado con las tecnologías SharePoint, le será útil participar en esta iniciativa.

Sino también porque queremos impulsar la organización de congresos de SharePoint en nuestro idioma y para eso necesitamos sponsors. Y los sponsor se harán presentes cuando vean que somos 2.000 miembros (no alcanza con 151).

¿Nos ayudas a divulgar la noticia a través de tu blog, twitter, linkedin, grupos de usuarios, enviando un mail a un amigo, etc.? Gracias!

Un comentario final

Aprovechemos estas oportunidades que no se dan muy seguido:

  • Que se junten los referentes para hacer una iniciativa conjunta
  • Que el espacio esté pensado para que sea manejado por sus miembros de acuerdo a sus necesidades. Es un espacio de todos.

Los esperamos!! en...

   

http://www.linkedin.com/groups?gid=2657423

   

Instalando MOSS en Windows Server 2008 R2 X64
Cuando pretendan comenzar la instalación van a encontrarse con un mensaje de bloqueo debido a cuestiones de compatibilidad.

 
Eso quiere decir: "Si no está el Service Pack 2 no se puede instalar", olvídense por ahora de buscar el ID de KB que muestra el aviso  (962935) porque no existe.
Tampoco vayan a buscar la versión de MOSS con SP2 incluido (tampoco existe pero no desesperar).
Lo que hay que hacer es fácil: necesitamos el contenido del service pack 2 en la carpeta [Updates] del programa de instalación de MOSS (en_office_sharepoint_server_2007_standard_and_enterprise_x86_x64_dvd_x13-38823.iso en mi caso).
Tanto en el directorio x64 como en el x86 hay un directorio updates, agreguen en el que van a usar (x64 en mi caso)
Abran el ISO como puedan o quieran (yo usé UltraISO) y obtengan el contenido del SP2 mediante la opción [/Extract].
Ej: .\officeserver2007sp2-kb953334-x64-fullfile-en-us /extract:"I:\@Software\Microsoft\MSDN\MOSS 2007 with SP2\Updates"
El [./] al principio es porque utilicé Powershell y vía este comando le estoy indicando que apruebo las condiciones de seguridad que implican correr ese ejecutable.
En mi caso copié todo lo extraído del SP2 en x64\Updates.
Windows luego "ve" el SP2 e instala ;)
RUN Reloaded – Registraciones abiertas al público!

Microsoft TechNet & MSDN te invitan a participar de las próximas jornadas de capacitación en donde se presentará Windows 7, Visual Studio 2010, SQL Server 2008 R2, Windows Server 2008 R2, entre muchas otras tecnologías que serán lanzadas en estos meses.

24 y 25 de Noviembre, UADE – Lima 717, Buenos Aires

¡Consultá la agenda y registrate a las sesiones que desees para reservar tus lugares en el evento! (*)

  RESERVAR LUGAR

……………………………………………………………………………………………………………………………………………………..

  RESERVAR LUGAR

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

 RESERVA TU LUGAR

………………………………………………………………………………………………………………………………………………………..

RESERVA TU LUGAR

(*) PARA PARTICIPAR DE TODAS LAS SESIONES, DEBERÁS EFECTUAR TU REGISTRO A CADA UNA POR SEPARADO. Por ejemplo: Día1 Profesionales IT +  Día 1 Desarrolladores + Día 2 Profesionales IT + Día2 Desarrolladores.

 Data Plattform Developement MVP

 mau@mvps.org

 Algunas cosas importantes

 

 “Somos lo que hacemos día a día.
De modo que la excelencia no es un acto, sino un hábito.”

Aristóteles

 ‭(oculto)‬ Administración