最近在做项目的过程中,遇到个问题,创建一个SharePoint站点,在站点首页(default.aspx)添加了几个列表WebPart(ListViewWebPart),WebPart选用了自定义的视图,并将列表WebPart工具栏类型设置成“没有工具栏”,整体的效果如下图:

接着将SharePoint站点另存成模板,然后基于此模板创建个新站点,结果新站点创建完成后,原来模板中首页WebPart所应用的视图和工具栏类型都恢复到默认的样子,如下图:

这样下来又要从头到尾的手动调整WebPart的样式,想想有些崩溃。这样的站点要通过程序创建200多个,手动调整起来只能吐血了。于是开始研究如何通过代码来完成调整的任务,让他创建完站点以后自动样式调整。基本的实现思路如下:

1、首先找到首页(default.aspx)的WebPart管理对象(SPLimitedWebPartManager).

2、用SPLimitedWebPartManager搞到页面里所有的WebPart。

3、过滤掉非列表WebPart(ListViewWebPart)。

4、剩下的开始逐一处理,先调整视图,在调整它的工具栏类型。

5、最后保存调整的结果。

实现的代码如下:

实现方法
  1        /**//// <summary>
  2        /// 修改首页WerPart样式及视图
  3         /// </summary>
  4        /// <param name="currentWeb">大客户站点</param>
  5        public void ChangeWebPartLayout(SPWeb currentWeb)
  6        {
  7            SPSecurity.RunWithElevatedPrivileges(delegate()
  8            {
  9                SPSite siteClt = new SPSite(currentWeb.Site.ID);
 10                SPWeb managementWeb = siteClt.AllWebs["ITSImportanceCustomerManagement"];      //需要以用Mode中的变量
 11                SPWeb customWeb = managementWeb.Webs[currentWeb.ID];
 12
 13                //客户年度重点项目计划
 14                SPList ITSKeyProjectPlanList = this.GetListFromUrl(customWeb, "ITSKeyProjectPlan");
 15                //重点项目追踪
 16                SPList ITSKeyProjectTrackingList = this.GetListFromUrl(customWeb, "ITSKeyProjectTracking");
 17                //客户年度普通项目计划
 18                SPList ITSGeneralProjectPlanList = this.GetListFromUrl(customWeb, "ITSGeneralProjectPlan");
 19                //普通项目追踪
 20                SPList ITSGeneralProjectTrackingList = this.GetListFromUrl(customWeb, "ITSGeneralProjectTracking");
 21                //客户动态追踪
 22                SPList ITSClientDynamicTrackingList = this.GetListFromUrl(customWeb, "ITSClientDynamicTracking");
 23                //客户接触记录
 24                SPList ITSClientContactRecordList = this.GetListFromUrl(customWeb, "ITSClientContactRecord");
 25                //大客户团队信息
 26                SPList ITSClientTeamList = this.GetListFromUrl(customWeb, "ITSClientTeam");
 27                //大客户团队工作
 28                SPList ITSClientTeamWorkLogList = this.GetListFromUrl(customWeb, "ITSClientTeamWorkLog");
 29
 30                SPLimitedWebPartManager webPartManager = customWeb.GetLimitedWebPartManager("default.aspx", PersonalizationScope.Shared);
 31
 32                customWeb.AllowUnsafeUpdates = true;
 33                foreach (System.Web.UI.WebControls.WebParts.WebPart wp in webPartManager.WebParts)
 34                {
 35                    if (wp is ListViewWebPart)
 36                    {
 37                        ListViewWebPart lv = wp as ListViewWebPart;
 38                        switch (lv.DisplayTitle)
 39                        {
 40                            //重点项目计划
 41                            case "客户年度重点项目计划":
 42                                {
 43                                    this.SaveWebPartChanges(ITSKeyProjectPlanList, lv, webPartManager);
 44                                }
 45                                break;
 46                            //重点项目追踪
 47                            case "重点项目追踪":
 48                                {
 49                                    this.SaveWebPartChanges(ITSKeyProjectTrackingList, lv, webPartManager);
 50                                }
 51                                break;
 52                            //普通项目计划
 53                            case "客户年度普通项目计划":
 54                                {
 55                                    this.SaveWebPartChanges(ITSGeneralProjectPlanList, lv, webPartManager);
 56                                }
 57                                break;
 58                            //普通项目追踪
 59                            case "普通项目追踪":
 60                                {
 61                                    this.SaveWebPartChanges(ITSGeneralProjectTrackingList, lv, webPartManager);
 62                                }
 63                                break;
 64                            //客户动态追踪
 65                            case "客户动态追踪":
 66                                {
 67                                    this.SaveWebPartChanges(ITSClientDynamicTrackingList, lv, webPartManager);
 68                                }
 69                                break;
 70                            //客户接触记录
 71                            case "客户接触记录":
 72                                {
 73                                    this.SaveWebPartChanges(ITSClientContactRecordList, lv, webPartManager);
 74                                }
 75                                break;
 76                            //客户团队信息
 77                            case "大客户团队信息":
 78                                {
 79                                    this.SaveWebPartChanges(ITSClientTeamList, lv, webPartManager);
 80                                }
 81                                break;
 82                            //客户团队工作
 83                            case "大客户团队工作":
 84                                {
 85                                    this.SaveWebPartChanges(ITSClientTeamWorkLogList, lv, webPartManager);
 86                                }
 87                                break;
 88                        }
 89                    }
 90                }
 91                customWeb.Update();
 92                customWeb.AllowUnsafeUpdates = false;
 93            });
 94        }
 95
 96        /**//// <summary>
 97        /// 得到当前站点指定URL地址的列表
 98        /// </summary>
 99        /// <param name="web">列表所在站点</param>
