miércoles, 3 de junio de 2009

Cambiar el Propietario(Autor) y el Editor de un ListItem

Problema:

No podemos cambiar el propietario de un Elemento de Lista.

Ni en Edición ni vinculando una lista, ni desde excel ni desde access


Motivo:

Los campos sharepoint Propietario (autor) y Editor son de solo lectura, por lo que los renderiza en Modo Visualización.


Solución Para Edition via Web:

1º Abrir el EditForm.aspx de la lista a la que queremos cambiarle los propietarios de los listItems

2º Crear un dataFormWebPart en la parte inferior usando el Sharepoint Designer

3º Incluir Los campos @Editor y @Author insertando con la opción Single EditForm



4º Filtrar la lista para

4.1 Crear un parámetro al web part ITEMID mapeado al valor de ID de la querystring (Poner valor por defecto"1")




4.2 Ajustar el Filter con el designer Poniendo ID=ITEMID



Buscar

<xsl:value-of select="@Author" disable-output-escaping="yes"/>

Cambiarlo por:

<SharePoint:FormField runat="server" id="Author{@ID}" ControlMode="Edit" FieldName="Author" ItemId="{@ID}" __designer:bind="{ddwrt:DataBind('u',concat('Author',@ID),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Author')}"/>


6º Buscar

<xsl:value-of select="@Editor" disable-output-escaping="yes"/>

Cambiarlo por:

<SharePoint:FormField runat="server" id="Editor{@ID}" ControlMode="Edit" FieldName="Editor"

ItemId="{@ID}" __designer:bind="{ddwrt:DataBind('u',concat('Editor',@ID),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Editor')}"/>


7º Pulsar en el Botón save y añadirle el FormAction de RedirectToSource

8º Guardar


Consejo de Seguridad: Se puede ocultar el webpart si no se tiene permiso así solo un administrador podría hacer estas cosas.




Solución para cargas Masivas:

Crear un miniworkflow que cambie el propietario cogiendolo de un campo de texto creado para ese efecto.


Aquí dejo un trozo de código que puede ser útil.


SPSite site = new SPSite(siteUrl);

SPWeb web = site.OpenWeb();

web.AllowUnsafeUpdates = true;

SPList list = web.Lists["Test"];

SPListItemCollection collection = list.Items;

foreach (SPListItem item in collection )

{

SPUser user = web.EnsureUser(UserName Login Name);

//1073741823;#System Account //User name values are in this format ID;#Login Name

string value1 = user.ID + ";#" + user.Name; //Create in same format

item["Author"] = value1; //for Created By field

item["Editor"]=value1 ; //Modified By field

item.Update(); //Update the item

}

list.Update();

web.Update();


Espero que os sea de utilidad
RobertoMarcos.com





No hay comentarios:

Publicar un comentario