SharePoint 2010 类似人人网站内信功能实施

news/2024/5/13 0:12:23/文章来源:https://blog.csdn.net/weixin_30564901/article/details/98736508

简介:用SharePoint代码加实施的方式,完成类似人人网站内信功能,当然,实现的比较简单,样式也比较难看,只为给大家一个实施的简单思路,如有谬误,还请见谅。当然,还有就是截图比较长,当然为了让大家清晰了解每一步,并不是博主啰嗦,事先声明。

一、展示效果一,李四发送站内信给张三:

1、李四发站内信,给张三,如下图所示:

clip_image001

2、发送完毕后,查看李四的收件箱,为空,如下图:

clip_image002

3、发送完毕后,查看李四的发件箱,有李四给张三发送的站内信,如下图:

clip_image003

4、切换账号,张三登陆,查看右上角登录信息,张三;右上角有一天未读信息提示,是个WebPart,把鼠标放在上面,看到状态栏有链接,是查看站内信的链接,点击进入;

clip_image004

5、进入收件箱,发现张三的收件箱里,有李四发给张三的站内信,如下图:

clip_image005

6、进入发件箱,发现没有任何站内信,如下图:

clip_image006

7、切换回来收件箱,然后点击那条收到的站内信,如下图:

clip_image005

8、点击查看站内信,站内信的标题、内容、接受者、发送者、是否阅读,样式有点难看,其实可以稍微美化下,时间仓促,也没做,凑合见人吧,如下图:

clip_image008

9、查看以后,返回http://mytravels/SitePages/MyMessage.aspx页面,发现阅读过的那条信息,上面的加粗没有了,如下图(对比7,可能看不很清楚,可以点击大图):

clip_image007[1]

二、展示效果二,张三发送站内信给联系人组

1、发送站内信,Receiver接受者输入联系人组“联系人”,如下图;

clip_image009

2、特别说明,联系人组,有张三和李四两个人,如下图:

clip_image010

3、站内信发送完毕后,张三的站内信收件箱有一条新站内信,因为他也在联系人组,如下图:

clip_image011

4、张三查看自己的发件箱,只有刚刚发送给联系人组的站内信,如下图:

clip_image012

5、切换李四账号,进入首页,发现提示有一条站内信,如下图:

clip_image013

6、进入收件箱,看到张三发给联系人组的站内信,如下图;至此,张三发给联系人组的站内信,张三、李四都收到了;

clip_image014

三、结构简单介绍

有两张列表,一张是发件箱,一张是收件箱如下图介绍:

1、 发件箱列表,如下图所示,包括字段标题、内容、收件人(用户/用户组)

clip_image015

2、收件箱列表,通过Sender字段(类型:用户/用户组),确定这条站内信是谁的

clip_image016

原理简介:

发件箱里每加入一条信息,通过一个事件触发器来发送站内信,如果是用户,就往收件箱里add一条Item,sender字段就是收件人;如果是用户组,就把用户组里的人员读出来,往收件箱里为每个用户add一条Item。

发件箱创建一个视图,就是创建者=本人,也就是所有登陆用户发送的站内信,都显示出来了;收件箱通过一个WebPart进行展示,把所有Sender字段是登陆用户的,全部显示出来,如果IsRead是否阅读字段为否,也就是没有阅读的,加粗显示,IsRead是否阅读字段为是,也就是已经阅读的,正常显示。

然后,在阅读页面上,添加一个WebPart,功能是每当登陆用户点进去查看这个站内信,就用Item.SystemDate()把是否阅读字段,更新为是,也就是已经阅读,这样,返回站内信列表的时候,加粗显示就会消失。

首先的站内信提示,是读取Sender==本人,且是否阅读为否,也就是登陆账号没有阅读的站内信数量,通过Div浮动显示在右上角,加关闭js脚本实现。

四、示例代码:

1、 解决方案结构,如下图所示:

clip_image017

2、发件箱的事件触发器代码

1、 public static string url = "http://mytravels";

2、 /// <summary>

3、 /// 已°?添¬¨ª加¨®项?.

4、 /// </summary>

5、 public override void ItemAdded(SPItemEventProperties properties)

