使用SharePoint SDK時,我試圖檢索列表並在複合控件中顯示內容。名單是觀衆意識到,我想保持在我的控制。我如何才能獲取此列表,並按受衆羣體過濾使用SharePoint SDK?下面是一些代碼,我的工作:按受衆篩選SharePoint列表
SPWeb currentWeb = SPContext.Current.Site.RootWeb;
SPList shortcuts = currentWeb.Lists["Shortcuts"];
使用SharePoint SDK時,我試圖檢索列表並在複合控件中顯示內容。名單是觀衆意識到,我想保持在我的控制。我如何才能獲取此列表,並按受衆羣體過濾使用SharePoint SDK?下面是一些代碼,我的工作:按受衆篩選SharePoint列表
SPWeb currentWeb = SPContext.Current.Site.RootWeb;
SPList shortcuts = currentWeb.Lists["Shortcuts"];
下面是一些我的代碼現在使用,它不適合我。根據觀衆如何設置,我應該得到的結果:
protected override void CreateChildControls()
{
dropdown = new DropDownList();
dropdown.Items.Add(new ListItem("Select...", ""));
SPWeb currentWeb = SPContext.Current.Site.RootWeb;
SPList shortcuts = currentWeb.Lists["Shortcuts"];
ServerContext context = ServerContext.GetContext(currentWeb.Site);
AudienceManager audManager = new AudienceManager(context);
AudienceCollection audiences = audManager.Audiences;
AudienceLoader audienceLoader = AudienceLoader.GetAudienceLoader();
foreach (SPListItem listItem in shortcuts.Items)
{
string audienceFieldValue = (string)listItem["Target Audiences"];
if (AudienceManager.IsCurrentUserInAudienceOf(audienceLoader, audienceFieldValue, false))
{
dropdown.Items.Add(new ListItem(listItem.Title, listItem.Url));
}
}
Controls.Add(dropdown);
base.CreateChildControls();
}
在:
if (AudienceManager.IsCurrentUserInAudienceOf(audienceLoader, audienceFieldValue, false))
這是從來沒有返回true,即使它應該是。
下面是一個代碼段,也許可以使用,以確定每個項目的觀衆:
SPList shortcuts = currentWeb.Lists["Shortcuts"];
SPListItemCollection items = list.Items;
Audience siteAudience;
ServerContext context = ServerContext.GetContext(site);
AudienceManager audManager = new AudienceManager(context);
foreach (SPListItem item in items)
{
string ID = item["Target Audiences"].ToString();
string NewID = ID.Remove(36);
Guid guid = new Guid(NewID);
siteAudience = audManager.GetAudience(guid);
}
下面是一個更簡潔的代碼片段。主要更改是刪除未使用的對象,以及更高效的foreach
循環版本。
protected override void CreateChildControls()
{
dropdown = new DropDownList();
dropdown.Items.Add(new ListItem("Select...", ""));
SPWeb currentWeb = SPContext.Current.Site.RootWeb;
SPListItemCollection scItems = currentWeb.Lists["Shortcuts"].Items;
AudienceLoader audienceLoader = AudienceLoader.GetAudienceLoader();
// Iterate over a copy of the collection to prevent multiple queries to the list
foreach (SPListItem listItem in scItems)
{
string audienceFieldValue = (string)listItem["Target Audiences"];
if (AudienceManager.IsCurrentUserInAudienceOf(audienceLoader, audienceFieldValue, false))
{
dropdown.Items.Add(new ListItem(listItem.Title, listItem.Url));
}
}
Controls.Add(dropdown);
base.CreateChildControls();
}
原來這段代碼是正確的,確實有效。我已將自己的個人資料調整爲特定受衆的一部分,但由於觀衆未被重新編譯,所以變更未生效。一旦發生,一切都按預期工作。 – 2009-09-23 19:36:19