SharePoint 2010 文档管理之文档推送
前言:文档推送功能,不是一个复杂的功能,我们这里简单的应用了Ribbon定制、Js使用、对象模型推送(Server端),下面,我们来简单介绍下文档推送功能吧。
一、 功能设计:
文档推送功能,主要就是一个文档库中,选择几个文档,点击Ribbon菜单上的推送菜单,跳入推送页面;推送页面选择目标列表,点击推送按钮,把选中的几个文档,推送到目标文档库。
我这里就是复制过去,并没有选择移动,当然如果你需要这样的功能,可以稍作修改以达到目的。推送过程可能存在重命的情况,这样我会在出现异常的时候,把文件名前加上当前时间推送过去。
二、 源代码结构

如上图所示,包括一个Feature(用来激活功能),一个可视化WebPart(推送功能),一个Ribbon(菜单)。
三、 添加Ribbon:
添加Ribbon菜单应该算是一个比较简单的功能,新建一个Ribbon的空元素,添加我们Ribbon的xml,编写这个Xml就可以了。而这个Ribbon的作用,就是调用一个JS的函数,函数通过内容编辑器添加在页面上。
当然,如果你对添加Ribbon不是很熟悉,可以参考后面的参考文档,是关于SharePoint2013如何添加Ribbon,其过程和SharePoint2010版本是一样的,文档描述的很清楚,相信大家可以很容易完成这一步。
| 
 <?xml version="1.0" encoding="utf-8"?> <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <CustomAction Id="Ribbon.CustomGroup" RegistrationId="101" RegistrationType="List" Title="推送文档" Location="CommandUI.Ribbon"> <CommandUIExtension> <CommandUIDefinitions> <CommandUIDefinition Location="Ribbon.Documents.New.Controls._children"> <Button Id="Ribbon.Documents.New.PushDocsButton" Command="PushDocsButtonCommand" Image32by32="/_layouts/2052/images/formatmap32x32.png" LabelText="推送文档" TemplateAlias="o2" /> </CommandUIDefinition> </CommandUIDefinitions> <CommandUIHandlers> <CommandUIHandler Command="PushDocsButtonCommand" CommandAction="javascript:PushDoc()" /> </CommandUIHandlers> </CommandUIExtension> </CustomAction> </Elements>  | 
四、 准备JS脚本:
Js脚本的作用,就是去页面上找,我们选中哪些项文档,然后把文档的ID组成一个字符串,用来传送给推送页面使用。
当然,js脚本还会传送源列表的Guid,为了知道我们要推送的文档来自哪里,这些都是比较容易理解的,由于写JS脚本的时候,没有dw、spd之类的编辑器,是记事本里面写的,样式比较难看,大家凑合看吧。JS脚本附后:
| 
 <script> function JumpUrl(TableID, JumpURL, ListID) { var StrIDColl = ""; var Obj_table = document.getElementById(TableID); var Obj_trColl = Obj_table.getElementsByTagName("tr"); for (var i = 0; i < Obj_trColl.length; i++) { if (Obj_trColl[i].iid != undefined) { var Obj_input = Obj_trColl[i].getElementsByTagName("input"); if (Obj_input.length > 0) { if (Obj_input[0].checked) { var striid = Obj_trColl[i].iid + ""; var intI1 = striid.indexOf(",") + 1; var intI2 = striid.lastIndexOf(","); striid = striid.substring(intI1, intI2); StrIDColl += (striid + "-"); } } } } if (StrIDColl.length > 0) { var url = JumpURL + "?IDC=" + StrIDColl.substring(0, StrIDColl.length - 1) + "&ListID=" + ListID; window.open(url); } else { alert("请选择推送文档…"); } } function PushDoc() { JumpUrl('onetidDoclibViewTbl0', '/SitePages/DocsPush.aspx', 'D0501C8E-E765-4206-85B1-553A559508F8'); } </script>  | 
五、 写推送部件:
如下面表格所示,可视化webpart里面就只有一个Label用来显示文字,一个DropDownList用来显示目标文档库合集,一个Button来点击推送。
下面两个方法是核心方法,包括初始化DropDownLink控件,把所有可选的文档库绑定好;推送方法,获取包含所有ID的字符串数组和源列表的GUID。
我觉得方法的代码都在这里,没必要给大家具体解释了,代码的逻辑非常简单,推送过程很简单,所有代码附后:
核心代码:
public void InitDropDownList()//初始化DropDownLink
public void PushDocs(string ListID, string[] IDC)//推送方法
| 
 public void PushDocs(string ListID, string[] IDC) { try { string strIDC = Request.QueryString["IDC"].ToString(); ListID = Request.QueryString["ListID"].ToString(); if (strIDC.IndexOf("-") > 0) { IDC = strIDC.Split('-'); } else { IDC = new string[1]; IDC[0] = strIDC; } Guid ListGuid = new Guid(ListID); using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID)) { SPList list = web.Lists[ListGuid]; SPList Targetlist = web.Lists[dwlist.SelectedValue]; for (int i = 0; i < IDC.Length; i++) { SPListItem item = list.GetItemById(Convert.ToInt32(IDC[i])); try { string CopyToUrl = site.Url + Targetlist.RootFolder.ServerRelativeUrl.ToString() + "/" + item.Name; item.CopyTo(CopyToUrl); } catch { string CopyToUrl = site.Url + Targetlist.RootFolder.ServerRelativeUrl.ToString() + "/" + DateTime.Now.ToString("yyyy-MM-dd hhmmss") + item.Name; item.CopyTo(CopyToUrl); } } } } } catch { Response.Write("请?选?择?推ª?送¨ª列¢D表À¨ª..."); } } public void InitDropDownList() { try { ListItemCollection LIColl = new ListItemCollection(); using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID)) { foreach (SPList list in web.Lists) { if (list.BaseType == SPBaseType.DocumentLibrary) { ListItem listitem = new ListItem(list.Title,list.ID.ToString()); LIColl.Add(listitem); } } } } dwlist.DataSource = LIColl; dwlist.DataBind(); } catch { } } protected void btn_Push_Click(object sender, EventArgs e) { PushDocs(ListID, IDC); }  | 
