03 diciembre, 2012

El pasado jueves 29 de noviembre tuve la oportunidad de presentar las novedades de la parte Social de SharePoint 2013 en un evento que organizó SUG.CAT, la comunidad de usuarios de SharePoint de Cataluña.

Os dejo la presentación para que podáis ojear las novedades espectaculares que trae consigo el producto. Disfrutadlo!!

24 marzo, 2012

Número 11 de la revista CompartiMOSS

Hola a todos,

Éste mes tengo el placer de colaborar en uno de los artículos publicados en #11 de la revista CompartiMOSS. Los contenidos de la edición son los siguientes:

  • Editorial

  • Conexiones BCS en el servicio de perfiles (Miguel Tabera Pacheco)

  • Combinando SharePoint y Project Server (Arnau Roca Palà, Marc Bàguena Cuéllar)

  • Linq To SharePoint (Juan Pablo Capdevila)

  • Sitios de Publicación de SharePoint 2010 (Santiago J. Porras Rodríguez)

  • Creando documentos profesionales en Microsoft Word 2010 (Alejandro Garrido)

  • Entrevista con David Martos

  • Lista personalizada con Excel (Marcus Vinícius Bittencourt)

  • ¿Cómo tener éxito con la adopción de usuario de soluciones SharePoint? (Edin Kapic)

  • UXDesignPoint

  • Exposición de un sitio web con autenticación por claims usando ADFS - Parte 1 (Diego Gatti)

  • Customización y ampliación de estadísticas de uso (Víctor Cea Espejo)

  • Firma Electrónica sobre SharePoint: principales ventajas y aplicaciones (Miguel López)

  • Client Object Model en SharePoint 2010 / Modificando la seguridad (Juan Pablo Pussacq Laborde)

  • El concepto de Nube Privada (Daniel S. Levi)

Descargaros la revista desde el siguiente enlace: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx

22 febrero, 2012

Birchman4SharePoint.wordpress.com

Quiero comunicar la creación de un blog tecnológico del equipo de expertos de Birchman. En él se tratarán temas tecnológicos relacionados con nuestras tecnologías preferidas:
  • SharePoint
  • Project Server
  • Nintex
  • ASP.NET

y demás productos y soluciones de la misma índole.

Visitadnos!!! http://birchman4sharepoint.wordpress.com

08 enero, 2012

Excel Services: Consulta de datos externos

A finales del mes pasado Birchman y SUGES hicieron un webcast de SharePoint y Project Server en el que se demostraba como integrar ambos productos. (Podéis ver el vídeo en la web de SUGES y aquí).

Uno de los puntos de debate tratados en la presentación, fué la limitación de excel services al recuperar datos de listas de SharePoint. Cuando nuestro Excel tiene un origen de datos apuntando a una lista de SharePoint éste no puede refrescar la conexión, ni de forma automática ni de forma manual. En la parte superior de la pantalla nos sale una barra de detalle que nos dice lo siguiente:








Si nos paramos a observar detenidamente veremos que ésta limitación existe en Excel Services, pero no en Excel (cliente pesado).
Entonces, para solucionar ésta limitación, el workaround utilizado pasa por un código simple que lo único que hace es abrir el Excel en local, con el cliente pesado, refrescar las conexiones, guardarlo y subirlo de nuevo a la librería de SharePoint.
A grandes rasgos, el código sería similar al siguiente:


static void Main(string[] args)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite("http://demo.sugesspps.com/"))
{
//Declaramos los objetos necesarios de Interop.Excel
Application oExcelApp = new Application();
Workbook oWorkBook = null;
Worksheet oSheet = new Worksheet();

//Declaramos los objetos del SP para acceder a la web, coger el SPFile
SPWeb web = site.OpenWeb();
//Accedemos a lista donde esta el excel
SPList list = web.Lists["Excels"];
//Recogemos el fichero
SPListItemCollection excelCollection = list.Items;

foreach (SPListItem excel in excelCollection)
{
SPFile file = excel.File;
//Nos guardamos el nombre del excel
string filename = @"C:\informes\" + file.Name;

//Si existe lo eliminamos
if (System.IO.File.Exists(filename) == true)
{
System.IO.File.Delete(filename);
}

//Leemos el fichero de y lo pasamos al disco duro
byte[] dataSHP = file.OpenBinary();
FileStream fsStoDisk = new FileStream(filename, FileMode.Create);
BinaryWriter writerToDisk = new BinaryWriter(fsStoDisk);
writerToDisk.Write(dataSHP, 0, (int)file.Length);
writerToDisk.Close();
fsStoDisk.Close();

//Accedemos a él y lo abrimos
oWorkBook = oExcelApp.Workbooks.Open(filename, Type.Missing, Type.Missing, Type.Missing, "Icnet2011", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
System.Threading.Thread.Sleep(4000);
//refrescamos las conexiones
oWorkBook.RefreshAll();
System.Threading.Thread.Sleep(10000);
//Guardamos los cambios
oWorkBook.Save();
//Cerramos el fichero
oWorkBook.Close();
oExcelApp = null;
//Ahora pasamos el fichero del disco duro al SHP
byte[] dataDisk = null;
FileStream fsToSHP = new FileStream(filename, FileMode.Open, FileAccess.Read);
BinaryReader brToSHP = new BinaryReader(fsToSHP);
long numBytes = new FileInfo(filename).Length;
dataDisk = brToSHP.ReadBytes((int)numBytes);
//Cargamos el fichero
file.SaveBinary(dataDisk);
}
}
});


}

