2010-11-23 37 views
3

J'ai lutté toute la journée pour déboguer une requête qui filtre l'élément en fonction du champ Modifié en utilisant le service web Listes et la méthode GetListItems, pour obtenir uniquement les éléments modifiés depuis la dernière fois que j'ai vérifié.Est-ce un bug dans les requêtes de services Web WSS3.0?

Voici le paramètre de requête:

<Where> 
    <Gt> 
    <FieldRef Name="Modified" /> 
    <Value Type="DateTime" IncludeTimeValue="TRUE">2010-11-23T17:0:00Z</Value> 
    </Gt> 
</Where> 

J'ai eu du mal à comprendre pourquoi ce retour ne depuis un élément dans la liste a été clairement modifié après cette date, spécifiée en UTC. En effet, même si vous le spécifiez en UTC (également appliqué dans le paramètre options), Sharepoint le compare littéralement avec les horodatages modifiés stockés ou affichés avec les paramètres régionaux spécifiés dans les paramètres du site.

Je ne suis pas sûr d'être clair, alors voici un exemple:
Le site que j'interroge est en locale, et le dernier élément a été modifié aujourd'hui à 12:11:00, ce qui fait 17 : 12: 00Z.

I Dernière vérification des mises à jour à 16 heures GMT, donc mon paramètre de requête contiendra les éléments suivants:

<Where> 
    <Gt> 
    <FieldRef Name="Modified" /> 
    <Value Type="DateTime" IncludeTimeValue="TRUE">2010-11-23T16:00:00Z</Value> 
    </Gt> 
</Where> 

Et cela ne reviendra pas de valeur parce que sharepoint compare 16: 00: 00Z avec 12:11:00 littéralement et n'a donc pas de mises à jour après 16: 00: 00Z.

J'ai confirmé cela en plaçant 12: 10: 00Z dans la requête, et là j'obtiens l'élément de liste que je voulais. Mettez 12: 12: 00Z, et ce n'est plus dans les résultats. Donc, je suppose que ma question est, est-ce un bug dans WSS 3.0, ou est-ce que je fais quelque chose de mal? Si oui, comment puis-je faire pour corriger cela? BTW, je veux garder mes temps stockés dans UTC et ne peut pas contrôler ce que les utilisateurs font avec les paramètres de leurs sites. Existe-t-il un moyen de récupérer les paramètres régionaux utilisés par le site à l'aide des services Web?


Mise à jour: Voir Is there a way to get a Sharepoint site's locale with web services? pour la solution.

+1

Pourquoi ne pas avoir votre suggestion comme réponse? –

Répondre

1

Je ne sais pas si c'est un bug, mais j'ai trouvé une solution ici:
Is there a way to get a Sharepoint site's locale with web services?

lorsque vous avez le décalage Situés entre les paramètres régionaux et UTC du site, il suffit d'appliquer le décalage à l'heure UTC vous voulez pour filtrer par, puis insérez-le dans votre nœud de requête.

ndQuery.InnerXml = "<Where><Gt><FieldRef Name='Modified' />" + 
    "<Value Type='DateTime' IncludeTimeValue='TRUE'>" + (last_update + offset).ToString("yyyy-MM-dd") + " " + (last_update + offset).ToString("HH:mm:ss") + "</Value></Gt></Where>";