Как удалить / удалить столбец в пользовательском списке, который вы добавили из существующих столбцов сайта? - PullRequest
1 голос
/ 13 октября 2009

У меня есть собственный список, и я добавил поле «Изображение страницы», щелкнув ссылку «Добавить из существующих столбцов сайта» на странице «Настройки» для списка. Теперь я хотел бы удалить это поле, но нажатие на имя поля на странице настроек не дает функции «Удалить».

Как удалить из настраиваемого списка в SharePoint поля, добавленные с помощью пункта меню «Добавить из существующих столбцов сайта»?

Ответы [ 3 ]

3 голосов
/ 22 октября 2009

«Изображение страницы» - это специальный вид поля SharePoint, определяемый как Герметичный . Это означает, что его нельзя удалить из пользовательского интерфейса после добавления. Однако это может быть удалено программно:

SPList list = web.Lists["CustomTest"];
SPField f = list.Fields["Page Image"];
f.Sealed = false;
f.Update();
list.Fields["Page Image"].Delete();

Для справки, поле определено в C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\PublishingResources\PublishingColumns.xml.

2 голосов
/ 14 июля 2012

Помимо запечатывания, поле может быть доступно только для чтения, скрыто и т. Д. Все эти факторы могут помешать удалению поля. Более подходящий метод удаления поля списка следующий:

public static bool RemoveField(SPField spField)
{
    if (spField == null)
    {
        WriteErrorToLog("spField is null! Please, provide a valid one");
        return false;
    }

    bool res = false;
    try
    {
        // check if it's a ReadOnly field.
        // if so, reset it
        if (spField.ReadOnlyField)
        {
            spField.ReadOnlyField = false;
            spField.Update();
        }

        // check if it's a Hidden field.
        // if so, reset it
        if (spField.Hidden)
        {
            spField.Hidden = false;
            spField.Update();
        }

        // check if the AllowDeletion property is set to false.
        // if so, reset it to true
        if (spField.AllowDeletion == null || !spField.AllowDeletion.Value)
        {
            spField.AllowDeletion = true;
            spField.Update();
        }

        // If the AllowDeletion property is set,
        // the Sealed property seems not to be examined at all.
        // So the following piece of code is commented.
        /*if(spField.Sealed)
        {
            spField.Sealed = false;
            spField.Update();
        }*/

        // If the AllowDeletion property is set,
        // the FromBaseType property seems not to be examined at all.
        // So the following piece of code is commented.
        /*if(spField.FromBaseType)
        {
            spField.FromBaseType = false;
            spField.Update();
        }*/

        // finally, remove the field
        spField.Delete();
        spField.ParentList.Update();

        res = true;
    }
    catch (Exception ex)
    {
        WriteErrorToLog(ex.Message);
    }

    return res;
}

public static bool RemoveField(SPList spList, string displayNameOrInternalNameOrStaticName)
{
    SPField spField = GetFieldByName(spList, displayNameOrInternalNameOrStaticName);
    if(spField == null)
    {
        WriteErrorToLog(string.Format("Couldn't find field {0}!", displayNameOrInternalNameOrStaticName));
        return false;
    }

    return RemoveField(spField);
}

public static void WriteErrorToLog(string errorMsg)
{
    // write error into log
}

Прочтите статью , чтобы узнать больше.

1 голос
/ 13 октября 2009
  1. Перейдите в раздел «Расширенные настройки» на странице настроек библиотеки документов.

  2. В поле «Разрешить управление типами контента» нажмите «Да» и вернитесь к настройкам библиотеки документов

  3. В новом разделе «Типы содержимого» нажмите «Документ»

  4. Щелкните по полю, которое вы хотите удалить; и вы должны увидеть кнопку «Удалить».

...