Использование API для объектов доменов
Клиент, содержащийся в пакете, позволяет работать с объектами (экземплярами сущностей) доменов с использованием описанных ниже методов.
Методы API для работы с объектами доменов включают:
-
Получение информации — извлечение данных об отдельных объектах и их связях, а также о списках объектов с фильтрацией по атрибутам и связям.
-
Управление объектами — создание, полное обновление, частичное изменение и удаление объектов.
Описания и примеры приведены для TypeScript (среда выполнения Deno) и Python.
|
При использовании методов автоматически передается параметр |
Подготовка клиента для работы с объектами
Чтобы работать с объектами доменов с помощью пакета SDK, импортируйте его:
import * as sdk from '@playbooks/sdk'
...
export async function main() {
...
const v = await sdk.cms.<method_name>(<arg_1>, <arg_2>, ..., <arg_m>)
console.log(v)
...
}
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
...
def main() {
...
client = CmsClient.initialize()
v = client.<method_name>(<arg_1>, <arg_2>, ..., <arg_m>)
print(v)
...
}
Здесь:
-
<method_name>: имя используемого метода; -
<arg_N>: параметры метода.
Получение данных об объекте (get)
Метод используется для получения определенного объекта.
get({
domainId: <domain_id>, // string
entityId: <entity_id>, // string
id: <object_id>, // string
refFields: <reference_attributes>, // string[] | undefined
})
get(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
id=<object_id>, # str
ref_fields=<reference_fields> # List[str] | None
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
<object_id>: идентификатор объекта (строка); -
<reference_fields>(необязательный): дополнительные поля, которые нужно включить в ответ. Это поля объектов, на которые ссылаются атрибуты типа Reference (массив строк видаrefAttributeId.attributeId).
Метод get возвращает следующие данные:
-
id: идентификатор объекта CMS. -
domain_id: идентификатор домена CMS. -
entity_id: идентификатор сущности. -
values: атрибуты объекта и их значения. -
tenant_id: идентификатор тенанта. -
created_at: дата создания объекта. -
created_by: идентификатор пользователя, создавшего объект. -
updated_at: дата последнего изменения объекта. -
updated_by: идентификатор пользователя, который в последний раз изменил объект. -
version: версия объекта. -
label: полеlabelобъекта (отображаемое название).
Примеры получения данных об объекте
Пример скрипта с get в TypeScript
id: get_object_in_cms_ts
name: 'get_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
export async function main() {
try {
// Вызов функции получения объекта с передачей objectId, domainId и entityId.
const cmsObject = await sdk.cms.get({ domainId, entityId, id: objectId })
// Вывод полученного объекта в консоль.
console.log(cmsObject)
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при получении объекта.
console.log(error)
}
}
Пример скрипта с get в Python
id: get_object_in_cms_py
name: get_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
# Инициализация переменных domain_id, entity_id и object_id - id домена, сущности и объекта.
domain_id = 'example.com'
entity_id = 'Person'
object_id = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
def main():
try:
client = CmsClient.initialize()
cms_object = client.get(id=object_id, domain_id=domain_id, entity_id=entity_id) # Получение объекта по указанному id.
print('Print object:') # Вывод объекта в консоль.
print(cms_object)
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при получении объекта.
print('An exception occurred:', error)
Получение данных о связях объекта (find_object_links)
Метод используется для получения массива связей объекта. Фильтры для уточнения запроса, порядок сортировки и количество выводимых результатов задаются с помощью параметров.
find_object_links({
domainId: <domain_id>, // string
entityId: <entity_id>, // string
id: <object_id>, // string
linkRequests: [
{
domainId: <domain_id>, // string
linkageId: <linkage_id>, // string
filterLink: {
conditions: <conditions>, // string | undefined
linkIds: <link_ids> // string[] | undefined
objectIds: <object_ids> // string[] | undefined
},
side: <side_number>, // 1 | 2 | undefined
sorting: {
order: <order_dir>, // 'asc' | 'desc'
orderBy: <order_rule>, // string
},
pagination: {
limit: <limit>, // number
offset: <offset>, // number | undefined
},
refFields: <reference_fields>, // string[] | undefined
},
...,
],
})
find_object_links(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
id=<object_id>, # str
link_requests=[
LinkRequest(
domain_id=<domain_id>, # str
linkage_id=<linkage_id>, # str
filter_link=FilterLink(
conditions=<conditions>, # str | None
link_ids=<link_ids>, # List[str] | None
object_ids=<object_ids> # List[str] | None
),
side=<side_number>, # 1 | 2 | None
sorting=Sorting(
Order.<order_dir>, # Desc | Asc
<order_rule> # str
),
pagination=Pagination(
<limit>, # int
<offset> # int | None
),
ref_fields=<reference_fields>, # List[str] | None
),
...,
]
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
<object_id>: идентификатор объекта (строка); -
массив запросов для фильтрации связей объекта. Каждый запрос включает:
-
<domain_id>: идентификатор домена (строка); -
<linkage_id>: идентификатор связи в домене (строка); -
настройки фильтрации списка связанных объектов (необязательный блок):
-
<conditions>(необязательный): условие фильтрации в виде строки, содержащей JSON в формате запросов MikroORM (строка); -
<link_ids>(необязательный): список идентификаторов связей (массив строк); -
<object_ids>(необязательный): список идентификаторов объектов (массив строк);
-
-
<side_number>(обязателен только при симметричной направленной связи): сторона связи (число,1или2); -
настройки сортировки списка по данным объектов на другой стороне связи (необязательный блок):
-
<order_dir>: порядок сортировки ('asc'/Asc— по возрастанию или'desc'/Desc— по убыванию); -
<order_rule>: идентификатор одного из правил сортировки, определенного в полеsortingдля сущности на другой стороне связи (строка);
-
-
ограничение количества выводимых результатов (необязательный блок):
-
<limit>: максимальное количество записей в ответе (число); -
<offset>(необязательный): порядковый номер первой записи, начиная с которой выводится ответ (число);
-
-
<reference_fields>(необязательный): дополнительные поля, которые нужно включить в ответ. Это поля объектов, на которые ссылаются атрибуты типа Reference сущности на другой стороне связи (массив строк видаrefAttributeId.attributeId).
-
Примеры получения данных о связях объекта
В приведенных примерах скрипт запрашивает список связей типа ProjectContribution указанного объекта Person. У объектов на другой стороне связи значение поля priority должно быть равным high. Запрос возвращает результаты отсортированными в порядке возрастания согласно правилу projectName, указанному в объектах на другой стороне связи.
Пример скрипта с find_object_links в TypeScript
id: find_object_links_ts
name: SDK CMS Find Object Links
version: 0.0.2
type: script
tags: [links]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objId = '694aa0c4-70c9-4837-9beb-720535c44eb4'
export async function main() {
try {
// Вызов функции получения связей объекта с передачей objId, domainId и entityId.
const findObjectLinks = await sdk.cms.find_object_links({
domainId,
entityId,
id: objId,
linkRequests: [
{
domainId: 'example.com',
filterLink: {
conditions: '{"$or":[{"priority":{"$eq":"high"}}]}',
},
linkageId: 'ProjectContribution',
sorting: {
order: 'asc',
orderBy: 'projectName',
},
},
],
})
// Вывод полученных связей объекта в консоль.
console.log(findObjectLinks)
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при получении связей объекта.
console.log(e)
}
}
Пример скрипта с find_object_links в Python
id: find_object_links_py
name: SDK CMS Find Object Links
version: 0.0.2
tags: [links]
type: script
source: !py |
from playbooks.cms import FilterLink, LinkRequest, CmsClient, Sorting, Order
domain_id = 'example.com'
entity_id = 'Person'
object_id = '694aa0c4-70c9-4837-9beb-720535c44eb4'
def main():
client = CmsClient.initialize()
filter_link = FilterLink(
conditions='{\"$or\":[{\"priority\":{\"$eq\":\"high\@}}]}'
)
sorting = Sorting(Order.Asc, 'projectName')
link_request = LinkRequest(
domain_id='example.com',
linkage_id='ProjectContribution',
filter_link=filter_link,
sorting=sorting
)
res = client.find_object_links(id=object_id, domain_id=domain_id, entity_id=entity_id, link_requests=[link_request])
print(res[0].id)
print(res[0].values)
Получение списка объектов (list)
Метод используется для получения отфильтрованного и отсортированного массива необходимых объектов. Фильтры для уточнения запроса, порядок сортировки и количество выводимых результатов задаются с помощью параметров.
list({
domainId: <domain_id>, // string
entityId: <entity_id>, // string
filter: {
conditions: <conditions>, // string | undefined
ids: <object_ids>, // string[] | undefined
query: <query>, // string | undefined
links: {
<operator>: [
{
domainId: <domain_id>, // string
linkageId: <linkage_id>, // string
ids: <link_ids>, // string[] | undefined
object: {
conditions: <links_conditions>, // string | undefined
ids: <linked_object_ids> // string[] | undefined
},
side: <side_number> // 1 | 2 | undefined
},
...,
]
},
},
sorting: {
order: <order_dir>, // 'asc' | 'desc'
orderBy: <order_rule>, // string
},
pagination: {
limit: <limit>, // number
offset: <offset>, // number | undefined
},
refFields: <reference_fields>, // string[] | undefined
})
list(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
filter=Filter(
conditions=<conditions>, # str | None
ids=<object_ids>, # str | None
query=<query>, # str | None
links=Links(
operator=<operator>, # str
links=[
Link(
domain_id=<domain_id>, # str
linkage_id=<linkage_id>, # str
ids=<link_ids>, # List[str] | None
object=FilterLink(
conditions=<links_conditions>, # str | None
ids=<linked_object_ids>, # List[str] | None
),
side=<side_number>, # 1 | 2 | None
),
...
]
),
),
sorting=Sorting(
Order.<order_dir>, # Desc | Asc
<order_rule> # str
),
pagination=Pagination(
<limit>, # int
<offset> # int | None
),
ref_fields=<reference_fields>, # List[str] | None
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
настройки фильтрации списка (необязательный блок):
-
<conditions>(необязательный): условие фильтрации в виде строки, содержащей JSON в формате запросов MikroORM (строка); -
<object_ids>(необязательный): список идентификаторов требуемых объектов (массив строк); -
<query>(необязательный): запрос для поиска по атрибутам сущностей, на которые ссылается полеlabel, находящееся в полеentitiesсхемы домена (строка); -
запрос для фильтрации по связям объектов, который включает:
-
<operator>: логический операторand(все перечисленные условия должны быть выполнены) илиor(достаточно выполнения хотя бы одного условия из перечня); -
<domain_id>: идентификатор домена (строка); -
<linkage_id>: идентификатор связи в домене (строка); -
<link_ids>(необязательный): список идентификаторов связей (массив строк); -
<links_conditions>(необязательный): условие фильтрации в виде строки, содержащей JSON в формате запросов MikroORM (строка); -
<linked_object_ids>(необязательный): список идентификаторов связанных объектов (массив строк); -
<side_number>(обязателен только при симметричной направленной связи): сторона связи (число,1или2);
-
-
-
настройки сортировки списка (необязательный блок):
-
<order_dir>: порядок сортировки ('asc'/Asc— по возрастанию или'desc'/Desc— по убыванию); -
<order_rule>: идентификатор одного из правил сортировки, определенного в полеsortingсущности (строка);
-
-
ограничение количества выводимых результатов (необязательный блок):
-
<limit>(обязателен, если ограничение указано): максимальное количество записей в ответе (число); -
<offset>(необязательный): порядковый номер первой записи, начиная с которой выводится ответ (число);
-
-
<reference_fields>(необязательный): дополнительные поля, которые нужно включить в ответ. Это поля объектов, на которые ссылаются атрибуты типа Reference (массив строк видаrefAttributeId.attributeId).
Примеры получения списка объектов
В приведенных примерах скрипт запрашивает список экземпляров сущности Person, которые имеют указанные идентификаторы объектов и атрибут department со значением IT department. Запрос должен вернуть не более 10 результатов, отсортированных согласно правилу fullName в порядке возрастания.
Пример скрипта с list в TypeScript
id: list_object_in_cms_ts
name: 'list_object_in_cms_ts'
version: 0.0.1
type: script
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId и entityId.
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Вызов функции получения объекта с передачей domainId и entityId.
const cmsObjects = await sdk.cms.list({
domainId,
entityId,
filter: {
conditions: '{\"$or\":[{\"department\":{\"$eq\":\"IT department\"}}]}',
ids: [
'a1b2c3d4-5678-90ab-cdef-1234567890ab',
'f1e2d3c4-b567-89a0-bcde-0987654321ff',
...,
],
},
pagination: {
limit: 10,
offset: 0,
},
sorting: {
order: 'asc',
orderBy: 'fullName',
},
})
// Вывод полученных объектов в консоль.
console.log(cmsObjects)
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при получении объектов.
console.log(e)
}
}
Пример скрипта с list в Python
id: list_object_in_cms_py
name: list_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
# Инициализация переменных domain_id и entity_id - id домена и сущности.
domain_id = 'example.com'
entity_id = 'Person'
def main():
try:
client = CmsClient.initialize()
cmsObjects = client.list(
domain_id=domain_id,
entity_id=entity_id,
filter=Filter(
'{\"$or\":[{\"department\":{\"$eq\":\"IT department\"}}]}',
[
'a1b2c3d4-5678-90ab-cdef-1234567890ab',
'f1e2d3c4-b567-89a0-bcde-0987654321ff',
...,
],
None),
sorting=Sorting(Order.Asc, 'fullName'),
pagination=Pagination(10, 0)
) # Получение списка объектов с указанными параметрами.
# Вывод списка объектов в консоль.
print('print objects:')
for obj in cmsObjects:
print(obj)
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при получении списка объектов.
print('An exception occurred:', error)
Примеры фильтрации по связям
В примерах приведены значения поля filter для фильтрации полученных данных по связям.
{
'links': {
'and': [
{
'domainId': 'example.com',
'linkageId': 'ProjectContribution',
'object': {
'conditions': '{\"$none\":{}}'
},
'side': 2
}
]
}
}
{
'links': {
'and': [
{
'domainId': 'example.com',
'linkageId': 'ProjectContribution',
'object': {
'conditions': '{\"$none\":{\"id\":\"9b2f8822-b932-44a7-991b-3cb432cd6b98\"}}' // Условие фильтрации, здесь '9b2f8822-b932-44a7-991b-3cb432cd6b98' -- идентификатор объекта, с которым у возвращенных объектов не должно быть связей.
},
'side': 2
}
]
}
}
{
'links': {
'and': [
{
'domainId': 'example.com',
'linkageId': 'ProjectContribution',
'object': {
'conditions': '{\"$some\":{\"id\":\"9b2f8822-b932-44a7-991b-3cb432cd6b98\"}}' // Условие фильтрации, здесь '9b2f8822-b932-44a7-991b-3cb432cd6b98' -- идентификатор объекта, с которым у возвращаемых объектов должна быть хотя бы одна связь.
},
'side': 2
}
]
}
}
name равно 'Ivan'{
'links': {
'and': [
{
'domainId': 'example.com',
'linkageId': 'ProjectContribution',
'object': {
'conditions': '{\"$some\":{\"name\":\"Ivan\"}}'
},
'side': 2
}
]
}
}
name, равным 'Ivan'{
'links': {
'and': [
{
'domainId': 'example.com',
'linkageId': 'ProjectContribution',
'object': {
'conditions': '{\"$none\":{\"name\":\"Ivan\"}}'
},
'side': 2
}
]
}
}
name, равным 'Ivan'{
'links': {
'and': [
{
'domainId': 'example.com',
'linkageId': 'ProjectContribution',
'object': {
'conditions': '{\"$every\":{\"name\":\"Ivan\"}}'
},
'side': 2
}
]
}
}
Создание объекта (create)
Метод используется для создания объекта. Набор атрибутов объекта и их значения задаются с помощью параметров.
create({
domainId: <domain_id>, // string
entityId: <entity_id>, // string
values: <values>, // Map<string, any>
})
create(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
values=<values>, # str
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
<values>: набор пар "ключ — значение" с атрибутами объекта и их значениями (в TypeScript — коллекция Map, в Python — JSON-объект в виде строки).
Примеры создания объекта
Приведенные примеры для TypeScript отличаются способом передачи значений:
-
В первом примере для создания Map используется метод
Object.entries(). -
Во втором примере данные сохраняются в
mapForCreateкак массив массивов вида['valueAttribute','value'], гдеvalueAttribute— это атрибут из схемы домена,value— значение атрибута. -
В третьем примере каждая пара атрибутов передается в отдельном вызове метода
mapForCreate.set().
Пример скрипта с create в TypeScript (Object.entries())
id: create_object_in_cms_ts_entries
name: 'create_object_in_cms_ts_entries'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Создание Map для передачи данных в функцию создания объекта.
const mapForCreate = new Map<string, any>(
Object.entries({
department: 'IT department',
mail: 'mail@example.com',
...
}),
)
// Вызов функции создания объекта с передачей domainId, entityId и mapForCreate.
const cmsObjectToBeCreated = await sdk.cms.create({ domainId, entityId, values: mapForCreate })
// Вывод созданного объекта в консоль.
console.log(cmsObjectToBeCreated)
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при создании объекта.
console.log(e)
}
}
Пример скрипта с create в TypeScript (массив массивов значений)
id: create_object_in_cms_ts_arr
name: 'create_object_in_cms_ts_arr'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Создание Map для передачи данных в функцию создания объекта.
const mapForCreate = new Map<string, any>([
['mail','mail@example.com'],
['department','IT department'],
...
])
// Вызов функции создания объекта с передачей domainId, entityId и mapForCreate.
const cmsObjectToBeCreated = await sdk.cms.create({ domainId, entityId, values: mapForCreate })
// Вывод созданного объекта в консоль.
console.log(cmsObjectToBeCreated)
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при создании объекта.
console.log(e)
}
}
Пример скрипта с create в TypeScript (set)
id: create_object_in_cms_ts_set
name: 'create_object_in_cms_ts_set'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId и entityId.
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Создание Map для передачи данных в функцию создания объекта.
const mapForCreate = new Map<string, any>()
mapForCreate.set('mail', 'mail@example.com')
mapForCreate.set('department', 'IT department')
...
// Вызов функции создания объекта с передачей domainId, entityId и mapForCreate.
const cmsObjectToBeCreated = await sdk.cms.create({ domainId, entityId, values: mapForCreate })
// Вывод созданного объекта в консоль.
console.log(cmsObjectToBeCreated)
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при создании объекта.
console.log(e)
}
}
Пример скрипта с create в Python
id: create_object_in_cms_py
name: create_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
# Инициализация переменных domain_id и entity_id - id домена и сущности.
domain_id = 'example.com'
entity_id = 'Person'
def main():
try:
client = CmsClient.initialize()
id = client.create(domain_id=domain_id, entity_id=entity_id, values='{'mail':'mail@example.com', 'department':'IT department', ...}').id # Создание объекта с указанными параметрами.
print('Object created') # Вывод сообщения об успешном создании объекта.
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при создании объекта.
print('An exception occurred:', error)
Примеры массового создания объектов
В приведенных примерах для массового создания экземпляров сущностей используется массив объектов с атрибутами и их значениями. Массив обрабатывается циклом, который поочередно вызывает метод create для каждого объекта.
Пример скрипта с массовым созданием объектов в TypeScript
id: array_create_object_in_cms_ts
name: 'array_create_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Создание массива для передачи данных в функцию создания объекта.
const objectsData = [
{ mail: 'mail@example.com', department: 'IT department', ... },
{ mail: 'mail2@example.com', department: 'Sales department', ... },
...,
]
for (const item of objectsData) {
const mapForCreate = new Map(Object.entries(item))
// Вызов функции создания объекта с передачей domainId, entityId и mapForCreate.
const cmsObjectToBeCreated = await sdk.cms.create({ domainId, entityId, values: mapForCreate })
// Вывод созданного объекта в консоль.
console.log(cmsObjectToBeCreated)
}
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при создании объекта.
console.log(e)
}
}
Пример скрипта с массовым созданием объектов в Python
id: array_create_object_in_cms_py
name: array_create_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
import json
# Инициализация переменных domain_id и entity_id - id домена и сущности.
domain_id = 'example.com'
entity_id = 'Person'
def main():
try:
client = CmsClient.initialize()
# Массив данных для создания объектов.
objects_data = [
{ 'mail': 'mail@example.com', 'department': 'IT department', ... },
{ 'mail': 'mail2@example.com', 'department': 'Sales department', ... },
...,
]
for item in objects_data:
json_data = json.dumps(item)
# Создание объекта с указанными параметрами.
object_id = client.create(domain_id=domain_id, entity_id=entity_id, values=json_data).id
print(f'Object created with ID: {object_id}')
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при создании объекта.
print('An exception occurred:', error)
Полное обновление объекта (update)
Метод используется для полного изменения набора атрибутов и значений объекта с сохранением его идентификатора.
update({
domainId: <domain_id>, // string
entityId: <entity_id>, // string
id: <object_id>, // string
values: <values>, // Map<string, any>
version: <version>, // string | undefined
})
update(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
id=<object_id>, # str
values=<values>, # str,
version=<version>, # int | None
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
<object_id>: идентификатор объекта (строка); -
<values>: набор пар "ключ — значение" с атрибутами объекта и их значениями (в TypeScript — коллекция Map, в Python — JSON-объект в виде строки); -
<version>(необязательный): версия объекта, используемая для оптимистической блокировки записи (в TypeScript — строка, в Python — целое число).
|
При обновлении объекта в поле Если передана версия, отличающаяся от текущей, метод вернет ошибку, и обновление выполнено не будет. Это ограничение предотвращает одновременное обновление одного и того же объекта несколькими скриптами. |
Примеры обновления объекта
Приведенные примеры для TypeScript отличаются способом передачи значений:
-
В первом примере для создания Map используется метод
Object.entries(). -
Во втором примере данные сохраняются в
mapForUpdateкак массив массивов вида['valueAttribute','value'], гдеvalueAttribute— это атрибут из схемы домена,value— значение атрибута. -
В третьем примере каждая пара атрибутов передается в отдельном вызове метода
map.set().
Пример скрипта с update в TypeScript (Object.entries())
id: update_object_in_cms_ts_arr
name: 'update_object_in_cms_ts_arr'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
export async function main() {
try {
// Создание Map для передачи данных в функцию обновления объекта.
const mapForUpdate = new Map<string, any>(
Object.entries({
mail: 'mail@example.com',
department: 'IT department',
...
})
)
// Вызов функции обновления объекта с передачей objectId, domainId, entityId и mapForUpdate.
const cmsObjectToBeUpdated = await sdk.cms.update({ domainId, entityId, id: objectId, values: mapForUpdate })
// Вывод обновленного объекта в консоль.
console.log(cmsObjectToBeUpdated)
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при обновлении объекта.
console.log(error)
}
}
Пример скрипта с update в TypeScript (массив массивов значений)
id: update_object_in_cms_ts_arr
name: 'update_object_in_cms_ts_arr'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
export async function main() {
try {
// Создание Map для передачи данных в функцию обновления объекта.
const mapForUpdate = new Map<string, any>([
['mail', 'new_mail@example.com'],
['department', 'IT department'],
...
])
// Вызов функции обновления объекта с передачей objectId, domainId, entityId и mapForUpdate.
const cmsObjectToBeUpdated = await sdk.cms.update({ domainId, entityId, id: objectId, values: mapForUpdate })
// Вывод обновленного объекта в консоль.
console.log(cmsObjectToBeUpdated)
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при обновлении объекта.
console.log(error)
}
}
Пример скрипта с update в TypeScript (set)
id: update_object_in_cms_ts_set
name: 'update_object_in_cms_ts_set'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
export async function main() {
try {
// Создание Map для передачи данных в функцию обновления объекта.
const map = new Map<string, any>()
map.set('mail', 'new_mail@example.com')
map.set('department', 'IT department')
...
// Вызов функции обновления объекта с передачей objectId, domainId, entityId и map.
const cmsObjectToBeUpdated = await sdk.cms.update({ domainId, entityId, id: objectId, values: map })
// Вывод обновленного объекта в консоль.
console.log(cmsObjectToBeUpdated)
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при обновлении объекта.
console.log(error)
}
}
Пример скрипта с update в Python
id: update_object_in_cms_py
name: update_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
# Инициализация переменных domain_id, entity_id и object_id - id домена, сущности и объекта.
domain_id = 'example.com'
entity_id = 'Person'
object_id = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
def main():
try:
client = CmsClient.initialize()
client.update(id=object_id, domain_id=domain_id, entity_id=entity_id, values='{'mail':'new_mail@example.com', 'department':'IT department', ... }') # Обновление объекта с указанными параметрами и новым значением атрибута.
cms_object = client.get(id=object_id, domain_id=domain_id, entity_id=entity_id) # Получение обновленного объекта.
print('Print updated object:') # Вывод сообщения об успешном обновлении объекта и его значений.
print(cms_object)
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при обновлении объекта.
print('An exception occurred:', error)
Примеры массового обновления объектов
В приведенных примерах для массового обновления экземпляров сущностей используется массив объектов с атрибутами и их значениями. Массив обрабатывается циклом, который поочередно вызывает метод update для каждого объекта.
Пример скрипта с массовым обновлением объектов в TypeScript
id: array_update_object_in_cms_ts
name: 'array_update_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Создание массива для передачи данных в функцию обновления объекта.
const objectsData = [
{ id: 'a1b2c3d4-5678-90ab-cdef-1234567890ab', values: { mail: 'new_mail@example.com', department: 'IT department', ..., } },
{ id: 'f1e2d3c4-b567-89a0-bcde-0987654321ff', values: { mail: 'new_mail2@example.com', department: 'Sales department', ..., } },
...,
]
for (const item of objectsData) {
const mapForUpdate = new Map(Object.entries(item.values))
// Вызов функции обновления объекта с передачей domainId, entityId и mapForUpdate.
const cmsObjectToBeUpdated = await sdk.cms.update({ domainId, entityId, id: item.id, values: mapForUpdate })
// Вывод обновленного объекта в консоль.
console.log(cmsObjectToBeUpdated)
}
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при обновлении объекта.
console.log(e)
}
}
Пример скрипта с массовым обновлением объектов в Python
id: array_update_object_in_cms_py
name: array_update_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
import json
# Инициализация переменных domain_id и entity_id - id домена и сущности.
domain_id = 'example.com'
entity_id = 'Person'
def main():
try:
client = CmsClient.initialize()
# Массив данных для обновления объектов.
objects_data = [
{ id: 'a1b2c3d4-5678-90ab-cdef-1234567890ab', values: '{'mail':'new_mail@example.com','department':'IT department', ... }' },
{ id: 'f1e2d3c4-b567-89a0-bcde-0987654321ff', values: '{'mail':'new_mail2@example.com','department':'Sales department', ... }' },
...,
]
for item in objects_data:
object_id = item.get('id')
entity_values = item.get('values')
# Обновление объекта с указанными параметрами.
client.update(id=object_id, domain_id=domain_id, entity_id=entity_id, values=entity_values)
cms_object = client.get(id=object_id, domain_id=domain_id, entity_id=entity_id) # Получение обновленного объекта.
print('Print updated object:') # Вывод сообщения об успешном обновлении объекта и его значений.
print(cms_object)
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при обновлении объекта.
print('An exception occurred:', error)
Частичное изменение объекта (patch)
Метод используется для изменения отдельных атрибутов и значений объекта с сохранением его идентификатора.
patch({
attributeIds: <attribute_ids>, // string[]
delta: <delta>, // string
domainId: <domain_id>, // string
entityId: <entity_id>, // string
id: <object_id>, // string
version: <version>, // string | undefined
})
patch(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
id=<object_id>, # str
attribute_ids=<attribute_ids>, # List[str]
delta=<delta>, # str
version=<version>, # int | None
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
<object_id>: идентификатор объекта (строка); -
<attribute_ids>: идентификаторы атрибутов объекта, которые нужно изменить (массив строк); -
<delta>: набор пар "ключ — значение" с атрибутами объекта и их новыми значениями (JSON-объект в виде строки); -
<version>(необязательный): версия объекта, используемая для оптимистической блокировки записи (в TypeScript — строка, в Python — целое число).При обновлении объекта в поле
versionдолжна быть указана текущая версия объекта. При обновлении объекта система увеличит номер его версии.Если передана версия, отличающаяся от текущей, метод вернет ошибку, и обновление выполнено не будет. Это ограничение предотвращает одновременное обновление одного и того же объекта несколькими скриптами.
Примеры изменения объекта
Пример скрипта с patch в TypeScript
id: patch_object_in_cms_ts
name: 'patch_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
export async function main() {
try {
// Вызов функции изменения объекта с передачей objectId, domainId и entityId.
const cmsObjectToBePatched = await sdk.cms.patch({
attributeIds: ['mail'],
delta: '{"mail":"new_mail@example.com"}',
domainId,
entityId,
id: objectId,
})
// Вывод объекта в консоль.
console.log(cmsObjectToBePatched)
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при изменении объекта.
console.log(error)
}
}
Пример скрипта с patch в Python
id: patch_object_in_cms_py
name: patch_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
domain_id = 'example.com'
entity_id = 'Person'
object_id= 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
def main():
try:
client = CmsClient.initialize()
# Частичное изменение объекта с указанными параметрами и новым значением атрибута.
client.patch(id=object_id, domain_id=domain_id, entity_id=entity_id, attribute_ids=['mail'], delta='{"mail":"new_mail@example.com"}')
cms_object = client.get(id=object_id, domain_id=domain_id, entity_id=entity_id) # Получение обновленного объекта.
print('Print patched object:') # Вывод сообщения об успешном применении частичного изменения к объекту и его значений.
print(cms_object)
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при изменении объекта.
print('An exception occurred:', error)
Примеры массового редактирования объектов
В приведенных примерах для массового редактирования объектов используется массив, содержащий атрибуты и их значения. Затем этот массив обрабатывается циклом, который поочередно вызывает метод patch для каждого объекта в массиве.
Пример скрипта с массовым редактированием объектов в TypeScript
id: array_patch_object_in_cms_ts
name: 'array_patch_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
// Создание массива для передачи данных в функцию редактирования объекта.
const objectsData = [
{ id: 'a1b2c3d4-5678-90ab-cdef-1234567890ab', attributeIds: ['mail'], values: '{'mail':'new_mail@example.com'}' },
{ id: 'f1e2d3c4-b567-89a0-bcde-0987654321ff', attributeIds: ['mail'], values: '{'mail':'new_mail2@example.com'}' },
...,
]
for (const item of objectsData) {
// Вызов функции обновления объекта с передачей domainId, entityId и id объекта.
const cmsObjectToBePatched = await sdk.cms.patch({
attributeIds: item.attributeIds,
delta: item.values,
domainId,
entityId,
id: item.id,
})
// Вывод объекта в консоль.
console.log(cmsObjectToBeUpdated)
}
} catch (e) {
// Вывод ошибки в консоль, если произошла ошибка при изменении объекта.
console.log(e)
}
}
Пример скрипта с массовым редактированием объектов в Python
id: array_patch_object_in_cms_py
name: array_patch_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
import json
# Инициализация переменных domain_id и entity_id - id домена и сущности.
domain_id = 'example.com'
entity_id = 'Person'
def main():
try:
client = CmsClient.initialize()
# Массив данных для редактирования объектов.
objects_data = [
{ id: 'a1b2c3d4-5678-90ab-cdef-1234567890ab', attribute_ids: ['mail'], values: '{'mail':'new_mail@example.com'}' },
{ id: 'f1e2d3c4-b567-89a0-bcde-0987654321ff', attribute_ids: ['mail'], values: '{'mail':'new_mail2@example.com'}' },
...,
]
for item in objects_data:
object_id = item.get('id')
attribute_ids = item.get('attribute_ids')
entity_values = item.get('values')
# Частичное изменение объекта с указанными параметрами и новым значением атрибута.
client.patch(id=object_id, domain_id=domain_id, entity_id=entity_id, attribute_ids=attribute_ids, delta=entity_values)
cms_object = client.get(id=object_id, domain_id=domain_id, entity_id=entity_id) # Получение обновленного объекта.
print('Print patched object:') # Вывод сообщения об успешном применении частичного изменения к объекту и его значений.
print(cms_object)
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при изменении объекта.
print('An exception occurred:', error)
Удаление объекта (delete)
Метод используется для удаления объекта.
delete({
domainId: <domain_id>, // string
entityId: <entity_id>, // string
id: <object_id> // string
})
delete(
domain_id=<domain_id>, # str
entity_id=<entity_id>, # str
id=<object_id> # str
)
Параметры метода включают в себя:
-
<domain_id>: идентификатор домена (строка); -
<entity_id>: идентификатор сущности (строка); -
<object_id>: идентификатор объекта (строка).
Примеры удаления объекта
Пример скрипта с delete в TypeScript
id: delete_object_in_cms_ts
name: 'delete_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId, entityId и objectId - id экземпляра сущности.
const domainId = 'example.com'
const entityId = 'Person'
const objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
export async function main() {
try {
// Вызов функции удаления объекта с передачей objectId, domainId и entityId.
const cmsObjectToBeDeleted = await sdk.cms.delete({ domainId, entityId, id: objectId })
// Вывод объекта в консоль.
console.log('Result is Ok. Deleted object:')
console.log(cmsObjectToBeDeleted)
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при удалении объекта.
console.log(error)
}
}
Пример скрипта с delete в Python
id: delete_object_in_cms_py
name: delete_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
# Инициализация переменных domain_id, entity_id и object_id - id домена, сущности и объекта.
domain_id = 'example.com'
entity_id = 'Person'
objectId = 'a1b2c3d4-5678-90ab-cdef-1234567890ab'
def main():
try:
client = CmsClient.initialize()
deleted_object = client.delete(id=objectId, domain_id=domain_id, entity_id=entity_id) # Удаление объекта с указанными параметрами.
print(f'Deletion successful for object: {deleted_object}') # Вывод сообщения об успешном удалении объекта.
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при удалении объекта.
print('An exception occurred:', error)
Примеры массового удаления объектов
В приведенных примерах для массового удаления объектов используется массив идентификаторов объектов. Этот массив обрабатывается циклом, который поочередно вызывает метод delete для каждого объекта.
Пример скрипта с массовым удалением объектов в TypeScript
id: array_delete_object_in_cms_ts
name: 'array_delete_object_in_cms_ts'
version: 0.0.1
type: script
tags: [tests, typescript, deno, cms]
source: !deno |
import * as sdk from '@playbooks/sdk'
// Инициализация переменных domainId и entityId.
const domainId = 'example.com'
const entityId = 'Person'
export async function main() {
try {
const objectsList = [
'a1b2c3d4-5678-90ab-cdef-1234567890ab',
'f1e2d3c4-b567-89a0-bcde-0987654321ff',
...,
]
for (const item of objectsList) {
// Вызов функции удаления объекта с передачей objectId, domainId и id объекта.
const cmsObjectToBeDeleted = await sdk.cms.delete({ domainId, entityId, id: item })
// Вывод объекта в консоль.
console.log('Result is Ok. Deleted object:')
console.log(cmsObjectToBeDeleted)
}
} catch (error) {
// Вывод ошибки в консоль, если произошла ошибка при удалении объекта.
console.log(error)
}
}
Пример скрипта с массовым удалением объектов в Python
id: array_delete_object_in_cms_py
name: array_delete_object_in_cms_py
version: 0.0.1
type: script
tags: [tests, python, cms]
source: !py |
from playbooks.cms import CmsClient, Filter, Sorting, Pagination, Order
# Инициализация переменных domain_id, entity_id - id домена и сущности.
domain_id = 'example.com'
entity_id = 'Person'
def main():
try:
client = CmsClient.initialize()
const objects_list = [
'a1b2c3d4-5678-90ab-cdef-1234567890ab',
'f1e2d3c4-b567-89a0-bcde-0987654321ff',
...
]
for item in objects_list:
deleted_object = client.delete(id=item, domain_id=domain_id, entity_id=entity_id) # Удаление объекта с указанными параметрами.
print(f'Deletion successful for object: {deleted_object}') # Вывод сообщения об успешном удалении объекта.
except Exception as error:
# Обработка и вывод ошибки, если произошла ошибка при удалении объекта.
print('An exception occurred:', error)
Была ли полезна эта страница?