2009-03-02 6 views
8

Ciao Sto sviluppando utilizzando lo spazio dei nomi di SharePoint e mi sono imbattuto nel seguente errore quando provo a recuperare una colonna URL da uno dei miei lsit.Errore elenco SharePoint: "Il valore non rientra nell'intervallo previsto"

"Value does not fall within the expected range" 

Tutto quello che sto facendo è:

item["URL"] 

Qualcuno può dirmi cosa posso fare?

+0

In quale lingua stai usando? –

risposta

0

Questo di solito significa che "URL" non è un campo nell'elenco.

Se si tratta di una colonna di InfoPath promossa, provare a disattivare e riattivare il modello di modulo sul sito. Ho notato che devo farlo ogni volta che aggiungo un nuovo campo promosso a un modello di infopath.

+0

È nella lista ... –

+0

Potrebbe essere nullo sul particolare 'item'? – vapcguy

1

Per ottenere l'URL di un SPListItem, utilizzare Item.Url.

+0

Non l'URL che sto cercando, sto cercando un URL di colonna che ho creato. –

+0

Se si tratta di una colonna di InfoPath promossa, provare a disattivare e riattivare il modello di modulo sul sito. Ho notato che devo farlo ogni volta che aggiungo un nuovo campo promosso a un modello di infopath. – Tundey

8

L'errore indica sicuramente che il campo non può essere trovato.

Eseguire il debug del processo e controllare la proprietà ListItem.Fields.SchemaXML per trovare il suo nome interno, potrebbe essere salvato internamente come qualcosa di diverso da URL. È inoltre possibile utilizzare il seguente metodo per ottenere un valore di elemento della lista.

SPField l_field = l_item.Fields.GetField("URL"); 
string l_fieldValue = l_item[l_field.Id].ToString(); 

Il metodo GetField sembra per un campo da entrambe DisplayName & InternalName.

+0

Raccomando SharePoint Manager per osservare lo schema xml e altre cose divertenti in SharePoint – Nat

+2

Due punti: non dimenticare l'enumerazione SPBuiltInFieldId e assicurati che stai utilizzando la versione SPQuery di GetItems che includi i campi che desideri nella parte della query –

+1

Quindi, perché non è possibile condividere semplicemente "campo non trovato" o qualcosa del genere? forse sono solo io, ma questi messaggi di errore sono frustranti. sembra che stiano solo facendo esplodere le eccezioni per il loro codice e poi lascia che il programmatore indovini ... – osiris

1
public static string GetItemURLValue(SPListItem item, string fieldName) 
    { 
     string exit = ""; 
     SPFieldUrlValue link = new SPFieldUrlValue(item[fieldName].ToString()); 
     exit = link.Url; 
     return exit; 
    } 
0

Esiste un metodo speciale per il recupero degli URL. Prova questo:

SPListItem li = ... 
SPFieldUrlValue fuv = new SPFieldUrlValue(li[strFieldName].ToString()); 
return fuv.Url; 
+1

Scusa, vedo che Ryan ha pubblicato una soluzione simile. – strongopinions

0

Il mio è un'applicazione Windows. Avevo questa eccezione dopo aver creato il set up e provato a distribuire.

La mia applicazione doveva scrivere in Excel e quindi salvarla. Ho usato il riferimento del componente COM 'Microsoft Excel 11.0 Object'. Ho notato che quando aggiungo questo riferimento in realtà 3 dll appaiono nella mia lista di riferimento.

  1. Microsoft.Office.Core
  2. Excel
  3. VBIDE

ho tolto il riferimento 'VBIDE' e il mio problema è risolto.

0

Se è solo un nome di colonna e in "Una riga di testo" formato, che dire:

item["URL"] != null ? item["URL"].ToString() : "Not Found";