最近由于工作的需要,接触了sharepoint的二次开发。关于一些二次开发的基础知识中文资料已经很多了,所以在此我就记录一些我在工作中遇到的问题和解决方法。
     再做一个自定义字段的时候要在网站集下搜索所有的个人博客站点列出与文档库中某一文档相关的博客文章,并可以就当前浏览的文档在自己的网站中添加新的一篇博客。这个功能是由一个链接来实现的,所以就要用对象模型来获取到当前个人网站中博客网站的地址。
     首先我们先在vs2005中新建一个classlibary的项目(BlogSearch),建立两个类文件SearchResult和SearchResultRender类。添加必要的引用。SearchResult的源码如下:

Code
 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using Microsoft.SharePoint;
 5using Microsoft.SharePoint.WebControls;
 6using Microsoft.SharePoint.Security;
 7
 8namespace BlogSearch
 9{
10    public class SearchResults:SPFieldMultiLineText
11    {
12         public SearchResults(SPFieldCollection fields, string fieldname)
13            : base(fields, fieldname)
14        {
15 
16        }
17        public SearchResults(SPFieldCollection fields, string typeName, string displayName)
18            : base(fields, typeName, displayName)
19        {
20           
21
22        }
23
24        public override BaseFieldControl FieldRenderingControl
25        {
26            get
27            {
28                BaseFieldControl fieldcontrol = new SearchResultsControl();
29                fieldcontrol.FieldName = this.InternalName;
30                return fieldcontrol;
31            }
32        }
33    }
34}

这些代码没有特别之处都是建立自定义控件的基础,如有问题请参阅msdn和一步一步sharepoint2007的相关内容。
     接下来就是我们这次要谈论的重点了,在sharepoint中每一个网站都会有一个自己的宿主网站集,这些你可以在sharepoint的管理中心中进行设置(管理中心->应用程序管理->office sharepoint server共享服务->创建或配置此服务器场的共享服务)。每一个网站集都会有自己的用户配置文件(该配置文件是在用户添加到sharepoint站点中的时候就已经建立了,可以在管理中心中查看所有的用户配置文件,当然你要有足够的权限:P),那么这些配置文件的信息可以用对象模型获得么?答案是肯定的。网站下所有的用户配置文件我们可以用Microsoft.Office.Server.UserProfiles.UserProfileManager获得(努力学习的小熊博客中有关于UserProfile操作的文章,不错的哦)。我们可以通过UserProfileManager.MySiteHostUrl获得当前网站集的宿主网站集的url。这就是我们想要得到的东东了(在这里汗自己一个,为了这个东东找了两个小时!!),废话不多说了直接上代码(SearchResultRender):

