4

我正在尝试将附件添加到我刚刚使用 CAML 在共享点服务器上创建的列表项。下面的代码被简化了(例如,路径通常是一个变量,第二个字段(项目 id,这里是 16847)通常是我从 CAML 中的插入语句返回的 id)。

这是我的代码:

String desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
String savePath = desktopPath + @"\" + "tutorials.txt";
byte[] data = GetData(savePath);
lists.AddAttachment("Tasks", "16847", "tutorials.txt", data);

我收到此错误:

无法根据您的更改更新安全性。在 ItemUpdating 期间发生以下异常:对象引用未设置为对象的实例。有关详细信息,请参阅事件查看器。0x81020089

getdata 是一种将我桌面上的文件转换为字节 [] 的方法。数据不为空,看起来还可以。

除此之外,Tasks 是所需的列表,16847 是添加附件的任务 ID。

我能找到的大部分信息都是关于一个不同的错误:索引超出范围异常(如在 msdn 页面上:http: //msdn.microsoft.com/en-us/library/lists.lists.addattachment (v= office.12).aspx )。

我还尝试了 http put(显然是未经授权的访问)和复制服务(如果我们找不到上述更简单方法的解决方案,我可以发布此代码)。

谁能告诉我出了什么问题?

编辑1:

private dcp.Lists lists = new dcp.Lists(); 
lists.Credentials = System.Net.CredentialCache.DefaultCredentials; 
lists.Url = Values.SERVERADDRESS + "/_vti_bin/lists.asmx"; 

这将初始化与我们的 Web 服务的连接。它非常适合更新、插入...

获取数据代码:

private byte[] GetData(String savePath)
    {
        byte[] contents;
        using (FileStream fStream = File.OpenRead(savePath))
        {
            contents = new byte[fStream.Length];
            sFileName = fStream.Name;
            fStream.Read(contents, 0, Convert.ToInt32(fStream.Length));
        }
        return contents;
    }

编辑2:

请注意,以下内容确实有效(我从任务中获得了现有附件的正确列表):

XmlNode ndAttach = lists.GetAttachmentCollection("Tasks", "16847");

MessageBox.Show(ndAttach.OuterXml);

并且以下没有(与 AddAttachment 方法相同的错误):

lists.DeleteAttachment("Tasks", "16847", ndAttach.ChildNodes[0].InnerText);

Whereas I'm quite certain this should work since it does exactly the same as the example code on msdn: http://msdn.microsoft.com/en-us/library/lists.lists.deleteattachment(v=office.12).aspx

4

1 回答 1

2

The code above is fine, the error occured on our server. When adding an attachment, no contenttype is given in the xml. This was programmed to throw an error because we've always used this method to update and add new items. So we removed the contenttype out of the underlying code and it works like a charm.

于 2013-03-04T07:12:42.807 回答