Примеры запросов Citeck Records
Пример работы с рекордами из javascript
Добавление пользователя или группы в группу
let rec = Records.get('emodel/person@someuser'); // пользователь или группа, которого(ую) нужно добавить в группу
rec.att('att_add_authorityGroups', 'emodel/authority-group@accountant'); // группа, в которую нужно добавить
rec.save();
Удаление пользователя или группы из группы
let rec = Records.get('emodel/person@someuser'); // пользователь или группа, которого(ую) нужно удалить из группы
rec.att('att_rem_authorityGroups', 'emodel/authority-group@accountant'); // группа, из которой нужно удалить
rec.save();
Проверка вхождения пользователя или группы в группу
Проверка вхождения текущего пользователя в группу:
await Citeck.Records.get('emodel/person@CURRENT').load('authorities._has.GROUP_ECOS_ADMINISTRATORS?bool!')
Проверка вхождения конкретного пользователя в группу:
await Citeck.Records.get('emodel/person@someuser').load('authorities._has.GROUP_testers?bool!')
Проверка вхождения группы в группу пока не поддерживается.
Поиск записей и их изменение в цикле
var typeId = 'deal';
var typeRef = "emodel/type@" + typeId;
var sourceId = await Records.get(typeRef).load('sourceId');
var queryResult = await Records.query({
sourceId,
query: { t: 'eq', att: '_type', val: typeRef },
language: 'predicate',
page: { maxItems: 4000 }
});
var records = queryResult.records;
console.log("Found " + records.length);
var newStatus = 'old';
for (let i = 0; i < records.length; i++) {
let record = Records.get(records[i]);
let currentStatus = await record.load('_status?str', true);
if (currentStatus == 'new') {
console.log('change status for ' + record.id + " from " + currentStatus + " to " + newStatus);
record.att('_status', newStatus);
await record.save();
}
}
Здесь скрипт ищет объекты (max = 4000) с типом данным deal и статусом new, и меняет статус на old (такие статусы должны быть заданы для типа deal).
Получение значения из конфига (ecos config)
Citeck.Records.get('eapps/meta@').load('$cfg.service-desk-groups')
// либо
Citeck.Records.get('eapps/cfg@service-desk-groups').load('value')
Скоуп нужен если цель - вытащить из одного микросервиса конфиг, который определен в другом микросервисе
Получения разных локализованный значения у атрибута Статус (_status)
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('_status._disp?json', true)
Ответ:
{
"ru": "Новый",
"en": "New"
}
Либо можно получить значение на конкретном языке:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('_status._disp.en', true)
Проверка, существует ли конкретный record
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('_notExists?bool!', true)
Проверить, что record это подтип определенного типа
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('_type.isSubTypeOf.case?bool!', true)
Проверка связи между микросервисами, notifications -> eproc -> uiserv
await Citeck.Records.get('notifications/meta@').load('rec.eproc/meta@.rec.uiserv/meta@.time', true)
Получение атрибутов напрямую через ассоциацию
У объекта контракт, получаем контрагента и у него ИНН, дату создания и отображаемое имя:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('counterparty{?disp,inn,_created}', true)
Пример ответа:
{
"?disp": "ООО Стальпром",
"inn": "111111111111",
"_created": "2023-08-03T09:28:49.071Z"
}
Если ассоциация множественная, то можно получить атрибуты всех объектов:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('payments[]{plannedPaymentDate,amount?num}', true)
Пример ответа:
[
{
"plannedPaymentDate": "2025-02-10T00:00:00Z",
"amount": 1000
},
{
"plannedPaymentDate": "2025-02-20T00:00:00Z",
"amount": 10500
}
]
Если ассоциация множественная и нужно получить атрибуты только первого объекта:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load('payments{plannedPaymentDate,amount?num}', true)
Пример ответа:
{
"plannedPaymentDate": "2025-02-10T00:00:00Z",
"amount": 1000
}
Получение нескольких атрибутов вместе c вложенными атрибутами
Получить несколько атрибутов вместе с атрибутами из ассоциации:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load(['?disp', 'payments[]{plannedPaymentDate,amount?num}'], true)
Пример ответа:
{
"?disp": "Договор №16808",
"payments[]{plannedPaymentDate,amount?num}": [
{
"plannedPaymentDate": "2025-02-10T00:00:00Z",
"amount": 1000
},
{
"plannedPaymentDate": "2025-02-20T00:00:00Z",
"amount": 10500
}
]
}
Так же можно задать имена получаемых атрибутов:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load({'contractName': '?disp', 'payments': 'payments[]{plannedPaymentDate,amount?num}'}, true)
Пример ответа:
{
"contractName": "Договор №16808",
"payments": [
{
"plannedPaymentDate": "2025-02-10T00:00:00Z",
"amount": 1000
},
{
"plannedPaymentDate": "2025-02-20T00:00:00Z",
"amount": 10500
}
]
}
Получать вложенные атрибуты можно не только у ассоциаций, но и у всех атрибутов, которые представляют собой объекты, например, у атрибута _content:
await Citeck.Records.get('emodel/ecos-contract@you-doc').load({'name': '?disp', 'content': '_content{size,mimeType}'}, true)
Пример ответа:
{
"name": "Договор №16808",
"content": {
"size": "248446",
"mimeType": "application/pdf"
}
}
Работа с файлами
Работа с файлами из UI возможна либо через загрузку контента в виде base64 строки, либо получения ссылки для скачивания.
Скрипт получает контент файла в виде base64 строки из атрибута _content:
await Records.get('emodel/ecos-contract@3a4e11cf-4227-44f4-98dd-1eeefba30e28').load('_content.bytes')
Скрипт получает ссылку для скачивания файла из атрибута _content:
await Records.get('emodel/ecos-contract@3a4e11cf-4227-44f4-98dd-1eeefba30e28').load('_content.url')
Можно загрузить файл в виде formData по адресу:
/gateway/emodel/api/ecos/webapp/content
или через base64 (подходит только для небольших файлов).