我一直以为只有在Document Library里面的File才会支持在线编辑。直到今天早上我才发现用IE打开List里面的Attachments也是支持在线编辑的,但前提是必须是IE浏览器。

目前正在开发的项目,我开始设计时是把所有的审批信息存放在List中,上传的文档以Attachments形式保存于List中,昨天客户来公司,我演示的时候,用Chrome打开附件,直接下载了(以后建议用IE),客户需要在线编辑功能,还狠狠的批了我们一顿,附件不能在线编辑,那我审核个毛线。(其实是可以的,用IE就行。)结束后,我也没多想(经验不足)直接对代码进行该了,将FileUpload上传的文件保存到一个Document Library 的Log中,其实这完全是多余的。

如果你想在SharePoint中,想对上传的文档进行在线的编辑,有2种方法,一种当然是上传到文档库啦,还有一种就是以Attachments上传到List。

List

首先,对ListItem进行Update操作。

if (fileAttachment.HasFile)
{
try
{
foreach (var file in fileAttachment.PostedFiles)
{
newItem.Attachments.Add(file.FileName, file.InputStream.ReadFully());
}
}
catch ()
{ }
}
newItem.Update();

然后List的ListItem编辑Webpart中,用HyperLink画出附件,其实就是获取附件的Url地址

 SPListItem newItem = this._applyItemList.GetItemById(this.ObjectId);
HyperLink hyperLink=null;
foreach (string currentAttachment in newItem.Attachments)
{
hyperLink=new HyperLink();
hyperLink.ID = Guid.NewGuid().ToString();
string attachmentAbsoluteURL = newItem.Attachments.UrlPrefix + currentAttachment;
SPFile attachmentFile = this._currentWeb.GetFile(attachmentAbsoluteURL);
hyperLink.Text = attachmentFile.Name;
hyperLink.NavigateUrl = attachmentAbsoluteURL;
phAttachment.Controls.Add(hyperLink);
//添加换行
phAttachment.Controls.Add(new LiteralControl("<br />"));
}

最后在编辑的Webpart如下所示,直接用IE打开,支持在线编辑,但没有历史记录

当然,你也可以将文档上传到文档库,上传到文档库里面你的操作有历史记录

Document Library

比如我将FileUpload上传的文件保存到文档库中的相应文件夹,以ListID+“-”+ListItemID命名的文件夹,这样避免了上传文档重名的问题,首先判断是否存在这个文件夹,不存在则创建,当创建完成后,将文档存放在文档库中此文件夹下:

 if (fileAttachment.HasFile)
{
try
{
foreach (var file in fileAttachment.PostedFiles)
{
using (SPSite logSite = SPContext.Current.Site)
{
using (SPWeb logWeb = logSite.AllWebs["log"])
{
logWeb.AllowUnsafeUpdates = true; SPDocumentLibrary library = logWeb.Lists["ApproveAttachmentLog"] as SPDocumentLibrary;
string rootUrl = library.RootFolder.Url;
string listId = _applyItemList.ID.ToString();
string listItemId = newItem.ID.ToString();
string folderUrl = rootUrl + "/" + listId+"-" + listItemId;
SPFolder folder = logWeb.GetFolder(folderUrl); if (!folder.Exists)
{
SPListItem newFolder = library.Folders.Add(library.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, listId +"-"+ listItemId);
newFolder.Update();
}
Stream stream = file.InputStream;
byte[] bytFile = new byte[Convert.ToInt32(file.ContentLength)];
stream.Read(bytFile, , Convert.ToInt32(file.ContentLength));
folder.Files.Add(System.IO.Path.GetFileName(file.FileName), bytFile, true); logWeb.AllowUnsafeUpdates = false; }
} }
}
catch (Exception)
{ }
}

