【问题标题】:SharePoint: GetListItems soapserverException being thrown because of QuerySharePoint:由于查询而引发 GetListItems soapserverException
【发布时间】:2012-08-03 23:24:36
【问题描述】:

我正在使用 VB.net 设计一个 Windows 窗体应用程序。我试图让应用程序返回特定 SharePoint 列表中的行数。当我删除 ndQuery.InnerXml 代码时,一切正常;但是,我想在获得计数之前过滤列表。我要过滤的两列是“Assigned Employee”和“status”。我在 Stack(SharePoint SoapServerException calling GetListItems web service) 上查看了许多不同的帖子,但我的异常与查询有关。 soapserverException的详细信息是:“一个或多个字段类型未正确安装。进入列表设置页面删除这些字段:0x81020014。”

我尝试进入关系页面,但无法浏览:

(url)/Relationships%20List/allitems.aspx

任何人都可以看到查询代码有问题吗?

Imports System
Imports System.IO
Imports System.Net
Imports System.Xml
Imports <xmlns="rs">
Public Class Form1

Dim i As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim listService As New getListItems.Lists
    listService.Credentials = CredentialCache.DefaultCredentials
    listService.Url = "http://(servername)/_vti_bin/Lists.asmx"
    Dim xmlDoc = New System.Xml.XmlDocument()

    Dim ndQuery As XmlNode =
    xmlDoc.CreateNode(XmlNodeType.Element, "Query", "")
    Dim ndViewFields As XmlNode =
        xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "")
    Dim ndQueryOptions As XmlNode =
        xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "")

    ndQueryOptions.InnerXml =
        "<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>"
    ndViewFields.InnerXml = "<FieldRef Name='Assigned Employee'/><FieldRef Name='Status'/>"
    ndQuery.InnerXml = "<Where><And><Contains><FieldRef Name ='Assigned Employee'/><Value Type='Text'>Engineer</Value></Contains><Contains><FieldRef Name='Status'/><Value Type='Text'>New</Value></Contains></And></Where>"

    Try

        Dim ndListItems As XmlNode =
                listService.GetListItems("Requests", Nothing, ndQuery, _
                ndViewFields, Nothing, ndQueryOptions, Nothing)

        Dim n1 As XmlNode = ndListItems.Item("rs:data")
        Dim a As String = n1.Attributes("ItemCount").InnerText

        'Attempted For each loop, but not needed:
        'Dim listItemCount As String
        'Dim innerXML = New System.Xml.XmlDocument
        'innerXML.LoadXml(ndListItems.InnerXml)
        'Dim rows As XmlNodeList = innerXML.GetElementsByTagName("rs:data")

        'For Each (XmlNode Attribute In rows)
        'Next


        Label1.Text = a

    Catch ex As System.Web.Services.Protocols.SoapException

        Label1.Text = ("Message:" + ControlChars.Lf + ex.Message +
            ControlChars.Lf +
        "Detail:" + ControlChars.Lf + ex.Detail.InnerText +
            ControlChars.Lf +
        "StackTrace:" + ControlChars.Lf + ex.StackTrace)

    End Try
End Sub
End Class

【问题讨论】:

  • 不确定是否是问题中的拼写错误,但第二个 &lt;FieldRef&gt; 应该有一个大写的“R”。
  • @AquilaSands 是的,它是一种类型,我已经改变了它。谢谢。
  • 如果您使用列表的 guid 而不是名称,它是否有效?如果不是,错误是否不同?
  • 使用 ID 或列表名称时同样的错误
  • 您能否尝试一次使用一个字段的查询来尝试缩小问题范围

标签: vb.net web-services sharepoint sharepoint-2007


【解决方案1】:

您可能需要将字段名称中的空格替换为_x0020_,例如

<FieldRef Name='Assigned_x0020_Employee'/>

Name 属性采用字段的内部名称,因此请仔细检查您正在使用的名称。

【讨论】:

  • 这确实有助于最终的答案,+1
【解决方案2】:

过去,当我遇到有趣的“一个或多个字段类型未正确安装”错误时,通常是由于我的 CAML WHERE 标准指示某个字段不是某种类型(例如,我指出实际上是查找时的值 type="Text")。

如果您从 U2U 获取 CAML 查询生成器(免费),您可以将其指向您的站点(使用 SharePoint 的内置 Web 服务)并使用其拖放设计器构建您的 CAML 查询。查询在那里工作后,只需单击“编辑”选项卡,它就会向您显示 SharePoint 期望的确切 CAML。我的猜测是你会发现一个字段类型设置不正确。安装完成后,整个过程大约需要 10 分钟。

【讨论】:

  • 这在纸面上听起来不错,但我无法通过对象模型连接到我的 SharePoint 网站(我假设这是正确的方法)。我尝试通过 Web Serives 连接,但没有填充列表。有没有其他办法?
【解决方案3】:

我在将查询语句分成两部分时发现了问题:

'ndQuery.InnerXml = "<Where><Eq><FieldRef Name ='Assigned_x0020_Employee'/><Value Type='Text'>Engineer</Value></Eq></Where>"
'ndQuery.InnerXml = "<Where><Eq><FieldRef Name ='Status'/><Value Type='Text'>New</Value></Eq></Where>"

我发现虽然 SP 列表中的一列名为“Assigned Employee”,但实际的 FieldRef Name 只是员工。当我修改代码以包含它时,错误消失了。我一直在更改值类型,而不是查看 FieldRef 名称

最终结论: “一种或多种字段类型未正确安装”错误不仅会在“值类型”不正确时返回,而且在“FieldRef Name”包含错误标签时也会返回。

最终的工作代码行:

ndQuery.InnerXml = "<Where><And><Eq><FieldRef Name ='Employee'/><Value Type='Text'>Engineer</Value></Eq><Eq><FieldRef Name='Request_x0020_Status'/><Value Type ='Text'>New</Value></Eq></And></Where>"

【讨论】:

    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多