Record sets: repeating records in products and sections
/docs/record-setscurrentМашинный перевод с английского· проверено 2026-10-31
Статус: current · проверенный: 2026-10-31, tools/mcpcheck/scenarios/record-sets.json (REST steps через key) и трех компонентов, построенных на key на позиции (§7)) владелец: гладиатр API документация · Служить: GET /docs/record-sets · мастерство: vizen-catalog связанный: /docs/characteristics (definitions, Доступ §3.3, шаблоны §7) · /docs/components (многоразовый blocks)
1.Что вы можете сделать здесь
Держите galleries, отзывы, вопросы и ответы, авторы, команда members документы как структурированные записи внутри а product или section, и показать их в site. Рекорд set является характеристикой type group: тот Определение содержит fields по одной записи, каждая product или section держится за own Список записей. site читать через один public конечный пункт, для многих products сразу, только с fields показывает.
2. Решать first
| Если ты хочешь… | Возьми это path | Стоимость |
|---|---|---|
| Отзывы, Q&A, галерея на product или section | рекорд set (это document) | Одна характеристика на kind список |
| несколько fixed факты (material, width) | Обычная характеристика, /docs/characteristics | — |
| Картинная галерея в product card само собой | тот product галерея (/docs/catalog-import) | Не рекорд set |
| Записи, сделанные на сервере, в page source | недоступен: sets не находится в template scope (/docs/vz-keys.json) | О необходимости создания платформы owner |
| Записи в вашем own block | а level-3 Компонентное чтение GET /record-sets в браузере (§4.4)) | text появляется after JavaScript |
Записи есть never наследственное: а product показывает его own set, а section его own. А. set не имеет default value и является never а filter.
3. Объекты и где они находятся live
Определение. POST /attributes с data_type: "group"; тот schema это ui_settings.records:
{"item": {"code": "faq", "name": "Questions", "data_type": "group",
"ui_settings": {"records": {
"fields": [
{"code": "question", "name": {"ru": "Вопрос", "en": "Question"}, "type": "text", "required": true},
{"code": "answer", "name": "Ответ", "type": "textarea", "required": true},
{"code": "note", "name": "Заметка", "type": "text", "internal": true}],
"columns": ["question"], "title": "{{question}}", "max_items": 50,
"views": [{"code": "acc", "kind": "accordion", "default": true}]}}}}- Типы полей:
text(≤ 500 персонажей),textarea(≤ 10,000),number(min/max),bool,select(options: [{value, label}]),date(YYYY-MM-DD),url(https://,http://или/…),imageиfile({"file_id": "<uuid>"};imageТакже беретсяalt,fileбратьtitle),productиcategory(ан id из это shop).max_lenсужается a text field. Неизвестные ключи в schema является error. columnsиtitleформа row в заднем офисе;viewsиseoОни являются намеками на site, спина Офис не редактирует их.- `internal: true` — возвращенный обратно, по возвращении source читать ниже, never через
/record-setsпокупателям. is_filterable→400 RECORDS_NOT_FILTERABLE; а default value →400 RECORDS_NO_DEFAULT; меняя type или отgroup→400 RECORDS_TYPE_LOCKED.
ценности. Чтобы изменить несколько записей, используйте PATCH …/records/{code} (§4.5: касается только ваших записей name. То replace целое set: а product — PUT /products/{id}/attributes. А. section: PUT /categories/{id}/values — каждый row также потребности "state": "value":
PUT /products/7/attributes
{"items": [{"attribute_id": 42, "value": [
{"question": "Other colours?", "answer": "24 colours, 7 extra days."},
{"_id": "q2", "question": "Assembly?", "answer": "Free in town.", "_active": false}]}]}
PUT /categories/9/values
{"items": [{"attribute_id": 42, "state": "value", "value": [{"question": "Delivery?", "answer": "Two days."}]}]}- Рекорд set который отсутствует в запросе, ведет свои записи. Удалить запись set, отправлять
[]как бы value. - Обычный characteristics Заменяются: отправляют values в том же запросе, в противном случае они будут (
/docs/characteristics). - Когда вы меняете запись set с
PUT, присылайте весь список его записей. Записи, которые отсутствуют в new список deleted. POST /products/importНе записывать рекорды sets: а row Если один не справляется. products, Затем заполнить sets сPATCH …/records/{code}илиPUT.- Сервер выдает каждый new рекорд
_id(8 символов) и_created; Измененный рекорд_createdи получает_updated. Твой own_id(^[a-z0-9]{1,16}$) - делает повторную идемпотентную. без_idэто new: это получает new id и date, так always Отправьте существующие записи обратно_id. - Неизменный рекорд принимается, как есть. after тот schema изменены; а new или измененная запись проверяется против current schema (а field удаленный из schema должен быть исключен из измененного списка).
- Файлы, products и sections должны принадлежать к shop Живой (живой) – draft file только в его own draft. Ан
imagefield сделать снимок: MIME type или расширение говорит так, или - правильно after Загрузка, в то время как оба empty — а file created сfileType: "image".
Чтение source before Вы редактируете (file ids, internal fields, переключатель-off Записи: один set — GET /products/{id}/records/{code} или GET /categories/{id}/records/{code} (§4.5). Все. values — а product: GET /products/{id}/spec (тот template's characteristics плюс product's own sets снаружи template); а section: GET /categories/{id}/values.
4. Рецепты
4.1 Открыть set покупателям
А. new Характеристика закрытая; /record-sets Ответы без этого set. Читать GET /attributes/{id}/access, Затем отправьте целое рекордсменом PUT /attributes/{id}/access и expected_version Из прочитанного — опущено Флаги становятся false:
{"expected_version": 3, "access": {"visibility": "public", "show_storefront_card": true,
"show_storefront_list": true, "show_admin_product": true, "show_admin_list": true, "show_api": true}}потребности catalog:read/catalog:write и ан owner или администратором за key. visibility: "audience" limits тот set на один audience: all (Все), authenticated (зарегистрированных покупателей) или roles (клиент roles). управление аудитории и roles это customers:* (чувствительный, закрытый для draft key) — а public компонент never нуждается в.
4.2 Читать далее site — GET /record-sets
Публично. key без catalog:read Получить анонимный ответ, только all=true Позвоните по телефону. API происхождение (api_base из GET /v1/account/token), Не на витрине: витрина не имеет /record-sets Проверь витрину магазина. page Это происхождение доступно для посетителя. (CORS позволяет витрина, HTTPS на HTTPS page); 127.0.0.1 Работает только на одной машине.
| Параметр | значение | |
|---|---|---|
company_id | тот shop, required | |
product_ids, category_ids | разделенные запятой, по меньшей мере, один, ≤ 50 ресурсов в total | |
code | sets, разделенный запятой, ≤ 10. Всегда пройди мимо: Без него каждый человек имеет право set из shop Он был взят, и a shop с more 10 ответов 400 INVALID_ARGUMENT — Даже если бы resource заполнять меньше | |
fields | fields то return (_id always Приходит; internal или unknown field → 400 RECORDS_FIELD_UNKNOWN (internal fields Допускается с all=true) | |
item_ids | exact Записи, один resource только | |
offset, limit | page; limit default 20, ≤ 200 | |
sort | order (офис order), `<field>:asc | desc, _created:desc` |
filter | <field>:<value>, exact, простой fields только | |
stats | number fields: count, avg, min, max над фильтрованным set (не только page) | |
schema=true | добавить field список (public fields; all fields с all=true) | |
all=true | staff или key из этого shop: переключатель-off рекорды, internal fields и закрытой sets; Только те ресурсы, которые покупатель может открыть; live каталог даже для draft key; files как url. Никогда public code, never а source Отправить назад |
Более 10 ресурсов требуют именно одного. code и limit ≤ 20. HTTP Ответ: {"result": "<base64>"}. Декодировать result от базовой 64 до bytes, декодировать bytes как UTF-8, затем разберите JSON. Не использовать JSON.parse(atob(…)): Разбивает кириллические буквы.
const url = new URL('/record-sets', apiBase);
url.search = new URLSearchParams({company_id: '1', product_ids: '7', code: 'reviews',
fields: 'author,rating,text', stats: 'rating', limit: '20'});
const res = await fetch(url, {credentials: 'omit'});
if (!res.ok) throw new Error('record sets ' + res.status);
const {result} = await res.json();
const bytes = Uint8Array.from(atob(result), (c) => c.charCodeAt(0));
const data = JSON.parse(new TextDecoder('utf-8').decode(bytes));
const set = data.resources.find((r) => r.kind === 'product' && r.id === 7)?.sets.find((s) => s.code === 'reviews');{"resources": [{"kind": "product", "id": 7, "name": "Sofa", "url": "/sofas/island",
"sets": [{"code": "reviews", "name": "Reviews", "total": 12, "offset": 0, "limit": 20, "next_offset": null,
"view": {"code": "cards", "kind": "cards"}, "stats": {"rating": {"count": 12, "avg": 4.7, "min": 3, "max": 5}},
"items": [{"_id": "q1", "author": "Ira", "rating": 5, "text": "Great sofa"}]}]}]}- Ответ имеет только то, что видит покупатель. products и sections Покупатель может открыть. записи с
_activeи fields безinternal. Он имеет sets Открыт для этого покупателя. set для подписанных покупателей или для role Показы только с этот покупатель's Торговец, торговец key или staff сеанс безall=trueчитать Как анонимный покупатель, так и cannot доказать role set. image/fileкак будто{"url", "alt"|"title"};product/categoryкак{"id", "name", "url"}, илиnullкогда покупатель cannot Открой..- Другой shop's, hidden или unknown Ресурсы отсутствуют без error; а resource не заполненный sets приходить с
"sets": []. Тяжелая просьба →400 RECORDS_RESPONSE_TOO_LARGE: узкоcode,fieldsилиlimit. - Читать из The live каталог: draft записи показывают after публикация.
4.3 Показать только то, что вам нужно
Q&A: список с fields=question, Один ответ на клик с item_ids=<_id>&fields=answer. Отзывы о a listing: product_ids=1,2,…&code=reviews&limit=3. Средний рейтинг: stats=rating. Страницы: Следуйте next_offset до тех пор, пока null.
4.4 Компонент, подкрепленный записью set
- Читать
GET /v1/account/token:capabilities.html_level3_allowedдолжен быть true. А. ZIP Освобождение от потребностейcatalog:writeиstorage:writeплюс owner/admin. - Наполнить, заполнить и открыть set (§3, §4.1).
- создавать
POST /html-documentsсkind: "component", level: 3(level 1 полоска скриптов.index.html,component.json, CSS и JS; Объявлять такие параметры, какcompany_id,resource_kind,resource_id,code,api_baseи а heading. Никогда не ставьте торговца key входить folder или вставки. - The script звонки
/record-setsКак в §4.2 (public прогноз,credentials: 'omit', neverall=true), рендеринг погрузка, error и empty государства ( empty set Скрывает block), инициализирует каждый корень один раз и выживает в мягкой форме навигационная система (/docs/components§5). Длинный set загружены в pages: проситьlimit=10–20, Шоу «Show» more» в то время какnext_offsetне являетсяnullи просьбаoffset=<next_offset>; never load 200 рекордов для first экран. - Скачать The Release (
POST /html-documents/{id}/releases/zip?publish=1—200когда activated,201безpublish), перечитатьactive_release_id, Затем нажмите на вставку на page (/docs/components§4.7.1). - Проверить на витрине магазина page в браузере: сетевой ответ, визуализируемый text, mobile width, и это переключатель-off записи и internal fields не заявляйте о наличии серверных записей или SEO.
4.5 Редактировать записи key — GET / PATCH …/records/{code}
Один set из одного product или section, адресованный его code. GET Каждый из них возвращается в исходное состояние (в виде сквозняка).-off рекорды, internal fields, file_id), тот field Список и а revision. PATCH Применяет операции к current set; другие записи, другие sets и обыкновенный characteristics Оставайтесь такими, какие они есть.
GET /products/7/records/faq (a section: /categories/9/records/faq)
→ {"set": {"attribute_id": "42", "code": "faq", "revision": "3f2a…", "total": 2,
"items": [{"_id": "q1", "question": "…", "answer": "…", "_active": true, "_created": "…"}, …],
"schema": {"fields": […]}}}
PATCH /products/7/records/faq
{"ops": [
{"op": "add", "record": {"question": "Warranty?", "answer": "Two years."}, "position": 0},
{"op": "update", "id": "q1", "set": {"answer": "Yes, 24 colours.", "note": null}},
{"op": "remove", "id": "q2"},
{"op": "move", "id": "q1", "position": 0}]}
→ the same answer as GET, with the new records' `_id`
PATCH /products/7/records/faq (refuse if someone changed the set since your GET)
{"expected_revision": "<revision from GET>", "ops": [{"op": "update", "id": "q1", "set": {"answer": "Updated"}}]}addзакладывает record вposition(0 - это first; default — последний).updateслияниеsetвходить record:nullУдалить A field,_activeвключите его или off.moveпотребностиposition. Операции проводятся в order.- The result проверяется как
PUT(schema, files, links). Ан error имена record или операция:ops[1].id→404 RECORD_NOT_FOUND, Плохая операция →400 RECORDS_OP_INVALID. - параллельный
PATCHЗвонки безопасны: если set изменяется, пока выполняется ваш запрос, сервер перечитывает его и применяет Ваши операции снова (after 3 Попробуйте ответ409И тоже.PUTвсей set — Задний офис спасает Так и есть — все равно заменят.expected_revisionот вашегоGETОтказаться: изменено set →409 RECORDS_REVISION_CONFLICTи никакой операции не applied;GETИ снова решать, а не просто повторять. - Безопасный для повторного использования
add: положите own_idвrecord. Повторение затем ответы400 RECORDS_OP_INVALID … duplicate _id— тот record Уже есть. Без_idповторяющийсяaddСоздает вторую record. - Удаление последнего record Удалить The set (
revision: "0"). А. draft key читать и писать его own draft. - потребности
catalog:readдляGET,catalog:writeдляPATCH. Другой shop's или deleted product →404 PRODUCT_NOT_FOUND, section →404 CATEGORY_NOT_FOUND, ан unknowncode→404 ATTRIBUTE_NOT_FOUND.
5.Безмолвно ignored
- А. set выброшенный из
PUT …/attributesилиPUT /categories/{id}/valuesне расчищается, не расчищается (по design). _created/_updatedТы посылаешь ignored.- В
PATCH …/records/{code}:idвadd(тот record's own_idсчитать),positionвupdateиremove,recordснаружиaddиsetснаружиupdate. - А. closed set (нет buyer Доступ отсутствует
/record-setsс200; просить о его fields через name это400. - Торговец key без
catalog:readПолучить анонимный ответ от/record-sets; только cannot использоватьall=true. viewsиseo- хранят намеки; ничто на платформе не передает их само по себе.
6. Пределы
| Что? | Limit |
|---|---|
| fields за set | 30 |
| Записи на каждый set | 200 (max_items узкий) |
| value size | 256 KB |
columns / views / select options | 6 / 5 / 100 |
/record-sets Ресурсы/коды / limit | 50 / 10 / 200 (more 10 ресурсов: один code, limit ≤ 20) |
Операции в расчете на PATCH …/records/{code} | 200 |
| связанный products / sections resolved Ответить | 200 / 50 |
| ответ | RECORDS_RESPONSE_TOO_LARGE выше 2 MB |
ошибки: RECORDS_SCHEMA_INVALID, RECORDS_VALUE_INVALID, RECORDS_TOO_MANY, RECORDS_TOO_LARGE (с помощью field address after тот code, e.g. faq[0].answer: required), RECORDS_NOT_FILTERABLE, RECORDS_NO_DEFAULT, RECORDS_TYPE_LOCKED, RECORDS_FIELD_UNKNOWN, RECORDS_OP_INVALID, RECORD_NOT_FOUND, RECORDS_REVISION_CONFLICT, RECORDS_ALL_NEEDS_ROLE, RECORDS_RESPONSE_TOO_LARGE, DUPLICATE_ATTRIBUTE_IN_SET; другой shop's section → CATEGORY_NOT_FOUND, его атрибут → UNKNOWN_ATTRIBUTE.
7.Как это было проверено
2026-10-31 на изолированном стенде, построенном из production: tools/mcpcheck/scenarios/record-sets.json — 55 REST steps через key (Также три pages то next_offset: null, more 10 ресурсов с и без code, а draft key Читать его own draft; GET/PATCH …/records/{code}: add, update, несвежий revision, ан unknown id, только для чтения, иностранный-shop и draft ключи, обычные value и public ответ after а PATCH) (schema ошибки, public/internal fields, Один ответ на item_ids, pages, all=true и его role Ворота, только для чтения и иностранные-shop ключи, а draft key Не меняя при этом live ответ, sets когда опущено, [] Исключить. buyer С клиентом role видел role-ограниченный set; анонимный buyer и а buyer без role Нет, не надо. level-3 компонента (обзоры со средними значениями) rating, Q&A ответы на загрузку на клик, галерея с лайтбокс) были построены и установлены key только, проверено на Chromium на 390 px и настольных компьютерах.