Use webpart subsite para ler uma lista na parte superior do site
-
10-12-2019 - |
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?
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:
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) {
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