Pergunta

Quero desativar a otimização da lista por meio do código, por isso escrevi o seguinte código

SPList lstBookings = web.Lists.TryGetList("Bookings");
                    lstBookings.EnableThrottling = false;

Mas isso exige que o código seja executado com privilégios elevados, porque se eu fizer login como um usuário não administrador, ocorrerá um erro, não é possível fazer login.

Alguém tem alguma ideia?

Obrigado.

Foi útil?

Solução

EnableThrottling parece exigir privilégios de administrador de farm.Dê uma olhada no seguinte código:

public bool EnableThrottling
{
    get { ... }
    set
    {
        bool nothrottlevalue = !value;
        this.SetListNoThrottle(nothrottlevalue);
    }
} 

internal void SetListNoThrottle(bool nothrottlevalue)
{
    SPSite site = this.ParentWeb.Site;
    if (!site.WebApplication.Farm.CurrentUserIsAdministrator(true))
        SPGlobal.HandleUnauthorizedAccessException(new UnauthorizedAccessException());
    else
        { ... }
}

A conta do sistema, por sua vez, tem privilégio de Administrador do Conjunto de Sites.O SPSecurity.RunWithElevatedPrivileges permite executar código sob a identidade do pool de aplicativos, que tem os mesmos privilégios de administrador do conjunto de sites em todos os conjuntos de sites.

Outras dicas

Execute este trecho de código como usuário de identidade do pool de aplicativos:

SPSecurity.RunWithElevatedPriveleges( () => {
     using (var site = new SPSite(SPContext.Current.Site.ID))
                {
                    var web = site.RootWeb;
                    var lstBookings = web.Lists.TryGetList("Bookings");
                    lstBookings.EnableThrottling = false;
                    lstBookings.Update();
                }
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top