您的位置:首页 > 其它

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

2010-09-03 11:07 381 查看
1.使用该类SPDocumentLibrary来实现一些对文档库的操作,文档库只是列表的一种特殊类型,所以当我们使用如下代码的时候,显示出的list是包括文档库的。
SPWebsite=SPContext.Current.Web;
foreach(SPListlistinsite.Lists)
{
//所有的列表,当然也包括文档库
}
2.文档库和列表的主要不同点是文档库是用来存储文档的,SPDocumentLibrary类是继承自SPList的,所以当你获得SPList对象的时候就可以判断该列表是否为文档库
publicboolIsListAlsoDocumentLibrary(SPListlist)
{
if(listisSPDocumentLibrary)
returntrue;
else
returnfalse;
}
3.站点可能有很多隐藏的文档库,比如webpart库,站点模板库,母板页库,我们可以把他们显示在一个DropDownList中,代码如下:
SPWebsite=SPContext.Current.Web;
foreach(SPListlistinsite.Lists)
{
if(listisSPDocumentLibrary&&!list.Hidden)
{
SPDocumentLibrarydocLib=(SPDocumentLibrary)list;
lstTargetLibrary.Items.Add(newListItem(docLib.Title,docLib.ID.ToString()));
}
}
4.1由于文档库在wss的objectmodel中也是SPList,所以每一个文档也是一个SPlistItem对象,然而在文档库中的文档
也可以为一个SPFile对象,所以我们可以通过这两种方法是操作。
voidProcessDocuments(SPDocumentLibrarydocLib)
{
foreach(SPListItemitemindocLib.Items)
{
//操作SPListItem对象
SPFilefile=item.File;
//操作SPFile对象
}
}

4.2SPListItem对象记录了一个文档的ID,对栏元数据的读写,如下代码:
foreach(SPListItemitemindocLib.Items)
{
intitemID=item.ID;//读元数据栏信息
stringclientColumnValue=item["Client"].ToString();
//写元数据栏信息
item["Client"]="AdventureWorks";
item.Update();
}
4.3SPFile一般来控制文档的内容,比如下面代码:
foreach(SPListItemitemindocLib.Items)
{
if(item.FileSystemObjectType==SPFileSystemObjectType.File)
{
SPFilefile=item.File;
intversionCount=file.Versions.Count;
//是否被签出
DateTimecheckedOutDate=file.CheckedOutDate;
//基于流的方式打开处理
using(StreamfileContents=file.OpenBinaryStream())
{}
}
}
5.这里需要注意的是如果文档库中有文件夹的时候,对应objectmodel为一个内容为SPListItem的Items的集合,所以上面的代码中我在把SPListItem转换为SPFile前来判断SPFileSystemObjectType属性。
如果你仅仅想把站点中文档库都列举出来,你还可以通过如下方法:
voidProcessDocumentsAtRoot(SPDocumentLibrarydocLib)
{
foreach(SPFilefileindocLib.RootFolder.Files)
{
//programagainstfileusingSPFileclass
}
}
6.1添加一个新的文件到文档库中,下面是主要代码:
protectedvoidCreateDocument()
{
SPSitesiteCollection=SPContext.Current.Site;
SPWebsite=SPContext.Current.Web;
GuidlibraryID=newGuid(lstTargetLibrary.SelectedValue);
SPDocumentLibrarylibrary=(SPDocumentLibrary)site.Lists[libraryID];

stringdocumentName=txtFileName.Text;
stringlibraryRelativePath=library.RootFolder.ServerRelativeUrl;
stringlibraryPath=siteCollection.MakeFullUrl(libraryRelativePath);
stringdocumentPath=libraryPath+"/"+documentName;

StreamdocumentStream=newMemoryStream();
StreamWriterwriter=newStreamWriter(documentStream);
writer.Write(txtDocumentBody.Text);
writer.Flush();

HashtabledocProperties=newHashtable();
docProperties["vti_title"]="Thisisatesttitle";
docProperties["Color"]="Green";

site.Files.Add(documentPath,documentStream,docProperties,true);
Response.Redirect(libraryPath);
}
6.2使用上面代码创建的文档,我们只是指定了"vti_title"和"Color"两个元数据的信息,wss默认为我们生成了许多,我们可以通过下面的代码来查看系统到底为我们做了什么?
SPListlist=site.Lists["CaryPro"];
foreach(SPListItemiteminlist.Items)
{
SPFilefile=item.File;
foreach(DictionaryEntryentryinfile.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="DocumentLibraryforCaryPro"
OnQuickLaunch="True"
Title="CaryPro"
Url="CaryPro"
>
</ListInstance>
FeatureId必须是个GUID,TemplateType需要为文档库的类型,就是101
7.2下面的配置为,在TestData目录有相应的文档,这些文档会默认就放到该文档库中
<ModuleName="TestData"List="101"Path="TestData"Url="CaryPro">
<FileUrl="AdventureCaryPro.docx"Type="GhostableInLibrary"/>
<FileUrl="ContosoCaryPro.docx"Type="GhostableInLibrary"/>
<FileUrl="WingtipCaryPro.docx"Type="GhostableInLibrary"/>
</Module>
7.3设置默认的文档库模板
<ModuleName="WordTemplate"List="101"Url="CaryPro/Forms">
<FileUrl="CaryProTemplate.dotx"Type="GhostableInLibrary"/>
</Module>

7.4FeatureActivated中创建文档库
publicoverridevoidFeatureActivated(SPFeatureReceiverPropertiesproperties)
{
SPWebsite=(SPWeb)properties.Feature.Parent;
SPDocumentLibrarylibProposals=(SPDocumentLibrary)site.Lists["CaryPro"];
stringtemplateUrl=@"CaryPro/Forms/CaryProTemplate.dotx";
libProposals.DocumentTemplateUrl=templateUrl;
libProposals.Update();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