Программное удаление ссылки на поле из типа контента (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.

Спасибо


person Alex    schedule 17.04.2015    source источник


Ответы (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();
}
person Vadim Gremyachev    schedule 17.04.2015

мой последний рабочий код:

    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;
        }
person Alex    schedule 20.04.2015