接下来,就是获取文档库中File的AbsoluteUrl了,有一个非常漂亮的方法:file.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString(),这样就可以获取当前File对应的ListItem的绝对地址了:

 if (this.ObjectId>)
{
SPListItem newItem = this._applyItemList.GetItemById(this.ObjectId);
HyperLink hyperLink=null;
using (SPSite site = SPContext.Current.Site)
{
using (SPWeb web = site.AllWebs["log"])
{ SPDocumentLibrary library = web.Lists["ApproveAttachmentLog"] as SPDocumentLibrary;
string rootUrl = library.RootFolder.Url;
string listId = _applyItemList.ID.ToString();
string listItemId = newItem.ID.ToString();
string folderUrl = rootUrl + "/" + listId + "-" + listItemId;
SPFolder folder = web.GetFolder(folderUrl);
if (folder.Exists)
{
foreach (SPFile file in folder.Files)
{
hyperLink = new HyperLink();
hyperLink.ID = file.Item.ID.ToString();
hyperLink.Text = file.Item.Name;
hyperLink.NavigateUrl = file.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
phAttachment.Controls.Add(hyperLink);
//添加换行
phAttachment.Controls.Add(new LiteralControl("<br />"));
}
}
}
}

效果入下,和上面展示的并无出入,但这样对文档的操作会有历史记录。

小结

对于文档的操作,推荐使用IE(doc、docx都是支持的),毕竟是微软的产品,对SharePoint支持也会很好。

SharePoint中在线编辑文档的更多相关文章

  1. C# 10分钟入门基于WebOffice实现在线编辑文档,实时保存到服务器(所有office,兼容WPS)

    今天,他来了(weboffice在线编辑文档). 上次写了一个在线预览的博,当然,效果并不是太理想,但是紧急解决了当时的问题. 后来,小编重新查找资料,求助大牛,终于使用新的方式替换了之前的low方法 ...

  2. 在线office文档编辑NTKO使用心得

    目录 前言 什么是ntko 准备工作 实战演练 总结 一.前言 Web开发中经常需要用到在线处理office文档的功能,现在市面上有一些常用的Web页面调用显示Office的控件技术,用起来很方便.有 ...

  3. 如何才能实现在点击链接时直接在网页中打开word文档,但不提示保存

    一般要直接打开需要客户端 1.客户端有word支持 2.客户端浏览器的版本与设置 可寻找一下相关的控件或中间件,我的意见是看能否变通一下,把word转成HTML或PDF再展示给用户.(若用户不需要编辑 ...

  4. sharepoint 2010 如何创建文档库内容类型content type

    转:http://biancheng.dnbcw.info/linux/441643.html 这次主要是记录下,如何来创建文档内容类型,例如新建文档的时候,可以选择不同模板,有word,excel文 ...

  5. 使用swagger实现web api在线接口文档

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  6. 使用swagger实现web api在线接口文档(转载)

    一.前言 通常我们的项目会包含许多对外的接口,这些接口都需要文档化,标准的接口描述文档需要描述接口的地址.参数.返回值.备注等等:像我们以前的做法是写在word/excel,通常是按模块划分,例如一个 ...

  7. Indri中的动态文档索引技术

    Indri中的动态文档索引技术 戴维 译 摘要: Indri 动态文档索引的实现技术,支持在更新索引的同时处理用户在线查询请求. 文本搜索引擎曾被设计为针对固定的文档集合进行查询,对不少应用来说,这种 ...

  8. 浅析如何在Nancy中生成API文档

    前言 前后端分离,或许是现如今最为流行开发方式,包括UWP.Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互. 但是这样对前端开发和APP开发就会面临这样一个问题:如何知 ...

  9. spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

    spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...

随机推荐

  1. 我们为什么要使用Spring Cloud?简介

    转载:https://blog.csdn.net/smallsunl/article/details/78778790 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的 ...

  2. Linux netstat命令介绍

    关注Linux的系统状态,主要从两个角度出发,一个角度是系统正在运行什么服务(ps命令):另外一个就是有什么连接或服务可用(netstat命令).netstat还可以显示ps无法显示的.从inetd或 ...

  3. C#学习记录二:高级数据存储方式

    1,结构 结构和类的区别主要在于存储和访问方式,结构是一种值 数据类型,而类是一一种引用数据类型.所谓值数据类型存储个人理解是存在堆里面的,所谓引用数据类型存储在了栈里面,相当于存储了一个指针. 结构 ...

  4. vSphere Data Protection – a new backup product included with vSphere 5.1

    August 27, 2012 By Vladan SEGET This new backup product replaces VMware Data Recovery, which has bee ...

  5. Java Web部署到tomcat后,使用动态编译无法找到相关类的解决方案

    一.问题 动态编译java文件时(这个java文件虽引用了第三方jar包),如果这个过程发生在java命令行程序中,则正常编译.如果发生在JavaWeb中,然后此Java部署到Tomcat之后,执行动 ...

  6. WireShark开启IP, TCP,UDP校验和的办法

    首先点击编辑->首选项

  7. 转:清理系统垃圾的BAT代码

    @echo off title @echo off color 2 echo. echo. echo 请不要关闭此窗口! echo. echo 开始清理垃圾文件,请稍等...... echo. ech ...

  8. Web Storage与Cookie相比存在的优势:

    (1).存储空间更大:IE8下每个独立的存储空间为10M,其他浏览器实现略有不同,但都比Cookie要大很多. (2).存储内容不会发送到服务器:当设置了Cookie后,Cookie的内容会随着请求一 ...

  9. 〖Linux〗在tmux同时使用bash和zsh

    个人有两份tmux配置文件: ~/.tmux.conf # 使用zsh,主要是日常使用,zsh太好使用了 ~/.tmux.conf.bash # 使用bash,主要是Android编译使用 按照tmu ...

  10. soapui not supported the auto complete

    http://forum.soapui.org/viewtopic.php?t=19850 syntax highlighting or content assist inside soapUI? t ...