====== Методы обновления данных статей ======
В данном разделе описаны методы класса [[api:dbconnector|DBConnector]] для создания, обновления и удаления статей. В качестве более удобной альтернативы рекомендуется использовать методы класса [[api:contentitem|ContentItem]].
===== AddFormToContent =====
Метод используется для создания новых и обновления существующих статей.
public int AddFormToContent(int site_id, string content_name, string status_name, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id, bool updateEmpty)
public int AddFormToContent(int site_id, string content_name, string status_name, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id)
public int AddFormToContent(int site_id, string content_name, string status_name, ref Hashtable Values, ref HttpFileCollection Files)
public int AddFormToContent(int site_id, string content_name, string status_name, ref Hashtable Values, int content_item_id)
public int AddFormToContent(int actualSiteId, int content_id, string status_name, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id, bool updateEmpty, int attribute_id)
public int AddFormToContent(int actualSiteId, int content_id, string status_name, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id, bool updateEmpty, int attribute_id, bool visible, bool archive, bool returnModified, ref DateTime modified)
=== Параметры ===
* //site_id// -- ID сайта, с которого производится вызов
* //actualSiteId// -- фактический ID сайта, в который добавляется статья
* //contentName// -- имя контента, в который добавлятся статья. Поддерживается выбор контента в формате ''SiteName.ContentName''. При этом, если такой сайт будет найден, то его идентификатор будет использован в качестве параметра //actualSiteId//, иначе будет использован параметр //site_id//. Контент не может быть виртуальным, иначе будет сгенерировано исключение.
* //content_id// -- ID контента, в который добавляется статья. Контент не может быть виртуальным, иначе будет сгенерировано исключение.
* //statusName// -- имя статуса, который должен быть присвоен статье (в большинстве случаев -- это "Published").
* //Values// -- значения полей статьи в коллекции, ключи которой должны быть сформированы с помощью функции [[api:dbconnector:other#FieldName]]
* //Files// -- коллекция файлов, переданных вместе с веб-запросом. Для web-формы ее содержимое надо взять из [[http://msdn.microsoft.com/ru-ru/library/system.web.httprequest.files.aspx|Request.Files]], иначе передать переменную со значением null.
* //content_item_id// -- ID статьи, при ненулевом значении метод работает в режиме обновления существующей статьи, а при нулевом -- в режиме добавления новой статьи. Значение по умолчанию - 0.
* //updateEmpty// -- флаг, определяющий надо ли обнулять поля, которых нет в коллекции //Values// или которые там есть, но их значения пусты. Значение по умолчанию - //true//, то есть при обновлении статьи в коллекции //Values// должны быть представлены все значения, если мы не хотим, чтобы они были сброшены. Если мы хотим обновить одно или несколько полей и задать в коллекции //Values// только их, то значение параметра должно быть //false//.
* //attribute_id// -- ID поля, при ненулевом значении позволяет обновить только одно указанное поле, при нулевом -- обычный режим обновления. Значение по умолчанию - 0.
* //visible// -- значение флага видимости для статьи. В тех версиях метода, где флаг не передается, он не обновляется. Используется в LINQ-to-SQL классах.
* //archive// -- значение флага архивации для статьи. В тех версиях метода, где флаг не передается, он не обновляется. Используется в LINQ-to-SQL классах.
* //returnModified// -- флаг, заставляющий метод вернуть дату модификации статьи в параметре //modified//. Используется в LINQ-to-SQL классах.
* //modified// -- дата модификации статьи. Возвращается, если ''returnModified == true''. Используется в LINQ-to-SQL классах.
=== Поведение ===
В папку контента сохраняются не все файлы из коллекции Files, а только те, которые корректно представлены в коллекции Values (сформированные с помощью [[api:dbconnector:other#FieldName]]).
Если сохраняемый файл существует, то будет сгенерировано измененное имя файла с числовым индексом, например ''image[1].jpg'', при этом будет подправлено соответствующее значение в коллекции //Values//.
Вне зависимости от заполнения коллекции //Files//, для при выполнении данного метода для статьи будут сгенерированы(перегенерированы) все динамические изображения.
В случае невозможности предоставить коллекцию Files, файлы необходимо сохранять вручную, используя для определения целевого пути метод [[api:dbconnector:paths#GetUrlForFileAttribute]].
Поддерживается полноценная работа с расщепленными статьями, включая Many-To-Many и Many-To-One поля. Значения таких полей должны представлять собой строку идентификаторов связанных статей, разделенных запятыми.
Метод не поддерживает отправку уведомлений. Необходимо вручную вызывать [[api:dbconnector:notify#SendNotification]] или использовать [[api:contentitem|альтернативный API]].
В методе производятся следующие проверки на сохраняемые поля:
* Тип поля (числовой, дата)
* Обязательность
* Уникальность
* Допустимая длина и маска ввода (поле типа String)
Кроме того:
* При обновлении статьи создается ее версия.
* Вся работа с БД происходит в одной транзакции.
===== UpdateContentItem =====
public int UpdateContentItem(int site_id, int content_id, ref Hashtable Values, int content_item_id)
public int UpdateContentItem(int site_id, int content_id, ref Hashtable Values, int content_item_id, bool updateEmpty)
public int UpdateContentItem(int site_id, int content_id, ref Hashtable Values, int content_item_id, bool updateEmpty, string statusName)
public int UpdateContentItem(int site_id, int content_id, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id)
public int UpdateContentItem(int site_id, int content_id, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id, bool updateEmpty)
public int UpdateContentItem(int site_id, int content_id, ref Hashtable Values, ref HttpFileCollection Files, int content_item_id, bool updateEmpty, string statusName)
Работает как [[#AddFormToContent]] в режиме обновления существующей статьи. Параметры имеют то же самое назначение.
===== UpdateContentItemField =====
public void UpdateContentItemField(int site_id, string content_name, string field_name, int content_item_id, ref Hashtable Values, ref HttpFileCollection Files)
public void UpdateContentItemField(int site_id, string content_name, string field_name, int content_item_id, ref Hashtable Values)
Работает как [[#AddFormToContent]] в режиме обновления одного поля. Параметры имеют то же самое назначение. Параметр //field_name// задает имя поля в контенте.
===== DeleteContentItem =====
public void DeleteContentItem(int content_item_id)
Удаление существующей статьи.
Метод не поддерживает отправку уведомлений. Необходимо вручную вызывать [[api:dbconnector:notify#SendNotification]] или использовать [[api:contentitem|альтернативный API]].