13 Temmuz 2011 Çarşamba

The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.

Sharepoint 2010'da geliştirdiğiniz Silverlight uygulamasından şu hatayı alıyorsanız;

The collection has not been initialized. It has not been requested or the request has not been executed. It may need to be explicitly requested.

Henüz ClientContext'e Load edilmemiş bir elemanı kullanmaya çalıştığınızı işaret eder. Mesela;
ClientContext spContext = new ClientContext("http://t1wsportal01/TalepYonetimi/");
List taskList = spContext.Web.Lists.GetByTitle("Tasks");

CamlQuery query = new CamlQuery();
query.ViewXml = String.Format(@"<View><Query></Query></View>");

taskCollection = taskList.GetItems(query);

MessageBox.Show(taskCollection.Count.ToString());

spContext.Load(taskCollection);
spContext.ExecuteQueryAsync(OnSuccess, OnFailure);
taskCollection değişkenine atama yaptıktan sonra hemen içerdiği eleman sayısını ekrana bastırmaya çalışıyorum. Bu işlem sırasında da yukarıdaki hatayı alıyorum. Neden? Daha önceki postumda da bahsettiğim gibi üzerinde işlem yapacağımız değişkenler ClientContext nesnesine yüklenir ve yüklenmesi içinde asenkron bir çağrı yapmak gerekir.

Peki bu taskCollection değişkeninin eleman sayısına ne zaman ulaşabilirsiniz? OnSuccess içerisinde derim ben de ;) Görelim;
private void OnSuccess(object sender, ClientRequestSucceededEventArgs e)
{
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(taskCollection.Count.ToString());
});
}
Operasyonu neden Dispatcher içinde yazdığımıza da yine daha önceki postumda değinmiştim.

Kolay gelsin,

Hiç yorum yok: