Tuesday, September 20, 2005
有客户问我,怎么拿到应用到WebPart上的Audiences。一想很简单,还不就是用AudienceManage通过Audience所对应的GUID来Get吗。谁知道一写才发现了问题,与某个WebPart对应的GUID去哪里找到呢?难道要去Query database?不信WebPart类有这么傻。
查了半天终于发现,WebPart的IsIncludedFilter属性包含了所有应用到WebPart上的Audiences的GUID,它们使用逗号分隔。知道了这个就简单了。
private void button1_Click(object sender, System.EventArgs e) ...{ // Get PortalContext. TopologyManager tm = new TopologyManager(); PortalSite ps = tm.PortalSites[new Uri("http://testsrv")]; PortalContext pc = PortalApplication.GetContext(ps); // Get all WebParts. SPSite site = new SPSite("http://testsrv"); SPWeb web = site.OpenWeb(); SPWebPartCollection wpcollection = web.GetWebPartCollection("default.aspx", Storage.Shared); // Get all audiences for each webpart. AudienceManager am = new AudienceManager(pc); foreach(WebPart wp in wpcollection) ...{ if(wp.IsIncludedFilter == string.Empty) ...{ Debug.WriteLine("No Target Audience was selected for " + wp.Title); } else ...{ // IsIncludedFilter contains a comma delimited list of audience GUID, // which format is "'guid1','guid2'" string[] GUIDs = wp.IsIncludedFilter.Split(','); foreach(string GUID in GUIDs) ...{ Audience au = am.GetAudience(new Guid(GUID.Substring(1, GUID.Length - 2))); if(au != null) ...{ Debug.WriteLine("Target Audience, " + au.AudienceName + ", was selected for " + wp.Title); ArrayList membership = au.GetMembership(); if(membership != null) ...{ for(int i = 0; i < membership.Count; i++) ...{ Debug.WriteLine(" --" + ((UserInfo)membership[i]).PreferredName); Debug.WriteLine(" --" + ((UserInfo)membership[i]).Email); Debug.WriteLine(" --" + ((UserInfo)membership[i]).NTName); } } } } } } }
posted @ Tuesday, September 20, 2005 5:42 PM | Feedback (11) | Filed Under [ 工作 ]
Powered by:
Copyright © sam1111