Error: el flujo no pudo actualizar el elemento.

Durante una migración de SharePoint Server 2010 a SharePoint Server 2013 encontré un error muy peculiar y tuve que abrir un caso de soporte con Microsoft para resolverlo.

Resulta que en varias colecciones de sitios, los flujos de aprobación de SharePoint 2010 dejaron de funcionar. Estaba usando la plantilla predeterminada, sin ninguna personalización, y esos mismos flujos en 2010 funcionaban perfectamente. El error dice:

“The workflow could not update the item, possibly because one or more columns for the item require a different type of information.”

Resulta que durante la migración, la plantilla global de flujos de aprobación se “daño”, por lo que a solución es crear una copia de la plantilla y volver a publicarla, como lo menciona el artículo: http://support.microsoft.com/kb/2891286/en-us

El primer paso es abrir SharePoint Designer y buscar la plantilla global de flujos de aprobación. Luego se hace doble clic para editarla.

 

Haga clic en Yes en la ventana de advertencia.

 

 
 

 En la página de opciones del flujo, en la cinta, haga clic en el botón Publicar.


 
 

Si aparece una ventana de advertencia diciendo que el componente de Visio no está instalado, no se preocupe, puede ignorar ese error y publicar el flujo. Lo que va a suceder es que no se pueden ver los dibujos que muestran el estado donde está el flujo, pero todo va a funcionar correctamente.


 

Se debe repetir esta publicación en todas las colecciones de sitios que presenten el mismo problema.

Anuncios

Explorando spservices: ocultar columnas por grupo de SharePoint

