使用代码管理SharePoint页面中的WebPart
2010-09-28 17:00
507 查看
SharePoint中的WebPart功能很强大,通过界面可以定制共享视图中的WebPart也可以定制个性化视图中的WebPart。
但是有的SharePoint项目可能需要通过feature向SharePoint的页面中添加WebPart,下面介绍如何实现通过代码管理SharePoint页面中的WebPart。
方案:通过SPSite->SPWeb->SPFolder得到SPFile,通过 SPFile.GetLimitedWebPartManager 方法获取SPWebPartManager(Provides a limited set of Web Part operations that can be performed in our object model scenarios when there is no HttpContext and no Page object is instantiated.),通过SPWebPartManager来操作页面中的WebPart,下面是示例代码:
//get the current web; not using "using" because we don't want to
//kill the web context for other controls that need it
SPWeb curWeb = SPContext.Current.Web;
//look to see if our code has already run
if (! curWeb.Properties.ContainsKey(KEY_CHK))
The next thing is to get a reference to the home page in the site:
//look for the default page so we can mess with the web parts
SPFile thePage = curWeb.RootFolder.Files["default.aspx"];
With the home page, you can get the web part manager for it:
//get the web part manager
SPLimitedWebPartManager theMan = thePage.GetLimitedWebPartManager
(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
//create a hashtable to store our web parts
hshWp = new Hashtable();
foreach (WebPart wp in theMan.WebParts)
{
//close the welcome part; WebPartAction is a custom class
//I wrote to keep track of web parts and their properties
if (wp.GetType().Equals(typeof(PersonalWelcomeWebPart)))
hshWp.Add(wp.StorageKey.ToString(),
new WebPartAction(wp,
WebPartAction.ActionType.Delete));
//etc
}
//add a new ThisWeekInPictures web part
ThisWeekInPicturesWebPart wpPix = new ThisWeekInPicturesWebPart();
wpPix.ImageLibrary = "Shared Pictures";
wpPix.Title = "My Pictures";
//add it to the hash so it gets put in the page
hshWp.Add(Guid.NewGuid().ToString(),
new WebPartAction(wpPix, WebPartAction.ActionType.Add,
"MiddleRightZone", 10));
Finally, the code enumerates through the hashtable and makes all of the web part changes:
foreach (string key in hshWp.Keys)
{
WebPartAction wpa = (WebPartAction)hshWp[key];
switch (wpa.Action)
{
case WebPartAction.ActionType.Delete:
theMan.DeleteWebPart(wpa.wp);
break;
case WebPartAction.ActionType.Move:
theMan.MoveWebPart(wpa.wp, wpa.zoneID, wpa.zoneIndex);
theMan.SaveChanges(wpa.wp);
break;
case WebPartAction.ActionType.Add:
theMan.AddWebPart(wpa.wp, wpa.zoneID, wpa.zoneIndex);
break;
}
}
//look to see if our code has already run
if (! curWeb.Properties.ContainsKey(KEY_CHK))
//add our key to the property bag so we don't run
//our provisioning code again
curWeb.Properties.Add(KEY_CHK, "true");
curWeb.Properties.Update();
curWeb.AllowUnsafeUpdates = false;
但是有的SharePoint项目可能需要通过feature向SharePoint的页面中添加WebPart,下面介绍如何实现通过代码管理SharePoint页面中的WebPart。
方案:通过SPSite->SPWeb->SPFolder得到SPFile,通过 SPFile.GetLimitedWebPartManager 方法获取SPWebPartManager(Provides a limited set of Web Part operations that can be performed in our object model scenarios when there is no HttpContext and no Page object is instantiated.),通过SPWebPartManager来操作页面中的WebPart,下面是示例代码:
//get the current web; not using "using" because we don't want to
//kill the web context for other controls that need it
SPWeb curWeb = SPContext.Current.Web;
//look to see if our code has already run
if (! curWeb.Properties.ContainsKey(KEY_CHK))
The next thing is to get a reference to the home page in the site:
//look for the default page so we can mess with the web parts
SPFile thePage = curWeb.RootFolder.Files["default.aspx"];
With the home page, you can get the web part manager for it:
//get the web part manager
SPLimitedWebPartManager theMan = thePage.GetLimitedWebPartManager
(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
//create a hashtable to store our web parts
hshWp = new Hashtable();
foreach (WebPart wp in theMan.WebParts)
{
//close the welcome part; WebPartAction is a custom class
//I wrote to keep track of web parts and their properties
if (wp.GetType().Equals(typeof(PersonalWelcomeWebPart)))
hshWp.Add(wp.StorageKey.ToString(),
new WebPartAction(wp,
WebPartAction.ActionType.Delete));
//etc
}
//add a new ThisWeekInPictures web part
ThisWeekInPicturesWebPart wpPix = new ThisWeekInPicturesWebPart();
wpPix.ImageLibrary = "Shared Pictures";
wpPix.Title = "My Pictures";
//add it to the hash so it gets put in the page
hshWp.Add(Guid.NewGuid().ToString(),
new WebPartAction(wpPix, WebPartAction.ActionType.Add,
"MiddleRightZone", 10));
Finally, the code enumerates through the hashtable and makes all of the web part changes:
foreach (string key in hshWp.Keys)
{
WebPartAction wpa = (WebPartAction)hshWp[key];
switch (wpa.Action)
{
case WebPartAction.ActionType.Delete:
theMan.DeleteWebPart(wpa.wp);
break;
case WebPartAction.ActionType.Move:
theMan.MoveWebPart(wpa.wp, wpa.zoneID, wpa.zoneIndex);
theMan.SaveChanges(wpa.wp);
break;
case WebPartAction.ActionType.Add:
theMan.AddWebPart(wpa.wp, wpa.zoneID, wpa.zoneIndex);
break;
}
}
//look to see if our code has already run
if (! curWeb.Properties.ContainsKey(KEY_CHK))
//add our key to the property bag so we don't run
//our provisioning code again
curWeb.Properties.Add(KEY_CHK, "true");
curWeb.Properties.Update();
curWeb.AllowUnsafeUpdates = false;
相关文章推荐
- SharePoint 使用代码创建 SPWeb/SPSiite/SPWebApplication以及WebPart添加到页面与删除 (二)
- SharePoint 使用代码创建 SPWeb/SPSiite/SPWebApplication以及WebPart添加到页面与删除 (三)
- SharePoint 使用代码创建 SPWeb/SPSiite/SPWebApplication以及WebPart添加到页面与删除 (一)
- SharePoint 使用代码为页面添加WebPart
- SharePoint 使用代码为页面添加WebPart
- 使用代码为SharePoint页面上的WebParts设置访问群体
- sharepoint 2010 使用程序向页面添加webpart
- SharePoint【学习笔记】-- 页面上添加WebPart(代码篇)
- 人员管理系统(使用struts)--页面代码
- 如何生成报告来枚举出整个sharepoint环境中的每个页面所使用的所有webpart
- 深入浅出SharePoint——页面上添加WebPart(代码篇)
- 七天学会ASP.NET MVC (四)——Layout页面使用和用户角色管理 (代码下载)
- Sublime Text 使用 – 用 github的gist 管理代码片段
- [文摘]怎么使用Sticky Footer代码(让页脚紧贴页面底部的方法)
- 使用Git和Github来管理自己的代码
- 使用C#代码部署SharePoint 2013开发包简单总结(一)
- VS2005(C#)使用AjaxPro.2实现把前台页面的值传到后台代码中
- 使用.net core ABP和Angular模板构建博客管理系统(实现编辑页面功能)
- 使用TortoiseSVN管理个人文档和项目代码
- 使用VS 2013的Bing Code Search插件写SharePoint代码