Использование LPE-выражений в виджетах
Существуют случаи, когда нам необходимо в конфигурационном файле использовать не конкретное значение, а функции, выполняющие условие / действие, в зависимости от приходящих значений или действий пользователя. Для этого необходимо использовать LPE-выражения. Ниже представлен пример-псевдокод использования LPE-выражений:
поле_конфигурационного_файла: "lpe:название_функции(аргумент1, аргумент2, ...)"
В случае, когда необходимо использовать несколько функций одновременно, существует возможность указания нескольких функций внутри одного LPE-выражения:
поле_конфигурационного_файла: "lpe:название_функции1(аргумент1, аргумент2, ...);название_функции2(аргумент1, аргумент2, ...)..."
Более конкретные примеры использования данных выражений представлены ниже.
В случае, когда нам необходимо стилизовать дэши в зависимости от приходящих значений, существует возможность использования условных LPE-выражений. Для использования условных выражений используются следующие функции:
when
- используется для неограниченного количества условий в выражении.
Пример:
"lpe:when(lpe(public_mv_doc_base1_amount_discount > 0),'#00b9ac', '#93CAFE')"
В данном примере представлен случай, когда LPE-выражение представлено внутри LPE-выражения
if
- используется для одного условного выражения. Необходимые для указания аргументы:
2.1 условие,
2.2 значение параметра, если условие истинно
2.3 значение параметра, если условие ложно
Ниже представлен пример использования условных выражений с оператором if
:
fontSize: "lpe:if(value<10, '120%', '80%')"
В данном примере, в случае, если значение будет меньше 10, то оно отобразится на 20% больше стандартного размере, в противном случае, на 20% меньше.
Данные условные выражения можно использовать для различных полей стилизации. Ниже представлен файл конфигурации дэша “Данные” с использованием условных LPE-выражений:
{
frame: {
h: 4,
w: 7,
x: 0,
y: 0,
},
dataSource: {
koob: "luxmsbi.public_mv_doc_base1",
style: {
measures: {
ttt: {
color: "lpe:when(lpe(public_mv_doc_base1_amount_discount > 0),'#ff0000', '#00ff00')",
title: "Индктр",
},
public_mv_doc_base1_azs_name: {
backgroundColor: "lpe:when(lpe(public_mv_doc_base1_amount_discount > 0),'#00b9ac', '#93CAFE')",
},
public_mv_doc_base1_add_info_quantity: {
fontSize: "lpe:if(value<10, '120%', '80%')",
minWidth: 300,
fontStyle: "lpe:if(value<10, 'italic', '')",
fontWeight: "lpe:if(value>40, 'bold', 'normal')",
textDecoration: "lpe:if(value>40, 'underline', '80%')",
backgroundColor: "lpe:if(value = 2, '#ffaabb', 'transparent')",
},
},
},
yAxis: "measures;",
sortBy: "public_mv_doc_base1_by_day_s,public_mv_doc_base1_trans_time",
filters: {},
measures: [
"concat('Бонусная-', public_mv_doc_base1_card_type):a1",
"if(public_mv_doc_base1_rc='P', 'Платиновая', if(public_mv_doc_base1_rc='J','Золотая',if(public_mv_doc_base1_rc='R','Серебренная','Отсутствует'))):a10",
"if(public_mv_doc_base1_amount_discount > 0, '↑','↓'):ttt",
"public_mv_doc_base1_add_info_quantity",
"public_mv_doc_base1_amount_discount",
],
dimensions: [
"public_mv_doc_base1_goods_code_type",
],
view_class: "koob-table-simple",
}
Ниже на изображении представлен дэш с вышеописанным конфигурационным файлом:
В данный момент, стилизация с использованием LPE-выражений работает для дэшей tableP
, koob-table-simple
и label
Для двумерных дэшей (отложенные в системе координат) существует возможность выводить вместо значений факта - значение, полученное по формуле, написанной в LPE-выражении. Для этого можно использовать поле badgeTitle
, пример использования которого представлен ниже:
На примере выше, в выводимых значениях предомострировано значение, рассчитанное по формуле:
1_факта + 2 * 2_факт
Внимание! Поле badgeTitle
будет работать только при указании в массиве options
значения DisplayAllBadges
Функции, доступные внутри выражений if и when
Внутри выражений вы можете использовать:
- математические операнды
+
,-
,*
,/
,(
,)
; - операторы сравнения
<
,>
,<=
,>=
,=
,!=
; - Значения
true
,false
,#t
(true),#f
(false),null
,NIL
(null); - Логические операторы
and
,or
,&&
(and),||
(or),!
- Функцию
cond()
;
Пример:
color: 'lpe:when(cond(1>null), "#ff0000", "#00ff00")'
- специальную переменную
value
чтобы изменить параметры только некоторых значений.
Пример:
color: 'lpe:if(value>989, "#00f0f0", "#0000ff")'
Результат такой настройки