domingo, 24 de agosto de 2014

Cambiar el campo “Created By” desde cliente object

Desde cliente object se puede cambiar la columna “Created By”, el nombre interno es “Author”.

1- Primero definimos una función que dado un contexto y un UserName, nos retorna un objeto de tipo “FieldUserName”. Esta función usa el método “EnsureUser”, el cual valida si el logon existe dentro del sitio web, en el caso que no exista lo crea. El usuario que ejecuta esta función debe tener el permisos de BrowserUserInfo. En el caso de Sharepoint 2013, varía la forma de pasarle el nombre del usuario, ya que se utiliza claims por default (i:0#.w|domain\\username). More info

private static FieldUserValue GetUsers(ClientContext clientContext, string UserName)
{

            FieldUserValue _userValue = new FieldUserValue();

            User _newUser = clientContext.Web.EnsureUser(UserName);

            clientContext.Load(_newUser);

            clientContext.ExecuteQuery();

            _userValue.LookupId = _newUser.Id;

            return _userValue;

        }

2- Genero el contexto, busco el item al cual quiero cambiarle el “Created By” y lo actualizo con la función previa. En este ejemplo use CAML, pero podrías habiar usado GetById(). Marco en rojo las secciones importantes.

using (ClientContext clientContext = new ClientContext(System.Configuration.ConfigurationManager.AppSettings["URLSite"]))
{
    NetworkCredential credentials = new NetworkCredential(System.Configuration.ConfigurationManager.AppSettings["UserName"], System.Configuration.ConfigurationManager.AppSettings["Password"], System.Configuration.ConfigurationManager.AppSettings["Domain"]);
    clientContext.AuthenticationMode = ClientAuthenticationMode.Default;
    clientContext.Credentials = credentials;

    FieldUserValue usuario = GetUsers(clientContext, this.txtUsuario.Text);

    Microsoft.SharePoint.Client.List list = clientContext.Web.Lists.GetByTitle("NombreLista");
    CamlQuery query = new CamlQuery();
    query.ViewXml = "@<View><Query><Where><Eq><FieldRef Name='Title' /><Value Type='Text'>" + this.txtFiltro.Text + "</Value></Eq></Where></Where>OrderBy><FieldRef Name='Title' Ascending='True' /></OrderBy></Query></View>";
    var items = list.GetItems(query);
    clientContext.Load(items);
    clientContext.ExecuteQuery();

    if (items != null)
    {
       items[0]["Author"] = usuario;
        items[0].Update();

        clientContext.ExecuteQuery();
        this.lblMensaje.Text = "Se actualizo satisfactoriamente el owner";   
    }
}

No hay comentarios:

Publicar un comentario