2010-07-14 7 views
7

Anche se si specifica un elemento ViewField nella query GetListItems del servizio elenco di oggetti condivisi, vengono restituiti tutti i campi. Il seguente codice si basa la richiesta:Perché i criteri <ViewFields> vengono ignorati dal metodo GetListItems del servizio Elenco elenchi

XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
XmlNode query = xmlDoc.CreateNode(XmlNodeType.Element, "Query", ""); 
XmlNode viewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); 
XmlNode queryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "");  

... set query ... 

viewFields.InnerXml = "<FieldRef Name='LinkFilename' /><FieldRef Name='FileDirRef' /><FieldRef Name='FileLeafRef' />";    

queryOptions.InnerXml = "<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns><DateInUtc>TRUE</DateInUtc><Folder>Resource Management Tools</Folder><ViewAttributes Scope='Recursive' />"; 

XmlNode xmlNode = SharePointListWebService.GetListItems(
_listServiceConfigurationSettings.ListName, 
           string.Empty, 
           query, 
           viewFields, 
           null, 
           queryOptions, 
           null); 

Secondo violinista, Il risultato è il seguente busta di sapone di essere inviati al servizio di lista:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">  
     <listName>Shared Documents</listName> 
     <viewName /> 
     <query> 
     <Query xmlns=""> 
      <Where> 
      <And> 
       <Contains> 
       <FieldRef Name="FileLeafRef" /> 
       <Value Type="Text">.xls</Value> 
       </Contains> 
       <Geq> 
       <FieldRef Name="Modified" 
       IncludeTimeValue="True" /> 
       <Value Type="DateTime">2010-05-10T11:53:32Z</Value> 
       </Geq> 
      </And> 
      </Where> 
      <OrderBy> 
      <FieldRef Name="FileDirRef" /> 
      </OrderBy> 
     </Query> 
     </query> 
     <viewFields> 
     <ViewFields xmlns=""> 
      <FieldRef Name="LinkFilename" /> 
      <FieldRef Name="FileDirRef" /> 
      <FieldRef Name="FileLeafRef" /> 
     </ViewFields> 
     </viewFields> 
     <queryOptions> 
     <QueryOptions xmlns=""> 
      <IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns> 
      <DateInUtc>TRUE</DateInUtc> 
      <Folder>Resource Management Tools</Folder> 
      <ViewAttributes Scope="Recursive" /> 
     </QueryOptions> 
     </queryOptions> 
    </GetListItems> 
    </soap:Body> 
</soap:Envelope> 

e la seguente risposta di sapone restituiti dal servizio:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
     <GetListItemsResult> 
     <listitems xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
     xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
     xmlns:rs='urn:schemas-microsoft-com:rowset' 
     xmlns:z='#RowsetSchema'> 
      <rs:data ItemCount="19"> 
      <z:row ows_LinkFilename='[SENSITIVE DATA].xls' 
      ows_FileDirRef='278;#sites[SENSITIVE DATA]' 
      ows_FileLeafRef='278;#[SENSITIVE DATA].xls' 
      ows_MetaInfo='278;#Subject:SW| vti_parserversion:SR|12.0.0.6421 ContentTypeId:SW|0x0101006C2E647253A1074FB6079F08E5F2A395 _Author:SW|[SENSITIVE DATA] _Category:SW| vti_author:SR|[SENSITIVE DATA] _Comments:SW| vti_approvallevel:SR| vti_categories:VW| vti_cachedcustomprops:VX|vti_approvallevel vti_categories Subject vti_assignedto Keywords _Author _Category _Comments vti_assignedto:SR| Keywords:SW| vti_modifiedby:SR|[SENSITIVE DATA]' 
      ows__ModerationStatus='0' ows__Level='1' 
      ows_Last_x0020_Modified='278;#2010-06-29T18:55:38Z' 
      ows_ID='278' ows_owshiddenversion='53' 
      ows_UniqueId='278;#{0E51B2B1-89A7-4895-8ECC-0FE7D420470C}' 
      ows_FSObjType='278;#0' 
      ows_Created_x0020_Date='278;#2009-03-09T16:06:41Z' 
      ows_ProgId='278;#' ows_Modified='2010-06-29T18:55:37Z' 
      ows_FileRef='278;#sites[SENSITIVE DATA].xls' 
      ows_DocIcon='xls' 
      ows_Editor='262;#[SENSITIVE DATA]' />    
      </rs:data> 
     </listitems> 
     </GetListItemsResult> 
    </GetListItemsResponse> 
    </soap:Body> 
