设为首页 收藏本站
查看: 891|回复: 0

[经验分享] 问题总结(一)使用代码调整SharePoint WebPart 视图和列表菜单

[复制链接]

尚未签到

发表于 2015-9-27 08:58:29 | 显示全部楼层 |阅读模式
  最近在做项目的过程中,遇到个问题,创建一个SharePoint站点,在站点首页(default.aspx)添加了几个列表WebPart(ListViewWebPart),WebPart选用了自定义的视图,并将列表WebPart工具栏类型设置成“没有工具栏”,整体的效果如下图:
  
DSC0000.gif
  接着将SharePoint站点另存成模板,然后基于此模板创建个新站点,结果新站点创建完成后,原来模板中首页WebPart所应用的视图和工具栏类型都恢复到默认的样子,如下图:
DSC0001.gif
  
  这样下来又要从头到尾的手动调整WebPart的样式,想想有些崩溃。这样的站点要通过程序创建200多个,手动调整起来只能吐血了。于是开始研究如何通过代码来完成调整的任务,让他创建完站点以后自动样式调整。基本的实现思路如下:
  1、首先找到首页(default.aspx)的WebPart管理对象(SPLimitedWebPartManager).
  2、用SPLimitedWebPartManager搞到页面里所有的WebPart。
  3、过滤掉非列表WebPart(ListViewWebPart)。
  4、剩下的开始逐一处理,先调整视图,在调整它的工具栏类型。
  5、最后保存调整的结果。
  实现的代码如下:
  

DSC0002.gif DSC0003.gif 实现方法
  1        /**//// <summary>
  2 DSC0004.gif         /// 修改首页WerPart样式及视图
  3         /// </summary>
  4 DSC0005.gif         /// <param name="currentWeb">大客户站点</param>
  5 DSC0006.gif         public void ChangeWebPartLayout(SPWeb currentWeb)
  6         DSC0007.gif {
  7            SPSecurity.RunWithElevatedPrivileges(delegate()
  8 DSC0008.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)
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();
        }
    }  
  至此,这个问题就搞定了,可以休息一下了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-119306-1-1.html 上篇帖子: 最近在做SharePoint开发时积累的几点知识 下篇帖子: 获取&修改SharePoint站点中的任意WebPart
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表