Initial project import
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Граф составляющих объекта конфигурации
|
||||
|
||||
Объект конфигурации — это корень, а не минимальная единица работы. Его
|
||||
составляющие: модуль объекта, формы и их модули, макеты, схема компоновки
|
||||
данных (СКД), а после декодирования СКД — наборы данных, запросы, поля,
|
||||
ресурсы и варианты. Для записи нужен адрес именно составляющей и доказанный
|
||||
физический носитель этой составляющей.
|
||||
|
||||
## Публичная инвентаризация
|
||||
|
||||
`metadata.object.components` — read-only фасад над уже доказанными SQL
|
||||
декодерами. Он принимает обычный селектор владельца (`ref` либо `kind` и
|
||||
`name`, при необходимости `extension`) и возвращает граф:
|
||||
|
||||
- корень `metadata_object`;
|
||||
- только реально найденные `module`, `form`, `template` и `scd`;
|
||||
- публичные `path` и `read_selector` каждого потомка;
|
||||
- `unresolved` для областей, которые не были подтверждены.
|
||||
|
||||
Метод не создаёт потомок потому, что он обычно есть у такого типа объекта.
|
||||
Например, пустой ответ `metadata.object.modules` у общей формы означает
|
||||
«модуль этим маршрутом не найден», а не повод назвать форму модулем.
|
||||
|
||||
Пример запроса:
|
||||
|
||||
```json
|
||||
{
|
||||
"method": "metadata.object.components",
|
||||
"payload": {
|
||||
"base_id": "upo_test",
|
||||
"extension": "test2",
|
||||
"ref": "Report.tt_Отчет",
|
||||
"include_storage": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
`read_selector` можно передать следующему read-only методу. Это не является
|
||||
разрешением на запись: запись выбирает компонент по его `path`, повторно
|
||||
подтверждает конкретный carrier/stream и разрешается только для семейства
|
||||
контейнеров с доказанным byte-preserving кодеком.
|
||||
|
||||
## Иерархия и кодеки
|
||||
|
||||
Логический BSL один и тот же независимо от владельца, но его физический
|
||||
носитель может различаться. Поэтому не нужны отдельные эвристики «для формы»
|
||||
и «для отчёта»: нужен реестр семейств carrier-кодеков. Один кодек применяется
|
||||
к нескольким типам объектов лишь после доказательства одинаковых границ,
|
||||
непрозрачных атомов и round-trip проверки.
|
||||
|
||||
Текущий пример: модуль общего формы в `upo_test/test2` имеет доказанный
|
||||
write-кодек saved-state; обнаруженный поток модуля отчёта — только
|
||||
read-only structural codec. Второй компонент может быть найден и прочитан,
|
||||
но не получит разрешение на SQL-запись, пока его служебный хвост не будет
|
||||
декодирован.
|
||||
Reference in New Issue
Block a user