SharePoint 2010 文檔管理之文檔推送


  前言:文檔推送功能,不是一個復雜的功能,我們這里簡單的應用了Ribbon定制、Js使用、對象模型推送(Server端),下面,我們來簡單介紹下文檔推送功能吧。

一、 功能設計:

  文檔推送功能,主要就是一個文檔庫中,選擇幾個文檔,點擊Ribbon菜單上的推送菜單,跳入推送頁面;推送頁面選擇目標列表,點擊推送按鈕,把選中的幾個文檔,推送到目標文檔庫。

  我這里就是復制過去,並沒有選擇移動,當然如果你需要這樣的功能,可以稍作修改以達到目的。推送過程可能存在重命的情況,這樣我會在出現異常的時候,把文件名前加上當前時間推送過去。

二、 源代碼結構

clip_image001

  如上圖所示,包括一個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上的推送文檔;

clip_image002

  2. 點擊推送后,彈出推送頁面,如下圖;可以看到頁面的URL上,IDC參數包含了選擇的ID,ListID參數是源列表的Guid,點擊推送即可。特別地說,這個下拉框的列表類型,都是文檔庫,在綁定的時候已經過濾,當然,我們還可以通過其他方式,過濾掉系統文檔庫。

clip_image003

  3. 選擇文檔庫“軟件一部”,點擊推送,推送后結果:如下圖所示,我們選中的兩個文檔,推送到了軟件一部下面,目標完成!

clip_image004

七、 參考文檔

  SharePoint 2013 添加Ribbon菜單

  http://www.cnblogs.com/jianyus/archive/2013/05/04/3059022.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM