1

我遇到了一个 SharePoint 问题,希望有人能提供帮助。基本上,当我尝试将名为“MigratedChemist”的列添加到名为“WorkCards”的列表中时(方法参数中的 pListName)。无论我尝试什么,在调用 UpdateList 时都会出现 FaultException 错误。我正在使用 SharePoint Web 服务进行连接。我已确认以下内容:

  1. 该列尚不存在,我有权在 SharePoint 中创建它
  2. 与 SharePoint 的连接正确地建立到 /_vti_bin/lists.asmx
  3. 列表名称是正确的,因为我有另一种方法可以从列表中返回项目并且效果很好。
  4. 当程序运行并作为参数传递时,xVersion 和 xId 值设置正确 - 就我而言,我应该能够传递列表名称,而不是 GUID,但是这两种方法都不起作用。

我的代码如下:

public static bool AddColumnToList(string pUri, string pListName, string pViewName, string pMaxRecords)
    {

        string version = string.Empty;
        XAttribute xId = null;
        XAttribute xVersion = null;

        try
        {
            XElement listDetails = client.GetList(pListName);
            xVersion = listDetails.Attribute("Version");
            xId = listDetails.Attribute("ID");
        }
        catch { throw; }

        XElement ndNewFields = new XElement ("Fields", "");
        string newXml = "<Method ID='1' Cmd='New'><Field Name='MigratedChemist' Type='Text' DisplayName='MigratedChemist' /></Method></Fields>";

        ndNewFields.Add(newXml);

        XElement result;

        try
        {
            result = client.UpdateList(xId.Value, null, ndNewFields, null, null, xVersion.Value);
        }
        catch (FaultException fe)
        {
        }


        return true;
    }

除此之外,还有人知道如何从 FaultRequest 中获取任何体面的信息吗?目前我收到以下错误消息,它没有用,似乎没有额外的细节。我已经尝试过,因为有些人建议删除错误处理并让程序停止,但这也没有给我任何额外的信息。

{“引发了‘Microsoft.SharePoint.SoapServer.SoapServerException’类型的异常。”}

4

1 回答 1

1

为了将来参考,我已经解决了 SharePoint 更新失败的问题和 FaultException 问题,因此将其包括在此处以供后代使用:

问题 1 - UpdateList 的问题

这个问题是因为我的 XML 格式错误引起的。当我调用 ndNewFields.Add(newXml) 时,返回的 XML 将 < 和 > 替换为控制字符,如下所示(我添加了一个额外的空格,因为此编辑器会自动转换它们。

<Method ID="1" Cmd="New"><Field Name="MigratedChemist"></Field></Method>

现在,我确实很早就注意到了这一点,但不确定它是否会导致问题。但是使用 XElement.Parse 命令我能够删除这些字符,这解决了问题:

ndNewFields.Add(XElement.Parse (newXml));

问题 2 - SharePoint 错误作为 FaultException 返回的问题

这一直困扰着我多年,所以我很高兴我终于解决了它。我不能把它归功于它,因为我是从另一个页面获取的,但是下面的代码是我获取详细信息的方式。

catch (FaultException fe)
        {
            MessageFault msgFault = fe.CreateMessageFault();
            XmlElement elm = msgFault.GetDetail<XmlElement>();
}

希望这会在将来节省一些人的挫败感!

安德鲁

于 2013-05-24T15:07:34.687 回答