1

这是要添加到文档集中的自定义 Web 部件中的代码

我无法针对文档集对其进行测试,因为我只能在我的开发笔记本电脑上加载“SP 基础”,因此文档集不可用。相反,我创建了一个文档库,添加了一个文件夹,并将 2 个文档放入该文件夹中。我正在尝试从文件夹中针对其中的文档执行此操作。

我将触发此代码的按钮添加到库页面。这是按下按钮时触发的代码:

   void btnSubmit_Click(object sender, EventArgs e)
    {
**SPFolder folder = SPContext.Current.ListItem.Folder; **
char[] splitter = { '/' }; 
string[] folderName = folder.Name.Split(splitter); 
string filePrefix = @"Stock Analysis Demo/" + folderName[0] + "/" + folderName[0]; 

SPFile template = folder.Files[filePrefix + " - Template.docx"]; 
SPFile file; 
byte[] byteArray = template.OpenBinary(); 
  using (MemoryStream mem = new MemoryStream()) 
{ 
  mem.Write(byteArray, 0, (int)byteArray.Length); 

  using (WordprocessingDocument myDoc = WordprocessingDocument.Open(mem, true)) 
  { 
     MainDocumentPart mainPart = myDoc.MainDocumentPart; 

     foreach (Word.SdtElement sdt in mainPart.Document .Descendants<Word.SdtElement>    ().ToList()) 
     { 
        Word.SdtAlias alias = sdt.Descendants<Word.SdtAlias>().FirstOrDefault(); 
        if (alias != null) 
        { 
           string sdtTitle = alias.Val.Value; 

            if (sdtTitle == "Word:Document") 
           { 
              file = folder.Files[filePrefix + " - " + sdt.InnerText + ".docx"]; 
              AddAltChunk(mainPart, sdt, file); 

我在 SPContext.Current.ListItem 上得到一个未处理的异常为空。 双星号的第一行

我已经调试并且可以获得一些 SPContext 方法来呈现信息,只是没有“Listitem”是当前的。

我怀疑,考虑一下评论,选择“文档集”会使文档集成为当前项目,如果是这样,在调用此代码之前缺少选定的文档集就是当前项目为空的原因。

...此外,文件夹不共享与文档集相同的属性,因此仅“打开”文件夹并不构成“当前项目”

这个对吗?

那么,如果我无法远程连接到实际站点,并且我无法在我的开发笔记本电脑上获取文档集,我该如何针对文档集测试我的自定义 webpart 代码呢?

或者........

选择文档集不会设置当前项目。那么循环浏览此文件夹中的文档的更好方法是什么?

4

1 回答 1

0

克里斯·法默,你需要一些功劳……(或全部)

这是交易:“文档集”是一个“项目”。文件夹不是。

我必须使用第 3 方虚拟机来创建(非 Foundation)共享点站点,然后是“在同一台服务器上”的 Visual Studio 开发环境,以便我可以针对文档集进行调试。瞧,选定文档集的列表项使上下文“看到”了一个单独的列表项。

于 2013-07-30T16:10:02.717 回答