2009-08-18 14 views
6

Jak dodać pole odnośnika do typu zawartości w programie SharePoint przy użyciu definicji xml? (Dostaję błędy).Dodaj pole odnośnika do typu zawartości w programie SharePoint

Rzeczy do zapamiętania: - Lista odnośników będzie istniała, gdy typ zawartości zostanie dodany do biblioteki dokumentów. - Lista odnośników zawsze będzie mieć tę samą nazwę. - Lista odnośników zawiera spację w nazwie.

To właśnie dodaliśmy do 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" 
     > 

Kiedy następnie programowo dodać typ zawartości do biblioteki dokumentów uzyskać wyjątek (bez użytecznych informacji), a następnego zalogowanego do dziennika programu sharepoint:

08/18/2009 17: 13: 39.50 w3wp.exe (0x08B8) 0x11B0 Baza danych Windows SharePoint Services 6f8g Niespodziewane Nieoczekiwane niepowodzenie wykonywania kwerendy, kod błędu 8114. Dodatkowe informacje o błędzie z SQL Server znajdują się poniżej . "Błąd podczas konwersji typu danych nvarchar na uniqueidentifier." Tekst zapytania (jeśli jest dostępny): "{? = Call proc_GetListMetaDataAndEventReceivers (?,?,?,?,?,?)}"

+0

Jak wygląda XML? Wygląda na to, że został usunięty po opublikowaniu go – Yuliy

+0

... ... ... Co jeszcze chcesz zobaczyć? – zikoziko

Odpowiedz

2

Problem polega na tym, że musisz odwołać się do identyfikatora GUID listy, a nie jej tytułu. Ponieważ prawdopodobnie nie znasz identyfikatora GUID na liście, nie możesz tego zrobić bez późniejszego wykonania niestandardowego kodu.

Nawet jeśli nie korzystasz z VSeWSS, ostatnie kroki w post dahlbyk zostały połączone, aby pokazać, jak to zrobić. Chris O'Brien zadał sobie trud zrobienia CodePlex project, który pomoże ci, jeśli nie korzystasz z VSeWSS.

+0

Nie ma potrzeby dodawania odniesienia do identyfikatora GUID listy. Dodanie odnośnika do tytułu listy, jak pokazano w Ahmedzie, jego przykład XML jest również całkowicie poprawny i rozwiązuje problem "Nie wiem GUID na przedpolu". –

1

Ok, więc nie mogłem uzyskać definicji pola XML dla typu zawartości, która zadziała dla mnie z jakiegoś powodu. Dowiedziałem się, jak to zrobić w kodzie. Rozwiązanie że pracował dla mnie jest, aby nie dodawać definicji pola w XML, zamiast dodawać go w kodzie:

  • Dodaj typ zawartości do listy (w miejscu kodu rozdzielczości, lub gdziekolwiek).
  • Dodaj do tego pola odnośnik do podanego SPWeb (w związku z czym pole jest polem internetowym, a nie polem strony)
  • Dodaj nowe łącze do typu zawartości listy.
  • Zaktualizuj typ zawartości.

Na przykład:

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

szczęście w SharePoint 2010, można to zrobić deklaratywnie przez ustawienie wszystkich wymaganych properities jak pokazano w poniższym przykładzie roboczym.

<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> 

Ważne jest, aby ustawić WebId mieć wartość „~ sitecollection” i ustawić Zastąp, aby mogło być prawdziwe.
More info

+0

Awesome, próbowałem wszystkiego innego - to działało dla mnie. Dziękuję Ci! –

+0

Zamiast używać WebId = "~ sitecollection" możesz również bezpośrednio odwoływać się do nazwy podwitryny zawierającej listę, z którą chcesz połączyć swoje pole wyszukiwania. –

+0

Czy pole wyszukiwania może być ustawione tak, aby wskazywało tę samą listę, której jest częścią? –

Powiązane problemy