Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SOAP/SPS]Query Lists(GetListItems) webservice Sharepoint?

Pagina: 1
Acties:
  • 795 views sinds 30-01-2008
  • Reageer

  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 27-11 18:34
Via de Lists webservice van SPS2003 vraag ik voor het off-line synchroniseren van documentbibliotheken een XML-bestand op. Op dit moment is er in elke bibliotheek een View nodig die op de juiste manier is opgebouwd. (M.n. het verkrijgen van alle bestanden, zonder mappenindeling is belangrijk).

Als ik nu een caml-query in mijn soap-request zet, lijkt het of de default-view altijd wordt gebruikt. M.a.w: de query heeft totaal geen invloed. Op het web is hier verdraaid (verdacht) weinig over te vinden... Iemand hier die dit wel voor elkaar heeft gekregen en de kennis wil delen?

Voor de duidelijkheid, ik ben een newbie v.w.b. CAML en SPS...

Onderstaand het request dat dus niet werkt: (ik krijg de items uit de default-view terug (submappen)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
  <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    <listName>Doc-lib</listName>
    <viewName></viewName>
    <Query>
      <Where>
        <Eq>
         <FieldRef Name="Type"/>
         <Value>0</Value>
        </Eq>
      </Where>
      <OrderBy>
      <FieldRef Name="Id" Ascending="TRUE"></FieldRef>
      </OrderBy>
    </Query>
    <ViewFields>
      <FieldRef Name="Id" />
      <FieldRef Name="DirName" />
      <FieldRef Name="LeafName" />
      <FieldRef Name="Size" />
      <FieldRef Name="Type" />
    </ViewFields>
    <QueryOptions>
      <ViewAttributes Scope="Recursive" />
    </QueryOptions>
  </GetListItems>
</soap:Body>
</soap:Envelope>

What the eyes see, and the ears hear, the mind believes...


  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 27-11 18:34
Toevoeging, tevens kickje:

Ook toevoegen van <Folder>Hoogste folder</Folder> aan de QueryOptions heeft geen effect. Net als de hele query overigens nooit effect lijkt uit te oefenen. Hij lijkt wel te worden geïnterpreteerd door de webservice, aangezien bij een opzettelijke syntaxfout, of gebruik van een niet-bestaande kolomnaam wel netjes een foutmelding terugkomt.

Het lijkt er vooralsnog op dat altijd de default view wordt teruggegeven zoals die in SPS gedefiniëerd is. Zie ik iets gigantisch over het hoofd?

Het toevoegen van een view-GUID is niet heel wenselijk, gezien die per documentbibliotheek verschilt (voor dezelfde view :? ).... Plus dat alle gebruikers dan ook die view in hun menubalk te zien krijgen (private view werkt helemaal niet voor andere users dan degene die hem heeft aangemaakt).

What the eyes see, and the ears hear, the mind believes...


  • Eriksk
  • Registratie: December 2003
  • Niet online
Heb er niet echt veel mee gedaan en ook niet direct op deze manier, maar toch een reactie: Je <viewName></viewName> is leeg...

  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 27-11 18:34
Eriksk schreef op maandag 12 november 2007 @ 09:47:
Heb er niet echt veel mee gedaan en ook niet direct op deze manier, maar toch een reactie: Je <viewName></viewName> is leeg...
Dat klopt. Maakt in deze overigens niet veel uit, omdat er maar één view is gedefiniëerd in SPS. Die is dus ook de default die automatisch wordt gebruikt als ViewName leeg is.
Ik wil alleen de parameters van de gebruikte view (query, attributes) kunnen aanpassen. En het lijkt erop dat die wijzigingen geen effect hebben, hoewel de documentatie van de webservices (op msdn) beweert dat dit zou moeten werken. Ik moet dus ergen iets heel stoms doen. Kom er alleen al 3 dagen niet uit wat dat nou is. :/

What the eyes see, and the ears hear, the mind believes...


  • Eriksk
  • Registratie: December 2003
  • Niet online
Ik roep de GetListItems methode aan van de webservice. Wellicht is het een idee om hetzlefde te doen en dan de xml te vergelijken.

Code voorbeeldje in VB.NET:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'ik gebruik een guid om de juiste list te selecteren
Dim listService As New SharepointService.Lists
listService.Credentials = System.Net.CredentialCache.DefaultCredentials
listService.Url = "http://url/_vti_bin/lists.asmx"
' creeer een nieuw xml document
Dim xmlDoc As New XmlDocument
' de query node
Dim ndQuery As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "")
' welke velden er getoond moeten worden 
Dim ndViewFields As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "")
' queryopties
Dim ndQueryOptions As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "")
ndQueryOptions.InnerXml = ""
' laat de titel zien (als deze leeg is worden er meer attribiten getoond
ndViewFields.InnerXml = "<FieldRef Name=""Title"" />"

