我通过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方法。
有什么想法吗?
答案 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/
我希望它有所帮助。
答案 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();
}