我在sharepoint事件接收器中有以下代码,用于将.oft文件复制到文档库中并将其粘贴到新目标(另一个文档库)中: –
SPDocumentLibrary template = (SPDocumentLibrary)properties.Web.GetList(properties.Web.ServerRelativeUrl + "/Templates/"); SPListItem templetefile = null; foreach (SPListItem i in template.Items) { if (i.Name.ToLower().Contains("project")) { templetefile = i; } } byte[] fileBytes = templetefile.File.OpenBinary(); string destUrl = properties.Web.ServerRelativeUrl + "/" + projectid.RootFolder.Url +".oft"; SPFile destFile = projectid.RootFolder.Files.Add(destUrl,fileBytes,false);
解决方法
您可以使用Interop.
using Microsoft.Office.Interop.Outlook; Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application(); MailItem mail = application.CreateItemFromTemplate("oldfile.oft") as MailItem; mail.BodyFormat = OlBodyFormat.olFormatHTML; mail.Subject = "New Subject"; mail.HTMLBody = "<p>This is a new <strong>OFT</strong> file with a changed subject line.</p>"; mail.SaveAs("newfile.oft");
对于在Visual Studio中找不到Interop的其他用户,请添加参考.
参考文献>添加参考> COM> Microsoft Outlook 15.0对象库
更新
由于我没有SharePoint(或曾经使用过它),我无法测试它.但也许像这样的东西可以工作吗?使用SPListItem的Url来获取正确的文件.您还可以尝试在this post中看到的绝对URL.使用该字符串加载文件以进行编辑.
foreach (SPListItem i in template.Items) { if (i.Name.ToLower().Contains("project")) { string url = i.Url; string absoluteUrl = (string)i[SPBuiltInFieldId.EncodedAbsUrl]; MailItem mail = application.CreateItemFromTemplate(url) as MailItem; //or MailItem mail = application.CreateItemFromTemplate(absoluteUrl) as MailItem; } }