六、 效果展示:
1. 如下图,选择我们要推送的文档,然后点击Ribbon上的推送文档;

2. 点击推送后,弹出推送页面,如下图;可以看到页面的URL上,IDC参数包含了选择的ID,ListID参数是源列表的Guid,点击推送即可。特别地说,这个下拉框的列表类型,都是文档库,在绑定的时候已经过滤,当然,我们还可以通过其他方式,过滤掉系统文档库。

3. 选择文档库“软件一部”,点击推送,推送后结果:如下图所示,我们选中的两个文档,推送到了软件一部下面,目标完成!

七、 参考文档
http://www.cnblogs.com/jianyus/archive/2013/05/04/3059022.html
SharePoint 2010 文档管理之文档推送的更多相关文章
- git -分支管理(创建、推送、删除)
		
分支创建并推送: 1.查看当前所有分支,当前分支前面会标出一个*号 git branch -a 2.新建分支 git branch android_O 3.切换到新分支 git checkout an ...
 - SharePoint 2010 文档管理系列
		
前言,这是自己第一次写一个系列的文档,本来想使用SharePoint 2013版本,但是碍于SharePoint 2013对于硬件要求过高,自己的笔记本无法承受,所以退而求其次选择了在SharePoi ...
 - Winform开发框架中的内容及文档管理模块功能介绍
		
在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInf ...
 - 移动设备和SharePoint 2013 - 第3部分:推送通知
		
博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...
 - SharePoint 2010 文档管理系列之星级评论功能
		
前言:正如我们前面介绍的是,文档管理就是让大家更加直观.方便的对手里的文档,进行统筹掌控,哪些文档是有价值的,哪些文档更受大家欢迎,所有就带来了这个星级评论. 当然,这个是SharePoint 201 ...
 - SharePoint 2010 文档管理之过期归档工具
		
前言:使用过SharePoint的人都知道,SharePoint对于操作是便捷的,但是对于数据量承载却是不令人满意的,这样,就要求我们需要更加合理的使用,规范大家的使用规则和习惯,所以,定期清理不必要 ...
 - SharePoint 2010 文档管理系列之准备篇
		
前言:很早自己就想写一个系列的文章,但是不知道写什么,最近在QQ群里,好多人说在做文档管理,其实文档管理也是SharePoint的一个很不错的功能点,自己想了想,也想多学习点东西,所以写这个主题吧,今 ...
 - 【SharePoint 文档管理解决方案设计系列一】文档使用分析
		
在我们在 SharePoint 端设计文档管理解决方案之前我们要了解目前客户在他们已有的系统里是怎么对文档进行使用和管理的.只有了解了当前的使用情况才能根据客户的需求量身定做一套适合他们的有效的解决方 ...
 - sharepoint 2010 如何给文档库或自定义列表添加评论功能
		
转:http://www.cfanz.cn/?c=article&a=read&id=40924 最近公司在知识库中,有一个需求,就是想要给文档添加评论功能,在sharepoint 2 ...
 
随机推荐
- ios开发人员mac空间不够用的解决办法
			
有时候,当我们的mac硬盘空间不够用的时候,我们查看“用户”文件夹,发现这个文件夹占用了很大的存储空间,可是当我们一个一个查看这个文件夹下的子文件夹所占的存储空间大小并把这些存储空间大小加起来的时候却 ...
 - 打开 Mac OS X 隐藏的用户资源库文件夹的方法
			
在较高版本的 Mac OS X 中,用户的资源库文件夹(/Users/username/Library)默认被系统隐藏了,从 Finder 窗口中不能直接打开. 但是通过下面这个方法可以快速打开用户资 ...
 - JavaScript 中介者模式与观察者模式有何不同?
			
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailmvp 感觉二者非常像,都是pub/sub机制,如何进行区分 ...
 - jQuery带遮罩层弹窗实现(附源码)
			
1.CSS样式 <style type="text/css"> body { font:11px/1.6em Microsoft Yahei; background:# ...
 - [mysql]MySQL忘记密码
			
1.修改MySQL的登录设置: vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi. 2.重新启动mysqld # /etc/init ...
 - n 后问题
			
n后问题,解决思路:假设每个皇后占一行(且第i个皇后放在第i - 1 行),依次去尝试下一个皇后该放在该行的哪一列 #include<iostream> #include<cmath ...
 - 还在抱怨JS文件里没有智能提示吗, VS10以及以上都可以 .NET
			
1.打开JS文件 2.编写$.我们会发现什么也没有 3.托进来 4.有了哈 保存头部代码新建JS都贴上去.
 - MyBatis魔法堂:各数据库的批量Update操作
			
一.前言 MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了.本篇仅记录批量update操作的sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了. ...
 - 【Spark】---- Spark 硬件配置
			
存储系统 Spark任务需要从一些外部的存储系统加载数据(如:HDFS 或者 HBase),重要的是存储系统要接近Spark系统,我们有如下推荐: (1)如果可能,运行Spark在相同的HDFS节 ...
 - mysql update时报错You are using safe update mode
			
在使用mysql执行update的时候,如果不是用主键当where语句,会报如下错误,使用主键用于where语句中正常. ) Error Code: . You are using safe upda ...