Перейти к содержанию

Атрибут типа «Запись». Объединение значений из коллекции в строку

Введение

Атрибут типа «Запись» может хранить ссылки на несколько записей в связанном шаблоне (то есть коллекцию или список ссылок).

Для реализации бизнес-требований может потребоваться объединить значения атрибутов связанного шаблона в одну строку. Например, так это позволяет собрать список из гиперссылок, номеров телефонов или артикулов.

При объединении элементов списка в строку можно задать произвольный текстовый разделитель.

Здесь представлен пример вывода значений атрибута из нескольких записей в виде списка с разделителем.

Прикладная задача

Требуется сформировать список артикулов товаров, на которые оформлен заказ.

Список артикулов необходимо вывести в виде строки, разделённой запятыми.

Исходные данные

Имеются шаблон записи «Заказы» и «Товары».

Шаблон «Заказы» связан с атрибутом «Товары» посредством атрибута «Позиции заказа» типа запись, в котором хранится несколько записей.

В шаблоне «Товары» имеется текстовый атрибут «Артикул».

Настройка вычисления

  1. В шаблоне «Заказы» создайте атрибут:

    • Название: Перечень артикулов
    • Тип данных: текст
    • Формат отображения: обычный
    • Вычислять автоматически
    • Вычисляемое значение: N3
    # Импортируем функции для работы с объектами и строками 
    @prefix object: <http://comindware.com/ontology/object#>.
    @prefix cmwstring: <http://comindware.com/logics/string#>.
    {
        # Находим атрибуты «Позиции заказа» и «Артикул»
    # в соответствующих шаблонах.
    ("Заказы" "Позициизаказа") object:findProperty ?collectionAttribute.
        ("Товары" "Артикул") object:findProperty ?referencedAttribute.
    # Собираем список товаров, связанных с текущей записью.
        from {
            ?item ?collectionAttribute ?collectionAttributeVal.
            ?collectionAttributeVal ?referencedAttribute ?referencedAttributeVal.
        } select ?referencedAttributeVal -> ?PartNumber.
    # Объединяем значения атрибута «Артикул» в строку,
    # разделённую запятыми.
    (", " ?PartNumber) cmwstring:join ?concatenatedString.
    # Возвращаем результирующую строку.
        ?concatenatedString -> ?value.
    }
  2. Поместите атрибут «Позиции заказа» и «Перечень артикулов» на форму заказа.

  3. Для поля «Позиции заказа» выберите представление в виде таблицы.
  4. В таблицу «Позиции заказа» добавьте атрибут «Артикул» и кнопку «Создать», чтобы создавать и добавлять товары в заказ.

Тестирование

  1. Создайте запись в шаблоне «Заказы».
  2. Создайте несколько позиций заказа и заполните артикулы.
  3. Сохраните заказ.
  4. В перечне артикулов должен отобразиться список артикулов, разделённых запятыми.
К началу