Code
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.Runtime.InteropServices;
  5using System.Web.UI.WebControls;
  6using System.Web;
  7using System.Data.Sql;
  8using System.Data.SqlClient;
  9using System.Data;
 10
 11using Microsoft.SharePoint;
 12using Microsoft.SharePoint.WebControls;
 13
 14using Microsoft.Office.Server;
 15using Microsoft.Office.Server.UserProfiles;
 16
 17
 18namespace BlogSearch
 19{
 20    class SearchResultsControl : BaseFieldControl
 21    {
 22        protected Literal results;
 23
 24        protected override string  DefaultTemplateName
 25        {
 26            get 
 27            
 28                 return "SearchResultsControl";
 29            }
 30        }
 31                
 32
 33        public override object Value
 34        {
 35            get
 36            {
 37                EnsureChildControls();
 38                return results.Text;
 39            }
 40            set
 41            {
 42                EnsureChildControls();
 43
 44                results.Text = value.ToString();
 45            }
 46        }
 47
 48        public override void Focus()
 49        {
 50            EnsureChildControls();
 51            results.Focus();
 52        }
 53
 54        protected override void CreateChildControls()
 55        {
 56            if (this.ControlMode == SPControlMode.Display)
 57            {
 58                if (Field == null)
 59                return;
 60                string ID = this.Page.Request.QueryString["ID"] == null ? "" : this.Page.Request.QueryString["ID"];
 61                base.CreateChildControls();
 62                results = new Literal(); ;
 63                Controls.Add(results);
 64                try
 65                {
 66                    SPWeb web = SPContext.Current.Web;
 67                    SPList list = web.Lists["课程信息"];
 68                    SPListItem item = null;
 69                    if (ID != "")
 70                    {
 71                       item = list.Items.GetItemById(int.Parse(ID));
 72                    }
 73
 74                    if (item == null)
 75                        throw new Exception("参数格式错误");
 76                    string className = item["名称"].ToString();
 77                    ServerContext context = ServerContext.GetContext(SPContext.Current.Site);
 78                    this.Context.Items["Microsoft.Office.ServerContext"] = context;
 79                    UserProfileManager UserManager = new UserProfileManager(context);
 80                    string hostUrl = UserManager.MySiteHostUrl;
 81                    SPSite site = new SPSite(hostUrl);
 82                    string baseName = site.ContentDatabase.Name;
 83                    DataTable tb=getBlogs(baseName, className);
 84                    results.Text = "<table style='width:100%'><tr><td><table style='width:100%'>";
 85                    if (tb.Rows.Count > 0)
 86                    {
 87                        foreach (DataRow dr in tb.Rows)
 88                        {
 89                            string url = hostUrl + dr["tp_dirName"].ToString() + "/post.aspx?ID=" + dr["tp_ID"].ToString();
 90                            results.Text += "<tr><td class=" + CssClass + "><a href='" + url + "' target='_blank'>" + dr["nvarchar1"].ToString() + "</a></td></tr>";
 91                        }
 92                    }
 93                    else
 94                    {
 95                        results.Text += "<tr><td class=" + CssClass + " valign=\"bottom\">暂无相关博客</td></tr>";
 96                    }
 97
 98                    if (UserManager.UserExists(HttpContext.Current.User.Identity.Name))
 99                    {
100                        UserProfile UserProfile = UserManager.GetUserProfile(HttpContext.Current.User.Identity.Name);
101                        try
102                        {
103                            SPWeb blog = UserProfile.PersonalSite.OpenWeb().Webs["Blog"];
104                            string url = blog.Url + "/Lists/Posts/NewPost.aspx";
105                            string rootFolder =blog.RootFolder.ServerRelativeUrl;
106                            string source = HttpUtility.UrlEncode(blog.Url + "/Lists/Posts/AllPosts.aspx");
107                            results.Text += "</table></td><td valign=\"bottom\"><a href='" + url + "?Source=" + rootFolder + "&FromWeb="+HttpUtility.UrlEncode(web.Url)+"&List="+HttpUtility.UrlEncode("课程信息")+"&ID="+item.ID+"' class='" + CssClass + "' target='_blank'>添加相关博客</a></td></tr></table>";
108                        }
109                        catch
110                        {
111                            results.Text += "</table></td><td valign=\"bottom\"  class=" + CssClass + ">尚未创建自己的博客,请先创建自己的博客!</td></tr></table>";
112                        }
113                    }
114                    else
115                    {
116                        results.Text += "</table></td><td valign=\"bottom\" class=" + CssClass + ">您尚未创建自己的网站,请先创建网站后再添加相关博客!</td></tr></table>";
117                    }
118                   
119                }
120
121                catch(Exception ex)
122                {
123                    results.Text = ex.ToString();
124                }
125               }
126            
127           
128            
129        }
130
131        protected override void Render(System.Web.UI.HtmlTextWriter output)
132        {
133            if (this.ControlMode == SPControlMode.Display)
134            {
135                results.RenderControl(output);
136            }
137        }
138
139        private DataTable getBlogs(string BaseName,string className)
140        {
141            string strConn = "server=(local);database="+BaseName+";uid=sa;pwd=P@ssw0rd";
142            SqlConnection conn = new SqlConnection(strConn);
143            SqlDataAdapter sda = new SqlDataAdapter("select * from AllUserData where tp_ContentType=N'文章' and nvarchar3=N'" + className + "'",conn);
144            
145            DataSet ds = new DataSet();
146            sda.Fill(ds);
147            return ds.Tables[0];
148        }
149
150    }
151}
152

