====== Методы обновления данных статей ====== В данном разделе описаны методы класса [[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]].