' toon alleen de folders - gebruik hiervoor de fileleafref aangezien title niet wordt gevuld door updatelistitems
ndQuery.InnerXml = "<Where><And><Eq><FieldRef Name='FSObjType'/><Value Type='Text'>1</Value></Eq><Eq><FieldRef Name='FileLeafRef'/><Value Type='Text'>" & "testdir" & "</Value></Eq></And></Where>"

' maak verbinding en vraag de items op in xml
Dim xmlContainer As XmlNode = listService.GetListItems(guidList.ToString, Nothing, ndQuery, ndViewFields, Nothing, ndQueryOptions, Nothing)

  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 27-11 18:34
Eriksk schreef op maandag 12 november 2007 @ 12:56:
Ik roep de GetListItems methode aan van de webservice. Wellicht is het een idee om hetzlefde te doen en dan de xml te vergelijken.

Code voorbeeldje in VB.NET:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'ik gebruik een guid om de juiste list te selecteren
Dim listService As New SharepointService.Lists
listService.Credentials = System.Net.CredentialCache.DefaultCredentials
listService.Url = "http://url/_vti_bin/lists.asmx"
' creeer een nieuw xml document
Dim xmlDoc As New XmlDocument
' de query node
Dim ndQuery As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "")
' welke velden er getoond moeten worden 
Dim ndViewFields As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "")
' queryopties
Dim ndQueryOptions As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "")
ndQueryOptions.InnerXml = ""
' laat de titel zien (als deze leeg is worden er meer attribiten getoond
ndViewFields.InnerXml = "<FieldRef Name=""Title"" />"

' toon alleen de folders - gebruik hiervoor de fileleafref aangezien title niet wordt gevuld door updatelistitems
ndQuery.InnerXml = "<Where><And><Eq><FieldRef Name='FSObjType'/><Value Type='Text'>1</Value></Eq><Eq><FieldRef Name='FileLeafRef'/><Value Type='Text'>" & "testdir" & "</Value></Eq></And></Where>"

' maak verbinding en vraag de items op in xml
Dim xmlContainer As XmlNode = listService.GetListItems(guidList.ToString, Nothing, ndQuery, ndViewFields, Nothing, ndQueryOptions, Nothing)
Dit is bijna exact wat ik doe. (Heb je nodes en XML ook even overgenomen om te testen). Resultaat is steevast de standaard view... Zelfs als ik een
code:
1
2
3
4
5
6
<Where>
  <Eq>
    <FieldRef Name='FileLeafRef'/>
    <Value Type='Text'>"FOO"</Value>
  </Eq>
</Where>

opneem (ik verwacht dan géén resultaten), krijg ik gewoon de items uit de defaultview terug.

Zou je de requestXML die jouw code oplevert anders eens kunnen posten? Ik ga het bijna in namespaces zoeken nu....

What the eyes see, and the ears hear, the mind believes...

Pagina: 1