2009-08-18 8 views
6

Come è possibile aggiungere un campo di ricerca a un tipo di contenuto in sharepoint utilizzando la definizione xml? (Sto ricevendo errori).Aggiungere un campo di ricerca a un tipo di contenuto in sharepoint

Cose da notare: - L'elenco di ricerca esiste quando il tipo di contenuto viene aggiunto alla raccolta documenti. - L'elenco di ricerca avrà sempre lo stesso nome. - L'elenco di ricerca ha uno spazio nel nome.

Questo è quello che ho aggiunto al xml:

<Field ID="{GUID}" 
     Type="Lookup" 
     List="$Resources:core,lists_Folder;/List%20Name" 
     ShowField="Title" 
     Name="MyLookupFieldName" 
     DisplayName="MyLookupFieldName" 
     StaticName="MyLookupFieldName" 
     Hidden="FALSE" 
     Required="FALSE" 
     Sealed="TRUE" 
     > 

Quando poi ho programatically aggiungo il tipo di contenuto per una raccolta documenti ottengo un'eccezione (senza informazioni utili), e il seguente viene registrato al registro sharepoint:

08/18/2009 17: 13: 39.50 w3wp.exe (0x08B8) 0x11B0 Database di Windows SharePoint Services 6f8g Inaspettato Errore nell'esecuzione imprevista della query, codice di errore 8114. Ulteriori informazioni sull'errore da SQL Server sono riportate di seguito . "Errore durante la conversione del tipo di dati nvarchar in uniqueidentifier." Testo della query (se disponibile): "{? = Chiama proc_GetListMetaDataAndEventReceivers (?,?,?,?,?,}}"

+0

Che aspetto ha XML? Sembra che sia stato rimosso quando lo hai postato – Yuliy

+0

... ...

risposta

2

Il problema è che è necessario fare riferimento al GUID della lista e non al suo titolo. Dato che probabilmente non conoscerai il GUID dell'elenco, non potrai farlo senza eseguire in seguito un codice personalizzato.

Anche se non si utilizza VSeWSS, gli ultimi passaggi nel post dahlbyk sono stati collegati per mostrare come eseguire questa operazione. Chris O'Brien si è preso la briga di creare un CodePlex project che ti aiuterà se non stai usando VSeWSS.

+0

Non è necessario aggiungere un riferimento all'elenco GUID. Aggiungendo un riferimento al titolo dell'elenco come mostrato in Ahmed, il suo campione XML è perfettamente valido e risolve il problema "Non conosco il GUID in prima battuta". –

1

Ok, quindi non ho potuto ottenere la definizione xml di un campo per un tipo di contenuto che funzioni per me per qualche motivo. Ho trovato come farlo in codice. La soluzione che ha funzionato per me è non aggiungere la definizione Field in xml, ma aggiungerla nel codice:

  • Aggiungere il tipo di contenuto all'elenco (nel codice di definizione del sito o dovunque).
  • Aggiungere una ricerca di campo al SPWeb specificato (quindi il campo è un campo Web? Piuttosto che un campo sito)
  • Aggiungere un nuovo collegamento di campo al tipo di contenuto dell'elenco.
  • Aggiorna il tipo di contenuto.

Ad esempio:

SPContentType myContentType = myWeb.Site.RootWeb.ContentTypes["MyContentType "]; 
myLib.ContentTypes.Add(myContentType); 

myContentType = myLib.ContentTypes["MyContentType "]; 

myWeb.Fields.AddLookup("MyLookupFieldName", myWeb.Lists["MyLookupListName"].ID, false); 
SPFieldLink myFIeldLink = new SPFieldLink(myWeb.Fields["MyLookupFieldName"]); 
myContentType.FieldLinks.Add(myFIeldLink); 
myContentType.Update(); 
9

Per fortuna, in SharePoint 2010, è possibile fare questo in modo dichiarativo impostando tutti properities richieste come mostrato nel seguente esempio di lavoro.

<Field Type="Lookup" DisplayName="Link Type" Description="Represents link type." 
Required="TRUE" EnforceUniqueValues="FALSE" List="Lists/Links Types" WebId="~sitecollection" 
Overwrite="TRUE" PrependId="TRUE" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE" 
Group="Research Links Columns" ID="{a15e9fa2-4ea0-41f1-a583-b21d53cf72d3}" 
SourceID="{30650f6f-fbb8-4acc-a935-29745f5d3c59}" StaticName="Link_x0020_Type" 
Name="Link_x0020_Type" Hidden="FALSE" ReadOnly="FALSE"></Field> 

E 'importante impostare WebID avere un valore di "~ sitecollection" e impostare sovrascrittura per essere vero.
More info

+0

Fantastico, ho provato tutto il resto, questo ha funzionato per me. Grazie! –

+0

Invece di usare WebId = "~ sitecollection" puoi anche fare riferimento direttamente al nome di un sito secondario contenente l'elenco con cui vuoi collegare il campo di ricerca. –

+0

può essere impostato il campo di ricerca per riferirsi alla stessa lista di cui fa parte? –

Problemi correlati