Войти

LinkedValues версия 2

Общая информация

linkedValues версии 2 — это новый механизм linkedValues, который предназначен для определения и вычисления выражений, заданных в конфигурации компонента

Поддерживаемые экраны и компоненты

linkedValues версии 2 может быть задействован на экране типа:

linkedValues версии2 может быть задействован в компонентах типа:

Внешний вид linkedValues версии 2

В конструкторе

1.png
2.png

Пример объявления новой версии

{

    "linkedValues": [

        {

            "version": 2,

            "argument": "example",

            "definition": {

                "expression1": "arg1",

                "arg1": "'value'"

            }

        }

    ]

}

version — версия linkedValues, где «2» — новая версия, «1» — старая версия, используется по умолчанию, когда не указана версия

argument — ключ в «arguments», под которым будет записан результат выражения

definition — блок выражения, состоящий из аргументов и выражений, таких как:

  1. expression1..10 — строка содержащая выражение, которое необходимо вычислить
  2. arg1..10 — строка содержащая определение переменной, используемой в выражении

Результат выражения

{

    "arguments": { "example": "value"

    }

}

Стандартные методы и константы

// Методы приведения к типу

asString(Object) 

asJson(Object) 

asMap(String) 

asList(String) 

asDate(String)

asDate(String, String) // Второй параметр — формат даты первого аргумента

asDateTime(String) 

asDateTime(String, String) // Второй параметр — формат даты первого аргумента

asInt(String)

asLong(String)

asLong(String, String) — Приведение к «Long» с предварительным выпиливанием лидирующих нулей  

asDouble(String) — привидение к вещественным числам: «asDouble("'1'") -> 1.0»

// Методы проверок массива

allMatch(String) 

noneMatch(String) 

anyMatch(String)

// Метод для выполнения нескольких «expression» друг за другом пока первый параметр не станет «true»

getIf(boolean, Object)

// Константы

// Строковая константа в «arg1» и в «expression1»

   "expression1": "arg1 + 'string_constanta'", 

   "arg1": "'value'"

// «int» константа в «arg1» и в «expression1»

   "expression1": "arg1 + arg2 + 3", 

   "arg1": "1"

   "arg1": "2"

Особенности работы при выполнении математических операций: «arg1»: «2», «arg2»: «1» ( а не «arg1»: «'1'» — в противном случае выполнится конкатенация строк и в результате будет «21», а не «3»), либо явно приведены к нужному типу числа, использую методы «asInt(String)», «asDouble(String)», «asLong(String)»

Ограничения и особенности работы

Максимальное количество выражений «expression»: 10

Максимальное количество переменных «arg»: 10

В выражениях «expression» можно использовать только «arg» переменные, стандартные методы и константы

В переменных «arg» можно использовать ссылки на поля, стандартные методы и константы

Порядок вычисления:

  1. Расчёт переменных «arg»
  2. Расчёт выражений «expression»
  3. Возврат результата

ВАЖНО!

  1. Все переменные «arg» рассчитываются по порядку следования «arg1, arg2, ... arg10»
  2. Если во время расчёта arg будет пустым, расчёт будет остановлен
  3. Все выражения «expression» рассчитываются по порядку следования «expression1», «expression2», «... expression10», если используется конструкция «getIf()»
  4. Если во время расчёта «expression» будет пустым, расчёт будет остановлен и возвращён, как результат строки «EMPTY_VALUE»

Логические выражения и операторы сравнения

"expression1": "(arg1 == arg2) ? 'equals' : 'not equals'"

В качестве логических операторов используются стандартные операторы: «&&, ||, ==, !=», а также тернарный оператор «?:»

Для сравнения используются стандартные операторы сравнения «>, >=, <, <=, ==, !=»

Варианты использования

Один из основных вариантов применения linkedValues версии 2 — это использования «ValueCalculator» в компоненте UniversalLogic на специальном экране, содержащий компонент типа Redirect, данный способ позволяет собрать нужную информацию и преобразовать её на последующие экраны