100        /// <param name="listShortUrl">列表URL名(例:ITSKeyProjectPlan)</param>
101        /// <returns></returns>
102        public SPList GetListFromUrl(SPWeb web, string listShortUrl)
103        {
104            SPList list = null;
105            if ((web != null) && !string.IsNullOrEmpty(listShortUrl)) 
106                list = web.GetListFromUrl(string.Format("/ITSImportanceCustomerManagement/{0}/Lists/{1}/AllItems.aspx",web.Name,listShortUrl));
107            return list;
108        }
109
110        /**//// <summary>
111        /// 保存对ListViewWebPart的修改。
112        /// 此方法只为ChangeWebPartLayout(SPWeb currentWeb)方法提供服务。
113        /// </summary>
114        /// <param name="list">ListViewWebPart所引用的列表</param>
115        /// <param name="lv">ListViewWebPart对象</param>
116        /// <param name="webPartManager">当前页面WebPartManager对象</param>
117        private void SaveWebPartChanges(SPList list,ListViewWebPart lv,SPLimitedWebPartManager webPartManager)
118        {
119            SPView homeView = list.Views["首页视图"];
120            //得到 客户重点项目计划WebPart当前使用的视图
121            SPView lvView = list.Views[new Guid(lv.ViewGuid)];
122            //清除视图所有的显示栏
123            lvView.ViewFields.DeleteAll();
124            foreach (string field in homeView.ViewFields)
125                lvView.ViewFields.Add(field);
126            lvView.GroupByHeader = homeView.GroupByHeader;
127            lvView.GroupByFooter = homeView.GroupByFooter;
128            lvView.RowLimit = homeView.RowLimit;
129            lvView.Query = homeView.Query;
130            lvView.ViewEmpty = homeView.ViewEmpty;
131            lvView.ViewHeader = homeView.ViewHeader;
132            lvView.ViewFooter = homeView.ViewFooter;
133            lvView.Scope = homeView.Scope;
134            lvView.Update();
135
136            //代码去除视图的工具栏
137            System.Reflection.PropertyInfo ViewProp = lv.GetType().GetProperty("View", BindingFlags.NonPublic | BindingFlags.Instance);
138            SPView spView = ViewProp.GetValue(lv, null) as SPView;
139            string txt = spView.SchemaXml;
140            System.Reflection.PropertyInfo nodeProp = spView.GetType().GetProperty("Node", BindingFlags.NonPublic | BindingFlags.Instance);
141            XmlNode node = nodeProp.GetValue(spView, null) as XmlNode;
142            XmlNode tBarNode = node.SelectSingleNode("Toolbar");
143            if (tBarNode != null)
144            {
145                XmlAttribute typeNode = tBarNode.Attributes["Type"];
146                tBarNode.RemoveAll();
147                tBarNode.Attributes.Append(typeNode);
148                typeNode.Value = "None";
149            }
150            spView.Update();
151
152            webPartManager.SaveChanges(lv);
153        }

搞个命令行程序测试一下:

Code
    class Program
    {
        static void Main(string[] args)

{
            SPSite site = new SPSite("http://liust-server:100");
            SPWeb icmWeb = site.AllWebs["ITSImportanceCustomerManagement"];
            SPWeb customWeb = icmWeb.Webs["DKHWebTemplate"];
            Program p = new Program();
            p.ChangeWebPartLayout(customWeb);
            Console.Write("ok");
            Console.ReadKey();
        }
    }

至此,这个问题就搞定了,可以休息一下了。

