Здравствуйте, IT, Вы писали:
IT>Как насчёт циклов?
В прошлом году делали систему для СИКН(система измерения качества нефти).
Там очень нехилая система отчетности. Данные отчетов хранились в БД в json-строках (не мы так решили, так "исторически сложилось")
И мы ее делали на WPF.
В WPF есть такая штука, называется FlowDocument — тот же XAML, но для разметки документов. Проблема в том, что она декларативная и не гибкая.
К тому же, в нашем случае, форма отчетов и исходных данных постоянно менялись и надо было менять их чуть ли не на лету.
Так вот, нам пришлось строить препроцессор XAML чтобы впихнуть туда циклы и парсер jsona. В итоге он разворачивал все это в нативный XAML для дальнейшей печати.
Примеры использования:
<Paragraph Text="
<!--{d.f}-->" />
//этот кусок формировал параграф, куда вставлял из jsonа значение узла d.f
А если надо было нарисовать список параграфов, то синтаксис был такой:
<!--arr{ //arr — это путь к массиву объектов в json
<Paragraph Text="
<!--{Name}-->" />
//Name — это поле в объекте
}->
Paragraph дан для примера. В основном в цикле строились таблицы.
Потом туда добавилась простенькая логика, макросы
и прочее. В итоге получился сплошной костыль. Но работал.
Позже я преобразовал это в лиспо-подобный язык, где можно было наращивать функционал из коробки.
И все это транслировалось в тот-же XAML.
| Пример |
| |
| |
| А вот и цикл |
| |
| |
P.S. Написал исключительно ради справедливости. Отчеты — штука специфическая. Но циклы все-таки иногда нужны, даже в разметке.