タイトルで述べたように、外部リストを介してMSSQL08ストアドプロシージャからデータを取得しようとしています。私のマシンにはMicrosoftOffice2010がインストールされていないため、IEntityを使用してレコードをフィルタリングおよび取得できませんでした。フィルタクラスはMicrosoft.Office.BusinessData.dllに保持されていると思います。外部リストを使用してデータのフィルタリングと取得を実行するように制限します。
SharePointDesignerによって作成された外部リストは完全に機能します。ビュー設定で定義されたデータソースフィルターを編集することで、ストアドプロシージャを表示およびフィルター処理できます。
ただし、私の要件は、C#でアイテムをプログラムでフィルタリングして取得することです。したがって、私の最初の試みは、SPList.GetItems(SPView)メソッドを使用して外部リストを照会することでした。
using (SPWeb web = SPContext.Current.Web){
SPList list = web.Lists[contextList.ID];
SPView view = list.Views[contextView.ID];
SPListItemCollection items = list.GetItems(view);
gridview1.DataSource = items.GetDataTable();
gridview1.Databind();
}
ただし、上記のアプローチでは、リストから列名を取得することしかできません。データがリストから取得されていないようです。
したがって、2番目の試みは、昇格されたアクセス許可でコードを実行することでした。
SPSite contextSite = SPContext.Current.Site;
SPWeb contextWeb = SPContext.Current.Web;
SPList contextList = contextWeb.Lists[listName];
SPView contextView = contextList.Views[0];
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(contextSite.ID))
using (SPWeb web = site.OpenWeb(contextWeb.ID))
{
SPList list = web.Lists[contextList.ID];
SPView view = list.Views[contextView.ID];
SPListItemCollection items = list.GetItems(view);
gridview1.DataSource = items.GetDataTable();<br/>gridview1.Databind();
}
});
2番目のアプローチを使用すると、「不正な許可」の例外に直面します。
なぜこの問題に直面しているのか、私はかなり困惑しています。SharePoint BCSを介してストアドプロシージャからアイテムを取得した経験はありますか?または、異なるWebパーツ間ですべてのコードを繰り返さずに、ストアドプロシージャからデータをプルするためのより良い方法はありますか?
---------------10月5日編集-------------------------------
bcsを介さずに、ストアドプロシージャを直接実行してみることにしました。ただし、ストアドプロシージャの一部は、非常に一般的に使用されているためです。このコードを共有して、さまざまなWebパーツ間で再利用できるようにすることは可能ですか?
--------------編集10月5日+4時間---------------------
ECTのリスト読み取り操作でフィルターのデフォルト値を指定するとわかります。次の方法でリスト内のアイテムを取得できます。SPList.getItems(SPView); 問題は、プログラムでフィルターを変更する方法になります。SPView.Methodを使用して、デフォルト値を変更しようとしました。ただし、これは機能しているようです。
<Method Name="getTeam">"
<Filter Name="code" Value="2"/>"
</Method>