Puntos a destacar:

  • Los Sleep's son para garantizar el tiempo de apertura y refresco de conexiones del Excel. Lo correcto sería utilizar eventos que alertasen de la finalización de apertura de Excel y de la misma forma, con el refresco de conexiones.

  • Utiliza la librería Microsoft.Office.Interop.Excel

  • Consume una licencia de Office


Opciones de despliegue:

  • Aplicación de consola bajo una tarea programada de Windows

  • Timer Job de SharePoint

  • Event Handler en la lista que hace de fuente de datos del Excel


Una variante muy interesante a ésta es utilizar la librería de Open XML como soporte para realizar las operaciones sobre el Excel. Esta librería es más libiana que la de Interop, como ya sabéis.
Si tenéis alguna variante más, no dudéis en comentar en el blog.

27 diciembre, 2011

SharePoint Branding: Propiedad After de CssRegistration

Hoy me he encontrado con la maravillosa propiedad After de la clase CssRegistration... Bien, explico rápidamente la situación:

Cuando creamos una Master Page desde cero, solemos tener varios CSS que nos definen la página, style.css, reset.css, ie7.css (ejem), etc etc... Y como todos sabéis, no es lo mismo:

  • <sharepoint:cssregistration name="reset.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="style.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="ie7.css" runat="server"></sharepoint:cssregistration>
Que por ejemplo:
  • <sharepoint:cssregistration name="ie7.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="style.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="reset.css" runat="server"></sharepoint:cssregistration>
Probablemente la segunda no muestre lo que nos ha enseñado el diseñador...

Bien pues para ésto hay solución! La propiedad "After" que se utilizaría de la siguiente forma:
  • <sharepoint:cssregistration name="reset.css" After="corev4.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="style.css" After="reset.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="ie7.css" After="style.css" runat="server"></sharepoint:cssregistration>
Bueno pues a pesar de ser ésta la propiedad a utilizar, hay que ser rigurosos ya que para los CSS propios, la ruta de acceso al mismo (etiqueta Name) tiene que ser exactamente la misma que pongamos en el After:
  • <sharepoint:cssregistration name="/_layouts/app1/css/reset.css" After="corev4.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="/_layouts/app1/css/style.css" After="/_layouts/app1/css/reset.css" runat="server"></sharepoint:cssregistration>
  • <sharepoint:cssregistration name="/_layouts/app1/css/ie7.css" After="/_layouts/app1/css/style.css" runat="server"></sharepoint:cssregistration>
Notar que el corev4.css no es necesario que siga dicha regla.

Espero que os ahorre algo de tiempo cuando os encontréis con algo parecido.

Os dejo una buena referencia al respecto: Blog de SingChan

02 diciembre, 2011

Error when open an SPSite object without context

Hi all! today we have had a little bit problem when we try to open a SPSite object from a Console application:

SPSite s = new SPSite(url);

The Web application at [URL] could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.

The solution maybe permissions of your Application pool user, but if you have well configured your farm you should chack your compilation platform of your Visual Studio Project.

Change the platform to x64 and the problem will be solved :)

01 diciembre, 2011

Live Groups vs Google Groups

Desde el blog de Mario Cortés recibimos una buena comparativa entre los grupos de Live y los Grupos de Google. Son muchas las veces que requerimos de comparativas exhaustivas de ciertas herramientas del mercado, en éste caso gratuitas.

El resumen es el siguiente:

Característica

Google Groups

Groups Live

Funciones del grupo

Url de grupo

Lista de distribución

Calendario compartido

Resumen de novedades

Mensajes al grupo

Integración con herramientas Office en modo Offline

No

RSS

No

Búsquedas sobre el grupo

Catalogación del grupo

No

Funciones de colaboración con documentos

Almacenamiento de documentos

Edición en línea

Colaboración con documentos

Estructura por carpetas

Histórico de documentos

No

Catalogación de documentos

No

Volumen de datos

1Gb por miembro

5GB para el grupo + 25GB por miembro

Tamaño máximo por fichero

2MB docs, 20MB Excel, 10MB PPT

100MB

Anclado de documentos

No

Seguridad

Invitar a miembros

Control de miembros

Control de permisos a nivel de documentos