Recientemente he estado trabajando mucho con la librería de spservices (http://spservices.codeplex.com) así que voy a iniciar una serie de artículos con ejemplos de su uso.

Me gusta realizar modificaciones con JavaScript porque si se debe cambiar la versión de SharePoint, el código es más sencillo de modificar, no hay que recompilarlo!, y también funciona con SharePoint Online.

A continuación les voy a mostrar como ocultar columnas del formulario de creación de nuevos elementos. En este caso estoy usando SharePoint 2010, pero debería funcionarles para 2013 sin muchos problemas.

Tengo una lista con cuatro campos y dos grupos de SharePoint en mi sitio, deseo que el grupo IT Owners pueda ver todos los campos del formulario, y el grupo IT Infrastructure Members no pueda ver la columna “Nivel 2”, ni la columna “comentarios”.

Este es el formulario original.

hidefields1

 

Y en esta vista pueden ver los grupos de SharePoint que vamos a utilizar.

hidefields2

 

Veamos el script

En un editor de texto comenzamos a redactar el script. Primero agregamos las referencias a JavaScript y SPServices. Mi recomendación es utilizar una biblioteca en el mismo sitio donde van a usar el script. Por ejemplo, una carpeta llamada Scripts dentro de la biblioteca Site Assets o Activos del Sitio.

<script src=”/url al script/jquery-1.8.2.js” type=”text/javascript”></script>
<script src=”/url al script/jquery.SPServices-2014.01.js” type=”text/javascript”></script>

//Después agregarmos las funciones para ocultar los campos

<script type=”text/javascript”>

// Esta función oculta todo el reglón de la tabla. No es necesario modificarla. 
function hideColumn(c) {

$(“.ms-formlabel h3 nobr”).filter(function() {

var thisText = $.trim($(this).clone().children().remove().end().text());

return thisText.indexOf(c) === 0 && thisText.length === c.length;

}).closest(“tr”).hide();

}

// Esta función usa SPServices para saber si el usuario que esta viendo la página (logged in)

// pertenece al grupo que se envió en la variable groupName. No es necesario modificarla. 

function isGroupMember(groupName, callback)
{

$().SPServices({

operation: “GetGroupCollectionFromUser”,

userLoginName: $().SPServices.SPGetCurrentUser(),

async: true,

completefunc: function(xData, Status) {

callback( !!($(xData.responseXML).find(“Group[Name='” + groupName + “‘]”).length) );

}

});
};

// Esta función si deben cambiarla de acuerdo a sus necesidades.

// Cambien IT Infrastructure Members por el nombre del grupo que ustedes desean revisar.

// Cambien Nivel 2 y Comentarios por el nombre de las columnas que ustedes desean ocultar. 

isGroupMember(“IT Infrastructure Members”, function(result){

if(result){

hideColumn(“Nivel 2”);

hideColumn(“Comentarios”);

}

});
</script>

En mi caso, este script se llama ocultar columnas.js y lo subí a la biblioteca de Site Assets junto con los otros scripts que estoy utilizando.

hidefields4

Para insertar el script en la pagina NewForm.aspx vamos a utilizar un Elemento Web Editor de Contenido, así que para trabajar más fácilmente, primero vamos a deshabilitar la opción de abrir los formularios en cuadros de diálogo, para que se abran totalmente en la página Web.

Después de agregar el script puede volver a habilitar esta opción y que se muestren los formularios en cuadros de diálogo.

  • Primero hacen clic en Lista, después en Configuración de la lista.
  • Luego hacen clic en Configuración avanzada (1).
  • En la página de configuración avanzada, bajan hasta el final de la página, y en la preguna sobre si se deben abrir los formularios dentro de ventanas de diálogos marcan la opción No (2).

hidefields3

  • Después hacemos clic en Agregar elemento, y una vez en la página de agregar elemento, vamos al menú de Acciones de sitio y hacemos clic en Editar Página.

hidefields5

Esto nos va a permitir agregar elementos Web a la página NewForms.aspx. Este procedimiento también se puede realizar con SharePoint Designer.

  • Hagan clic en Add a Web Part, o Agregar Elementos Web.

hidefields6

  • Busquen el elemento Content Editor o Editor de Contenido Web dentro de la categoría de Medios y Contenido.
  • Presionan el botón Agregar.

hidefields7

  • Una vez que agregaron el elemento Web, hagan clic en Editar elemento Web para agregar la dirección al script que usamos.

hidefields8

  •  En la primera sección del Editor de contenido, deben agregar la dirección del script (3).
  • En la sección de Apariencia, seleccionen el Chrome Type a Ninguno (4), para que no se vea el título del mismo en nuestro formulario. Y presionan el botón Ok.

hidefields9

  • Después guardan los cambios de la página presionando el botón Stop Editing o Detener Edición.

hidefields11

Como pueden ver, ahora si el usuario que ve el formulario pertenece al equipo IT Infrastructure Members, no va a poder ver todos los campos.

hidefields12

Algo muy importante que deben tener en cuenta, es que por la lógica que estoy usando, si el usuario pertenece a ambos grupos igual no va a poder ver los campos, aunque pertenezca a IT Owners; porque sólo estoy preguntando si pertenece a IT Infrastructure Members.

SharePoint 2013 y LightSwitch

Cuando se usa LightSwitch, gran parte del trabajo repetitivo es realizado automáticamente para usted y, de hecho, puede crear una aplicación LightSwitch sin escribir nada de código.

La Comunidad de SharePoint junto con Cesar Loaiza preparó un grupo de 4 charlas onlinepara introducirlos en el mundo de SharePoint y LightSwitch.

Con mucho placer los invitamos a ver los videos:

Sesión 1 – Introducción a aplicaciones HTML LightSwitch

Sesión 2 – LAB: SharePoint como origen de datos y manipulación de listas desde apps

Sesión 3 – LAB: Interfaz gráfica de un app

Sesión 4 – LAB: Publicando aplicaciones SharePoint 2013

Error al restaurar un sitio: Plantilla STS#1

Hoy necesitaba mover un subsitio de una colección de sitios a otra (cambiar el papá), por lo que primero realice un respaldo del subsitio que deseo mover, usando la Administración Central de SharePoint.

Exportar Colección de sitios

 

Al tratar de restaurar el sitio, obtuve el error Import-SPWeb: Cannot import site. The exported site  is based on the template STS#1 but the destination site is based on the template STS#0.

Error al restaurar

 

En resumen, el sitio original estaba creado usando la plantilla de sitio en blanco (blank template) que tenía SharePoint 2010, y fue correctamente migrado a SharePoint 2013. Pero ahora en SharePoint 2013, si quiero moverlo de una colección de sitios a otra, no puedo hacerlo creando un sitio de equipos (STS#0), y en 2013 no aparece la opción de crear un sitio en blanco desde la interfaz gráfica.

Así que vamos a solucionarlo creando el sitio con PowerShell. Si tiene varios idiomas instalados en su SharePoint, en mi caso tengo el idioma inglés y el español, deben indicar además del número de la plantilla, el idioma que va a utilizer el sitio.

New-SPWeb -url http://crcdcsps01:90/hcredito -name “Nuevo Sitio” -template STS#01 -Language 3082 -UseParentTopNav -UniquePermissions

Crear plantilla con PowerShell

 

Vamos a obtener un error indicando que la plantilla no existe, pero no hay problema, porque la plantilla se va a sobreescribir con nuestro respaldo.

 

Loobpack Check Fix

Muchas veces estos artículos que escribo son un recordatorio personal porque una y otra vez debo realizar el mismo trabajo.

Hoy tenía este error en un SharePoint 2013 y después de leerlo dije: ¡claro, no le he dado permisos al usuario spcontent!

Access is denied. Verify that either the Default Content Access Account has access to this repository, or add a crawl rule to crawl this repository. If the repository being crawled is a SharePoint repository, verify that the account you are using has “Full Read” permissions on the SharePoint Web Application being crawled. (0x80041205)

 

Así que procedí a agregar darle permisos de lectura total al usuario que realiza las indexaciones.

disableloopback2

Pero incluso después de agregar el usuario me salía exactamente el mismo error en el visor de eventos. Así que esa no era la solución.

Investigando en internet posibles causas de errores recordé que no había deshabilitado la famosa característica de seguridad “LoopbakCheck”. Aquí pueden encontrar la información oficial de Microsoft: http://support.microsoft.com/kb/896861

Si es un servidor de pruebas, pueden deshabilitarlo por completo con este comando de PowerShell:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name “DisableLoopbackCheck” -Value “1” -PropertyType dword

Si es un servidor en producción lo mejor es que agreguen cada una de las direcciones de su sitio de SharePoint y que no lo deshabiliten del todo. En PowerShell el comando es:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa\MSV1_0 -Name “BackConnectionHostNames” -Value “intranet.contoso.com”,”personal.contoso.com” -PropertyType multistring

En 2013 el vínculo nuevo documento lleva a la pantalla de cargar documento

Recientemente en una migración de SharePoint 2010 a 2013 los usuarios me llamaron la atención porque en algunas bibliotecas no se habilitaba el botón de nuevo documento con opciones, como se ve en la siguiente imagen:

plant1 El comportamiento que tenían es que al hacer clic en Nuevo documento les aparecía inmediatamente la ventana para cargar un documento. Pero si usaban el botón Cargar documento de la Cinta o Ribbon, si podían crear un nuevo documento.

plant3

Comparando las características de las bibliotecas, encontré que en SharePoint 2013 si una biblioteca tiene la opción la Administración de tipos de contenido habilitada, no se van a desplegarlas opciones de crear un nuevo documento en el menú contextual, únicamente se van a mostrar en la Cinta.

plant4Para cambiar esto, deben navegar a la Configuración de la biblioteca, configuración avanzada y marcar la opción de administración de tipos de contenido en No.  plant5

Agregar una página maestra en un sitio

Ya creamos una nueva página maestra, ahora ¿como la subimos al sitio de producción de SharePoint?

Primero en la sección de Galerías del diseñador web seleccionamos la opción Páginas maestras y diseños de página.

master1

En la biblioteca de páginas maestras, hacemos clic en la opción Cargar documento.

master2

Y buscamos la página maestra que deseamos cargar.

master3

De acuerdo a la plantilla del sitio y las características que tenga activa, debe seleccionar

  1. Página maestra ASP NET
  2. Página maestra de publicación
  3. Página principal de publicación

master15

Después de cargar la página, normalmente se debe aprobar la página, para que pueda utilizarse.

  1. Se hace clic derecho sobre el archivo y se selecciona la opción Publicar una versión superior.
  2. Seleccionar la opción Aprobar o rechazar.
  3. Seleccionar la opción Aprobado.

master17

Pero a veces esta biblioteca no tiene la aprobación activa, por lo que los pasos para publicarla son:

  1. Seleccionar la opción Desproteger en el documento.
  2. Seleccionar la opción Proteger.
  3. En la ventana de protección seleccionar la opción de publicar una Versión principal.

master18

Después de esto nuestra página maestra ya puede ser utilizada en el sitio. En la columna de Aspecto se selecciona la opción Página maestra.

master13

Después se selecciona la nueva página maestra.

master14

 

Anteriores Entradas antiguas Siguiente Entradas recientes

A %d blogueros les gusta esto: