如果不想要讓使用者使用 SPS2003 預設的檔案操作介面的話,我們也可以自己利用 WebPart 實作一個檔案管理介面,這個檔案管理介面就可以有更多的自訂功能了。實際上 SPS2003 是可以被高度的客製化的,而且客製化良好的 SPS 網站可以完全看不出它背後所使用的是 SPS2003,不過要特別注意的是,某些客製化時會需要去更新 SPS 資料庫的作法,微軟將不會對其提供支援服務。

這篇主要說明以程式編輯 Metadata、刪除檔案及上傳檔案的作法。

[Edit Metadata]

實際上 SPFile.Item 是一組 Collection,包含了我們在 SPS2003 中檔案的各項 Metadata 都是存在這個 Collection 裡頭的。它提供了一個 Update Method,可以讓我們很容易的更動 Metadata 的內容,當然你也可以用這個方法來取得 Metadata 的值,如:

string myTitle = myFile.Item[“Title”].ToString();

更詳細的使用這邊就不再贅述。特別注意在指定欄位值的時候,該變數的 Data Type 也要相同才行。

SPSite mySite = SPControl.GetContextSite(Context);
SPWeb myWeb = mySite.OpenWeb();
SPFolderCollection folders = myWeb.Folders;
SPFolder myFolder;

string _FileURL;
_FileURL = “http://myPortal/sites/firstSite/DocLib/ModifyMe.doc“;

SPFile myFile = myWeb.GetFile(_FileURL);
myFile.Item[“Title”] = _Title;
myFile.Item[“ows_Doc_x0020_Title”] = _Title;
myFile.Item[“Keyword”] = _Keyword;
myFile.Item[“_x0031_st_x0020_category”] = _Catlst;
myFile.Item[“_x0032_nd_x0020_category”] = _Cat2nd;
myFile.Item[“Abstract”] = _Abstract;
myFile.Item[“Confidentiality_x0020_due_x0020_date”] = System.Convert.ToDateTime (_ConfiDate);
myFile.Item[“Expiring_x0020_date”] = System.Convert.ToDateTime(_ExpireDate);
myFile.Item.Update();

[File Delete]

要在 WebPart 中實作出一個刪除檔案的介面,我們會使用到 SPFileCollection 這一個 Class,首先先開啟這個 Web Site,然後利用 Folder Name 去取得 SPFileCollection,再使用 Delete Method 達到檔案刪除的目的。特別要注意這邊的 delURL 並不是一個檔名,而是一個完整的 URL。

string delURL = “http://myPortal/sites/firstSite/DocLib/DeleteMe.doc“;
string myFolder = delURL;
myFolder = myFolder.Substring (0, myFolder.LastIndexOf(“/”));
myFolder = myFolder.Substring (myFolder.LastIndexOf(“/”)+1);

SPSite mySite = SPControl.GetContextSite(Context);
SPWeb myWeb = mySite.OpenWeb();
SPFileCollection delFiles = myWeb.Folders[myFolder].Files;
delFiles.Delete(delURL);

[Upload File]

上傳檔案的功能其實只要實作過上頭的兩個功能,應該會很容易上手。唯一的不同點是需要使用者介面,由於使用網頁上傳,所以我們會需要定義一個 HtmlInputFile 的檔案輸入文字框,再加上一個 Submit 的按扭:

HtmlInputFile _file1;
HtmlButton _mybutton;

設定按鈕的屬性及綁定它的按鈕事件到我們的方法處理程式中:

_mybutton = new HtmlButton();
_mybutton.InnerText = “Submit Upload”;
_mybutton.ServerClick += new EventHandler (_mybutton_click);

方法處理程式大致如下:

SPSite mySite = SPControl.GetContextSite(Context);
SPWeb myWeb = mySite.OpenWeb();
SPFolderCollection folders = myWeb.Folders;
SPFolder myFolder;
string _myFolderName = “Document Folder”;

myFolder = folders[_myFolderName];
SPFileCollection myFiles = myFolder.Files;

Stream fStream = _file1.PostedFile.InputStream;
byte[] contents = new byte[fStream.Length];
fStream.Read(contents, 0, (int)fStream.Length);
fStream.Close();

string sFilename;
sFilename = _file1.PostedFile.FileName;
myFiles.Add(sFilename, contents);

接著再設定及寫入 Metadata:

string _FileURL;
_FileURL = _myFolderName + “/” + sFilename;

SPFile myFile = myWeb.GetFile(_FileURL);
myFile.Item[“Title”] = _Title;
myFile.Item[“ows_Doc_x0020_Title”] = _Title;
myFile.Item[“Keyword”] = _Keyword;
myFile.Item[“_x0031_st_x0020_category”] = _Catlst;
myFile.Item[“_x0032_nd_x0020_category”] = _Cat2nd;
myFile.Item[“Abstract”] = _Abstract;
myFile.Item[“Confidentiality_x0020_due_x0020_date”] = System.Convert.ToDateTime (_ConfiDate);
myFile.Item[“Expiring_x0020_date”] = System.Convert.ToDateTime(_ExpireDate);
myFile.Item.Update();

這樣就可以完成一個客製的上傳功能了,當然你還需要對這個簡單的 UI 介面進行一些美化才行。

[End]

最後修改日期: 2004-08-27