Il blog di Giuseppe Marchi - SharePoint MVP
NAVIGATION - SEARCH

Errore: "The list that is referenced here no longer exists"

Richiamando il metodo UpdateListItems del web service Lists.asmx esposto da SharePoint, da un'applicazione Silverlight, mi sono scontrato con questo errore:

ErrorCode: 0x81020026
ErrorText: The list that is referenced here no longer exists.

La chiamata andava a buon fine solamente se aprivo la mia applicazione silverlight da una pagina appartenente al sito di root della mia site collection, mentre nei sottositi mi ritornava sempre l'errore appena descritto. Anche se ero sicuro al 100% di passare l'identificativo giusto della mia lista.
L'errore stava sicuramente nell'indirizzo del web service. Si, perchè i web service di SharePoint vanno richiamati in base al sito in cui vogliono essere utilizzati ed io avevo inserito la referenza utilizzando l'indirizzo del sito di root. Mentre invece, se io volessi richiamare il web service Lists.asmx su di un sottosito, dovrei utilizzare un indirizzo del genere:

http://server/subsite/_vti_bin/lists.asmx

Questa la sapevo, ma non riuscivo a capire come passare tale indirizzo alla classe proxy del web service, generata da Visual Studio, secondo la sintassi definita da WCF.
Ecco.. basta utilizzare una nuova istanza della classe EndpointAddress e passare il corretto indirizzo del web service, così da poter effettuare operazioni sul sito SharePoint desiderato.

string wsUrl = "http://server/subsite/_vti_bin/lists.asmx";

BasicHttpBinding bind = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
bind.MaxReceivedMessageSize = 2147483647;
EndpointAddress endpoint = new EndpointAddress(wsUrl);
SharePointListsService.ListsSoapClient client = new SharePointListsService.ListsSoapClient(bind, endpoint);
client.UpdateListItemsCompleted +=
new EventHandler<SharePointListsService.UpdateListItemsCompletedEventArgs>(client_UpdateListItemsCompleted);

XElement batch = new XElement("Batch",
new XAttribute("OnError", "Continue"),
new XAttribute("ListVersion", "1"),
new XElement("Method",
new XAttribute("ID", "1"),
new XAttribute("Cmd", "Update"),
new XElement("Field", new XAttribute("Name", "Title"), "TEST")));

client.UpdateListItemsAsync("{8a03009d-44eb-4ec5-9ac5-9c1841e0ac11}", batch);

Per poi gestire l'evento UpdateListItemsCompleted come meglio crediamo..

void client_UpdateListItemsCompleted(object sender, SharePointListsService.UpdateListItemsCompletedEventArgs e)

{
if(e.Error == null)
HtmlPage.Window.Alert("Update done successfully !");
}

Senza utilizzare WCF, bastava settare la proprietà "Url" della classe proxy con l'indirizzo corretto del web service, a partire da quello proprio del sottosito SharePoint.
Spero possa esservi utile..
blog comments powered by Disqus