</soap:Envelope> 

Avviso l'elemento z: row ha più campi inclusi di quelli specificati nei criteri ViewFields. Ho anche impostato IncludeMandatoryColumns su false nelle opzioni di query. Ho fatto qualcosa di sbagliato o non capisco come ViewField funziona davvero come pensavo avrebbe limitato i campi, ad esempio z: attributi di riga restituiti dal servizio elenco di SharePoint.

risposta

12

Ho anche avuto problemi con questo problema. Stasera ho trovato una soluzione che sembra funzionare per me ... speriamo che sia utile anche per gli altri.

La struttura del nodo ViewFields va bene ...

<viewFields> 
    <ViewFields xmlns=""> 
     <FieldRef Name="LinkFilename" /> 
     <FieldRef Name="FileDirRef" /> 
     <FieldRef Name="FileLeafRef" /> 
    </ViewFields> 
    </viewFields> 

Il problema è probabilmente i nomi dei campi. A quanto pare, devi usare i nomi interni piuttosto che i nomi visualizzati. Un rapido & modo semplice per determinare i nomi interni è quello di andare alla pagina Impostazioni elenco per il tuo elenco e passa il mouse su ogni colonna nell'elenco. barra di stato del browser mostrerà un URL simile a questo ..

http://YOUR_SITE/_layouts/FldEdit.aspx?List=%7B12345678%2D1234%2D1234%2D1234%2D123456789012%7D&Field=INTERNAL_FIELD_NAME 

utilizzerà il nome campo interno mostrato lì per ognuno dei campi che si desidera tornare dalle GetListItems) Servizio (. Ad esempio,

<FieldRef Name="LinkFilename" /> 

.... potrebbe aver bisogno di essere scritto come ...

<FieldRef Name="Link_x0020_Filename" /> 

Almeno questo è quello che ci voleva per risolvere il problema per me. Spero possa aiutare!

+0

grazie! Ci proverò e seguirò i miei risultati. –

+0

Questo lavoro ha funzionato? Sono curioso di sapere se ci sono altri problemi che possono causare questo tipo di errori. Grazie! – GreggB

-1

Senza fare nessuna delle mie ricerche, tt sembra che stai generando il seguente nodo XML:

<viewFields> 
    <ViewFields xmlns=""> 
     <FieldRef Name="LinkFilename" /> 
     <FieldRef Name="FileDirRef" /> 
     <FieldRef Name="FileLeafRef" /> 
    </ViewFields> 
    </viewFields> 

vuoi dire di avere il vostro elemento ViewFields incorporato in un altro elemento viewFields?

+1

viewFields/ViewFields nested viene generato dal proxy del servizio Web.Durante la riproduzione della richiesta (soap post) nel fiddler ho scoperto che viewFields è facoltativo ma se rimuovo ViewFields, il server restituisce un errore soap –

+1

È richiesto nel SOAP - un design zoppo, ma è così com'è. –

1

Esiste una proprietà ViewFieldsOnly allo scopo (non l'ho ancora sperimentato).

Quando si specificano i campi impostando la proprietà ViewFields, la query recupera i dati per più di questi campi. Per ottimizzare le prestazioni, è possibile limitare i dati restituiti dalla query impostando la proprietà ViewFieldsOnly su true.

Problemi correlati