/mxl-compile — Компилятор макета из DSL
MCP routing
- Preferred path: use MCP
unicatoolunica.apply; макет табличного документа заводится операциейtemplate.add, области правятсяmxl.set. - Не зови внутренние адаптеры напрямую: они спрятаны за MCP
unica. - Всегда сначала
dryRun: true;dryRun: false— только по явной просьбе пользователя и только сifRevиз превью.
Шаг 1 — завести макет
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.apply",
"arguments": {
"at": "main:Report.Продажи",
"ops": [
{"op": "template.add", "args": {"items": [{"name": "ПФ_MXL_Продажи", "templateType": "SpreadsheetDocument"}]}}
],
"dryRun": true
}
}
}
Порядок важен. Превью ничего не публикует, поэтому дочерний узел появится только после применения первого шага:
- превью
template.add(dryRun: true) — план иrev; - применение
template.add(dryRun: falseсifRevиз превью) — макет создан; - превью операций наполнения по адресу макета;
- применение их плана со своим
ifRev.
Обратиться к адресу макета до шага 2 нельзя: план отказывает, потому что цели ещё нет.
Шаг 2 — задать область
mxl.set адресует сам макет и задаёт одну именованную область: area — имя,
cells — её ячейки, columns — число колонок.
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "unica.apply",
"arguments": {
"at": "main:Report.Продажи.Template.ПФ_MXL_Продажи",
"ops": [
{"op": "mxl.set", "args": {"values": {"area": "Шапка", "columns": 4, "cells": [{"col": 1, "text": "Номенклатура"}, {"col": 2, "text": "Сумма"}]}}}
],
"dryRun": true
}
}
}
Области задаются по одной; несколько операций mxl.set идут одним ops и
применяются атомарно.
Чего словарь не пишет
Сборки целого макета из готового JSON-определения одним вызовом на поверхности
нет: DSL ниже остаётся справочником формата, а не входом инструмента.
Шрифты, стили, палитры, объединения ячеек и параметры страницы mxl.set не
принимает — он берёт area, cells и columns. Макет, которого этими
средствами не собрать, — пробел контракта Unica MCP; писать Template.xml
руками в обход поверхности нельзя.
Если макет создаётся по изображению, структуру и пропорции определи внешним средством анализа изображения, а затем выражай области операциями выше.
JSON-схема DSL
Полная спецификация формата: ../../references/specs/mxl-dsl-spec.md (прочитать через Read tool перед написанием JSON).
Краткая структура:
{ columns, page, defaultWidth, columnWidths,
fonts: { name: { face, size, bold, italic, underline, strikeout } },
styles: { name: { font, align, valign, border, borderWidth, wrap, format } },
areas: [{ name, rows: [{ height, rowStyle, cells: [
{ col, span, rowspan, style, param, detail, text, template }
]}]}]
}
Ключевые правила:
page— формат страницы ("A4-landscape","A4-portrait"или число). Автоматически вычисляетdefaultWidthиз суммы пропорций"Nx"col— 1-based позиция колонкиrowStyle— автозаполнение пустот стилем (рамки по всей ширине)- Тип заполнения определяется автоматически:
param→ Parameter,text→ Text,template→ Template rowspan— объединение строк вниз (rowStyle учитывает занятые ячейки)