Как установить внутреннее имя для SPField в SharePoint 2010? - PullRequest
5 голосов
/ 08 ноября 2011

Я добавляю поля в список программно. Следующая строка добавляет новое поле к существующему списку

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

Этот метод называется:

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

после первой строки метода поле заполняется большим количеством информации, но без имени InternalName (NULL) и заголовка, который содержит «internalFieldName».

Во второй строке вызывается следующий метод:

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

После этого заголовок меняется на «ShownFieldName» (конечно). Но моя цель состоит в том, чтобы иметь внутреннее имя «internalFieldName» с отображаемым именем «ShownFieldName», поэтому «ShownFieldName» отображается в списке, но я могу получить доступ к элементу по внутреннему имени

как field.InternalName только для чтения: как я могу решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 09 ноября 2011

В этой строке создается объект SPField, который может иметь нужное внутреннее имя (displayName передано конструктору равно fieldInternalName ):

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

но до того, как что-либо будет сохранено в базе данных вы изменяете это в этой строке:

field.Title = fieldDisplayName;

Вот решение:

  1. Добавить поле всписок передает internalFieldName как fieldInternalName и fieldDisplayName.
  2. . Вызовите метод SPList.Update().
  3. Получите ссылку на поле из списка и измените его Title свойство для ShownFieldName .
  4. Вызов метода SPField.Update().
2 голосов
/ 09 ноября 2011

У них есть метод AddFieldAsXml в SharePoint начиная с SharePoint 2007. Если вы сделаете это, вы получите больше контроля над тем, как вы добавляете поля.См. Пример в ссылке выше.

...