6、 {

7、 string strTitle = string.Empty;

8、 string strMessage = string.Empty;

9、 string strCreator = string.Empty;

10、 string strReceiver = string.Empty;

11、

12、 strTitle = properties.ListItem["Title"].ToString();

13、 strMessage = properties.ListItem["Message"].ToString();

14、 strCreator = properties.ListItem["Author"].ToString();

15、 strReceiver = properties.ListItem["Receiver"].ToString();

16、

17、 using (SPSite site = new SPSite(url))

18、 {

19、 using (SPWeb web = site.OpenWeb())

20、 {

21、 string str = GetUserString(strReceiver);

22、 if (str.IndexOf("$") > 0)

23、 {

24、 string[] strUser = str.Split('$');

25、 for (int i = 0; i < strUser.Length; i++)

26、 {

27、 SPListItem item = web.Lists["ReceiveList"].Items.Add();

28、 item["Title"] = strTitle;

29、 item["Message"] = strMessage;

30、 item["Sender"] = strUser[i];

31、 item["Onwer"] = strCreator;

32、 item.Update();

33、 }

34、 }

35、 else

36、 {

37、 SPListItem item = web.Lists["ReceiveList"].Items.Add();

38、 item["Title"] = strTitle;

39、 item["Message"] = strMessage;

40、 item["Sender"] = strReceiver;

41、 item["Onwer"] = strCreator;

42、 item.Update();

43、 }

44、 }

45、 }

46、 //base.ItemAdded(properties);

47、 }

48、

49、 public static string GetUserString(string str)

50、 {

51、 string Rs = string.Empty;

52、 string strID = string.Empty;

53、 if (str.IndexOf(";") > 0)

54、 {

55、 strID = str.Split(';')[0];

56、 }

57、 int myID = Convert.ToInt32(strID);

58、 using (SPSite site = new SPSite(url))

59、 {

60、 using (SPWeb web = site.OpenWeb())

61、 {

62、 try

63、 {

64、 SPUser user = web.AllUsers.GetByID(myID);

65、 Rs = str;

66、 }

67、 catch

68、 {

69、 }

70、 try

71、 {

72、 SPGroup group = web.Groups.GetByID(myID);

73、 SPUserCollection usercol = group.Users;

74、

75、 foreach (SPUser user in usercol)

76、 {

77、 if (user.Name == "系¦Ì统ª3帐¨º户¡ì")

78、 continue;

79、 Rs += user.ID + ";#" + user.Name + "$";

80、 }

81、 Rs = Rs.Substring(0, Rs.Length - 1);

82、 }

83、 catch

84、 {

85、 }

}

}

 

return Rs;

}

3、收件箱展示代码:

protected override void Render(HtmlTextWriter writer)

{

SPSite site = SPContext.Current.Site;

SPWeb web = site.OpenWeb();

SPList list = web.Lists["ReceiveList"];

SPQuery query = new SPQuery();

query.Query = @"<Where>

<Eq>

<FieldRef Name='Sender' LookupId='TRUE'/>

<Value Type='User'>" + web.CurrentUser.ID.ToString() + @"</Value>

</Eq>

</Where>";

writer.Write("<script>function del(){alert('123');}</script>");

writer.Write("<table>");

writer.Write("<tr><td><a οnclick='del()'>删¦?除y</a></td><td>站?内¨²信?标À¨º题¬a</td><td>创ä¡ä建¡§时º¡À间?</td></tr>");

foreach (SPListItem item in list.GetItems(query))

{

string BoldFont = "style='text-decoration:none;color:#000000;'";

if (item["IsRead"].ToString() != "True")

{

BoldFont = "style='text-decoration:none;color:#000000;font-weight:bold;'";

}

writer.Write("<tr><td><input type='checkbox' id='ID" + item["ID"].ToString() + "'/></td><td>");

writer.Write("<a " + BoldFont + " href='/Lists/ReceiveList/DispForm.aspx?ID=" + item["ID"].ToString() + "'>" + item["Title"].ToString() + "</a>");

writer.Write("</td><td>" + item["Created"].ToString() + "");

writer.Write("</td></tr>");

}

writer.Write("</table>");

//base.Render(writer);

}

4、修改站内信为已读代码

protected override void Render(HtmlTextWriter writer)

{

try

{

SPSecurity.RunWithElevatedPrivileges(delegate()

{

using (SPSite site = new SPSite("http://mytravels"))

{

using (SPWeb web = site.OpenWeb())

{

int ItemID = Convert.ToInt32(HttpContext.Current.Request.QueryString["ID"]);

web.AllowUnsafeUpdates = true;

SPListItem item = web.Lists["ReceiveList"].GetItemById(ItemID);

item["IsRead"] = "True";

item.SystemUpdate();

web.AllowUnsafeUpdates = false;

}

}

});

}

catch

{

}

//base.Render(writer);

}

5、首页未读站内信提示代码

protected override void Render(HtmlTextWriter writer)

