Удалить ссылку на поле из типа контента программно (CSOM)
Название говорит само за себя. Как я могу программно удалить ссылку на поле из типа содержимого?
что я пробовал до сих пор:
public void RemoveField(ClientContext ctx, Web web, ContentType type, Field field) // doesnt do anything
{
try
{
FieldLinkCollection fields = type.FieldLinks;
FieldLink remove_field = fields.GetById(field.Id);
remove_field.DeleteObject();
ctx.ExecuteQuery();
}
catch (Exception ex)
{
throw ex;
}
}
это ничего не делает (также не исключение).
я нашел другой способ на форуме:
contentType.FieldLinks.Delete(field.Title);
contentType.Update();
но метод Delete(field.Title), по-видимому, не существует в CSOM.
Спасибо
2 ответа
Решение
Поскольку тип контента изменяется, метод для обновления типа контента ( метод ContentType.Update) должен быть явно вызван:
//the remaining code is omitted for clarity..
remove_field.DeleteObject();
ctx.Update(true); //<-- update content type
ctx.ExecuteQuery();
В следующем примере показано, как удалить столбец сайта из типа контента с помощью CSOM
using (var ctx = new ClientContext(webUri))
{
var contentType = ctx.Site.RootWeb.ContentTypes.GetById(ctId);
var fieldLinks = contentType.FieldLinks;
var fieldLinkToRemove = fieldLinks.GetById(fieldId);
fieldLinkToRemove.DeleteObject();
contentType.Update(true); //push changes
ctx.ExecuteQuery();
}
Мой последний рабочий код:
public void RemoveField(ClientContext ctx, Web web, ContentType type, Field field) // doesnt do anything
{
try
{
FieldLinkCollection flinks = type.FieldLinks;
FieldLink remove_flink = flinks.GetById(field.Id);
remove_flink.DeleteObject();
type.Update(true);
ctx.ExecuteQuery();
}
catch (Exception ex)
{
throw ex;
}