En algunos escenarios (por ejemplo en migraciones de datos y entornos), es posible que necesitemos actualizar o asignar los campos de sistema de los elementos de una lista de SharePoint.
Los campos de sistema, serían: Creado, Creado por, Modificado y Modificado por.
Os paso el código necesario para actualizar el campo Creado, de un item de una lista.
1 |
<span id="lnum1" style="color: #606060"> 1:</span> <span style="color: #0000ff">string</span> createdBy = <span style="color: #006080">@"DOMAINmyUser"</span>; |
1 |
<span id="lnum2" style="color: #606060"> 2:</span> |
1 |
<span id="lnum3" style="color: #606060"> 3:</span> <span style="color: #0000ff">using</span> (SPSite site = <span style="color: #0000ff">new</span> SPSite(<span style="color: #006080">"http://team.domain.lab"</span>)) |
1 |
<span id="lnum4" style="color: #606060"> 4:</span> { |
1 |
<span id="lnum5" style="color: #606060"> 5:</span> <span style="color: #0000ff">using</span> (SPWeb web = site.OpenWeb()) |
1 |
<span id="lnum6" style="color: #606060"> 6:</span> { |
1 |
<span id="lnum7" style="color: #606060"> 7:</span> SPList list = web.GetList(<span style="color: #006080">"Lists/Products"</span>); |
1 |
<span id="lnum8" style="color: #606060"> 8:</span> UpdateSystemProperties(list, createdBy); |
1 |
<span id="lnum9" style="color: #606060"> 9:</span> } |
1 |
<span id="lnum10" style="color: #606060"> 10:</span> } |
En el código anterior tan sólo accedemos a la lista que nos interesa, y llamamos al método de actualizar:
1 |
<span id="lnum1" style="color: #606060"> 1:</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> UpdateSystemProperties(SPList list, <span style="color: #0000ff">string</span> createdBy) |
1 |
<span id="lnum2" style="color: #606060"> 2:</span> { |
1 |
<span id="lnum3" style="color: #606060"> 3:</span> <span style="color: #0000ff">if</span> (list.ItemCount > 0) |
1 |
<span id="lnum4" style="color: #606060"> 4:</span> { |
1 |
<span id="lnum5" style="color: #606060"> 5:</span> SPListItem item = list.Items[0]; |
1 |
<span id="lnum6" style="color: #606060"> 6:</span> |
1 |
<span id="lnum7" style="color: #606060"> 7:</span> SPUser user = list.ParentWeb.EnsureUser(createdBy); |
1 |
<span id="lnum8" style="color: #606060"> 8:</span> |
1 |
<span id="lnum9" style="color: #606060"> 9:</span> <span style="color: #0000ff">if</span> (user == <span style="color: #0000ff">null</span>) |
1 |
<span id="lnum10" style="color: #606060"> 10:</span> { |
1 |
<span id="lnum11" style="color: #606060"> 11:</span> <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> ArgumentNullException(<span style="color: #006080">"User not found"</span>); |
1 |
<span id="lnum12" style="color: #606060"> 12:</span> } |
1 |
<span id="lnum13" style="color: #606060"> 13:</span> |
1 |
<span id="lnum14" style="color: #606060"> 14:</span> item[SPBuiltInFieldId.Author] = user.ID; |
1 |
<span id="lnum15" style="color: #606060"> 15:</span> item.UpdateOverwriteVersion(); |
1 |
<span id="lnum16" style="color: #606060"> 16:</span> } |
1 |
<span id="lnum17" style="color: #606060"> 17:</span> } |
Fijaros en que hacemos uso de la clase SPBuiltInFieldId Esta clase nos permite acceder a los IDs de todos los campos de SharePoint que vienen OOB.
Ojo, aunque existe una propiedad de esta clase que es: “Created_x0020_By”, el campo que realmente almacena lo que vemos en el item como “Creado por”, es el campo “Author”.
Fijaros como aparece un item que he creado desde la interfaz de SharePoint:
Y así quedaría cuando ejecutamos el código:
PD: No lo he probado en Office 365, pero si lo usamos en un webpart y sacamos el SPWeb del contexto, debería funcionar igual, ya que el resto de operaciones son permitidas en modo Sandbox.
Saludos!
Deja un comentario