Sí (pero depende del miembro que comparte el documento)

Control de permisos a nivel de listas de distribución

Https

No


23 noviembre, 2011

WebCast: SUGES - Birchman: Project Server 2010 y SharePoint Server 2010 - Análisis económico de proyectos






Por primera vez, Birchman y SUGES nos unimos para dar paso a un evento que esperamos, sea de renombre.

Hora de inicio: 20/12/2011 16:00
Hora de finalización: 20/12/2011 17:30

Ponentes:


  • Marc Bàguena Cuéllar: MCITP-PRO en SharePoint 2010 y MCP en SharePoint 2007, con más de 5 años de experiencia en soluciones integrales de negocio, concretamente en soluciones basadas en SharePoint. A lo largo de los 5 años ha trabajado con SharePoint 2003, 2007, 2010 y soluciones relacionados con dicho producto: EPM 2007 y 2010, Dynamics CRM, SSRS, etc.


  • Alfons Martínez: MCITP-PRO en SharePoint 2010 y MAP en España, con más de 3 años de experiencia en soluciones integrales de negocio, concretamente en soluciones basadas en SharePoint. A lo largo de los 3 años ha trabajado con SharePoint 2007 y 2010 y soluciones relacionados con dicho producto: EPM 2010, Dynamics CRM, Dynamics Navision, SSRS, etc.

En él se presentará una solución de integración para ambos sistemas, con el fin de dar una capa 360º a la evaluación de la cartera de proyectos, desde un punto de vista económico.

¿Quieres saber dónde se escapa el coste de tu proyecto?
¿No sabes cómo va el margen de tu proyecto?


Son algunas de las preguntas que podrás responder después de asistir al evento.

Te esperamos!!

20 noviembre, 2011

Rich Internet Application

RIA, la nueva arquitectura que lleva, de unos años a aquí, poniéndose de moda, basa su existencia en la idea de trasladar toda la lógica tradicional de la capa de presentación al cliente de acceso, normalmente el navegador.

Veamos un esquema:



Si nos fijamos en la figura, el esquema se diferencia claramente en la capa de presentación, la cual en un caso se sitúa en el servidor, facilitando una response en formato HTML, que posteriormente el navegador renderizará. El modelo RIA, se basa en el trabajo de entidades directamente en el navegador bajo un framework (por ejemplo JQuery) basado en lenguajes interpretados por el navegador, o sea, Javascript.

¿Es el futuro?

Sin lugar a dudas, Sí.

¿Por qué?

Dejamos atrás todas las realmente incómodas cargas de pantalla, para dar paso a interfícies de usuario ricas, potentes y mucho más dinámicas a la hora de facilitar la información al usuario.

¿Ejemplos?

Por supuesto, MVC3 es un muy buen ejemplo. HTML5 despertará una nueva era en éste sentido, aprovechemos el impulso de IE10 y HTML5 para subirnos a un carro que nos llevará lejos en los próximos años.

03 noviembre, 2011

Utilizando las audiencias en la navegación de SharePoint

Seguro que muchas veces habéis utilizado la navegación izquierda o superior de SharePoint para customizar los items de menús que queréis que aparezcan. Resulta muy cómodo elegir que el própio sistema muestre nuevos contenidos de publicación, nuevos sites, añadir secciones o páginas.

Ahora imaginamos que queremos utilizar ese mismo menú de publicación para nuestros menesteres, por ejemplo, de administración. Los items de administración DEBEN tener seguridad implementada dado que NO pueden verse, así que utilizamos las audiencias para solucionar la papeleta.

¿Qué ocurre cuando queremos hacer una combinación de rutas/jerarquías que no son ni páginas, ni Sites, ni elementos de lista? Efectivamente, las audiencias NO funcionan correctamente.
El principal motivo es que ES UNA CARACTERÍSTICA DE LA INFRAESTRUCTURA DE PUBLICACIÓN, no para hacer menús libremente.

Eso significa que cada vez que pongamos un elemento en el proveedor de navegación, éste aplicará la audiencia pero con ciertos condicionantes, ya que además de ello, aplica la seguridad del elemnto final (Site/Page/ListItem) y como consecuencia oculta o muestra el elemento.

Como habréis deducido, si le pongo un link del cual no puede resolver la seguridad, la audiencia no se comporta de forma correcta, así como la seguridad nativa del producto.

El funcionamiento es el siguiente:
  1. Si el nodo incluye un enlace a algo que no se puede convertir en un Site, página o ListItem, el campo de audiencia será ignorado.

  2. Si existe un nodo raíz agrupador y éste no satisface #1, entonces la raíz y los nodos secundarios se ocultará.

  3. En caso de un nodo secundario satisface #1, se mostrará sólo si el nodo raíz también satisface #1.

Espero que os sirva para momentos de desesperación...

Thanks Eric.. SharePoint Global Navigation Sometimes Ignores Target Audience Settings