Blog del CIIN

Blog del Centro de Innovación en Integración de Cantabria

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

Enlaces Recomendados

December 2011 - Artículos

Office 365: Resumen de posts (III)!

Para cerrar el año, y después de unos cuantos meses desde el anterior resumen, os dejo el tercer recopilatorio de artículos en torno a Office 365 publicados en el blog del CIIN.

Capacidades & Personalización

Desarrollo

IT

Recursos

Otros

Publicado 31/12/2011 9:41 por Juan Carlos González Martín | 2 comment(s)

Archivado en:

SharePoint 2010: ¿Se puede ejecutar STSADM desde el Management Shell de PowerShell?

La respuesta a esta pregunta es que sí, ya que el Management Shell de SharePoint 2010 incluye en la variable path la carpeta dónde reside STSADM: ..\14\bin. De esta forma, si iniciamos la SharePoint 2010 Management Shell podremos ejecutar desde la misma stsadm sin tener que navegar hacía el path de esta herramienta desde la línea de comandos convencional o añadir la ruta dónde reside a la variable path.

image 

Nota: Puede ser que sea necesario que ejecutéis el Shell como administradores.

Publicado 30/12/2011 13:23 por Juan Carlos González Martín | con no comments

SharePoint 2010: Añadiendo acciones personalizadas en la interfaz de usuario (VIII)!

Siguiendo con la serie de artículos sobre como añadir acciones personalizadas a la interfaz e usuario de SharePoint 2010, en esta ocasión vamos a ver como extender el menú de bienvenida de usuario. Pero antes, os recuerdo los artículos previos de la serie:

Para extender el menú de bienvenida:

  • Creamos un proyecto de tipo vacío para SharePoint 2010.
  • Añadimos al proyecto un elemento de tipo “Empty element” y configuramos el archivo Elements.xml de la siguiente forma:
   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
   3:     <CustomAction
   4:           Id ="CustomMenu_MyInformation"
   5:           GroupId="PersonalActions"
   6:           Location="Microsoft.SharePoint.StandardMenu"
   7:           Sequence="1000"
   8:           Title="My Personal Information"
   9:           Description="View and Update my personal Information"
  10:           ImageUrl="_layouts/images/icon_contactlist.gif">
  11:         <UrlAction Url="/SitePages/My%20Information.aspx"/>
  12:     </CustomAction>
  13: </Elements>
  • Como vemos, la clave de todo (como siempre) pasa por configurar adecuadamente los atributos GroupId y Location del elemento <CustomAction> ya que ambos fijan donde ubicar la acción personalizada. En este caso los valores respectivos “PersonalAction” y “Microsoft.SharePoint.StandardMenu” para ambos atributos nos permiten indicar que estamos extendiendo el menú de bienvenida del usuario.
  • Al añadir el elemento de tipo vacío al proyecto se crea la correspondiente característica para su despliegue. El ámbito de la misma es Web, por lo que si queremos que la acción personalizada esté disponible de forma más global tendremos que cambiar dicho ámbito.
  • Sin más, desplegamos el artefacto y comprobamos que hemos extendido de forma efectiva el menú de bienvenida del usuario.

image

Fuente: http://www.codeproject.com/Articles/138547/How-to-edit-the-Welcome-drop-down-menu-in-Sharepoi?display=Print

Publicado 30/12/2011 8:46 por Juan Carlos González Martín | 1 comment(s)

SharePoint 2010: Como cambiar el puerto de la administración central!

Si en alguna ocasión os encontráis con la necesidad de cambiar el número de puerto de la administración central de SharePoint 2010, tenéis dos posibilidades:

  • Mediante STSADM y la opción setadminport:
   1: stsadm -o setadminport -port <Numero_Puerto>
  • Mediante el cmdlet Set-SPCentralAdministration:
   1: Set-SPCentralAdministration -Port <Numero_Puerto>
Más información: http://technet.microsoft.com/en-us/library/cc288247.aspx

Publicado 29/12/2011 14:28 por Juan Carlos González Martín | 2 comment(s)

SharePoint Online: Como añadir CSSs personalizados a mi sitio público!

Como ya he comentado en alguna ocasión, de momento las prestaciones de SharePoint Online para modelar sitios públicos son un tanto limitadas y no tenemos muchas opciones de extensibilidad y de crear sitios web realmente potentes. Pero como es lo que hay, tenemos que adaptarnos y explotar al máximo lo que tenemos de serie. En este sentido, supongamos que tenemos nuestro sitio web público de SharePoint Online y que queremos aplicarle CSSs personalizados…¿cómo procedemos? Bueno, los pasos a realizar (las herramientas que uséis luego vosotr@s son cosa vuestra) son los siguientes:

  • En primer lugar, accedemos a nuestro sitio público y a la biblioteca de páginas que contiene las páginas del mismo que son accesibles de forma anónima.
  • Hacemos clic sobre una de las páginas de la biblioteca para proceder a editarla con el diseñador web.
  • En la pestaña “Diseño” de la cinta pulsamos sobre la opción “Hoja de estilo”.
  • A continuación se abre una ventana que nos permite en primer lugar descargarnos la hoja de estilos theme.css que está usando por defecto el sitio.
