Comment avez-vous supprimer les champs d'une liste personnalisée dans SharePoint qui ont été ajoutés par l'élément de menu «Ajouter des colonnes de sites existants?
-
16-10-2019 - |
Question
J'ai une liste personnalisée, et je l'ai ajouté un champ « Page Image » en cliquant sur 'Ajouter des colonnes existantes du site de lien sur la page Paramètres de la liste. Je voudrais maintenant supprimer le champ, mais en cliquant sur le nom du champ sur les rendements des paramètres aucune fonctionnalité « Supprimer ».
La solution
"Image de" est un type particulier de champ SharePoint défini comme scellé . Cela signifie qu'il ne peut pas être retiré de l'interface utilisateur une fois ajouté. Cependant, il peut être retiré par programme:
SPList list = web.Lists["CustomTest"];
SPField f = list.Fields["Page Image"];
f.Sealed = false;
f.Update();
f.Delete();
Pour référence, le champ est défini à C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\PublishingResources\PublishingColumns.xml
.
Attribution de crédit: mon réponse sur débordement de la pile.
Autres conseils
En plus d'être scellé, un champ peut être en lecture seule, caché et etc. Tous ces facteurs pourraient empêcher le champ de la suppression. La méthode plus appropriée pour supprimer un champ de liste est la suivante:
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
}
Lire mon article Comment Suppression d'une liste de champs / colonne programme, pour en savoir plus.
J'ai vu auparavant lorsque vous ajoutez des champs que SharePoint considèrent non supprimable.
Vous devrez probablement supprimer un programme ou un outil comme SharePointManager
Que diriez-vous cacher le champ à l'aide de gérer les types de contenu?
Liste Paramètres -> Paramètres avancés -> Gérer Autoriser les types de contenu Cliquez sur le type de contenu -> cliquez sur le champ de l'image page -> Sélectionnez Masqué
- Tout d'abord aller à l'option Accueil dans la page par défaut
- Cliquez sur le nom de la liste que vous avez créé.
- Cliquez sur l'option de réglage liste dans la mise volet de l'onglet.
- Cliquez sur le nom de la colonne dans l'option Colonnes
- Ensuite, vous obtenez pour supprimer l'option. Appuyez dessus et il sera supprimé.