Pergunta

Criei o administrador do SharePoint lista, em que eu salvei uma variedade de coisas para webpart.Apenas administradores podem ler a lista, eu removi os direitos do usuário de todos os outros.

O seguinte Webpart lê a lista com privilégios elevados.

Guid webID = SPContext.Current.Web.ID;
Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
        // List 'AdminList' does not exist at site with URL 'http://devmach/sites/Test/Subsite'.
            using (SPWeb web = site.AllWebs[webID])
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {

No entanto, quando eu criar novo subsite e eu adicionar a peça web para o site, isso não funciona, porque o que subsite não contém "AdminList".

A minha pergunta é:

Como eu posso ler a lista, se a peça web está em uma página diferente?Que transformações eu preciso fazer?

Foi útil?

Solução

o uso da web aberta, colocar o nome do site para a web, então se eu tenho:

SPSite/SPWeb

mysitecollection.com/mysubsite

seria:

site.OpenWeb("mysubsite")

código completo:

Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
        // List 'AdminList' does not exist at site with URL 'http://devmach/sites/Test/Subsite'.
            using (SPWeb web = site.OpenWeb("mysubsite"))
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {

o código só deve ser usado para recuperação da lista, se você deseja usar a lista em vários subsites do que criá-lo no sitecollection em vez de um subsite!

Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
        // List 'AdminList' does not exist at site with URL 'http://devmach/sites/Test/Subsite'.
            using (SPWeb web = site.OpenWeb())
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {

primeiro método avançado:

Se for um requisito que você precisa da lista dentro de um subsite e precisa acessá-lo dentro de outro subsite que este irá fazer o truque:

obter a lista de subsite você tem:

private SPList getlistFromSite(SPSite site)
{
                SPList listsp = null;
                using (SPWeb web = site.OpenWeb("mysubsite"))
                {
                    SPList listsp = web.Lists["AdminList"];
                }
                return listsp;
}

para utilizar o método acima, mas mantendo-se o actual site, o usuário é!:

Guid webID = SPContext.Current.Web.ID;
Guid siteID = SPContext.Current.Site.ID;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(siteID))
    {
        using (SPWeb web = site.AllWebs[webID])
        {
            SPList listsp = getlistFromSite(site);
            SPListItemCollection collListItems = listsp.Items;
            foreach (SPListItem itemsp in collListItems)
            {
                //loop
            }
        }
    }
});

Outras dicas

Você tem que conhecer o site que contém AdminList.

Aqui estão duas maneiras de o fazer:

  1. Criar AdminList na web raiz do conjunto de sites e, em seguida, em seu código de obter webID da web raiz

    Guid webID = SPContext.Current.Site.RootWeb.ID;
    Guid siteID = SPContext.Current.Site.ID;
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteID))
        {
            using (SPWeb web = site.OpenWeb(webID))
            {
                SPList listsp = web.Lists["AdminList"];
                SPListItemCollection collListItems = listsp.Items;
                foreach (SPListItem itemsp in collListItems)
                {
    
  2. Adicionar propriedades personalizadas para você webpart portanto você pode definir o Url da lista da webpart de propriedade do painel, e usar essa propriedade em seu código para obter a lista.

    http://msdn.microsoft.com/en-us/library/dd584174(v=office.11).aspx http://zimmergren.net/technical/how-to-custom-web-part-properties-toolpart

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top