2009-09-23 56 views
3

使用SharePoint SDK時,我試圖檢索列表並在複合控件中顯示內容。名單是觀衆意識到,我想保持在我的控制。我如何才能獲取此列表,並按受衆羣體過濾使用SharePoint SDK?下面是一些代碼,我的工作:按受衆篩選SharePoint列表

SPWeb currentWeb = SPContext.Current.Site.RootWeb; 
SPList shortcuts = currentWeb.Lists["Shortcuts"]; 

回答

6

下面是一些我的代碼現在使用,它不適合我。根據觀衆如何設置,我應該得到的結果:

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,即使它應該是。

+0

原來這段代碼是正確的,確實有效。我已將自己的個人資料調整爲特定受衆的一部分,但由於觀衆未被重新編譯,所以變更未生效。一旦發生,一切都按預期工作。 – 2009-09-23 19:36:19

0

下面是一個代碼段,也許可以使用,以確定每個項目的觀衆:

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); 
} 
1

下面是一個更簡潔的代碼片段。主要更改是刪除未使用的對象,以及更高效的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(); 
}