2011-11-08 15 views
5

Dodaję pola do listy programowo. Poniższy wiersz dodaje nowy field'to istniejącej listyJak ustawić wewnętrzną nazwę SPField w programie SharePoint 2010?

Lists.AddFieldToList(warrantyList, SPFieldType.Text, "internalFieldName", "ShownFieldName", "Comment", false, false, false);      

Jest to metoda, która nazywa się:

public static bool AddFieldToList(SPList list, SPFieldType fieldType, string fieldInternalName, string fieldDisplayName, string fieldDescription, bool unique, bool required, bool indexed) 
    { 
     SPField field = new SPField(list.ParentWeb.Fields, fieldType.ToString(), fieldInternalName);    
     bool success = AddFieldToList(list, field, fieldDisplayName, fieldDescription, unique, required, indexed); 
     return success; 
    } 

po pierwszym wierszu metody pole jest wypełnione dużą ilością informacji , ale bez nazwy wewnętrznej (NULL) i tytułu zawierającego "internalFieldName".

W drugiej linii następujący sposób określany jest jako

public static bool AddFieldToList(SPList list, SPField field, string fieldDisplayName, string fieldDescription, bool unique, bool required, bool indexed) 
    { 
     if (field != null && 
      (!list.Fields.Contains(field.Id))) 
     { 

      field.ReadOnlyField = false; 
      field.Title = fieldDisplayName; 
      field.Description = fieldDescription; 
      field.EnforceUniqueValues = unique; 
      field.Indexed = indexed; 
      field.Required = required; 
      list.Fields.Add(field); 
      return true; 
     } 

     return false; 
    } 

Następnie tytuł zmieniony na „ShownFieldName” (oczywiście). Ale moim celem jest posiadanie nazwy wewnętrznej "internalFieldName", która ma Displayname "ShownFieldName", więc "ShownFieldName" jest pokazane na Liście, ale mogę uzyskać dostęp do elementu przez wewnętrzną nazwę

jako field.InternalName jest readOnly: How czy mogę rozwiązać ten problem?

Odpowiedz

6

Linia ta tworzy obiekt SPField które mogłyby mieć nazwę wewnętrzną co potrzeba (displayName przekazany do constructor równa fieldInternalName):

SPField field = new SPField(list.ParentWeb.Fields, fieldType.ToString(), fieldInternalName); 

ale zanim cokolwiek zostało zapisane do bazy danych zmienić to w tej linii:

field.Title = fieldDisplayName; 

Oto rozwiązanie:

  1. Dodawanie pola do listy przechodzącej internalFieldName zarówno fieldInternalName i fieldDisplayName.
  2. Wywołanie metody SPList.Update().
  3. Uzyskaj odniesienie do pola z listy i zmień jego właściwość Title na ShownFieldName.
  4. Wywołanie metody SPField.Update().
+0

Jeszcze raz dziękuję, Marek. Pracował. –

2

Mają metodę AddFieldAsXml w SharePoint od SharePoint 2007. Jeśli to zrobisz, zyskasz większą kontrolę nad sposobem dodawania pól. Zobacz przykład w powyższym linku.

+0

Znam tę metodę, ale preferuję programowanie z "prawdziwymi" obiektami zamiast budowania ciągów. –

Powiązane problemy