Changes

Jump to navigation Jump to search
Created page with "{{Stamp|2017-11-07|4.4.0|1.2.0}} Для поля Link To Entry можно добавить один или несколько атрибутов. Ат..."
{{Stamp|2017-11-07|4.4.0|1.2.0}}
Для поля [[Link To Entry field|Link To Entry]] можно добавить один или несколько атрибутов. Атрибут похож на поле записи, он имеет имя и тип.
Определение атрибутов выполняется на карточке редактирования поля [[Link To Entry field|Link To Entry]]: карточка редактирования > вкладка '''Атрибуты'''.

Значения атрибутов отображаются непосредственно в поле “Ссылка на запись” и заполняются после добавления новой записи в поле.

==Пример использования атрибутов==
Например у нас есть библиотека '''Items''', содержащая информацию о товарах. Также у нас есть библиотека '''Order''' содержащая информацию о заказах. В библиотеке '''Order''' есть поле типа [[Link To Entry field|Link To Entry]] в которое добавляются товары из библиотеки '''Items'''.
Мы можем к полю [[Link To Entry field|Link To Entry]] добавить числовой атрибут '''Count''', который будет отображать количество товара в заказе.

==Доступ к атрибутам из скриптов==
===Триггеры и Действия===
Для получения значения атрибута связанной записи, необходимо сначала получить соответствующую связанную запись через метод '''field(name)''' объекта [[Memento_JavaScript_Library#Object_Entry|Entry]]. Для связанной записи доступны метод получения значения атрибута - '''attr(name)''' и метод установки атрибута '''setAttr(name , value)'''.

<source lang="JavaScript">
entry().field(“field_name”)[0].attr(“attribute_name”)
entry().field(“field_name”)[0].setAttr(“attribute_name” , newValue);
</source>

Пример получения значения атрибута Count у поля Items:
<source lang="JavaScript">
//Пример получения значения атрибута Count у поля Items:
var count = entry().field(“Items”)[0].attr(“Count”);

//Пример установки значения атрибута Date у поля Items:
entry().field(“Items”)[0].setAttr(“Date” , new Date());
</source>

===JavaScript поле===
В поле [[JavaScript field|JavaScript]] доступно только получение значения атрибута, это можно сделать через метод '''attr''' связанной записи:
<source lang="JavaScript">
field(“field_name”)[0].attr(“attribute_name”)
</source>

Пример скрипта получения стоимости элемента добавленного в поле '''Items'''. Элемент в '''Items''' имеет поле '''Price''', поле [[Link To Entry field|Link To Entry]] имеет атрибут '''Count''':
<source lang="JavaScript">
field(“Items”)[0].attr(“Count”) * field(“Items”)[0].field(“Price”)
</source>

===Доступ к атрибутам в вычисляемых полях===
Доступ к значению атрибута в [[Calculation field|Calculation field]] выполняется с помощью символа - '''?''':
<source lang="JavaScript">
#{link field name?attribute name}
</source>

Например для доступа к атрибуту '''Count''' используем следующий синтаксис:
<source lang="JavaScript">
#{items?count}
</source>

Если поле содержит несколько ссылок на записи, то можно использовать индекс для доступа к атрибуту:
<source lang="JavaScript">
#{items@0?count} , #{items@1?count}
</source>

===Агрегация атрибутов в вычислимых полях===
Если поле [[Link To Entry field|Link To Entry]] содержит несколько ссылок на записи, каждая из которых имеет свое значение атрибута, то к этим атрибутам можно применить одну из функций агрегации, например для вычисления суммы всех атрибутов.

Сумма всех атрибутов поля:
<source lang="JavaScript">
$sum('link field name?attribute name')
</source>

Функции агрегации поддерживают попарные операции между различными полями связанных записей и атрибутами:
<source lang="JavaScript">
//Данная функция умножает поле linked_feld_name каждой связанной записи на соответствующей этой связи атрибут attribute_name.
//Набор чисел полученный после умножения - суммируется.
$sum('link_field_name.linked_feld_name','link_field_name?attribute_name', ‘@mul’)
</source>

Например, для вычисления общей суммы заказа можно воспользоваться формулой:
<source lang="JavaScript">
//Данная формула попарно перемножает значение поля price у связанной записи и значение соответствующего связи атрибута count.
//Набор чисел полученный после умножения - суммируется.
$sum('items.price' , 'items?count' , '@mul' );
</source>

Navigation menu