Sharepoint Query的Java Web服务

时间:2012-07-25 12:33:41

标签: java sharepoint caml

我通过webservice通过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方法。

有什么想法吗?

3 个答案:

答案 0 :(得分: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 Query Helper: https://spcamlqueryhelper.codeplex.com/

我希望它有所帮助。

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

答案 1 :(得分:0)

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

答案 2 :(得分: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();

}
相关问题