Разберём несколько типовых примеров для преобразования данных:

  1. Пример приведения типов в формате «as* : asString, asInt, asList и др.»
  2. Пример приведения типов

    {

        "linkedValues": [

            {

                "version": 2,

                "argument": "example",

                "definition": {

                    "expression1": "arg1 == 501",

                    "arg1": "asInt('000501')"

                }

            }

        ]

    }

    Результат выражения

    {

        "arguments": {

        "example": "true"

        }

    }    

  3. Пример конкатенации строк, в контексте строковых аргументов. В данном пример используется оператор: «+»
  4. Пример конкатенации строк

    {

        "linkedValues": [

            {

                "version": 2,

                "argument": "example",

                "definition": {

                    "expression1": "arg1 + ' ' + arg2 + ' ' + arg3",

                    "arg1": "'Linked'",

                    "arg2": "'Values'",

                    "arg3": "'v2'"

                }

            }

        ]

    }

    Результат выражения

    {

        "arguments": {

        "example": "Linked Values v2"

        }

    }    

  5. 3) Пример с использованием специфичных вызовов для типа «методы», таких как: «"expression1":
    "asString(asList(arg1).get(0))" вызов метода .get(index) на объекте списка», «"expression1": "asString(asList(arg1).size())" вызов метода size()», «"expression1": "asString(arg1).length()" вызов метода length() для вычисления длины строки»
  6. Пример преобразования номера для СНИЛС

    {

        "linkedValues": [

            {

                "version": 2,

                "argument": "example",

                "definition": {

                    "expression1": "arg1.replaceAll('[-s]', '')",

                    "arg1": "'000-000-*** 00'"

                }

            }

        ]

    }

    Результат выражения

    {

        "linkedValues": [

            {

                "version": 2,

                "argument": "example",

                "definition": {

                    "expression1": "arg1.replaceAll('[-s]', '')",

                    "arg1": "'000-000-*** 00'"

                }

            }

        ]

    }

    Результат выражения

    {

        "arguments": {

            "example": "00000000000"

        }

    }

  7. Пример приведения типов и методов для работы с коллекциями: «allMatch(arg, key, value)», «anyMatch (arg, key, value)», «noneMatch(arg, key, value)». В данном примере необходимо реализовать эти методы в классе «ru.gosuslugi.pgu.fs.common.service.functions.ExpressionMethods.»

Ответы пользователя при прохождении сценария

{

    "applicantAnswers": { "pd1": {

    "visited": true,

    "value": "{"id":"a8ed6bc8-4fb4-46da-affc-417b6dd93dcc","persons":[{"fullName":"Mikella Cash","sex

    ":"FEMALE","age":23,"status":"ACTIVE"},{"fullName":"Jurel Newell","sex":"MALE","age":28,"status

    ":"ACTIVE"},{"fullName":"Elijio Woolley","sex":"MALE","age":25,"status":"ACTIVE"}]}"

    }

    }

}    

Пример приведения типов и методов

{

    "linkedValues": [

        {

            "version": 2,

            "argument": "example",

            "definition": {

                "expression1": "allMatch(arg1, 'status', 'ACTIVE') ? 'active' : 'non-active'",

                "arg1": "asList('${pd1.persons}')"

            }

        }

    ]

}

Результат выражения

{

    "arguments": { "example": "active"

    }

}    

Примеры шаблонов ВКУ ЕПГУ

  1. Вычисление длины массива и работа с полученными атрибутами массива
  2. Вычисление и сравнение дат JsonLogic
  3. Динамическое количество блоков в RepeatbleFields
  4. Анализ массива и настройка правил переходов
  5. Анализ количества приложенных файлов
  6. Преобразование значения строковых компонентов в массив
  7. Калькулятор (ValueCalculator)
  8. Математические операции
  9. Циклический экран с условными переходами внутри
Авторизуйтесь, чтобы оставить комментарий к статье