image image image
  • Esta hoja de estilos la podemos editar con nuestro editor de CSSs preferido. En mi caso, con hacerlo con SharePoint Designer 2010 (SPD 2010) es suficiente. De esta forma, tendremos acceso a los estilos que casi seguro que podemos sobreescribir mediante la ventana anterior:
   1:  
   2:  
   3: .BG_Null
   4: {
   5: }
   6: .BG_Base
   7: {
   8:     background-color:#6699CC;
   9: }
  10: .BG_VeryLight
  11: {
  12:     background-color:#ffffff;
  13: }
  14: .BG_Light
  15: {
  16:     background-color:#CCCC99;
  17: }
  18: .BG_Mid
  19: {
  20:     background-color:#003366;
  21: }
  22: .BG_Dark
  23: {
  24:     background-color:#333333;
  25: }
  26: .BG_VeryDark
  27: {
  28:     background-color:#000000;
  29: }
  30:  
  31:  
  32:  
  33: .F_VeryLight
  34: {
  35:     color:#ffffff;
  36: }
  37: .F_Light
  38: {
  39:     color:#CCCC99;
  40: }
  41: .F_Mid
  42: {
  43:     color:#003366;
  44: }
  45: .F_Dark
  46: {
  47:     color:#333333;
  48: }
  49: .F_VeryDark
  50: {
  51:     color:#000000;
  52: }
  53:    
  54:  
  55: body
  56: {
  57:     text-align:Center;
  58:     background-color:#FFFFFF;
  59:   
  60:   background-image: url(/Resources/_backgroundImages/56012d07-3405-4871-ae16-c90396ff23a4.Jpeg);
  61:   background-position: left top;
  62:   background-repeat: repeat-x;
  63:   
  64:     font-family:Arial, Geneva, sans-serif;
  65:     font-size:10pt;
  66:     color:#000000;
  67: }
  68:  
  69:  
  70:  
  71:  
  72: .MS_MasterFrame
  73: {
  74:     margin-left:auto;
  75:     margin-right:auto;
  76: }
  77:  
  78:  
  79: td, th
  80: {
  81:   font-family:Arial, Geneva, sans-serif;
  82:   font-size:10pt;
  83: }
  84:  
  85:  
  86: .MS_MasterFrame
  87: {
  88:     width:980px;
  89: }
  90:    
  91: .MSC_SiteWidth,.MS_MasterHeader,.MS_MasterGlobalLinks,.MS_MasterPrimaryNav,.MS_MasterFooter,.MS_MasterTopAD,.MS_MasterBottomAD
  92: {
  93:     width:100%;
  94: }
  95:  
  96:  
  97:  
  98: .MSC_HeaderFrame
  99: {
 100:     background:#333333;
 101:     width:100%;
 102: }
 103:  
 104: .MSC_HeaderDescription
 105: {
 106:     font-size:12px;
 107:     margin:0px;
 108: }
 109:     
 110:  
 111:  
 112: .MSC_GlobalLinkSpace
 113: {
 114:     padding:10px;
 115:     font-size:10pt;
 116:     color:#ffffff;
 117: }
 118: .MSC_GlobalLink
 119: {
 120:     font-size:10pt;
 121:     color:#ffffff;
 122:     text-decoration:none;
 123:     font-weight:bold;
 124: }
 125: .MSC_GlobalLink:hover
 126: {
 127:     font-size:10pt;
 128:     color:#ffffff;
 129:     text-decoration:underline;
 130:     font-weight:bold;
 131: }
 132: .MSC_GlobalLink:visited
 133: {
 134:     font-size:10pt;
 135:     color:#ffffff;
 136:     text-decoration:none;
 137:     font-weight:bold;
 138: }
 139: .MSC_GlobalLinkSpace
 140: {
 141:     font-size:10pt;
 142: }
 143:  
 144:  
 145:     
 146: .MSC_PrimaryNavFrame
 147: {
 148:     background:#003366;
 149:     width:100%;
 150:     margin:1px 0px 5px 0px;
 151:     text-align:left;
 152: }
 153:  
 154: .rtl .MSC_PrimaryNavFrame
 155: {
 156:     text-align:right;
 157: }
 158:  
 159: .MSC_PrimaryNavLink
 160: {
 161:     color:#ffffff;
 162:     font-size:12px;
 163:     text-decoration:none;
 164: }
 165: .MSC_PrimaryNavLink:hover
 166: {
 167:     color:#ffffff;
 168:     font-size:12px;
 169: }
 170: .MSC_PrimaryNavLink:visited
 171: {
 172:     color:#ffffff;
 173:     font-size:12px;
 174:     text-decoration:none;
 175: }
 176: .MSC_PrimaryNavLinkFrame-On
 177: {
 178:     background:#E3FAE7;
 179:     white-space:nowrap;
 180:     padding:5px 10px 5px 10px;
 181: }
 182: .MSC_PrimaryNavLink-On
 183: {
 184:     color:#325884;
 185:     font-size:12px;
 186:     text-decoration:none;
 187:     font-weight:bold;
 188: }
 189: .MSC_PrimaryNavLink-On:hover
 190: {
 191:     color:#325884;
 192:     font-size:12px;
 193:     font-weight:bold;
 194: }
 195: .MSC_PrimaryNavLink-On:visited
 196: {
 197:     color:#325884;
 198:     font-size:12px;
 199:     text-decoration:none;
 200:     font-weight:bold;
 201: }
 202: .MSC_PrimaryNavLeftSpace
 203: {
 204:     width:1px;
 205:     white-space:nowrap;
 206:     background:#000000;
 207:     font-size:1px;
 208: }
 209: .MSC_PrimaryNavRightSpace
 210: {
 211:     width:1px;
 212:     background:#CCCC99;
 213:     white-space:nowrap;
 214:     font-size:1px;
 215: }
 216: .MSC_PrimaryNavTopSpace
 217: {
 218:     height:1px;
 219:     background:#000000;
 220: }
 221: .MSC_PrimaryNavBottomSpace
 222: {
 223:     height:1px;
 224:     background:#CCCC99;
 225: }
 226:  
 227:  
 228:  
 229: .MS_MasterLeftNav
 230: {
 231:     background:#CCCC99;
 232: }
 233: .MSC_TextStyle
 234: {
 235:   text-align:left;
 236: }
 237: .rtl .MSC_TextStyle
 238: {
 239:   text-align:right;
 240: }
 241:  
 242: .MSC_SecondaryNavFrame
 243: {
 244:     background:#E3FAE7;
 245:     width:100%;
 246:     text-align:left;
 247: }
 248: .rtl .MSC_SecondaryNavFrame
 249: {
 250:     text-align:right;
 251: }
 252: .MSC_SecondaryNavLink
 253: {
 254:     color:#325884;
 255:     font-size:10pt;
 256:     text-decoration:none;
 257: }
 258: .MSC_SecondaryNavLink:hover
 259: {
 260:     color:#325884;
 261:     font-size:10pt;
 262: }
 263: .MSC_SecondaryNavLink:visited
 264: {
 265:     color:#325884;
 266:     font-size:10pt;
 267:     text-decoration:none;
 268: }
 269: .MSC_SecondaryNavLeftSpace
 270: {
 271:     font-size:1px;
 272:     background:#003366;
 273:     width:1px;
 274:     white-space:nowrap;
 275: }
 276: .MSC_SecondaryNavRightSpace
 277: {
 278:     font-size:1px;
 279:     background:#ffffff;
 280:     width:1px;
 281:     white-space:nowrap;
 282: }
 283: .MSC_SecondaryNavTopSpace
 284: {
 285:     background:#003366;
 286:     height:1px;
 287: }
 288: .MSC_SecondaryNavBottomSpace
 289: {
 290:     background:#ffffff;
 291:     height:1px;
 292: }
 293: .MSC_SecondaryNavLeftFrame-On
 294: {
 295:     padding:5px;
 296:     background:#ffffff;
 297: }
 298: .MSC_SecondaryNavLinkFrame-On
 299: {
 300:     white-space:nowrap;
 301:     padding:5px;
 302:     background:#ffffff;
 303: }
 304: .MSC_SecondaryNavLink-On
 305: {
 306:     padding:5px;
 307:     font-size:10pt;
 308:     font-weight:bold;
 309:     color:#325884;
 310:     text-decoration:none;
 311: }
 312: .MSC_SecondaryNavLink-On:hover
 313: {
 314:     padding:5px;
 315:     font-size:10pt;
 316:     font-weight:bold;
 317:     color:#325884;
 318: }
 319: .MSC_SecondaryNavLink-On:visited
 320: {
 321:     padding:5px;
 322:     font-size:10pt;
 323:     font-weight:bold;
 324:     color:#325884;
 325:     text-decoration:none;
 326: }
 327:    
 328:  
 329:  
 330: .MS_MasterBody
 331: {
 332:     background:#ffffff;
 333: }
 334: .MSC_Body
 335: {
 336:     padding:10px;
 337:     text-align:left;
 338:     background:#ffffff;
 339:     height:100%;
 340: }
 341: .rtl .MSC_Body
 342: {
 343:     text-align:right;
 344: }
 345:  
 346:  
 347: .MSC_FooterFrame
 348: {
 349:     background:#333333;
 350:     padding:5px;
 351:     text-align:center;
 352: }
 353: .MSC_FooterLink
 354: {
 355:     color:#ffffff;
 356:     font-size:10pt;
 357:     text-decoration:none;
 358: }
 359: .MSC_FooterLink:hover
 360: {
 361:     color:#ffffff;
 362:     font-size:10pt;
 363:     text-decoration:underline;
 364: }
 365: .MSC_FooterLink:visited
 366: {
 367:     color:#ffffff;
 368:     font-size:10pt;
 369:     text-decoration:none;
 370: }
 371: .MSC_FooterLinkSpacer
 372: {
 373:     color:#ffffff;
 374:     font-size:10pt;
 375: }
 376: .MSC_FooterText
 377: {
 378:     color:#ffffff;
 379:     font-size:10pt;
 380: }
 381:  
 382:  
 383:  
 384: .MSC_CollectDataTable,.MSC_CollectDataTable
 385: {
 386:     font-size:10pt;
 387: }
 388:  
 389:  
 390:     
 391: .MSC_ECBorder
 392: {
 393:   border-color:  #003366;
 394: }
  • Lo siguiente que tendremos que hacer es identificar dónde están siendo usados los estilos en la página que estamos personalizando. Esto lo podemos conseguir mediante el uso de las herramientas de desarrollo del navegador que estemos usando. En mi caso, he ido a lo fácil, es decir, me he quedado con las herramientas que más rápidamente me han dado la información necesaria: en este caso las de Firefox.
  • De esta forma, he identificado que el estilo que se usa en el cuerpo de una página es .MSC_Body.
  • Como ya se el estilo a modificar, me he ido al archivo theme.css descargado, he localizado .MSC_Body y lo he personalizado cambiando el valor de la propiedad background de #ffffff a #25884.
  • Este estilo modificado lo he copiado y pegado a la ventana de inserción de CSS anterior (Nota: Para poder añadir nuestro CSS, hay que marcar el check “Aplicar código CSS personalizado al sitio web”.
  • Tras pulsar Aceptar, podremos comprobar que el look & feel ha cambiado. Si guardamos los cambios de la página, estos serán visibles a los usuarios que accedan a partir de ese momento. Y estos cambios, al tratarse de un estilo usado en todas las páginas, serán globales para este caso en todo el sitio.
image image image

Publicado 28/12/2011 23:21 por Juan Carlos González Martín | con no comments

SharePoint 2010: Limitaciones en listas externas (II)!

Como sabéis, una de las formas que proporciona SharePoint 2010 para integrar datos de negocio es a través de las denominadas listas externas. Aunque las listas externas pueden parecer similares a las listas convencionales de SharePoint, en la práctica nos encontraremos con una serie de limitaciones que viene fijadas por las características de los Business Connectivity Services (BCS) como ya comenté en este enlace. Junto con estas limitaciones, hay otras que tenemos que tener en mente cuando trabajemos con este tipo de listas en cuanto a aquellas características no soportadas en las mismas como son las siguientes:

  • Flujos de trabajo.
  • Alertas.
  • Feeds RSS.
  • Carpetas.
  • Adjuntos.

Basta con acceder a una lista externa e inspeccionar su ribbon para ver que opciones como las anteriores no están disponibles en las mismas:

image image

Publicado 28/12/2011 8:44 por Juan Carlos González Martín | 1 comment(s)

SharePoint 2010: Como crear formularios personalizados de lista (II)!

Siguiendo con la serie de artículos sobre creación de formularios personalizados de lista, en esta ocasión vamos a ver la aproximación declarativa comentada en el primer artículo. Esta aproximación está muy bien descrita en este post, por lo que simplemente destacaré los puntos claves de la misma:

  • En primer lugar, definir a nivel de tipo de contenido cuáles van a ser los formularios asociados al mismo. Para ello, en la definición XML del tipo de contenido tendremos que definir un elemento de tipo <XmlDocuments> y dentro del mismo un elemento <XmlDocument> con un elemento de tipo <FormUrls> que contendrá la definición para los formularios de visualización, edición y creación de un elemento de lista / biblioteca basado en el tipo de contenido en cuestión. Como veis, se trata de un único formulario consistente en una página de aplicación desplegada en el directorio LAYOUTS y que recibe por query string el parámetro que indica el modo de trabajo con el elemento de lista en cuestión.
   1: <XmlDocuments>
   2:     <XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms/url">
   3:         <FormUrls xmlns="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms/url">
   4:             <Display>_layouts/SPCustomListFormDemo/Product.aspx?mode=display</Display>
   5:             <Edit>_layouts/SPCustomListFormDemo/Product.aspx?mode=edit</Edit>
   6:             <New>_layouts/SPCustomListFormDemo/Product.aspx?mode=new</New>
   7:         </FormUrls>              
   8:     </XmlDocument>  
   9: </XmlDocuments>
  • En segundo lugar, si creamos una definición de lista en base al tipo de contenido anterior que contiene la definición de los formularios a usar, estos son “copiados” en el esquema de la lista utilizando la misma estructura ya vista para el tipo de contenido ya que cuando se vincula un tipo de contenido a una lista, realmente se está haciendo una instancia del mismo.
  • El resultado, una vez desplegado tipo de contenido, definición de lista y crear una instancia de la misma es que estaremos usando nuestros formularios personalizados:

image

Publicado 27/12/2011 15:37 por Juan Carlos González Martín | 2 comment(s)

SharePoint 2010: ¿Se soportan los updatepanel en soluciones Sandbox?

Pues esta es la pregunta que hacían el otro día en alguno de los foros por los que habitualmente “merodeo”…y como siempre, la curiosidad pudo conmigo al respecto, de manera que una búsqueda rápida me reveló lo que se intuía a raíz de la pregunta en cuestión: en principio no se soportan los updatepanel en soluciones Sandbox debido a la particularidad de como el proceso de Sandbox se encarga de atender las peticiones relativas a WebParts desplegadas de esta forma en SharePoint 2010. Referencias al respecto (no muchas):

Publicado 26/12/2011 21:55 por Juan Carlos González Martín | con no comments

Office 365: Trabajo con grupos de distribución!

En Exchange Online como ocurre con Exchange On-Premise tenemos la posibilidad de crear y trabajar con grupos de distribución y alias de e-mail de una forma sencilla a través de las opciones de administración disponible como se comenta en este enlace: http://emtunc.org/blog/09/2011/add-e-mail-aliases-to-your-office-365-distribution-groups/. Otros recursos interesantes relacionados con este tema son:

image

Publicado 25/12/2011 11:18 por Juan Carlos González Martín | 1 comment(s)

Archivado en:

SharePoint 2010: Como crear formularios personalizados de lista (I)!

Cuando modelamos tipos de contenido o definiciones de lista, tenemos la posibilidad de indicar que los formularios de trabajo para crear, actualizar o visualizar un elemento no sean los formularios por defecto, si no que sean formularios de tipo personalizado. Para personalizar estos formularios, tenemos dos posibilidades:

  • Utilizando las opciones de personalización que tenemos en la interfaz de usuario.
  • De forma rápida (RAD) mediante SharePoint Designer 2010 (SPD 2010) que dada una lista nos permite definir múltiples formularios de cada tipo asociados a la misma, aunque sólo uno de ellos puede ser formulario por defecto.
  • En el entorno de Visual Studio 2010 (VS 2010) y modelando los tipos de contenido y definición de lista para que utilicen nuestros formularios personalizados en lugar de los que por defecto están disponibles en la plataforma. A su vez, en este entorno tenemos dos posibilidades de definición de estos formularios:
    • De forma declarativa a través del XML que nos permite modelar los tipos de contenido y las listas.
    • De forma programática mediante el modelo de objetos.

Para la opción de SPD 2010:

  • Abrimos nuestro sitio de trabajo con SharePoint Designer 2010 (SPD 2010) y nos vamos a la sección relativa a las listas.
  • Hacemos clic sobre la lista para la que queremos crear un formulario de tipo personalizado.
  • En la página de resumen de la lista, nos encontraremos con la sección “Forms” desde la que es poisible crear nuevos formularios de lista. En esta sección basta con pulsar “New” para crear un formulario nuevo para crear, actualizar o visualizar un elemento de lista.
  • En la ventana que se abre, simplemente elegimos el tipo de formulario a crear, le damos un nombre y marcamos si queremos que se trate del formulario por defecto.
image image image
  • Este nuevo formulario lo podemos personalizar a nuestro gusto en SPD 2010.
  • Tras guardar los cambios, podremos comprobar que está operativo en la lista en cuestión.
image image

Publicado 24/12/2011 9:17 por Juan Carlos González Martín | 3 comment(s)

SharePoint 2010: Como añadir un sitio como una unidad de red!

Como alternativa a la vista de explorador que tenemos disponible en toda biblioteca de documentos de un sitio de SharePoint (On-Premises u Online), es muy sencillo mapear el acceso a la misma o a todas las bibliotecas del sitio a través de agregar la correspondiente unidad de red en nuestro equipo:

  • Accedemos a una de las bibliotecas de documentos de nuestro sito (en este caso, se trata de una biblioteca de un sitio de SharePoint Online) y copiamos la Url de acceso a la misma.
  • Nos vamos al explorador de Windows de nuestro PC, seleccionamos “Equipo” y luego la opción “Conectar a unidad de red…”.
  • En la siguiente pantalla, simplemente pegamos la Url de la biblioteca y quitamos los checks relativos a las opciones de conexión. Pulsamos “Finalizar”.
image image image
  • Si todo ha ido bien, accederemos a la biblioteca desde el explorador de Windows:

image

 

 

Nota: En el caso en el que obtengáis error en la conexión, seguramente se soluciones agregando el sitio de SharePoint como sitio de confianza en Internet Explorer. Finalmente, os dejo un par de referencias en relación a este tema:

Publicado 23/12/2011 19:25 por Juan Carlos González Martín | 2 comment(s)

SharePoint 2010: Como enviar un elemento a la papelera de reciclaje con LINQ To SharePoint!

Como sabéis, cuando se elimina un documento de una biblioteca de documentos o un elemento de una lista de SharePoint, automáticamente se va a la papelera de reciclaje del usuario de forma que pueda recuperarlo dentro de la ventana de días de recuperación que se haya configurado en la papelera. Pero, ¿qué pasa si el borrado del elemento lo hacemos programáticamente utilizando LINQ To SharePoint? Pues que dependiendo de como hagamos el borrado, el elemento se irá o no a la papelera de reciclaje:

  • Si usamos el método DeleteOnSubmit(), el elemento será borrado de forma automática en cuanto hagamos un SubmitChanges() y no se irá a la papelera de reciclaje por lo que no podremos recuperarlo.
  • En cambio, si usamos el método RecycleOnSubmit() nos encontraremos con qué el elemento si irá a la papelera de reciclaje en cuanto hagamos un SubmitChanges() y por lo tanto será posible su recuperación de la misma.
  • Un ejemplo de borrado en LINQ To SharePoint con RecycleOnSubmit() es el siguiente:
   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: //Espacios de nombres necesarios
   7: using Microsoft.SharePoint;
   8: using Microsoft.SharePoint.Linq;
   9: using SPLINQProxy;
  10:  
  11:  
  12: namespace SPLINQToSPCADemo
  13: {
  14:     class Program
  15:     {
  16:         static void Main(string[] args)
  17:         {
  18:             string sSharePointSite =
  19:                 "http://demo2010a:100/sites/PortalIntranet";
  20:             try
  21:             {
  22:                 using (SPLINQProxyDataContext ctx =
  23:                     new SPLINQProxyDataContext(sSharePointSite))
  24:                 {
  25:                     EmpresasItem EmpresaToDelete =
  26:                         (from e in ctx.Empresas
  27:                          where e.Title.Contains("Microsoft")
  28:                          select e).First();
  29:                     if (EmpresaToDelete!=null)
  30:                     {
  31:                         ctx.Empresas.RecycleOnSubmit(EmpresaToDelete);
  32:                         ctx.SubmitChanges();
  33:                         Console.WriteLine("Se ha borrado la empresa");
  34:                     }
  35:                 }
  36:             }
  37:             catch (Exception ex)
  38:             {
  39:                 Console.WriteLine("Error: {0}", ex.Message);
  40:             }
  41:  
  42:             Console.ReadLine();
  43:         }
  44:     }
  45: }
  • Si probamos el código anterior con la lista de ejemplo (Empresas), podremos ver que al eliminar un elemento de la misma este se va a la papelera de reciclaje.
image image

Publicado 22/12/2011 18:24 por Juan Carlos González Martín | con no comments

CompartiMOSS: El # 10 ya está en la calle y viene cargadito de regalos :-)!

Para cerrar el año, ya tenemos disponible un nuevo número de CompartiMOSS, el nº10, que viene cargado de buenos e interesantes artículos….desde aquí agradecer a las personas que han participado en este número el trabajo realizado y en nombre de Gustavo, Fabián y yo mismo que esperamos seguir contando con ellos para los nuevos números que vengan en 2012. El resumen del contenido del nuevo número es el siguiente:

  • Editorial.
  • Cómo crear una página de error personalizada en SharePoint 2010 (Luis Máñez).
  • Aplicando buenas prácticas a una solución SandBoxed que despliega noticias gráficas (Juan Manuel Herrera).
  • SharePoint Governance - I (Randy Williams - Roberto Delgado).
  • Como remplazar controles delegados en sitios de SharePoint 2010 (Juan Carlos González Martín).
  • Datos externos desde Office365 (Mario Cortés Flores).
  • Gestión de documentos para ISO 9001 con SharePoint 2010 (Juan Emilio Martínez).
  • Entrevista con Daniel Seara.
  • Timer Jobs en SharePoint 2010 (Carlos Ariel Dantiags).
  • NPS ENGINE, herramienta de Diseño de Procesos para SharePoint.
  • el caso de los Centros Tecnológicos de Microsoft (MTC) (Roberto Delgado).
  • CUDISS - SharePoint BI para hospitales (Luis Máñez).
  • SSD: El Síndrome de la SharePoint Dependencia (Juan Pablo Pussacq Laborde).
  • Sitios web públicos en Office 365 (Alberto Diaz Martin).
  • Aprovisionamiento de Páginas Wiki en SharePoint 2010 (David Martos).

Se puede descargar desde el sitio de SkunkWorks (http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx) o visite el sitio de CompartiMOSS en Facebook (http://www.facebook.com/group.php?gid=128911147140492)

image

Publicado 21/12/2011 9:53 por Juan Carlos González Martín | con no comments

SharePoint 2010: ¿Cómo puedo evitar que los usuarios editen los attachments de un elemento de lista?

Esta pregunta es la que planteaban en el foro de MSDN ante un inconveniente que presenta SharePoint cuando trabajas con adjuntos en elementos de lista. Básicamente, cuando editas un elemento de una lista que tiene vinculado al menos un adjunto, puedes ver dicho adjunto e incluso editarlo si es un documento Office…y aquí es dónde aparece el problema: si editas el documento, realizas modificaciones y guardas cambios cuando vuelvas a la pantalla de edición del documento y pulses “Guardar” te encontraras con un bonito error indicando que se ha producido un conflicto al guardar el elemento ya que otro usuario lo ha modificado. Por lo tanto, SharePoint está separando lo que es la edición del documento de la edición del adjunto tratándolo como dos operaciones de edición del elemento y resultando en este conflicto…La pregunta es: ¿Se puede solucionar esto de alguna forma? La respuesta es que de forma sencilla, no al 100 %, pero algo se puede hacer.

image image

Una posible solución al problema pasa por impedir de alguna forma que el usuario pueda modificar el archivo adjunto cuando se edita el elemento, y precisamente de esto va este post. Vamos a ver como personalizando el formulario de edición del formulario con SharePoint Designer 2010 (SPD 2010) podemos llegar a eliminar la posibilidad de que el usuario pueda editar los adjuntos del elemento de lista:

  • Nos vamos a SPD 2010 y editamos la lista a modificar. En la página de resumen nos vamos a la sección Forms y pulsamos New, lo que nos permite crear un nuevo formulario asociado a la lista ya sea para crear, editar o visualizar un elemento. Como sabéis, con SharePoint 2010 podemos tener múltiples formularios de cada tipo para una lista, aunque sólo podemos tener uno por defecto de cada tipo.
  • En la ventana que se abre, especificamos un nombre para el formulario, elegimos que sea de tipo “Edit item form” y marcamos la opción de que sea el formulario de edición por defecto.
image image
  • Una vez añadido el formulario, pulsamos sobre el mismo para proceder a su edición.
  • Es precisamente en el modo edición de este formulario personalizado donde empezamos a ver cosas interesantes y una posible solución al problema planteado. Lo interesante es que la iteración con el elemento de lista se realizada a través de una DataFormWebPart en lugar de una ListFormWebPart que es la que se utiliza en el formulario de edición por defecto. Esta DataFormWebPart se puede personalizar campo a campo del elemento de lista, incluyendo los adjuntos que son un elemento de tipo <SharePoint:FormField>.
image image
  • Este control tiene una propiedad ControMode que admite los valores “New”,”Edit”, “Display” o “Invalid”. Por defecto, el valor es “Edit” por lo que para impedir que se pueda editar el adjunto, deberemos coger alguno de los otros valores disponible. En este caso, la opción “New” es la que nos permite que cuando se edita un elemento no se muestren los adjuntos de manera que sólo es posible añadir nuevos adjuntos. La pega es que si quiero borrar adjuntos existentes, no voy a poder hacerlo. El valor “Display” nos muestra los adjuntos, por lo que no nos soluciona tampoco la necesidad planteada.

image

Publicado 20/12/2011 9:00 por Juan Carlos González Martín | con no comments

Visual Studio 11 y SharePoint 2010: Novedades en desarrollo para SharePoint (III)!

Como punto final de la serie de artículos sobre las novedades en desarrollo para SharePoint 2010 que tenemos disponibles en la preview actual de Visual Studio 11, en esta ocasión evaluaremos los dos nuevos tipos de artefacto que se pueden crear: Site Column y Silverlight Web Part. Pero antes de empezar, os recuerdo los dos artículos previos de la serie:

Comenzando con el elemento de tipo Site Column:

  • Tras crear un proyecto para SharePoint en Visual Studio 11, veremos que se crea el correspondiente SPI (SharePoint Project Item) que contiene un archivo Elements.xml en el que definir la columna.

  • Ese archivo Elements.xml ya tiene el esqueleto básico de definición de una columna de tipo Single Line Of Text:
   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">  
   3:   <Field
   4:        ID="{151966d8-d525-4962-b95c-b5d44761ee12}"
   5:        Name="SPVs11Project - CustomSiteColumn"
   6:        DisplayName="Custom Site Column"
   7:        Type="Text"
   8:        Required="FALSE"
   9:        Group="Custom Site Columns">
  10:   </Field>
  11: </Elements>

En el caso de la WebPart de Silverlight:

  • Nos encontraremos con qué disponemos del correspondiente asistente que nos pregunta si queremos crear un proyecto de Silverlight o bien añadirlo más tarde. En el caso de la primera opción, podremos elegir entre las versiones 4.0 o 5.0 de Silverlight.
  • Una vez concluye el asistente, se muestra el diseñador de Silverlight 5 listo para que empecemos a crear la aplicación.

  • Además, en el proyecto de SharePoint se crea el correspondiente SPI relativo a la WebPart de Silverlight…y de momento ese SPI contiene simplemente dos archivos:
    • Un archivo Elements.xml.
    • Un archivo .webpart con las propiedades de la WebPart (que no aparece).
  • Si examinamos el archivo Elements.xml nos encontramos conque contiene la definición de dos módulos para provisionar el .xap de la aplicación Silverlight y el archivo .webpart de la WebPart.
   1: <?xml version="1.0" encoding="utf-8"?>
   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/" >
   3:   <Module Name="SPSLWebPartSample" List="113" Url="_catalogs/wp">
   4:     <File Path="SPSLWebPartSample\SPSLWebPartSample.webpart" Url="SPVs11Project_SPSLWebPartSample.webpart" Type="GhostableInLibrary">
   5:       <Property Name="Group" Value="Custom" />
   6:     </File>
   7:   </Module>
   8:   <Module Name="SPSLWebPartSample">
   9:     <File Path="SPSLWebPartSample\MySilverlightApp.xap" Url="SiteAssets/SPVs11Project/SPSLWebPartSample/MySilverlightApp.xap" />
  10:   </Module>
  11: </Elements>

Publicado 19/12/2011 19:23 por Juan Carlos González Martín | 6 comment(s)

Visual Studio 11 y SharePoint 2010: Novedades en desarrollo para SharePoint (II)!

Siguiendo con las novedades en desarrollo para SharePoint que tenemos disponibles en la preview de Visual Studio 11 (puedes ver el primer artículo en este enlace), en esta ocasión me voy a centrar en ver de forma detallada el proceso de publicación de solucio0nes Sandbox que tenemos disponible en el IDE:

  • Para poner en marcha el proceso de publicación, simplemente seleccionamos el nombre del proyecto y pulsamos sobre la opción Publish que aparece en el listado de opciones posibles. En la ventana que se abre especificamos el sitio de SharePoint Online u On-Premise y pulsamos “Publish”.
  • En el caso de un sitio de SharePoint Online, se abre una ventana adicional para que especifiquemos las credenciales de Office 365.
  • Una vez finaliza el proceso de publicación, se abre el navegador con el inicio de sesión en Office 365.
image image image
  • Tras especificar las credenciales, seremos redirigidos a la galería de soluciones del sitio en la que podremos encontrar nuestra solución desplegada.
  • En el caso de un sitio de SharePoint On-Premise, especificamos la Url del mismo y pulsamos “Publish”.
  • En este caso, se abre una ventana de solicitud de credenciales para logearnos en nuestro sitio On-Premise.
image image image
  • Una vez validados On-Premise, somos redirigidos a la galería de soluciones Sandbox correspondiente.

image

Publicado 18/12/2011 18:20 por Juan Carlos González Martín | 9 comment(s)

SharePoint Online: Como usar los servicios web expuestos!

Aunque a la hora de trabajar de forma remota con SharePoint Online en Office 365 la recomendación pasa por usar el modelo de objetos en cliente, puede ser que en ciertos escenarios tengamos que utilizar los servicios web que expone la plataforma por lo que tendremos que tener en cuenta que para la parte de autenticación se están usando claims. Para ello, tendremos que disponer de una serie de clases que nos permitan poder autenticarnos contra SharePoint online teniendo en cuenta esto. Un buen ejemplo de como usar esas clases y trabajar con los servicios web de SharePoint Online lo podéis encontrar en este enlace. También os recomiendo revisar el esquema de autenticación que se usa en SharePoint Online y que Wictor Wilém publicó hace tiempo en su blog.

Otras referencias relacionadas con el consumo de los servicios web de SharePoint Online son las siguientes:

Publicado 17/12/2011 12:34 por Juan Carlos González Martín | 1 comment(s)

Visual Studio 11 y SharePoint 2010: Novedades en desarrollo para SharePoint (I)!

Aunque la preview de la nueva versión de Visual Studio ya lleva un par de meses circulando, no me había dado cuenta hasta hoy de que en lo que desarrollo  para SharePoint se refiere ya viene con alguna novedad que indica por dónde irán los tiros en este área. Lógicamente, la idea como podéis ver en este post del blog de Somasegar es seguir mejorando el soporte al desarrollo para SharePoint en Visual Studio. Por ejemplo, la creación de listas se simplifica de manera que de trabajar con el clásico XML para su definición pasamos a utilizar una diseñador específico que facilita la creación de una lista:

  • Se incluye el List Designer que facilita la creación de la lista de una forma muy visual.
  • Tenemos un asistente que nos permite crear una lista a partir de un tipo de contenido o de otra lista existente.
  • Por ejemplo, definir los campos de la lista tiene una experiencia similar a la de añadir columnas a una tabla de SQL Server usando el propio Visual Studio o SQL Server Management Studio. De hecho, podremos modificar las columnas existentes o bien añadir nuevas a partir de cambiar el tipo de contenido inicialmente seleccionado en el asistente.
image image image
  • Podemos configurar las vistas de la lista.
  • Y podemos modificar propiedades de la lista.
  • Por supuesto, las capacidades de depuración y despliegue siguen siendo las mismas ya conocidas en VS 2010. Por supuesto, con IntelliTrace habilitado de serie.
image image image

Aparte de estas novedades a nivel de creación y despliegue de artefactos para SharePoint, por fin es posible desplegar soluciones (entiendo que por defecto de tipo Sandbox) contra sitios remotos incluyendo sitios de Office 365.

image

Otras novedades que se pueden ver en la preview

  • Plantilla para la creación de columnas.
  • Plantilla para crear y desplegar WebParts de Silverlight.

Publicado 16/12/2011 20:23 por Juan Carlos González Martín | 11 comment(s)

SharePoint 2010: Procesos de aprobación personalizados!

Una de las novedades que incorpora SharePoint 2010 a la hora de modelar algunos procesos típicos como los de aprobación es que podemos usar con cero desarrollo el componte de aprobación que incorpora SharePoint Designer 2010 (SPD) y que nos permite modelar procesos de aprobación personalizados usando este componente tal y como lo trae la plataforma o bien adaptándolo a nuestras necesidades. Como prueba de esto, basta con inspeccionar el flujo de trabajo de aprobación que viene con SharePoint 2010 (versiones Standar y Enterprise):

  • Abrimos un sitio de SharePoint 2010 con SPD 2010. Nos vamos a la sección de flujos de trabajo.
  • Hacemos clic sobre el workflow de aprobación en el listado de workflows disponibles.
  • En la página con el detalle del flujo, pulsamos sobre el enlace de edición del flujo.
image image image
  • En el diseñador del flujo de trabajo, vemos que aparentemente es muy sencillo y únicamente está compuesto por una actividad de tipo “Start Approval Process” que tenemos disponible en la paleta de acciones para añadir al flujo. Fijaros como además de este componente de aprobación tenemos otros similares para iniciar un proceso de Feedback o de Tareas personalizadas.
  • Si hacemos clic sobre “Aprobal” en el flujo, nos vamos a otra página de detalle en este caso del proceso de aprobación. Como vemos, este tipo de procesos y los otros mencionados, están muy orientados al trabajo con tareas de SharePoint.
image image image
  • Si pulsamos sobre el enlace “Change the behavior of the overall task process” veremos el “verdadero” proceso de aprobación que podemos personalizar y extender de acuerdo a nuestras necesidades.

image

Un ejemplo de uso del componente de aprobación para modelar un proceso de aprobación personalizado lo tenéis aquí: Workflow to automatically approve my comments

Publicado 15/12/2011 16:56 por Juan Carlos González Martín | con no comments

SharePoint 2010: Como añadir un “safe control” desde Visual Studio 2010!

Como sabéis, Visual Studio 2010 dispone de una serie de plantillas de proyecto y de elemento de proyecto que facilitan la creación de artefactos para SharePoint 2010. Pero además, incorpora una serie de opciones que facilitan el despliegue de los mismos, su depuración, etc. Y por supuesto, la ventana de propiedades nos permite realizar muchas configuraciones relevantes a todos los niveles como por ejemplo poder marcar un artefacto que creemos como “Safe” para añadirlo posteriormente como control seguro:

  • En el explorador de soluciones simplemente seleccionamos el SPI (SharePoint Project Item) correspondiente al artefacto en cuestión. En la ventana de propiedades buscamos “Safe Control Entities” que nos permite añadir una colección de entradas de controles seguros.
  • En la ventana que se abre, configuramos como queremos añadir el artefacto como “Safe Control” especificando el ensamblado, el espacio de nombres y sobre todo la propiedad Safe con el valor True.

image

Fuente: http://weblogs.asp.net/jan/archive/2010/08/06/easily-adding-safecontrols-in-sharepoint-2010-with-visual-studio-2010.aspx

Publicado 14/12/2011 14:28 por Juan Carlos González Martín | con no comments

Más artículos Página siguiente >