转载于:https://www.cnblogs.com/Nirvanalst/archive/2009/03/01/1400615.html

问题总结(一)使用代码调整SharePoint WebPart 视图和列表菜单相关推荐

  1. 【原创】sharepoint webpart COPY部署的办法

    sharepoint webpart COPY部署的办法: 将生成的DLL文件COPY到BIN目录下(注意是BIN,不是APP_BIN目录). 然后在web.config文件中添加对控件的安全信任的代 ...

  2. 非常不错的sharepoint webpart工具集

    昕友.亿享 SharePoint WebPart 控件集 SharePoint Webparts,Moss Web Parts(Webpart控件) 欢迎免费下载使用昕友WebPart部件集,您可以免 ...

  3. 一个有价值的 Sharepoint WebPart 页签部件

    一个有价值的 Sharepoint WebPart 页签部件: 能够像页签一样使用:使合适的 WebPart 部件 显示出来,隐蔽 其它 WebPart 部件. EasyTabParts.zip 转载 ...

  4. SPAW Editor .NET Edition v.2乱用:使用代码调整编辑器高度

    SPAW Editor .NET Edition v.2乱用中介绍了一个HTML Editor,在使用这个Editor进行页面布局的时候可能希望使用代码控制编辑器的大小,例如在用户调整浏览器大小的时候 ...

  5. 代码调整技术(Code-Tuning Techniques)

    难得这个周末双休,今晚再次拿起令人兴奋的床头书--<代码大全>,随意翻看了关于"代码调整技术"这一章节,其中有些写得不错.固写个这篇博客,以便日后回忆及和大伙分享. 其 ...

  6. 【001】-智能管控页面改造,使其能被外系统正常展示,代码调整说明

    步骤1:在原有代码基础上增加完整的html标签,包含:<html><head><body>等以及pc_index.jsp页面中的js和css. 步骤2:将原有jav ...

  7. SLAM十四讲ch7代码调整(undefined reference to symbol)

    SLAM十四讲ch7代码调整--2021.6.14 1.首先大部分的代码需要在Cmakelists中更新至c++14,否则会出现如下报错 /usr/local/include/g2o/core/bas ...

  8. 用javascript自定义SharePoint文档库/列表项菜单

    本文转自YCC博客 我们在SharePoint中自定义菜单,通常通过带CustomAction 的Feature来实现,比如隐藏一个菜单: <HideCustomAction>   Gro ...

  9. 为SharePoint网站创建自定义导航菜单

    相信不少人都希望把SharePoint网站内置的那个顶部导航菜单,换成自己希望的样式.由于SharePoint 2007/2010的网站导航基本上基于标准的ASP.NET SiteMap模型,所以只要 ...

最新文章

  1. jsp中如何判断el表达式中的BigDecimal==0
  2. PL/SQL学习笔记-常量变量及数据类型初步
  3. 使用Crypto++ ecdsa 进行签名和认证
  4. SilverLight简介和优点
  5. 【LeetCode笔记】236. 二叉树的最近公共祖先(Java、二叉树、DFS)
  6. Android-----巧用科大讯飞语句实现中文语音播报
  7. swap函数_【Golang】图解函数调用栈
  8. dirent struct_file属性读取 Struct dirent struct stat
  9. 腾讯云最便宜的云服务器多少钱可以入坑?
  10. 移动架构师第一站UML建模
  11. 每日打卡:等式方程的可满足性
  12. python opencv实现 tiff转raw格式以及扩充体积补零
  13. 闫令琪:Games101 现代计算机图形学-光线追踪(三):渲染方程和路径追踪path ray tracing 作业Assignment07解析
  14. 去雾论文A real-time fast defogging system to clear the vision of driver in foggy highway using minimu...
  15. 5.8 前端开发日报
  16. SSM电影点播系统03-UI界面设计
  17. java jersey介绍
  18. 深度解读 | 肠道菌群和中枢神经系统的关系
  19. c++ TSan(Thread Sanitizer)线程检测工具
  20. MySQL 根据某一个或者多个字段查找重复数据

热门文章

  1. android+影子系统,神器再升级,手机影子系统来啦
  2. 系统学习机器学习之特征工程(三)--稀疏特征之FM算法
  3. 系统学习深度学习(二十三)--SqueezeNet
  4. mysql数据表字段繁体转简体_【WORD】阿拉伯数字变大写数字、简繁体转换等实用小技巧...
  5. C语言—预定义宏调试__LINE__、__func__
  6. git pull命令报错
  7. scala数组与java数组对比
  8. Spark Row对象入门到熟悉
  9. Linux平台kafaka安装及使用
  10. HTTP协议下GET与POST的区别