1

尝试以编程方式从 url 获取列表名称,然后将列表名称传递给 Web 服务 Lists (_vti_bin/Lists.asmx) 以便使用 GetListItems 甚至使用 Webs 服务来使用 GetViewCollection 传入列表名称. 问题是我能够获取标题中显示的列表名称,但是当将其传递给 GetListItems 或 GetViewCollection 时,它会抱怨 GUID 不正确。

例子:

示例网址:

http://test.com/List Name Here/

我可以使用 Views 服务解析“此处的列表名称”,但是当将“此处的列表名称”传递给 GetListItems 时,它会失败并显示有关不正确 GUID 的消息。我想我想看看这是否可行,如果可以,列表名称需要在内部采用什么格式才能传递给 GetListItems 方法?

编辑

刚刚发现其中一个问题是 SharePoint 对 url 中的列表名称进行了一些解析,删除了逗号、方括号、句点和破折号,因此在我的案例中,列表名称中有一个句点被删除。所以我可能不得不告诉最终用户遵循命名约定,除非有任何其他方法可以获得完整的未编辑列表名称。

4

1 回答 1

2

能够通过遍历列表集合 (GetListCollection().ChildNodes) 来获取实际的列表名称。这允许我使用“DefaultViewUrl”和“Name”属性将正确的列表名称传递给 GetListItems Web 服务方法。这允许最终用户从 SharePoint 传入一个 url,并且处理将确定列表名称,因此不必在配置文件等中提供它。

下面的代码显示了从 url 确定列表名称的基础知识;

string name = string.Empty;
foreach (XmlNode ls in list.GetListCollection().ChildNodes)
{
    //Check whether list is document library
    if (Convert.ToInt32(ls.Attributes["ServerTemplate"].Value) != 0x65)
    {
        continue;
    }

    string defaultViewUrl = Convert.ToString(ls.Attributes["DefaultViewUrl"].Value);

    if (defaultViewUrl.Contains(listName))
    {
        name = ls.Attributes["Name"].Value;
        break;
    }
}

XmlNode ndListItems = list.GetListItems(name, null, ndQuery, ndViewFields, null, ndQueryOptions, null);
XmlNodeList oNodes = ndListItems.ChildNodes;

// rest of processing below...
于 2012-08-22T21:53:06.973 回答