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

Атрибут типа «Список значений». Фильтрация связанных записей по значению атрибута с помощью N3

Введение

В ряде случаев требуется отображать записи с определённым значением атрибута типа «Список значений».

Здесь представлен пример настройки фильтрации записей связанного шаблона по значению атрибута типа «Список значений».

См. также подробное описание и другие примеры использования атрибута типа «Список значений».

Структура атрибута типа «Список значений»

  • Атрибут типа «Список значений» хранит ID значения, выбранного из предварительно заданного списка.
  • Список возможных значений настраивается в свойствах атрибута и не может быть изменён при выполнении приложения.
  • Каждое возможное значение содержит:
    • Системное имя значения.
    • Отображаемые названия на русском, английском и немецком языках (достаточно указать название на одном языке).
    • Цвет — числовой код в десятичном формате. Для поиска кодов цветов и их преобразования из шестнадцатеричной в десятичную форму можно воспользоваться, например, сайтом https://convertingcolors.com/.
    • Значок — строка с кодом FontAwesome. Для поиска кодов значков можно воспользоваться встроенной галереей значков или сайтом https://fontawesome.com/.

Фильтрация значения атрибута с помощью N3

С помощью N3 для атрибута типа «Список значений» можно выполнять фильтрацию по системному имени его значения:

  • Фильтрация (в таблице шаблона) записей с требуемым значением атрибута:

    @prefix convert: <http://comindware.com/logics/convertions#>. 
    @prefix object: <http://comindware.com/ontology/object#>.
    {
    # Получаем атрибут типа «Список значений» из шаблона по системному имени.
    ("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.
    # Получаем ID значения атрибута по системному имени.
    ("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId.
    # Возвращаем записи, у которых атрибут имеет значение "enumValueSystemName".
    ?item ?enumAttribute ?enumValueId.
    }
  • Фильтрация добавляемых записей (в таблице на форме или раскрывающемся списке на форме) записей с требуемым значением атрибута:

    @prefix convert: <http://comindware.com/logics/convertions#>. 
    @prefix object: <http://comindware.com/ontology/object#>.
    {
    # Получаем атрибут типа «Список значений» из шаблона по системному имени.
    ("TemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.
    # Получаем ID значения атрибута по системному имени.
    ("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId.
    # Фильтруем и возвращаем записи,
    # у которых атрибут имеет значение "enumValueSystemName".
    ?filteredRecordIds ?enumAttribute ?enumValueId.
    ?filteredRecordIds -> ?value.
    }

  • Фильтрация отображаемых записей (в таблице на форме, раскрывающемся списке на форме, вычисляемом атрибуте или правиле для формы) записей с требуемым значением атрибута:

    @prefix convert: <http://comindware.com/logics/convertions#>. 
    @prefix object: <http://comindware.com/ontology/object#>.
    {
    # Получаем атрибут типа «Запись» из шаблона с коллекцией записей.
    ("ParentTemplateSystemName" "RecordAttributeSystemName") object:findProperty ?RecordAttribute.
    # Получаем атрибут типа «Список значений» из связанного шаблона по системному имени.
    ("LinkedTemplateSystemName" "EnumAttributeSystemName") object:findProperty ?enumAttribute.
    # Получаем ID значения атрибута по системному имени.
    ("EnumAttributeSystemName" "enumValueSystemName") convert:enumValue ?enumValueId.
    # Получаем коллекцию записей из атрибута RecordAttribute.
    ?item ?RecordAttribute ?filteredRecordIds.
    # Фильтруем и возвращаем записи,
    # у которых атрибут имеет значение "enumValueSystemName".
    ?filteredRecordIds ?enumAttribute ?enumValueId.
    ?filteredRecordIds -> ?value.
    }

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

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

В шаблоне «Заявки на перевозку» имеется атрибут «Статус» типа «Список значений».

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

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

  • Имеется шаблон записи «Заявки на перевозку» (с системным именем Заявкинаперевозку).
  • В шаблоне «Заявки на перевозку» есть атрибут «Статус» типа «Список значений» с системным именем Статус и следующими значениями:

    Системное имя RU
    Overdue Просрочена
    Timely В срок
    Cancelled Отменена
  • В шаблоне «Клиенты» имеется атрибут «Заявки на перевозку»:

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

Распределение заявок по значению атрибута список значений

  1. Откройте для редактирования форму шаблона «Клиенты».
  2. Поместите на форму атрибут «Заявки на перевозку».
  3. Настройте представление атрибута «Заявки на перевозку» в виде таблицы.
  4. Добавьте в таблицу «Заявки на перевозку» атрибут «Статус».
  5. Добавьте в область кнопок таблицы «Заявки на перевозку» кнопку «Создать».
  6. Поместите повторно на форму атрибут «Заявки на перевозку».
  7. Настройте свойства поля «Заявки на перевозку»:

    • Отображаемое название: Просроченные заявки
    • Представление: таблица
    • Фильтр — Отображаемые записи: N3
    # Импортируем функции для работы 
    # с записями, строками и базой данных.
    @prefix object: <http://comindware.com/ontology/object#>.
    @prefix convert: <http://comindware.com/logics/convertions#>.
    {
        # Находим атрибут «Заявки на перевозку» в шаблоне «Клиенты».
    ("Клиенты" "Заявкинаперевозку") object:findProperty ?TransportRequestsAttribute.
    # Находим атрибут «Статус» в шаблоне «Заявки на перевозку».
        ("Заявкинаперевозку" "Статус") object:findProperty ?StatusAttribute.
        # Берём значения ?TransportRequestsAttribute
    # и помещаем в ?TransportRequestsValue.
    ?item ?TransportRequestsAttribute ?TransportRequestsValue.
    # Находим ID значения Overdue «Просрочена»
    # атрибута «Статус».
        ("Статус" "Overdue") convert:enumValue ?enumIdOverdue.
    # Фильтруем ?TransportRequestsValue
    # по значению ?StatusAttribute равному ?enumIdOverdue.
        ?TransportRequestsValue ?StatusAttribute ?enumIdOverdue.
        # Возвращаем отфильтрованные значения из ?TransportRequestsValue.
    ?TransportRequestsValue -> ?value.
    }
  8. Сохраните форму.

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

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