ok这样一个关于网站集下所有个人网站博客的博文搜索的自定义字段就搞定了。希望对大家有所帮助,第一次写技术性的东东,不到之处还请各位前辈见谅,我会努力改进的。这次就到这里吧!休息休息一下

转载于:https://www.cnblogs.com/bumblebee/archive/2009/01/15/1376195.html

关于如何获得网站集宿主网站集地址的问题相关推荐

  1. 使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...

    1. 介绍一下 <大型网站技术架构>这本书可能很多人都看过,小编个人觉得真的是非常不错的一本书. 看完这本书后,你会对如何设计大型网站架构,有非常清晰的思路. 如果还没有读过的小伙伴,赶紧 ...

  2. 上树建站教程:新手单页网站制作教程上集

    功能强大. 链接.文件下载等功能,一份源程序可以制造出无数个网站,只需一些超级简单的 页面程序可以随意的编辑.修改,包括:图片.文案.背景.图片滚动  单页型网站:就是一个独立页面的网站,是一个纯HT ...

  3. 跨境电商国际物流集运系统源码,集运网站系统源码

    跨境电商国际物流集运系统源码,集运网站系统源码 系统特点 包裹更新:后台能够通过excel文件一键更新所有快递单的状态: 仓管管理:可以动态添加仓库,仓库可以被用户一键复制地址: 自提点管理:平台在国 ...

  4. 大型网站高并发解决方案——集群

    文章目录 大型网站高并发解决方案--集群 前言 一.集群 1.集群的分类 2.负载均衡集群(LB) (1)负载均衡集群结构 (2)负载均衡设备分类 3.高可用集群(HA) 4.高性能运算集群(HPC) ...

  5. java 应用是单机集群_Java集群优化——使用Dubbo对单一应用服务化改造

    之前,我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容,就 ...

  6. 服务器网站目录,服务器网站目录

    服务器网站目录 内容精选 换一换 Weblogic基于JAVAEE架构的中间件,Weblogic是用于开发.集成.部署和管理大型分布式Web应用.网络应用和数据库应用的Java应用服务器.将Java的 ...

  7. Fikker反向代理服务器的网站缓存加速/网站加速基础教程

    2019独角兽企业重金招聘Python工程师标准>>> Fikker反向代理服务器的网站缓存加速/网站加速基础教程 - 简介篇 前言: 本教程是针对第一次接触和使用 Fikker 的 ...

  8. 大型网站电商网站架构案例和技术架构的示例

    大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸 ...

  9. 机器学习:样本集、验证集(开发集)、测试集

    样本集.验证集(开发集).测试集. Ripley, B.D(1996)在他的经典专著Pattern Recognition and Neural Networks中给出了这三个词的定义. Traini ...

最新文章

  1. 淘宝开源代码质量检测工具!
  2. Single Number
  3. 动态规划-换钱最少货币数
  4. android ListView详解
  5. android应用设计规范,未来的Android应用设计规范应如是
  6. linux命令chown和chmod什么区别
  7. 启用了不安全的HTTP方法
  8. 移除List中的元素,你的姿势对了吗?
  9. ping下主服务器mysql_mysql主从同步配置
  10. JAVA中的枚举使用总结
  11. 实习日志_护理实习日志
  12. nexus的下载和安装
  13. 使用Android Studio 开发APP入门经验
  14. 【Tools】OBS Studio录制视频教程
  15. orbslam2 流程图_一种基于ORBSLAM2的八叉树建图方法与流程
  16. spark学习之资源调度
  17. 2022最新显卡天梯图,2022显卡天梯排行榜
  18. Python自动生成巡检报告
  19. 如何利用Photoshop进行快速切图
  20. python cheat sheet

热门文章

  1. Mr.J--JS事件监听(捕获冒泡)
  2. volatile学习
  3. HDOJ_1004_Let the Balloon Rise
  4. 万恶之源 - Python基础知识补充
  5. 动态BGP和静态BGP的含义与区别
  6. 四平方和(程序设计)
  7. 智能路由器-OpenWRT 系列三 (OpenWRT安装LuCI网络配置)
  8. HTML5 classList使用
  9. java基础—抽象类介绍
  10. WPF:动态显示或隐藏Listview的某一列