使用对象模型操作文档库(DocumentLibrary)

简介:

1. 使用该类SPDocumentLibrary来实现一些对文档库的操作,文档库只是列表的一种特殊类型,所以当我们使用如下代码的时候,显示出的list是包括文档库的。
SPWeb site = SPContext.Current.Web;
foreach (SPList list in site.Lists) 
{
// 所有的列表,当然也包括文档库
}

2. 文档库和列表的主要不同点是文档库是用来存储文档的,SPDocumentLibrary类是继承自SPList的,所以当你获得SPList对象的时候就可以判断该列表是否为文档库
public bool IsListAlsoDocumentLibrary(SPList list)

    if(list is SPDocumentLibrary) 
        return true
    else   
        return false;
}

3. 站点可能有很多隐藏的文档库,比如webpart库,站点模板库,母板页库,我们可以把他们显示在一个DropDownList中,代码如下:
SPWeb site = SPContext.Current.Web;
foreach (SPList list in site.Lists) 

    if(list is SPDocumentLibrary && !list.Hidden) 
    {   
         SPDocumentLibrary docLib = (SPDocumentLibrary)list;   
         lstTargetLibrary.Items.Add(new ListItem(docLib.Title, docLib.ID.ToString())); 
}
}

4.1 由于文档库在wss的object model中也是SPList,所以每一个文档也是一个SPlistItem对象,然而在文档库中的文档
也可以为一个SPFile对象,所以我们可以通过这两种方法是操作。
void ProcessDocuments(SPDocumentLibrary docLib) { foreach(SPListItem item in docLib.Items) { // 操作SPListItem对象 SPFile file = item.File; // 操作SPFile 对象 } }
 

4.2 SPListItem对象记录了一个文档的ID,对栏元数据的读写,如下代码:
foreach (SPListItem item in docLib.Items)
{
    int itemID = item.ID;     // 读元数据栏信息
    string clientColumnValue = item["Client"].ToString();
    //写元数据栏信息
     item["Client"] = "AdventureWorks";
    item.Update();
}

4.3 SPFile一般来控制文档的内容,比如下面代码:
foreach (SPListItem item in docLib.Items)
{       
     if(item.FileSystemObjectType == SPFileSystemObjectType.File) 
     {            
          SPFile file = item.File;    
          int versionCount = file.Versions.Count;   
          // 是否被签出  
           DateTime checkedOutDate = file.CheckedOutDate;        
          // 基于流的方式打开处理       
           using(Stream fileContents = file.OpenBinaryStream())         
          {}     
     }
}

5. 这里需要注意的是如果文档库中有文件夹的时候,对应object model为一个内容为SPListItem的Items的集合,所以上面的代码中我在把SPListItem转换为SPFile前来判断SPFileSystemObjectType属性。

如果你仅仅想把站点中文档库都列举出来,你还可以通过如下方法:
void ProcessDocumentsAtRoot(SPDocumentLibrary docLib) 
{
     foreach (SPFile file in docLib.RootFolder.Files) 
     {
          // program against file using SPFile class
     
}
}

6.1 添加一个新的文件到文档库中,下面是主要代码:
protected void CreateDocument()
{
    SPSite siteCollection = SPContext.Current.Site;
    SPWeb site = SPContext.Current.Web;
    Guid libraryID = new Guid(lstTargetLibrary.SelectedValue);
    SPDocumentLibrary library = (SPDocumentLibrary)site.Lists[libraryID];

    string documentName = txtFileName.Text;
    string libraryRelativePath = library.RootFolder.ServerRelativeUrl;
    string libraryPath = siteCollection.MakeFullUrl(libraryRelativePath);
    string documentPath = libraryPath + "/" + documentName;

    Stream documentStream = new MemoryStream();
    StreamWriter writer = new StreamWriter(documentStream);
    writer.Write(txtDocumentBody.Text);
    writer.Flush();

    Hashtable docProperties = new Hashtable();
    docProperties["vti_title"] = "This is a test title";
    docProperties["Color"] = "Green";

    site.Files.Add(documentPath, documentStream, docProperties, true);
    Response.Redirect(libraryPath);
}

6.2 使用上面代码创建的文档,我们只是指定了"vti_title"和"Color"两个元数据的信息,wss默认为我们生成了许多,我们可以通过下面的代码来查看系统到底为我们做了什么?
SPList list = site.Lists["CaryPro"];
foreach (SPListItem item in list.Items) 
{
     SPFile file = item.File;
     foreach (DictionaryEntry entry in file.Properties) 
     {
         Console.WriteLine(entry.Key + ":" + entry.Value);
     }
     break;
}


7 使用Feature创建新的文档库实例

7.1 你可以使用网站设置中的UI,也可以自定义一个基于某个内容类型的文档库,我们可以Feature方式提供某个标准文档库的实例,如下设置:
<ListInstance
FeatureId="00BFEA71-E717-4E80-AA17-D0C71B360101"
TemplateType="101"
Id="CaryPro"
Description="Document Library for CaryPro"
OnQuickLaunch="True"
Title="CaryPro"
Url="CaryPro"
>
</ListInstance>

FeatureId必须是个GUID,TemplateType需要为文档库的类型,就是101

7.2 下面的配置为,在TestData目录有相应的文档,这些文档会默认就放到该文档库中
<Module Name="TestData" List="101" Path="TestData" Url="CaryPro" >
<File Url="AdventureCaryPro.docx" Type="GhostableInLibrary" />
<File Url="ContosoCaryPro.docx" Type="GhostableInLibrary" />
<File Url="WingtipCaryPro.docx" Type="GhostableInLibrary" />
</Module>

7.3 设置默认的文档库模板
<Module Name="WordTemplate" List="101" Url="CaryPro/Forms">
<File Url="CaryProTemplate.dotx" Type="GhostableInLibrary" />
</Module>

7.4 FeatureActivated中创建文档库
public override void FeatureActivated(SPFeatureReceiverProperties properties) 
{
    SPWeb site = (SPWeb)properties.Feature.Parent;
    SPDocumentLibrary libProposals = (SPDocumentLibrary)site.Lists["CaryPro"];
    string templateUrl = @"CaryPro/Forms/CaryProTemplate.dotx";
    libProposals.DocumentTemplateUrl = templateUrl;
    libProposals.Update();
}


本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/07/05/DocumentLibrary.html,如需转载请自行联系原作者

目录
相关文章
|
28天前
|
XML 存储 JavaScript
DOM(文档对象模型):理解网页结构与内容操作的关键技术
**DOM摘要:**文档对象模型(DOM)是独立于语言的接口,用于访问和修改HTML或XML文档。HTML DOM用于HTML,XML DOM用于XML。示例展示了如何用JavaScript通过DOM获取和修改元素,如通过ID或标签名。XML DOM涉及加载XML文件或字符串,获取元素值。DOM节点包括文档、元素、文本等,通过属性(如nodeName, nodeValue)和方法(如getElementsByTagName, appendChild)操作。节点树结构允许遍历和修改文档结构。
46 2
DOM(文档对象模型):理解网页结构与内容操作的关键技术
|
25天前
|
JavaScript 前端开发 开发者
JavaScript文档加载和文档准备的区别
JavaScript文档加载和文档准备的区别
17 3
|
1月前
|
Oracle 关系型数据库 MySQL
一款好用的数据库表结构文档生成工具
一款好用的数据库表结构文档生成工具
|
编译器 Go
第四十七章 开发自定义标签 - 服务器文档对象模型
第四十七章 开发自定义标签 - 服务器文档对象模型
|
JSON API 数据格式
关于文档的API操作( 添加文档和获取文档)
关于文档的API操作( 添加文档和获取文档)
|
JavaScript
|
XML JavaScript 前端开发
前端培训-中级阶段(3)- DOM文档对象模型(2019-6 -27期)
前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。 前面我们已经基本掌握常规的语法语义,以及基本的使用方法。接下来我们讲深入进去了解其中内在的原理。
86 0
前端培训-中级阶段(3)- DOM文档对象模型(2019-6 -27期)
|
Web App开发 JavaScript 前端开发
DOM(文档对象模型)基础加强
DOM(文档对象模型)基础加强 文档:标记型文档 对象:封装了属性和行为的实例,可以直接被调用。 模型:所有的标记型文档都具有一些共性特征的一个体现。    用来将标记型文档封装成对象,并将标记型文档中的所有内容(标签、文本、属性)都封装成对象。
1230 0
|
C# 数据库 数据安全/隐私保护