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

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

 

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

 

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

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

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

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

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

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

实现的代码如下:

 

ContractedBlock.gif ExpandedBlockStart.gif 实现方法
  1ExpandedBlockStart.gifContractedBlock.gif        /**//// <summary>
  2        /// 修改首页WerPart样式及视图
  3         /// </summary>
  4        /// <param name="currentWeb">大客户站点</param>

  5        public void ChangeWebPartLayout(SPWeb currentWeb)
  6ExpandedBlockStart.gifContractedBlock.gif        {
  7            SPSecurity.RunWithElevatedPrivileges(delegate()
  8ExpandedSubBlockStart.gifContractedSubBlock.gif            {
  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)
 34ExpandedSubBlockStart.gifContractedSubBlock.gif                {
 35                    if (wp is ListViewWebPart)
 36ExpandedSubBlockStart.gifContractedSubBlock.gif                    {
 37                        ListViewWebPart lv = wp as ListViewWebPart;
 38                        switch (lv.DisplayTitle)
 39ExpandedSubBlockStart.gifContractedSubBlock.gif                        {
 40                            //重点项目计划
 41                            case "客户年度重点项目计划":
 42ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 43                                    this.SaveWebPartChanges(ITSKeyProjectPlanList, lv, webPartManager);
 44                                }

 45                                break;
 46                            //重点项目追踪
 47                            case "重点项目追踪":
 48ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 49                                    this.SaveWebPartChanges(ITSKeyProjectTrackingList, lv, webPartManager);
 50                                }

 51                                break;
 52                            //普通项目计划
 53                            case "客户年度普通项目计划":
 54ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 55                                    this.SaveWebPartChanges(ITSGeneralProjectPlanList, lv, webPartManager);
 56                                }

 57                                break;
 58                            //普通项目追踪
 59                            case "普通项目追踪":
 60ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 61                                    this.SaveWebPartChanges(ITSGeneralProjectTrackingList, lv, webPartManager);
 62                                }

 63                                break;
 64                            //客户动态追踪
 65                            case "客户动态追踪":
 66ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 67                                    this.SaveWebPartChanges(ITSClientDynamicTrackingList, lv, webPartManager);
 68                                }

 69                                break;
 70                            //客户接触记录
 71                            case "客户接触记录":
 72ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 73                                    this.SaveWebPartChanges(ITSClientContactRecordList, lv, webPartManager);
 74                                }

 75                                break;
 76                            //客户团队信息
 77                            case "大客户团队信息":
 78ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 79                                    this.SaveWebPartChanges(ITSClientTeamList, lv, webPartManager);
 80                                }

 81                                break;
 82                            //客户团队工作
 83                            case "大客户团队工作":
 84ExpandedSubBlockStart.gifContractedSubBlock.gif                                {
 85                                    this.SaveWebPartChanges(ITSClientTeamWorkLogList, lv, webPartManager);
 86                                }

 87                                break;
 88                        }

 89                    }

 90                }

 91                customWeb.Update();
 92                customWeb.AllowUnsafeUpdates = false;
 93            }
);
 94        }

 95
 96ExpandedBlockStart.gifContractedBlock.gif        /**//// <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)
103ExpandedBlockStart.gifContractedBlock.gif        {
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
110ExpandedBlockStart.gifContractedBlock.gif        /**//// <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)
118ExpandedBlockStart.gifContractedBlock.gif        {
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, nullas 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, nullas XmlNode;
142            XmlNode tBarNode = node.SelectSingleNode("Toolbar");
143            if (tBarNode != null)
144ExpandedSubBlockStart.gifContractedSubBlock.gif            {
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        }

 

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

 

ContractedBlock.gif ExpandedBlockStart.gif 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值