Выборка определённых элементов из списка с помощью N3


Введение

Comindware Platform позволяет осуществлять выборку из данных списков (коллекций) по определённым условиям.

Это может быть полезно, когда требуется выбрать из набора данных элементы, соответствующие заданным критериям.

Здесь приведён пример вычисления списка позиций заказа, которые ещё не поступили на склад.

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

В бизнес-процессе обработки заказов необходимо реализовать следующий сценарий:

  • Пользователь видит список всех доступных позиций (например, товары и услуги).
  • Пользователь добавляет требуемые позиции в заказ.
  • В списке для выбора требуется показывать пользователю только позиции, которые ещё не добавлены в заказ.

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

Имеется два шаблона записей: «Заказы» и «Позиции».

В шаблоне «Заказы» имеются атрибуты «Все позиции», «Позиции заказа» и «Доступные позиции» со следующими свойствами:

  • Тип данных: запись
  • Связанный шаблон: Позиции
  • Хранить несколько значений: флажок установлен

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

  1. В свойствах атрибута «Все позиции» установите флажок «Вычислять автоматически» и введите вычисляемое значение в виде формулы:

    from a in db->Позиции select a->id 
  2. В свойствах атрибута «Доступные позиции» установите флажок «Вычислять автоматически» и введите вычисляемое значение на N3:

    # Импортируем функции для работы 
    # с атрибутами, списками и системные функции
    @prefix object: <http://comindware.com/ontology/object#>.
    @prefix list: <http://www.w3.org/2000/10/swap/list#>.
    @prefix assert: <http://comindware.com/logics/assert#>.
    {
    # Получаем атрибут «Все позиции».
    ("Заказ" "Всепозиции") object:findProperty ?allArticlesAttribute.
    # Получаем атрибут «Позиции заказа».
    ("Заказ" "Позициизаказа") object:findProperty ?orderArticlesAttribute.

    # Для каждой позиции проверяем,
    # добавлена ли она уже на склад.
    from {
    # Получаем список всех имеющихся позиций.
    ?item ?allArticlesAttribute ?article.
    {
    # Проверяем, заказана ли позиция.
    ?item ?orderArticlesAttribute ?orderArticle.
    ?orderArticle == ?article.
    }
    assert:count ?orderedQuantity.
    # Если позиция не заказана (?orderedQuantity == 0),
    # она считается доступной.
    ?orderedQuantity == 0.
    } select ?article -> ?availableArticlesList.
    # Возвращаем список доступных позиций.
    ?availableArticlesList list:member ?value.
    }
  3. Поместите атрибуты «Все позиции», «Позиции заказа» и «Доступные позиции» на форму шаблона «Заказы» и выберите для них представление «Таблица».

  4. Для таблицы «Позиции заказа» добавьте кнопку «Добавить» и в раскрывающемся списке «Добавляемые записи» укажите атрибут «Доступные позиции».

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

  1. Создайте несколько позиций.
  2. Создайте заказ и добавьте в него любую позицию.
  3. Добавленная позиция должна пропасть из таблицы «Доступные позиции».
  4. Добавьте в заказ ещё одну позицию, в списке должны отображаться только доступные позиции.
К началу


Номер Статьи: 5106
Размещено: Thu, Jun 19, 2025
Последнее обновление: Thu, Jun 19, 2025

Online URL: https://kb.comindware.ru/article/vyborka-opredelennyh-elementov-iz-spiska-s-pomoshyu-n3-5106.html