DataService. Обновление записи. Пример
Glossary Item Box
Общие положения
Веб-служба DataService приложения Creatio является RESTful-сервисом, т.е. поддерживает передачу состояния представления (Representational State Transfer, REST). В общем случае REST является очень простым интерфейсом управления информацией без использования каких-то дополнительных внутренних прослоек, т.е. данные не нужно преобразовывать в какой-либо сторонний формат, например, XML. В простом RESTful-сервисе каждая единица информации однозначно определяется глобальным идентификатором, таким как URL. Каждый URL, в свою очередь, имеет строго заданный формат. Однако это не всегда удобно для передачи больших массивов данных.
В DataService данные автоматичеcки могут быть сконфигурированы в различные форматы данных, такие как XML, JSON, HTML, CSV и JSV. Структура данных определяется так называемыми контрактами данных. Полный перечень контрактов данных, используемых службой DataService, изложен в статье "Веб-служба DataService".
Контракт данных UpdateQuery
Для обновления содержимого записей раздела используется контракт данных UpdateQuery. Передача непосредственно данных в службу DataService осуществляется по HTTP-протоколу при помощи POST-запроса по следующему URL:
// Формат URL для POST-запроса к DataService на обновление данных. http(s)://[Адрес приложения Creatio]/[Номер конфигурации]/dataservice/[Формат данных]/reply/UpdateQuery // Пример URL для POST-запроса к DataService на обновление данных. http(s)://example.creatio.com/0/dataservice/json/reply/UpdateQuery
Контракт данных UpdateQuery имеет иерархическую структуру с несколькими уровнями вложенности. В серверной части ядра приложения Creatio он представлен классом UpdateQuery пространства имен Terrasoft.Nui.ServiceModel.DataContract библиотеки классов Terrasoft.Nui.ServiceModel.dll. Однако для простоты восприятия иерархическую структуру контракта данных UpdateQuery удобно представить в формате объекта JSON:
{ "RootSchemaName":"[Корневая схема]", "OperationType":[Тип операции с записью], "IsForceUpdate":[Принудительное обновление], "ColumnValues":{ "Items":{ "Имя добавляемой колонки":{ "ExpressionType":[Тип выражения], "Parameter":{ "DataValueType":[Тип данных], "Value":"[Значение колонки]" } }... } }, "Filters":[Фильтры запроса] }
Основные свойства класса UpdateQuery и их возможные значения представлены в таблице 1.
Табл. 1. — Свойства класса UpdateQuery
Свойство | Тип | Описание | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
RootSchemaName | string | Строка, содержащая название корневой схемы объекта добавляемой записи. | ||||||||||
OperationType | QueryOperationType |
Тип операции с записью. Задается значением перечисления QueryOperationType пространства имен Terrasoft.Nui.ServiceModel.DataContract. Для InsertQuery устанавливается значение QueryOperationType.Insert. Значения перечисления QueryOperationType:
|
||||||||||
IsForceUpdate | bool | Признак принудительного обновления. Если имеет значение true, то сущность будет принудительно сохранена на сервере, даже если значения колонок не были изменены. По умолчанию имеет значение false. | ||||||||||
ColumnValues | ColumnValues | Содержит коллекцию значений колонок добавляемой записи. Имеет тип ColumnValues, определенный в пространстве имен Terrasoft.Nui.ServiceModel.DataContract. | ||||||||||
Filters | Filters | Коллекция фильтров запросов. Имеет тип Filters, определенный в пространстве имен Terrasoft.Nui.ServiceModel.DataContract. |
Класс ColumnValues имеет единственное свойство Items, которое определено как коллекция ключей и значений Dictionary<string, ColumnExpression>. Ключом является строка с названием добавляемой колонки, а значением — объект типа ColumnExpression, определенный в пространстве имен Terrasoft.Nui.ServiceModel.DataContract. Основные свойства класса ColumnExpression, используемые при добавлении записей, приведены в табл. 2.
Табл. 2. — Основные свойства класса ColumnExpression
Свойство | Описание | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
ExpressionType |
Тип выражения, определяющий значение, которое будет содержаться в добавляемой колонке. Задается значением перечисления EntitySchemaQueryExpressionType пространства имен Terrasoft.Core.Entities, определенного в библиотеке классов Terrasoft.Core. Для InsertQuery устанавливается значение EntitySchemaQueryExpressionType.Parameter. Значения перечисления EntitySchemaQueryExpressionType:
|
||||||||||
Parameter |
Определяет значение, которое будет содержаться в добавляемой колонке. Имеет тип Parameter, определенный в пространстве имен Terrasoft.Nui.ServiceModel.DataContract. |
Класс Parameter имеет несколько свойств, из которых только два используются для добавления записи (табл.3).
Табл. 3. — Основные свойства класса Parameter
Свойство | Описание | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DataValueType |
Тип данных значения, которое будет содержаться в добавляемой колонке. Задается значением перечисления DataValueType пространства имен Terrasoft.Nui.ServiceModel.DataContract Значения перечисления DataValueType:
|
||||||||||||||||||||||||||||||||
Value |
Объект, содержащий значение добавляемой колонки. Имеет тип Object. |
Класс Filters определен в пространстве имен Terrasoft.Nui.ServiceModel.DataContract. Подробности о свойствах этого класса и пример его использования изложены в статье "DataService. Фильтрация данных".
Экземпляр класса запроса UpdateQuery обязательно должен содержать в свойстве Filters ссылку на корректно инициализированный экземпляр класса Filters. В противном случае новые значения колонок из свойства ColumnValues будут установлены для ВСЕХ записей раздела.