每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询
前言:
前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结。主要内容有使用SharePoint服务端对象模型进行查询、为SharePoint 自定义列表项添加callout菜单。希望能够给大家带来一些帮助。
1. 在aspx页引用可视化Web部件
有时候会需要在页面中引用项目中创建的可视化Web部件,具体步骤有以下这几步:
1) 在aspx页面顶部注册该可视化Web部件
示例如下:
<%@ Register Tagprefix="NavTree"
Namespace="Sample.WebParts.NavTreeWebPart" Assembly="$SharePoint.Project.AssemblyFullName$" %>
属性说明:
l Tagprefix:控件在页面使用的标签名,类似于<asp:Button…>中的asp,该属性值可由用户随便设置
l Namespace:可视化web部件所在的命名空间
l Assebly:可视化web部件所在的程序集(不用修改)
2) 页面引用
<div><NavTree:NavTreeWebPart id="Navtree" runat="server"/>
</div>
说明:
黄色标亮部分NavTree为上边注册的控件标签名,NavTreeWebPart为可视化Web部件类名
3) 后台调用
通过NavTree.Attributes的形式去获取web部件的相关属性,进行开发
2. 自定义Timer Job
在项目中有些地方需要定时的去执行某些任务,所以就会用到创建一个定时作业。主要步骤有以下几步:
1) 在SharePoint解决方案中添加一个Feature,同时点击右键为该Feature添加一个事件接收器。
在事件接收器里默认的方法都被注释了,在这些方法中,只需要对下边的两个方法取消注释即可:
//处理激活某个功能后引发的事件。
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
……
} //处理在停用某个功能前引发的事件。
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
……
}
在FeatureActivated方法中参数的properties可以根据Feature所在的范围转换为相应的对象,同时可以在该方法中实例化继承自SPJobDefinition的类
2) 创建一个继承自SPJobDefinition类的Job类
如下:
public class SampleTimerJob : SPJobDefinition
{
public SampleTimerJob() : base()
{
} // 创建针对web application的timer job
public SampleTimerJob(string jobName, SPWebApplication webapp)
: base(jobName, webapp, null, SPJobLockType.ContentDatabase)
{
this.Title = jobName;
} // 执行Timer Job时要执行的方法
public override void Execute(Guid targetInstanceId)
{
……
……
在该方法体中可以写相应的要定期执行的业务逻辑
SPWebApplication webapp = this.Parent as SPWebApplication;
}
}
3) 在1)中的FeatureActivated方法中调用2)中已经创建好的继承自SPJobDefinition类的SampleTimerJob类
具体实现如下:
// 初始化 SPJobDefinition
SampleTimerJob job = new SampleTimerJob(JobName, webApp);
SPMinuteSchedule schedule = new SPMinuteSchedule();
schedule.BeginSecond = 0;
schedule.EndSecond = 5;
schedule.Interval = 10;
job.Schedule = schedule;
job.Update();
4) 完成以上操作之后,部署整个项目,激活Feature之后,就可以在管理中心,监控,检查作业状态,查看“作业定义”,就可以找到自定义的Timer Job
3. 使用SharePoint服务端对象模型查询
SharePoint搜索API提供了多种方式的查询,这里主要是介绍一下利用服务端对象模型查询,主要还是使用KeywordQuery类。
具体代码如下:
KeywordQuery keywordQuery = new KeywordQuery(SPContext.Current.Site);
//KeywordQuery新建对象时的参数也可以是指定的网站集
keywordQuery.QueryText = queryStr;//指定要查询的关键字 keywordQuery.StartRow = start_row;//设置查询结果开始的行数,可以使用该属性做查询结果的分页
keywordQuery.RowLimit = pageCount;//限定返回结果的条数
keywordQuery.TrimDuplicates = false;//是否将重复项从查询结果中移除
SearchExecutor searchExecutor = new SearchExecutor();
ResultTableCollection resultTableCollection = searchExecutor.ExecuteQuery(keywordQuery);//执行查询
var resultTables = resultTableCollection.Filter("TableType", KnownTableTypes.RelevantResults);
ResultTable resultTable = resultTables.FirstOrDefault();
DataTable dataTable = resultTable.Table;//查询的结果
备注:
也可以通过该类去查询托管元数据的值,但是,需要知道元数据字段映射到搜索的值
KeywordQuery.QueryText既可以查询关键字、也可以查询托管元数据字段,同时也可以查询关键字和托管元数据字段的组合。格式如下:
QueryText=“关键字“
QueryText=”Author: 张三”。其中Author为托管元数据字段,如果有多个托管元数据字段,可以用AND 进行关联查询
QueryText=“关键字 Author:张三”,如果是关键字和托管元数据字段结合查询,则只需要用空格分开即可,同时要去除“AND”字符串。
4. SharePoint 2013 自定义列表项使用Callout 标注控件
在SharePoint 2013默认的列表项中,有用到标注控件,如下图所示,如何在我们自定义的列表中使用该控件呢?下面就通过示例进行讲解。
如上图所示,callout控件有以上几部分组成,分别为title,callout action和menu entity。
l Title:用来显示callout的标题
l Callout action:用来执行一些操作
l Menu entity:相当于某一个callout action中又有很多操作其中的一项
4.1 创建Callout控件
在创建callout控件之前,必须要确保加载了callout.js文件,如下:
SP.SOD.executeFunc("callout.js", "Callout", function () {
//创建callout控件
var callout=CalloutManager.createNew({
ID: "Callout"+ListItemID,
launchPoint: targetElement,//页面上某个元素
beakOrientation: "leftRight",//callout弹出框的位置
title: FileName,//callout的标题
openOptions: {
event: "click",//触发callout的行为:点击
showCloseButton: true//是否显示callout关闭按钮
},
content: FileName//callout要展示的内容
});
……….
……….
});
4.2 添加Callout Action
这里只是作为示例,演示添加了一个callout action,如果需要添加多个action,操作于此相同
//创建一个callout action
var calloutAction1 = new CalloutAction({
text: "查看属性",
tooltip: "查看属性",
isEnabledCallback: function () { return true; },
onClickCallback: function (event, action) {
alert(‘查看属性’);//在该方法中可以写自己的逻辑代码区实现想要的功能,此处为示例
callout.close();
}
});
callout.addAction(calloutAction1);//创建完callout action之后,需要将该action添加到callout控件上
………….
………….
4.3 添加具有多项menuEntry的Callout Action
//创建一个callout action,该行为与一般的action一样,只不过多了menuEntries属性,该属性为一个menuEntry的数组,可以根据需要添加多个CalloutActionMenuEntry对象,每一个对象就相当于一个Action。
var calloutAction3 = new CalloutAction({
text: "...",
menuEntries: [
new CalloutActionMenuEntry("浏览文件", function () { alert("浏览文件"); }),
new CalloutActionMenuEntry("详细信息", function () { alert("详细信息"); })
]
});
callout.addAction(calloutAction3);//将该Action添加到callout控件上
完成以上操作之后就可以得到如最初所示的效果了。
该示例只是演示了如何对列表项添加callout控件,在实际的运用中,如果需要对自定义的列表项添加callout控件,需要在页面加载之时就为每一个列表项创建并绑定callout控件,因此可以将以上的创建callout控件、添加callout Action的代码封装成为一个函数,在页面加载之时执行该函数即可,如下:
function createcallout(targetElement,Title,Content)
{
//此处的代码即为上边的3个步骤中的代码
SP.SOD.executeFunc("callout.js", "Callout", function () {
//创建callout控件
var callout=CalloutManager.createNew
………
………
}
封装完成之后,我们还需要获得该方法所需的参数,主要通过获取页面元素的属性作为方法的参数,其中的.bs-launchpoint 为页面元素的一个特殊属性,页面元素HTML如下:
<a title="打开菜单" class="ms-lstItmLinkAnchor ms-ellipsis-a js-callout-launchPoint bs-launchpoint"
attr_filename='<%#Eval("FileName") %>'
attr_content = '<%#Eval("Content") %>'
>
<img class="ms-ellipsis-icon" alt="打开菜单" src="Images/spcommon.png?rev=23" />
</a>
还需要将其再封装为一个方法,如下:
function initialCallout()
{
$('.bs-launchpoint').each(function () {//通过在列表的列表项上加一个特殊的样式,来获取该列表项的页面元素的dom对象,并依次作为参数传递给createCallout方法,并调用该方法,
createCallout(
$(this)[0],
$(this).attr('attr_filename'),
$(this).attr('attr_content')
});
}
完成以上操作之后,执行以下代码即可:
_spBodyOnLoadFunctions.push(initialCallout);//该方法为SharePoint自带的js方法,主要作用将传入的方法名注册,在body的 onload方法里执行。
到这里基本上就完成了所有的操作,就可以在自定义的列表项中使用callout控件了。
5. SharePoint 文档关注
在搜索中心搜索到相关的文件之后,弹出的标注控件的callout Action有“关注”这一项,截图如下:
如何在自定义的列表项中添加“关注”功能呢?
主要是用过followingcommon.js中的window.SetFollowStatus(….)方法实现的。
与上述的4中对自定义列表项添加callout控件所描述的一样,只需要在callout控件中在添加一个callout Action即可。具体实现如下:
要使用SetFollowStatus()方法需要保证先加载了followingcommon.js,如下所示,
SP.SOD.executeFunc('followingcommon.js', null, function () {
window.SetFollowStatus(url, true, true);
}
该方法有三个参数,第一个为要关注的列表项的url具体格式如下:
url: http://weburl?listid=_listId&itemId=_itemId
剩下的两个参数,均设为true即可。
这样在页面列表项的callout控件中点击之后即可看到“关注”callout action项,点击之后,如果关注成功,页面右上会有提示。截图如下:
每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询的更多相关文章
- sharepoint 2013 自定义列表eventhandle权限控制
记录一下如何在sharepoint server 2013自定义列表中,使用eventhandle控制自定义列表custom list的条目item权限. ///<summary> /// ...
- 跟我学SharePoint 2013视频培训课程——签出、签入文档(9)
课程简介 第9天,怎样在SharePoint 2013中签出.签入文档 视频 SharePoint 2013 交流群 41032413
- 每天的学习经验:SharePoint 2013 定义自己添加的产品清单。Callout菜单项、文档关注、SharePoint服务机端对象模型查询
前言: 前一段时间一直都比較忙.没有什么时间进行总结,刚好节前项目上线.同一时候趁着放假能够好好的对之前遇到的一些问题进行总结. 主要内容有使用SharePoint服务端对象模型进行查询.为Share ...
- 每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容
前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望 ...
- (2017.9.27) 自定义列表项 list-style 使用心得
今天给某公司做招聘专页.早上完成设计图,下午开始排版.页面套用了我之前做的某人才局的招聘页面,导航栏.banner 很快就出来了.这次内容里我有些地方用了列表,当然要用 <ul> < ...
- SharePoint 2013 自定义扩展菜单
在对SharePoint进行开发或者功能扩展的时候,经常需要对一些默认的菜单进行扩展,以使我们开发的东西更适合SharePoint本身的样式.SharePoint的各种功能菜单,像网站设置.Ribbo ...
- SharePoint 2013 自定义扩展菜单(二)
接博文<SharePoint 2013 自定义扩展菜单>,多加了几个例子,方便大家理解. 例七 列表设置菜单扩展(listedit.aspx) 扩展效果 XML描述 <CustomA ...
- SharePoint 2013 扩展查阅项功能
SharePoint 2013的查阅项功能,就是可以扩展其他列表字段为当前列表选项,但是选项太多的时候,会造成选择起来非常麻烦,所以,我们采取JS+Ajax的方式,改善一下这个展示,使操作更加方便. ...
- Android零基础入门第39节:ListActivity和自定义列表项
原文:Android零基础入门第39节:ListActivity和自定义列表项 相信通过前两期的学习,以及会开发最简单的一些列表界面了吧,那么本期接着来学习更多方法技巧. 一.使用ListActivi ...
随机推荐
- [讨论] win7封装时如何直接开通局域网共享
ekincheng 发表于 2016-10-31 20:17:54 https://www.itsk.com/thread-371838-1-5.html Win7封装时不能像XP那样直接开启局域网共 ...
- 在腾讯云上创建您的SQL Cluster(4)
版权声明:本文由李斯达原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/255 来源:腾云阁 https://www.qclo ...
- ubuntu1404服务器版中设置root用户
刚安装完没有设置root用户 sudo passwd root 根据提示输入密码,ok . 关闭服务器: shutdown -h now
- Python--关于连接符+
连接符 + 连接符 + 实则是创建了新的对象并占用新的内存(dict.set不能使用) String 由于Python必须为每一个使用连接符+的字符串分配新的内存,并产生新的字符串.下面两种方式会更有 ...
- Spring 事务管理 01 ——
目录: 参考: 1.Spring 事务管理高级应用难点剖析: 第 1 部分
- 连接英文字符集的ORACLE和调用存储过程问题及64位服务器连接ORACLE问题
部署在IIS上的webservice连接英文字符集的ORACLE数据库出现问题“未在本地计算机上注册"MSDAORA.1"提供程序”,解决方案如下: 原因:如错误,64位系统未注册 ...
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...
- ABAP遇到的问题——1
在创建ABAP对象的时候抛出“测试对象不能被创建在外来命名空间”的错误 原因:程序的名字不是以Z或者Y开头的.
- Java学习指南学习笔记
1, Java是一种静态类型.动态绑定的语言.具体来说,每一个对象都是编译时确定的良好类型.同时,可以在运行时检查一个对象究竟是什么. 2, Java中除了基本数字类型之外,Java中所有的对象都是通 ...
- NPOI 操作Excel
关于NPOI NPOI是POI项目的.NET版本,是由@Tony Qu(http://tonyqus.cnblogs.com/)等大侠基于POI开发的,可以从http://npoi.codeplex. ...