Skip to content

Шаг «Свой код»

Шаг «Свой код» — это кусок C# внутри схемы: то же, что рукописная функция GAP, но со своими данными на входах.

НастройкаЧто это
Что подать в кодИмена через запятую. Каждое станет входом блока и переменной в коде. Пустая настройка означает блок без входов — и это законно.
КодТело на C#. Значение последнего выражения — результат шага.

Имя входа блок подбирает сам

Section titled “Имя входа блок подбирает сам”

Поставленный после шага, блок называет свой вход по тому, что по связи придёт. Это важно: общее «значение» на объектах читалось как обещание строки — из-за него объект и пытались разбирать как текст.

Что пришлоИмя входа
один объектobj
список объектовobjects
список текстовvalues
числоnumber
список чиселnumbers
да / нетflag
словарьmap
прочееvalue

Вместе с именем блок приходит с заготовкой кода, которая на это имя ссылается:

// последнее выражение уходит в следующий шаг
obj

Готовая строка, которая уже работает, отвечает на вопрос «а как тут писать» сразу — её правят, а не сочиняют с нуля.

На фигуре шага стоит кнопка «Править код» — код правят в своём окне, а не в строке фигуры.

Элемент окнаЧто делает
«Проверить»Собирает код и говорит, что не так, — не запуская всю схему. Работает и когда проект не разобран.
«+ вход»Добавляет блоку ещё одно значение на вход.
«Закрыть»Просто закрывает. Наверху так и написано: «Написанное уходит в схему сразу — окно можно просто закрыть.»
Строка под курсоромПоказывает выражение под курсором и то, чем оно является: текст, число, объект, список объектов.
Подсказка после точкиСчитается компилятором по тому, что реально стоит слева от точки. Собственные члены типа (GetField, Name) идут выше расширений LINQ — иначе алфавит выносил наверх Aggregate и Cast.

Это первое, что нужно знать, садясь писать код, и единственное, чего на фигуре не было. Имя входа придумал сам инженер, тип задала схема выше, и по строке «значение · от предыдущего шага» нельзя было понять ни того, что пришёл объект, ни того, что у него есть сто пятьдесят колонок. Отсюда и брались попытки разбирать объект как строку.

Две-три строки, отвечающие на вопрос «что за значение мне пришло»:

СтрокаПример
Под каким именем лежит и чем являетсяobjects — список объектов, их 973
obj — объект: PT101
values — текст ×N, их 4
Как добраться до одногоobjects.First() — первый из них: PT101
Чьи это поляполя объекта · значения — у первого, PT101
поля этого объекта — из его типа

Каждая строка — свойство, его значение у показанного объекта и тип словами. Нажатие по строке вставляет в код готовое обращение к этому свойству — не имя, а именно обращение, тем же способом, каким его берут.

Галка «только заполненные» убирает пустые: у объекта полторы сотни свойств, и почти все пусты — стена прочерков не говорит о нём ничего, а девять заполненных строк говорят всё.

Под длинным списком или словарём стоит «ещё N…» — нажатие показывает остальное.

Когда список свойств не показывается

Section titled “Когда список свойств не показывается”
Строка в панелиПочему
какого типа этот объект — не выведено, поэтому его полей здесь нетТип пришедшего неизвестен. Так бывает у кода, в который втекли объекты двух разных типов: чей объект он вернул, компилятору не видно, а угадывать — значит показать чужие поля как свои.
что с этим можно сделать — то же, что подсказка после точкиПришли не объекты, а строки или числа.

Форма на входе — это тип переменной в вашем коде, а не украшение. Тип берётся из схемы, а не из данных: схема считается по каждому объекту прогона, и код, собравшийся на первом, обязан собираться и на пустом.

Форма на входеТип в коде
один объектIProjectObject
список объектовIReadOnlyList<IProjectObject>
текст, число, да / нет, словарь — одноstring
то же спискомIReadOnlyList<string>

Что коду видно и что не видно

Section titled “Что коду видно и что не видно”
ВидноНе видно
То, что подано в его входы. Объекты проекта.Столбцы строки книги, из которой позвали схему. Нужный столбец передайте в схему аргументом — в вызове это [TAG] — и подайте этот аргумент в код.
Всё, что умеет IProjectObject: GetField, Name, списки, словари, связи.Задать переменную шаблона код не может. Для этого есть шаг «Переменные шаблона».

Форма выхода считает компилятор

Section titled “Форма выхода считает компилятор”

Какой формы значение вернёт код, спрашивают у компилятора по самому коду, без счёта. От ответа зависит, что будет нарисовано на стрелке и чем палитра предложит шаг продолжить.

Ответ запоминается: разбор кода стоит столько же, сколько его сборка, а схема перерисовывается на каждую правку. Поэтому компилятора спрашивают в считанных местах — когда код проверяют кнопкой, когда уходят из окна кода и когда открывают схему целиком. До первого разбора код обещает текст.