Тут должно быть описание микросервиса svc-api
Функции для навигации по стейтам и конфигам
Перечисленные ниже функции являются методами CFS параметра операции инстанса (пока сделано так, но, возможно, придется их переместить - может быть, в параметр операции сервиса или в отдельный объект). Прежде чем вызывать методы, как правило, нужно инициализировать объект параметра, закинув в него контекст. Самый простой контекст - это ключ (UID) сохраненного параметра - если параметр сохранен, про него примерно все известно (разве что соседние параметры могут не быть сохранены). Для еще не сохраненного параметра мы передаем с контекстом то, что знаем - значения соседних параметров, от которых мы зависим, ключи инстанса, операции или сервиса. Сохраненный параметр мы, возможно, захотим поменять - поэтому значения переданных с фронта параметров имеют приоритет перед сохраненными. Аргументами функций могут быть строковые константы, значения соседних параметров и другие предопределенные функции (см. список ниже). Глубина вложенности функций не ограничивается. Как правило, корневая функция возвращает список
Ссылки на параметры
- params.name ("params" - ключевое слово, другие скоупы не поддерживаются)
- params.name.subparam (можно ссылаться на в выражениях субпараметры, и субпараметры могут вычисляться как выражения - но это относится только к субпараметрам сервиса, но не к субпараметрам инстанса, которые произвольно задаются пользователем)
Функции
- string getKeyListFromStruct(struct struct, string path) - по замыслу всегда корневая функция, возвращает список ключей MAP из структуры (можно считать, что это разобранный JSON) по заданному пути. В API форматируется как массив. Можно в корне использовать функцию, которая вернет строку, тогда получится выпадающий список с единственным значением, но непонятно, зачем (разве что при отладке)
- string getArrayAsListFromStruct(struct struct, string path) - корневая функция, возвращает список элементов массива. Пока подразумевается, что в массиве простые элементы (если надо не простые - нужно придумать им какой-то метод toString, то есть разумный способ преобразования в строку)
- string getValueFromStruct(struct struct, string path) - получить скаляр (строку) из структуры
- string concat(string[] args) - просто сшивает строки (константы, параметры, результаты функций), число аргументов любое. Например, чтобы собрать путь из фрагментов
- (для отладки) any dummy(any arg)- возвращает свое значение. Для тестирования
- string getResourceRealm() - возвращает имя текущей (то есть в переданном контексте) ресурсной платформы. Важно: если у сервиса нет ресурсной платформы, пытается найти ее у родительских инстансов (глубина рекурсии до 10). 2DO: добавить ограничения на поиск платформ определенного типа
- struct getResourceRealmConfig(string resourceRealm) - возвращает распаршенный конфиг указанной ресурсной платформы
- struct getResourceRealmConfig() - без параметров возвращает распаршенный конфиг текущей ресурсной платформы (можно ожидать, что только такой вариант и нужен)
- struct getInstanceState(uuid instanceUid) - возвращает распаршенный стейт инстанса по ключу
- struct getInstanceState() - без параметров возвращает распаршенный стейт текущего инстанса
- (использовать не нужно) string getCfsParam(string param) - то же, что params.param, только длиннее и не добавляет параметр в список зависимостей
- (использовать не нужно) string getCfsParam(string param, string subparam) - то же, что params.param.subparam, но не добавляет параметр в список зависимостей
Списки с пустым значением пока не поддерживаются (если надо будет, сделаем)