2

我正在通过 web 服务通过 java 查询 sharepoint 上的列表。当我想获取整个列表时它工作正常,但我只想查询列表的一部分。它可以通过这样的 CAML 查询来完成:

<Query>
<Where>
   <Gt>
      <FieldRef Name='ID' />
      <Value Type='Number'>10</Value>
   </Gt>
</Where>
</Query> 

我不确定如何通过 Java 传递它。现在我正在这样做:

GetListItemsResponse.GetListItemsResult result = port.getListItems(listName, viewName, query, viewFields, rowLimit, queryOptions, webID);

其中 QUERY 对象只是 null (获取整个列表)。

我在某处读到它可以这样做:

GetListItems.Query query = new GetListItems.Query();
query.getContent().add(generateXmlNode(QueryStringHere));

但我没有 generateXmlNode 方法。

有任何想法吗?

4

3 回答 3

1

我为可能有同样问题并到达这里的人回答这个问题,即使它已经 2 岁了。

private static Object generateXmlNode(String string) throws Exception {
    DocumentBuilder docBuilder = null;
    DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
    docBuilder = dbfac.newDocumentBuilder();
    Document rootDocument = docBuilder.newDocument();
    rootDocument.setTextContent(string);
    return rootDocument.getDocumentElement();

}

在这种情况下,参数String string是 XML (CAML) 形式的查询。例如,它可以从一个属性加载:

this.query = new String(readAll(new File(this.getClass().getResource("/Query.xml").toURI())));
this.queryOptions = new String(readAll(new File( this.getClass().getResource( "/QueryOptions.xml").toURI())));

查询可能如下所示:

<Query>
    <Where>
    <And>
        <And>
            <Contains> 
                <FieldRef Name="Editor" /> 
                <Value Type="Text">Chandler</Value>
            </Contains>
            <Contains> 
                <FieldRef Name="FileRef" /> 
                <Value Type="Text">AuditDeleteTesting</Value>
            </Contains>     
        </And>
        <Eq> 
            <FieldRef Name="Created_x0020_Date" /> 
            <Value Type="DateTime">2013-09-11</Value>
        </Eq>               
    </And>      

    </Where>
</Query>

和查询选项:

<QueryOptions>
    <IncludeMandatoryColumns>TRUE</IncludeMandatoryColumns>
    <ViewAttributes Scope="RecursiveAll"/> 
    <DateInUtc>TRUE</DateInUtc> 
</QueryOptions>

如果您不熟悉 CAML 查询,我建议您使用 SharePoint 查询助手: https ://spcamlqueryhelper.codeplex.com/

我希望它有所帮助。

编辑:我忘了提及来源:http ://www.javaworld.com/article/2078906/enterprise-java/java-tip-sumption-sharepoint-web-services-with-a-java-client.html?null

于 2015-01-11T12:12:58.077 回答
0

尝试删除 [query] 根节点。查询节点将在运行时由共享点添加。那应该可以解决您的问题。

于 2012-07-25T14:47:28.480 回答
0

试试这个:

private static Object generateXmlNode(String string) throws Exception {
    DocumentBuilder docBuilder = null;
    DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
    docBuilder = dbfac.newDocumentBuilder();
    Document rootDocument = docBuilder.newDocument();
    rootDocument.setTextContent(string);
    return rootDocument.getDocumentElement();

}
于 2012-07-31T12:55:19.640 回答