{

SPSite site = SPContext.Current.Site;

SPWeb web = site.OpenWeb();

SPList list = web.Lists["ReceiveList"];

SPQuery query = new SPQuery();

query.Query = @"<Where>

<And>

<Eq>

<FieldRef Name='Sender' LookupId='TRUE'/>

<Value Type='User'>" + web.CurrentUser.ID.ToString() + @"</Value>

</Eq>

<Eq>

<FieldRef Name='IsRead' />

<Value Type='Boolean'>False</Value>

</Eq>

</And>

</Where>";

SPListItemCollection itemcoll = list.GetItems(query);

if (itemcoll.Count == 0)

return;

string content = "未¡ä读¨¢站?内¨²信?:êo" + itemcoll.Count.ToString();

writer.Write(@"<div id='divMessage' style='height:25px;position:absolute;z-index:1;float:right;top:15px;right:0px;background-color:#00CCFF'>

<table width='200' border='0' cellspacing='0' cellpadding='0'>

<tr>

<td><a href='/SitePages/MyMessage.aspx'>" + content + @"</a></td>

<td><a οnclick='closediv()'>X</a></td>

</tr>

</table>

<script type='text/javascript'>

function closediv()

{

document.getElementById('divMessage').style.display='none';

}

</script>");

}

五、博主感言

利用半天的时间,实现这样一个功能,感觉这也是SharePoint比较方便的地方,简单的代码开发,页面定制,完成一个小功能,效率也不算很低。当然,我不是贬低net或者其他开发,笔者对于每一项技术,都很尊重。

在SharePoint的开发中,最大的感触就是无代码开发和代码开发相结合,这就需要我们对SharePoint现有功能的熟练掌握,和对于SharePoint平台的理解,当然,笔者从事SharePoint时间也不是很长,每个人都有自己的局限性,在利用业余时间,做点小东西共享给大家,一起学习探讨SharePoint,是一件乐事。

特别地说,实施过程由于时间仓促,代码写的比较简单,更多为了实施功能,很多需要注意的地方,都没有考虑太多;再有就是对于列表性能方面,也没有涉及太多考虑,只是给予大家一个简单思路,如有参考,慎行。还有,就是每个人的技术不一样,如果觉得本文过于简单请绕行,老鸟勿喷,谢谢。

转载于:https://www.cnblogs.com/jiangu66/p/3177923.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_762241.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019最受欢迎开源免费CMS建站系统排行榜

2019独角兽企业重金招聘Python工程师标准>>> 互联网的蓬勃发展&#xff0c;免费且开源的建站系统的层出不穷&#xff0c;而我们经常在网上看见有人问及”哪个CMS系统最好用”、”企业建站用哪个CMS系统最多”等类似问题&#xff0c;我们今天来说一下&#xff0c;201…

“网络推广”企业做了网站效果没有达到自己的营销效果

我们有理由相信每一公司做的设计不是给自己看的&#xff0c;当然是给客户看的&#xff0c;我们长处就在于我们的技术是基础&#xff0c;创意是翅膀&#xff0c;只有充分利用好网络&#xff0c;创意才能把您们的价值体现出来&#xff0c;传播出去。 我们不只是为您们的企业披上外…

一步步学习SPD2010--第十章节--SP网站品牌化(3)--在内容页中识别样式

一步步学习SPD2010--第十章节--SP网站品牌化&#xff08;3&#xff09;--在内容页中识别样式 当你在SPD中显示内容页时&#xff0c;尽管设计视图显示了内容页与母版页的融合&#xff0c;你只能辨识储存在内容页的部件的CSS样式。使用页面的代码视图&#xff0c;来辨识储存在内容…

Challenge Checkio(python)—初尝python练习网站

最近在找点python语言练习的网站&#xff0c;发现这个网站不错 http://www.checkio.org/ 页面设计的也比较漂亮&#xff0c;比较适合学习python的语法知识。不过注册这个网站 开始就得解决一个python问题&#xff0c;不过很简单。 1 #python3.3 is inside 2 def checkio(els):…

[Hugo+Netlify]从零开始建立并发布一个网站

现在有越来越多的开发者选择把自己的博客以静态网站的方式托管在 GitHub 上, 这样的方式可以通过诸如 Jekyll, Hexo,Hugo 等等现有的静态博客生成工具, 非常便捷地搭建出一个样式美观的静态博客或文档页面。 通过对比&#xff0c;我选择了Hugo框架来创建网页&#xff0c;使用 N…

现在怎么访问安卓开发者网站

问题描述前两个月还能访问安卓开发者网站&#xff0c;现在就访问不了了&#xff0c;请问有什么方法么&#xff0c;以后想下官方最新的mac版本的ADT都困难。 解决方案1翻墙啊啊啊啊啊啊啊。 解决方案2翻墙软件&#xff0c;大家都懂的&#xff01; 解决方案3现在是不行了&#xf…

win8 iis安装及网站发布

win8 iis安装及网站发布 系统&#xff1a;win8 环境&#xff1a;vs2012 一&#xff1a;安装IIS 比较win7的安装来说&#xff0c;多选了几个钩钩&#xff0c;不然会报错&#xff0c;偶就遇到这样的错误。 控制面板-》程序和功能-》启动和关闭windows功能&#xff0c;钩钩图例&am…

Svg图片在asp网站上的使用

最近需要做一个动态的根据后台的返回数据而动态显示的导航图&#xff0c;然后我就采用了jqueryajaxSVG矢量图来实现这个功能。 首先&#xff0c;客户给了个ai的矢量图&#xff0c;我对这一块不懂就找以前同事帮我转成了svg图形&#xff0c;听说很简单&#xff0c;但是矢量图是封…

使用Let's Encrypt、Certbot为自己的网站加密

2019独角兽企业重金招聘Python工程师标准>>> 打开网站https://certbot.eff.org/选择服务器系统和软件环境以nginxubuntu为例&#xff1a;# 1. 安装需要软件 $ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository pp…

ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天...

看起来挺简单&#xff0c;细节还是很多的&#xff0c;好&#xff0c;接上一篇&#xff0c;我们已经成功连接singalR服务器了&#xff0c;那么剩下的内容呢&#xff0c;就是一步一步实现聊天功能。 我们先看看缺什么东西 点击好友弹框之后&#xff0c;要给服务器发消息&#xff…

从一个新颖的网站看silverlight技术的视频广告前景

站点是&#xff1a;http://www.singtelrace.com/SingTel-Grid-Girls_Heart-Race.aspx 上面的MM们都是活动的&#xff0c;整体的视觉效果很有趣 这张截图看起来似乎没有什么&#xff0c;但要注意这个视频广告里的MM是活动的&#xff0c;为整个页面带来了生气。

长尾SEO策略应用之长尾词表制作

上周在博客上转载了一篇《热门还是长尾&#xff1f;大中型网站的关键词优化策略》的文章&#xff0c;文中提到长尾词在大中型网站中应用的种种好处。把这种长尾词策略应用到网站&#xff0c;我们所要做的就是&#xff1a;<?xml:namespace prefix o ns "urn:schemas-…

自动登录http://www.netyi.net/网站的工具

http://www.netyi.net/网站是一个书籍下载网站&#xff0c;大约一年多以前我就认识这个网站&#xff0c;经常从上面下载书籍。它的书还是不错的&#xff0c;很多书其他地方找不到&#xff0c;这里却有。但是下载书会减少你的积分&#xff0c;获得积分的的途径是上传书籍&#x…

详解网站性能测试指标

通用指标&#xff08;指Web应用服务器、数据库服务器必需测试项)Web服务器指标数据库服务器性能指标系统的瓶颈定义稳定系统的资源状态通俗理解&#xff1a;日访问量常用页面最大并发数同时在线人数访问相应时间案例&#xff1a;最近公司一个项目&#xff0c;是个门户网站&…

web前端性能SEO优化

web前端性能&SEO优化 网站的划分一般为二&#xff1a;前端和后台。我们可以理解成后台是用来实现网站的功能的&#xff0c;比如&#xff1a;实现用户注册&#xff0c;用户能够为文章发表评论等等。而前端呢&#xff1f;其实应该是属于功能的表现。并且影响用户访问体验的绝…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

windows server 2008R2上安装IIS7(web)服务器,提供网站web服务及管理,架设论坛网站...

windows server 2003上提供的IIS服务为IIS6&#xff0c;最新的win server 2008R2则提供的是IIS7.5的服务&#xff01;建立IIS服务器&#xff0c;我们就开始安装吧&#xff01;单独安装IIS7&#xff08;web&#xff09;服务器时&#xff0c;DNS提供域名解析&#xff0c;所以本机…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标&#xff0c;可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间&#xff0c;指从发出请求到最后收到响应数据所需要的时…

c# 登录带验证码网站

前面提到怎样获取网站的临时会话id和如何获取网站的验证码&#xff0c;下面代码比较简单&#xff0c;直接利用得到的验证码登录网站 如果要实现完全不用人工参与直接登录带验证码的网站&#xff0c;需要验证码识别技术&#xff0c;以后有机会献上代码&#xff01; 代码 CookieC…