- Client Object Model是SharePoint 2010对开发提供新的支持。我前两周在给一个客户做POC,主要内容是将SharePoint 2010 作为一个纯内容管理平台,并隐藏起来不给最终用户看到,最终用户通过原有平台进行文档的增删查改操作。这些都是用默认的认证方式,认证及权限代码没有包含在内。以下是我截取其中的一些代码。
在SharePoint 2010 中创建文档库
public string CreateDocumentLibrary(string siteUrl, string DocumentLibraryName,string userName)
{
ListCreationInformation newListInfo = new ListCreationInformation();
newListInfo.Title = DocumentLibraryName;
newListInfo.TemplateType = (int)ListTemplateType.DocumentLibrary;
List newList;
using (ClientContext clientContext = new ClientContext(siteUrl))
{
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
Web site = clientContext.Web;
newList = site.Lists.Add(newListInfo);
clientContext.Load(newList);
clientContext.ExecuteQuery();
}
return "Create Success";
}
在SharePoint 2010 中删除文档库
public string DeleteDocumentLibrary(string siteUrl, string DocumentLibraryName)
{
using (ClientContext clientContext = new ClientContext(siteUrl))
{
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
Web site = clientContext.Web;
List existList = site.Lists.GetByTitle(DocumentLibraryName);
existList.DeleteObject();
clientContext.ExecuteQuery();
clientContext.Dispose();
}
return "Delete Success";
}
在SharePoint 2010 中上传文档
public string UploadFileToDocumntLibrary(string siteUrl, string documentListName, string documentListURL, string documentName, byte[] documentStream)
{
using (ClientContext clientContext = new ClientContext(siteUrl))
{
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
var fileCreationInformation = new FileCreationInformation();
fileCreationInformation.Content = documentStream;
fileCreationInformation.Overwrite = true;
fileCreationInformation.Url = siteUrl+ documentListURL+"/" + documentName;
Microsoft.SharePoint.Client.File uploadFile = documentsList.RootFolder.Files.Add(fileCreationInformation);
uploadFile.ListItemAllFields.Update();
clientContext.ExecuteQuery();
}
return "upload success";
}
在SharePoint 2010 中下载文档
public byte[] DownloadDocument(string siteURL, string documentListName, string documentName)
{
ListItem item = GetDocumentFromSP(siteURL, documentListName, documentName);
if (item != null)
{
using (ClientContext clientContext = new ClientContext(siteURL))
{
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
FileInformation fInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, item["FileRef"].ToString());
Stream s = fInfo.Stream;
byte[] bt = ReadFully(s, 0);
return bt;
}
}
return null;
}
在SharePoint 2010 中获取文档库中的文档
public List<SharePointListItem> GetListItemCollection(string siteURL, string documentListName)
{
ListItemCollection listItems = GetListItemCollectionFromSP(siteURL, documentListName,20);
List<SharePointListItem> lireturn = new List<SharePointListItem>();
foreach (ListItem li in listItems)
{
SharePointListItem item = new SharePointListItem();
item.Type = li.FileSystemObjectType.ToString();
item.DisplayName = li.FieldValues["FileLeafRef"].ToString();
item.FilePath = li.FieldValues["FileRef"].ToString();
item.CreatedDate =(DateTime)li.FieldValues["Created"];
item.ModifiedDate =(DateTime)li.FieldValues["Modified"];
item.Author = ((Microsoft.SharePoint.Client.FieldUserValue)li.FieldValues["Author"]).LookupValue;
item.Editor=((Microsoft.SharePoint.Client.FieldUserValue)li.FieldValues["Editor"]).LookupValue;
lireturn.Add(item);
}
return lireturn;
}
上面方法调用的方法
// Code by 丁为平
private ListItem GetDocumentFromSP(string siteURL, string documentListName, string documentName)
{
ListItemCollection listItems = GetListItemCollectionFromSP(siteURL, documentListName, "FileLeafRef",
documentName, "Text", 1);
return (listItems != null && listItems.Count == 1) ? listItems[0] : null;
}
private ListItemCollection GetListItemCollectionFromSP(string siteURL, string documentListName, int rowLimit)
{
ListItemCollection listItems = null;
using (ClientContext clientContext = new ClientContext(siteURL))
{
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml =
@"<View>
<Query>
<RowLimit>" + rowLimit.ToString() + @"</RowLimit>
</Query>
</View>";
listItems = documentsList.GetItems(camlQuery);
clientContext.Load(documentsList);
clientContext.Load(listItems);
clientContext.ExecuteQuery();
}
return listItems;
}
private ListItemCollection GetListItemCollectionFromSP(string siteURL, string documentListName, string name, string value, string type, int rowLimit)
{
ListItemCollection listItems = null;
using (ClientContext clientContext = new ClientContext(siteURL))
{
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
List documentsList = clientContext.Web.Lists.GetByTitle(documentListName);
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml =
@"<View>
<Query>
<Where>
<Eq>
<FieldRef Name='" + name + @"'/>
<Value Type='" + type + "'>" + value + @"</Value>
</Eq> </Where>
<RowLimit>" + rowLimit.ToString() + @"</RowLimit>
</Query>
</View>";
listItems = documentsList.GetItems(camlQuery);
clientContext.Load(documentsList);
clientContext.Load(listItems);
clientContext.ExecuteQuery();
}
return listItems;
}
private byte[] ReadFully(Stream stream, int initialLength)
{
// If we've been passed an unhelpful initial length, just
// use 32K.
if (initialLength < 1)
{
initialLength = 32768;
}
byte[] buffer = new byte[initialLength];
int read = 0;
int chunk;
while ((chunk = stream.Read(buffer, read, buffer.Length - read)) > 0)
{
read += chunk;
// If we've reached the end of our buffer, check to see if there's
// any more information
if (read == buffer.Length)
{
int nextByte = stream.ReadByte();
// End of stream? If so, we're done
if (nextByte == -1)
{
return buffer;
}
byte[] newBuffer = new byte[buffer.Length * 2];
Array.Copy(buffer, newBuffer, buffer.Length);
newBuffer[read] = (byte)nextByte;
buffer = newBuffer;
read++;
}
}
byte[] ret = new byte[read];
Array.Copy(buffer, ret, read);
return ret;
}
还有一个支持类
[Serializable]
public class SharePointListItem
{
public SharePointListItem()
{
}
public string DisplayName { get; set; }
public string FilePath { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
public string Author { get; set; }
public string Editor { get; set; }
public string Type { get; set; }
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com