2011-09-15 3 views
0

私はデータテーブルからデータを取り出してフォーマットされたSP Webパーツを持っています。このWebパーツのインスタンスのほとんどは正常に動作しますが、この特定のインスタンスは呼び出されるとnullを返します。しかし、私がサイトにログインしていれば、webpartはリストを返します。とても奇妙です。私は、関連するすべてのWebオブジェクトをチェックし、それらはすべて親から継承しました。これは、ログインする必要はありません。ここでSharepoint OpenWeb()はログインしていないときにnullを返します

は、コードスニペットです:(私はこのコードを継承し、それは決して「良い」である点に注意してください)

public static DataTable GetDataTableFromSPList(string webUrl, string listName, Int32 numToReturn, string sortCol, string ascend) 
{ 
      SPListItemCollection coll = null; 
      DataTable dt = null; 

       string siteUrl = GetUrlPrefix(); 
       using (SPSite site = new SPSite(siteUrl + webUrl)) 
       { 
        using (SPWeb web = site.OpenWeb()) //this returns NULL when logged in anon??? 
        { 
         try 
         { 
          SPList list = null; 
          list = web.Lists[listName]; 

          SPQuery query = new SPQuery(); 
          string qry = "<OrderBy><FieldRef Name='" + sortCol + "' Ascending='" + ascend.ToUpper() + "' /></OrderBy>"; 

          query.Query = qry; 
          query.RowLimit = Convert.ToUInt32(numToReturn); 
          coll = list.GetItems(query); 

          if (coll != null) 
          { 
           dt = coll.GetDataTable(); 
          } 
         } 
         catch (Exception ex) 
         { 
          WriteLog(ex.Message, System.Diagnostics.EventLogEntryType.Error); 
         } 
        } 
       } 

      return dt; 
} 

答えて

1

私はどちらか、この問題を経験していないが、のカップルを読んだ後、決してましたそれについての記事は、これは "デフォルトの動作"であるようです。

OpenWeb()メソッドは、例えば、それは見つけることができる "最低" のウェブを返します。

とあなたをコードは次のようになります。

var web = site.OpenWeb("subsite/subsite1"); 

Webオブジェクトは次のようになります。 "subsite1"が存在しないため、 "subsite1"ではなく "subsite"になります。

あなたの場合は、間違いなく許可の問題です。匿名アクセスはサイトコレクション全体で有効になっていますか、具体的には、コードで呼び出しようとしているWebに対して有効になっていますか?もしそうなら、ユーザーは(匿名で)ウェブを開くことができますか?

これを修正する最も簡単な方法は、SPSecurity.RunWithElevatedPrivilegesを使用してメソッドをラップすることですが、それほどエレガントではありません。

OpenWeb() Reference

SPSecurity.RunWithElevatedPrivileges Reference

+0

はい、サイト全体がアノンのアクセスが有効になっています。 RunWithElevatedPrivsは本当に問題を解決します。私は何が起こっているのか知りたいです。 –

関連する問題