Actualizar múltiples items de una lista con PowerShell

En un cliente se presentó la necesidad de programar la actualización de todos los elementos de una lista una vez al año.

Esta necesidad se dio debido a que se disponía de una lista de cumpleaños donde mediante una columna calculada se mostraba la fecha actual del cumpleaños. Como sabemos las columnas calculadas no se actualizan a menos que el elemento de la lista haya sido actualizado, por lo tanto era muy complicado lograr obtener vistas de cumpleaños por el día actual.

Entre las alternativas existentes para lograr este objetivo preferí el uso de PowerShell por lo sencillo que es trabajar el uso de scripts que puedan ser programados y debido a que su despliegue era mas sencillo y tenía menos dependencias de servicios que desarrollar un job.

A continuación les comparto el script:

$site = Get-SPWeb -identity «http://miportal«

$list = $site.Lists[«Tareas»]

$spitems = $list.items

foreach($item in $spitems){

[Microsoft.SharePoint.SPListItem]$spListItem = $item

$Titleactual = $spListItem[«Title»];

$spListItem[«Title»] = $Titleactual;

$spListItem.Update();

}

Espero les sea de utilidad!

JQuery desde mi Portal con SharePoint 2010 – Parte 3 (Collapsible Quick Launch)

En este post explicaré como podemos personalizar nuestro Quick Launch para que tenga un efecto Collapsible haciendo uso de jquery.

He tomado como referencia el código de esta página: http://www.sharepoint2010guru.com/sharepoint2010architecture/knoxblog/SitePages/navdemo2.aspx es uno de los mejores que he encontrado para SharePoint 2010.

En el código al presionar el botón Make Navigation Collapsible el Quick launch cambia, sin embargo debido que yo quiere tener este efecto al cargar la página hice unas pequeñas modificaciones y copie el código en mi archivo actions.js que explique como utilizar en mi post anterior.

El código a copiar en actions.js debe ser el siguiente:

//Con la sección $(document).ready especifico que se ejecute la función Collapsible cuando la página este lista.

$(document).ready(function(){

makeLNCollapsible() ;

});

function makeLNCollapsible()
{
  $(«div.menu-vertical>ul.root>li.static>a span.menu-item-text»).append(
    «&nbsp;<img src=’_layouts/images/plus.gif’ border=’0′ class=’collapser’/>»);

  $(«img.collapser»).toggle(
    function () {
      $(«>ul», $(this).parent().parent().parent().parent()).show(«fast»);
      $(this).attr(‘src’,’_layouts/images/minus.gif’);
    },
    function () {
      $(«>ul», $(this).parent().parent().parent().parent()).hide(«fast»);
      $(this).attr(‘src’,’_layouts/images/plus.gif’);
    }
  );

  $(«div.menu-vertical>ul.root>li.static>ul.static»).css(«display»,»none»);
}

El resultado final debería ser el siguiente:

Servicios a ejecutar desde mis WFE

Cuando comenzamos a configurar nuestras granjas de SharePoint comenzamos instalando nuestro primer servidor y progresivamente agregando nuevos servidores a la granja. Sin embargo, durante la instalación no existe ninguna opción que permita especificar que nuestro servidor tendrá el rol de Application Server o de Web Server.

Para nosotros poder definir que servidor será application server y cual será un WFE tenemos que hacerlo mediante la configuración de los servicios que son ejecutados.

Los servicios que deberían ejecutarse desde un WFE son los siguientes (Principalmente lo que están marcados en negrita):

Microsoft SharePoint Foundation Incoming E-Mail
Microsoft Foundation Subscription Settings Service
Microsoft SharePoint Foundation Web Application
Microsoft SharePoint Foundation Workflow Timer Service

Esta información la pude obtener de un link bastante interesante: http://www.wahidsaleemi.com/2010/04/which-services-are-required-for-sharepoint-2010-web-server-role/

 

 

Error 404.1 accediendo a nuestro Portal con AAM desde los WFE

Cuando en SharePoint configuramos nuestras aplicaciones web para utilizar nombres alternativas mediante Alternate Access Mapping (AAM) probablemente al intentar acceder desde nuestros Web Front End nos pedirá autenticarnos varias veces hasta mostrarnos un mensaje de error 404.1.

Si por otro lado intentamos acceder desde cualquier equipo cliente no tendremos este inconveniente. Si deseamos acceder desde los WFE será necesario deshabilitar el loopback security check de windows, para esto abrir PowerShell e ingresar el siguiente comando:

New-ItemProperty HKLM:SystemCurrentControlSetControlLsa -Name «DisableLoopbackCheck» -Value «1» -PropertyType dword

Reiniciar el servidor y volver a ingresar.

Para mas detalle: http://support.microsoft.com/kb/896861

Crear múltiples site collections con PowerShell para SharePoint 2010

Comparto con ustedes un script para crear múltiples site collections con su base de datos independiente:

Script de PowerShell:

Add-PsSnapin Microsoft.SharePoint.PowerShell

#Cargando las variables
Write-Host «Cargando las variables»
$server = «SP2010AliasSQL»

$csvfile = ‘\DBSrv01ScriptsSP2010DeploymentCreatingSiteCollectionsSiteCollectionsToCreate.txt’
$csvdata = Import-Csv $csvfile
foreach ($line in $csvdata)
{
$url = $line.Url
$owner1 = $line.Owner1
$owner2 = $line.Owner2
$name = $line.Name
$description = $line.Description
$language = $line.Language
$template = $line.Template
$dbname = $line.DBName
$webapp = $line.WebApp

#Creando BD de Contenido
Write-Host «Creando Base de datos de contenido»
New-SPContentDatabase -Name $dbname -DatabaseServer $server -WebApplication $webapp | out-null
Write-Host «Base de datos » $dbname » Creada»

#Creando Colección de sitios
Write-Host «Creando Coleccion de Sitios»
New-SPSite -URL $url -OwnerAlias $owner1 -SecondaryOwnerAlias $owner2 -Name $name -Description $description -Language $language -Template $template -ContentDatabase $dbname | out-null
Write-Host «La coleccion de sitios » $url » fue creada»

}

Archivo .txt con la lista de site collections: (Se muestra la estructura que debe tener)

Url,Owner1,Owner2,Name,Description,Language,Template,DBName,WebApp
http://webspsrv01/proyectos/proy01,contososp_install,contosopiero.marchena,PROYECTO 01,PROYECTO 01,1033,STS#0,WSS_Content_PROY01,http://webspsrv01

 

 

Como Republicar ContentTypes desde un Content Type hub

A continuación les comparto un script para republicar content types desde un Content Type Hub. Esto resulta útil en pases a producción donde se lleva un backup completo del content type hub y del site collection de la solución a restaurar.

El script lo obtuve de esta página: http://get-spscripts.com/2010/11/republish-all-hub-content-types-in.html se las recomiendo pues tiene muchos ejemplos interesantes del uso de PowerShell para SharePoint.

function Republish-HubContentTypes ($CTHubURL)
{
    #Get Content Type site and web objects
    $ctHubSite = Get-SPSite $CTHubURL
    $ctHubWeb = $ctHubSite.RootWeb

    #Check the site is a content type hub
    if ([Microsoft.SharePoint.Taxonomy.ContentTypeSync.ContentTypePublisher]::IsContentTypeSharingEnabled($ctHubSite))
    {
        #Set up ContentTypePublisher object to allow publishing through the Content Type Hub site
        $spCTPublish = New-Object Microsoft.SharePoint.Taxonomy.ContentTypeSync.ContentTypePublisher ($ctHubSite)
       
        #Step through each content type in the content type hub
        $ctHubWeb.ContentTypes | Sort-Object Name | ForEach-Object {
           
            #Has the content type been published?
            if ($spCTPublish.IsPublished($_))
            {
                #Republish content type
                $spCTPublish.Publish($_)
                write-host «Content type» $_.Name «has been republished» -foregroundcolor Green
            }
            else
            {
                write-host «Content type» $_.Name «is not a published content type»
            }
        }
    }
    else
    {
        write-host $CTHubURL «is not a content type hub site»
    }
    #Dispose of site and web objects
    $ctHubWeb.Dispose()
    $ctHubSite.Dispose()
}

#Republicar Content Types del content type hub
Republish-HubContentTypes -CTHubURL http://miportal/soluciones/contenttypehub

Personalizando el Search Center en SharePoint 2010 – Parte 2 (Redireccionando resultados a página personalizada)

Muchas veces personalizamos nuestras propias páginas para referenciar a elementos de lista mediante filtros por el ID del elemento, esto utilizando full XSLT.

Con esta personalizaciones, poder ver noticias o anuncios con una interfaz que no es la propia del formulario de vista de elemento resulta muy atractivo. Sin embargo, cuando rastreamos nuestro contenido y obtenemos como resultado los elementos de una lista como la de anuncios al darle clic nos direcciona a la página de la vista del elemento.

