Domanda

Sto cercando di capire il miglior modo di agire, relativa agli elenchi relazionali. Ho creare diverse liste principali e secondari connessi ma sto avendo un po 'di difficoltà a capire come costruire la mia domanda CAML da entrambe le direzioni. 1. Hanno Parent - Query per i bambini 2. Hanno Child - Query per il genitore

Ho trovato esempi molto limitati. Qualcuno può mostrano esempi di quanto segue in una struttura CAML?

  1. Come query e tornare relative voci di elenco Bambino utilizzando le informazioni di Parent.
  2. Come query e restituire il Parent utilizzando le relative informazioni del bambino.

mi rendo conto la query CAML è costruito di quanto segue, ma ho davvero solo bisogno di aiuto su come collegare tutto insieme da entrambe le direzioni.

            using (SPWeb _impWeb1 = _impSite.OpenWeb(_relativeWebUrl)) {
              SPList _theList1 = _impWeb1.Lists.TryGetList(_listTitle);

              if (_theList != null) {
                SPQuery _theQuery = new SPQuery();

                _theQuery.Query = "";
                _theQuery.Joins = "";
                _theQuery.ProjectedFields = "";
                _theQuery.ViewFields = "";

                SPListItemCollection _theListItems = _theList.GetItems(_theQuery);

                if (_theListItems != null) {
                  // Do Something
                }
              }
            }
È stato utile?

Soluzione

Per chiarezza, in considerazione si dispone di un elenco di contatti personalizzato, in cui è stata sostituita la colonna Società di un colonna di ricerca , che punti alle Aziende lista:

due liste

E, ora si sta cercando di recuperare i dati da Aziende lista per colonna Società.

Ok, sì, è possibile (per essere precisier, è facile), e potrebbe essere eseguita utilizzando seguente codice:

var lookupField = (SPFieldLookup)listItem.Fields["Company"];
var companiesListGuid = new Guid(lookupField.LookupList);

var lookupFieldValue = new SPFieldLookupValue(listItem["Company"]);
var idInCompaniesList = lookupFieldValue.LookupId;

var companiesList = web.Lists[companiesListGuid];
var companyItem = companiesList.GetItemById(idInCompaniesList);

Quindi, il punto qui è, che per ottenere le informazioni di ricerca id da un valore di campo di ricerca, si dovrebbe instatiate SPFieldLookupValue oggetto. E per ottenere l'elenco di ricerca GUID, si dovrebbe lanciare il campo per SPFieldLookup .

Dopo che abbiamo questi valori, possiamo oggetto elenco facilmente instantiate e ottenere l'oggetto da esso utilizzando il metodo GetItemById.

Una volta recuperato l'oggetto, si può facilmente ottenere tutte le informazioni da essa, ad esempio, per ottenere il valore di stato, si dovrebbe scrivere:

var status = companyItem["Status"];

e così via.

Ora, la seconda parte della questione.

Si consideri, si desidera ottenere tutti gli elementi dell'elenco Contatti, dove società valore del campo è uguale a "Microsoft".

Potrebbe essere eseguita utilizzando seguente query CAML:

<Query>
  <Where>
    <Eq>
      <FieldRef Name="Company"  />
      <Value Type="Lookup">Microsoft</Value>
    </Eq>
  </Where>
</Query>

È necessario passare questa query all'elenco contatti tramite SPQuery oggetto in combinazione con il metodo SPList.GetItems .

E, se si dispone di ID della voce di ricerca (non il valore), è necessario modificare la query e utilizzare l'attributo LookupId.

<Query>
  <Where>
    <Eq>
      <FieldRef Name="Company" LookupId="TRUE" />
      <Value Type="Integer">10</Value>
    </Eq>
  </Where>
</Query>

A proposito, se non ti piace di query CAML prodotti nelle stringhe di typo-inclini, come faccio, vi consiglio di dare un'occhiata a Camlex.Net . Si tratta di un progetto ben noto, che contribuisce alla creazione di query CAML semplificare.

Altri suggerimenti

Questa non è una risposta diretta alla sua domanda, ma vorrei usare LINQ to SharePoint per accedere ai dati e quindi visualizzare generato il CAML. :)

Questa TechEd 2010 sessione potrebbe aiutare con questo approccio: Sviluppare con il riposo e LINQ in Microsoft SharePoint 2010

  • Bambini -> principale: Durante la creazione colonna di ricerca, v'è la possibilità di aggiungere i campi di relazione aggiuntivi, in questo caso non sono necessari join possiamo semplicemente fare riferimento alle colonne in ViewFields senza giunzioni
  • Parent per bambini: abbiamo bisogno di usare _theQuery.Query, non ho ancora provato questo, ma collegamento http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.joins.aspx può aiutare lì ottiene. Cercherò in un secondo momento e aggiornare la risposta
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top