2015-04-17 5 views
2

в названии говорится все. как я могу программно удалить ссылку на поле из типа контента?Удалить полевые ссылки из типа контента программным способом (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 method) должны быть явно вызван:

//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(); 
} 
+1

да что сработало! THX очень много! – Alex

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^