Si nosotros queremos redireccionar esto para que nos envíe a la página que personalizamos, lo podemos hacer editar el XSLT del Search Result.

Para esto deberemos abrir desde SharePoint Designer el XSLT e incorporar lo siguiente debajo de la etiqueta <xsl:template match=»Result»>:

en <xsl:when test> se valida que la Url contenga la palabra Anuncios pues ese es el título de la lista de Anuncios y tambien se verifica que tenga la palabra DispForm pues es la url que nos lleva hacia la vista de formulario de un elemento de lista.

después se construye una cadena para la url de la página personalizada y se le añade el ID del elemento actual.

Espero les haya sido de utilidad!

 

Personalizando el Search Center en SharePoint 2010 – Parte 1 (Abriendo InfoPaths desde el Browser)

Como personalizar el Search Result WebPart para abrir los forms de infopath en el browser:

1. Crear un Centro de Búsqueda:

2. Búscar una palabra de prueba (Ej. SharePoint).

 

3. Editar la página y abrir el panel de propiedades del webpart de resultados. Ubicar la sección Mostrar propiedades y desmarcar «Usar la visualización de ubicación».

 4. Dar clic al botón Editor XSL y copiar el XSLT que se muestra en la ventana hacia un archivo (Ej. SearchResults.xml)

5. Abrir el archivo desde SharePoint Designer y ubicar la sección <xsl:template match=»Result»>

Debajo de esta sección se encontrará la etiqueta <xsl:variable name=»url» select=»url»/> que deberemos comentar pues la cambiaremos por la siguiente:

<!–Verificar si el contenido es un Form de InfoPath y cambiar la URL para
que abra el Form en el Browser
<xsl:variable name=»url»>
<xsl:choose>
<xsl:when test=»contentclass=’STS_ListItem_XMLForm'»>
<xsl:text>/_layouts/FormServer.aspx?XmlLocation=</xsl:text>
<xsl:value-of select=»url»/>
<xsl:text>&amp;DefaultItemOpen=1</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select=»url»/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!–FIN InfoPath Forms Services–>

6. Finalmente copiar el XSLT nuevo sobre el Search Result WebPart y guardar los cambios para empezar a probarlo.

Espero les haya sido de utilidad!

JQuery desde mi Portal con SharePoint 2010 – Parte 2 (Mi primera animación jquery)

En el post anterior aprendimos a referenciar nuestra librería jquery desde nuestro Master Page.

En este post aprenderemos a utilizar código jquery desde nuestro portal en SharePoint para poder personalizar nuestras interfaces e incorporar animaciones.

Comenzaremos con un ejemplo sencillo que no contempla el uso de componentes de SharePoint como listas, bibliotecas o elementos, simplemente insertando una animación jquery.

A continuación los pasos a seguir:

1. El primer paso es abrir SharePoint designer 2010 y en All Files, Style Library, Scripts (carpeta que deberemos haber creado) agregaremos un archivo actions.js

 2. A continuación deberemos editar nuestro Master Page y debajo de donde referenciamos a nuestra librería jquery deberemos referenciar al archivo actions.js (aquí pondremos nuestras funciones jquery y javascript):

<script src=»/style%20Library/Scripts/actions.js» type=»text/javascript»></script>

 3. A continuación editaremos nuestro archivo actions.js para ingresar el siguiente código jquery:

function animandoCaja(){

$(«#d1″).animate({width:400},»slow»);

$(«#d1″).animate({height:400},»slow»);
   
$(«#d1″).animate({width:50},»fast»);   
$(«#d1″).animate({height:50},»fast»);
   

$(«#d1″).animate({height:100},»slow»);
 
$(«#d1″).animate({width:100},»slow»);
$(«#d1»).fadeOut(1000);
$(«#d2»).fadeIn(1000);

 }

4. Finalmente crearemos una nueva página de SharePoint en blanco e insertaremos el siguiente HTML:

<input type=»button» value=»Animar» Onclick=»animandoCaja()»/>
<div id=»d1″ style=»background:#98bf21;height:100px;width:100px;position:relative»></div>
<div id=»d2″ style=»display:none»>FIN</div>

 5. El Resultado final debería ser el siguiente (Al dar clic en el bóton Animar podrán ver la animación completa) :

Seguire posteando sobre este tema tan interesante!