api.web Ссылка на список в веб-интерфейсе

Ссылка на список с минимальным набором параметров

  • api.web.list(object, listContentCode)

    Генерация ссылки на список объектов на карточке объекта с минимальным набором параметров.

    Параметры метода:

    • object — объект или UUID объекта, карточка которого открывается при переходе по ссылке. Object;
    • listContentCode — код контента, на который будет производиться позиционирование. String.

    Возвращает строку, содержащая URL-ссылку на контент со списком на карточке объекта.

    Пример. Генерация ссылки на список на карточке объекта с минимальным набором параметров:

    api.web.list('root$401','SpisokObektov')

    Результат:

    http://localhost:8080/sd/operator/?anchor=uuid:root$401!%7B%22tab%22:%22STAB100%22%7D!encoded_prms=encoded_text$596803

  • api.web.list(listTitle, classFqn, attrGroup)

    Генерация ссылки на список объектов на отдельной странице с минимальным набором параметров.

    Параметры метода:

    • listTitle — название списка. String;
    • classFqn — код класса, к которому принадлежат объекты списка. String;
    • values — код группы атрибутов, определенной во всех типах переданного класса, которая определяет колонки списка. String.

    Возвращает:

    • Строка, содержащая URL-ссылку на список объектов на отдельной странице.
    • Пустая строка, если не определены обязательные атрибуты.

    Права: для просмотра списка на отдельной странице пользователь должен обладать правами (группа "Другие права" — право "Просмотр списка объектов на отдельной странице"). Право может быть выдано лицензированным и нелицензированным пользователям.

    Пример. Генерация ссылки на список на отдельной странице с минимальным набором параметров:

    api.web.list('Название списка', 'serviceCall', 'system')

    Результат:

    http://localhost:8080/sd/operator/?anchor=list:!!encoded_prms=encoded_text$596802

Ссылка на список с полным набором доступных параметров

  • api.web.list(builder)

    Генерация ссылки на список объектов с полным набором доступных параметров. Ссылка генерируется на основании параметров, определенных билдером:

    • ссылка на отдельной странице — билдер, определенный api.web.defineListLink(onCard) со значением параметра = false.
    • ссылка на карточке объекта — билдер, определенный api.web.defineListLink(onCard) со значением параметра = true

    Параметр метода:

    • builder — инкапсулирует в себе параметры, необходимые для генерации ссылки на список объектов

    Возвращает:

    • Строка, содержащая URL-ссылку на список объектов.
    • Пустая строка, если не определены обязательные атрибуты

    Права: для просмотра списка на отдельной странице пользователь должен обладать правами (группа "Другие права" — право "Просмотр списка объектов на отдельной странице"). Право может быть выдано лицензированным и нелицензированным пользователям.

  • api.web.defineListLink(onCard)

    Определение билдера, передаваемого в метод api.web.list(builder).

    Параметр метода:

    • onCard — определяет тип генерируемой ссылки: true (на карточке объекта), false (на отдельной странице)

    Возвращает: Объект для генерации ссылки на список объектов. Список формируется с учетом ограничений содержимого списка и расположения постраничной навигации указанные в шаблоне.

Общие методы билдера

  • setTemplate — строка, содержащая код шаблона списков, которому будет соответствовать отображение полученного списка. Необязательный метод.

    При отображении списка на отдельной странице в момент обработки ссылки проверяется точное соответствие:

    • класса/типов шаблона классу/типам объектов самого списка (setClassCode);
    • группы атрибута, указанной в шаблоне, группе атрибутов самого списка (setAttrGroup);
    • типа списка "Простой/Сложный", указанного в шаблоне, типу самого списка (setSimple).

    Если настройки не совпадают, то список не отображается и выводится сообщение об ошибке.

  • setUsers — строка, содержащая UUID пользователей, которым доступна страница. Необязательный метод, по умолчанию значение пусто и особых ограничений к доступу к странице не применяется.
  • setDaysToLive — продолжительность жизни ссылки в днях. Необязательный метод, по умолчанию берутся из параметра файле dbaccess.properties. Если значение в dbaccess.properties неуказано, то оно равно 30 дням.

Методы билдера для списка объектов

  • setListType — тип списка:

    • пустое значение (по умолчанию) — список имеет тип "Список объектов";
    • значение RelObjectList — список имеет тип "Список связанных объектов";
    • значение ChildObjectList — список имеет тип "Список вложенных объектов".
  • setUuid — UUID объекта, относительно которого строится список связанных и вложенных объектов.

    Используется (и обязателен) только если вызывается метод setListType и на его вход переданы значения RelObjectList или ChildObjectList.

    В качестве объекта связи можно указать текущего пользователя или объект, связанный с ним. Для этого в метод передается константа 'currentUser'. Чтобы указать объект, связанный с текущим пользователем, используется конструкция вида 'currentUser.attrCode1.attrCode2, в которой через точку можно указать коды атрибутов объектов типа "Ссылка на бизнес-объект".

    Пример: 'currentUser.Parent.upperOU', где в качестве объекта связи будет взят объект, находящийся в атрибуте upperOU объекта currentUser.Parent. Если список строится относительно 'currentUser', то в интерфейсе пользователя для каждого пользователя будет свой список объектов, взятый из его атрибута.

  • setNested — демонстрация объектов, вложенных во вложенные (параметр "Показывать в списке объекты, вложенные во вложенные" в списках вложенных объектов) и связанных со вложенными (параметр "Показывать в списке объекты, связанные с иерархией" в списках связанных объектов).

    • true — в итоговый список попадут объекты, вложенные во вложенные и связанные со вложенными;
    • false (по умолчанию) — не попадут.

    Используется только если вызывается метод setListType и на его вход переданы значения RelObjectList или ChildObjectList.

  • attrChain — самостоятельный билдер, использующийся для задания иерархии объектов при построении "Списка связанных объектов".

    Используется (и обязателен) только если вызывается метод setListType со значением RelObjectList.

    Билдер имеет следующие методы:

    • attributesChain. В качестве параметра метода передается массив FQN атрибутов для цепи связи (с какого по какой будет связь), аналогично параметрам "Атрибут" и "Построить иерархию объектов (вниз), начиная с объекта".
    • nestedHierarchyAttrFqn. В качестве параметра метода передается код атрибута в цепи ссылок, после которого строится иерархия, аналогично параметру "В иерархии потомки связаны с предками через атрибут". Используется (и обязателен) только если вызывается метод setNested со значением true.
    • nestedAttrLinkFqn. В качестве параметра метода передается код атрибута связи для вложенных объектов, аналогично параметру "Объекты иерархии связаны с объектами списка через атрибут". Используется (и обязателен) только если вызывается метод setNested со значением true.
  • relatedWithNestedParams — альтернативный метод задания параметра "Показывать в списке объекты, связанные с иерархией", в метод передаются три параметра аналогично тому, как они задаются при добавлении контента, а именно:

    • цепочка атрибутов, соответствующая параметру "Построить иерархию объектов (вниз), начиная с объекта";
    • код атрибута, соответствующего параметру "В иерархии потомки связаны с предками через атрибут";
    • цепочка атрибутов, соответствующая параметру "Объекты иерархии связаны с объектами списка через атрибут".
  • setTitle — заголовок страницы со списком объектов.
  • setClassCode — строка, содержащая код класса, которому принадлежат объекты списка
  • setCases — массив, содержащий список кодов типов класса, объекты которых будут отображаться в списке. Необязательный метод: по умолчанию показываются объекты всех типов класса из параметра setClassCode.
  • setAttrGroup — строка, содержащая код группы атрибутов, определенной во всех типах из параметра выше, которая определяет колонки списка. Проверка на корректность указания группы атрибутов происходит на этапе работы метода.
  • setAttrCodes — массив, содержащий перечисление кодов атрибутов из группы, указанной в методе setAttrGroup. Используется для уточнения набора колонок списка на основании переданного перечня кодов атрибутов (аналог "Настройки полей" в списке). Необязательный метод: по умолчанию набор колонок списка определяется группой атрибутов, переданной в методе setAttrGroup.
  • setSimple — представление списка = "Простой список". Необязательный метод: по умолчанию список имеет представление "Сложный список".
  • setPaging — строка, определяющая расположение постраничной навигации (необязательный метод):

    • both — "Над списком и под списком";
    • top — "Над списком";
    • bottom (по умолчанию) — "Под списком".
  • sortAsc — строка, содержащая перечисление кодов атрибутов, по которым будет производиться прямая сортировка списка.

    Необязательный метод, по умолчанию сортировка к списку не применяется.

    Для сортировки доступны атрибуты из группы атрибутов списка.

    Для сортировки по нескольким атрибутам необходимо применить функцию на каждый атрибут в отдельности. Приоритет сортировки определяется порядком применения метода.

    Допустима сортировка атрибутов, присутствующих в группе атрибутов (из setAttrGroup) во всех типах, указанных в setCases.

    Сортировка не применяется при открытии ссылки в браузерах Internet Explorer 8 и 9.

  • sortDesc — строка, содержащая перечисление кодов атрибутов, по которым будет производиться обратная сортировка списка.

    Необязательный метод, по умолчанию сортировка к списку не применяется.

    Для сортировки доступны атрибуты из группы атрибутов списка.

    Для сортировки по нескольким атрибутам необходимо применить функцию на каждый атрибут в отдельности. Приоритет сортировки определяется порядком применения метода.

    Допустима сортировка атрибутов, присутствующих в группе атрибутов (из setAttrGroup) во всех типах, указанных в setCases.

    Сортировка не применяется при открытии ссылки в браузерах Internet Explorer 8 и 9.

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

    Билдер имеет следующие методы:

    • AND. В метод AND в качестве параметра можно передавать значение, полученное применением метода OR.
    • OR. В качестве параметров метода передаются: код атрибута сортировки, код критерия фильтрации и значение фильтрации.

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

    • fastFilter — определяет быструю фильтрацию. В качестве параметра метода передается условие фильтрации filter.OR. Метод сообщает о формировании быстрой фильтрации списка.

      Если для атрибута доступна фильтрация, но недоступна быстрая фильтрация (например атрибуты типов "Лицензия", "Счетчик времени"), то при передаче для таких атрибутов быстрой фильтрации фильтрация применяется верно, однако в операторе никак не отображается.

      Указанная быстрая фильтрация применяется к формируемому списку как быстрая фильтрация, а не как ограничение содержимого списка.

    • fastSubstringFilter — определяет быструю фильтрацию по подстроке. В качестве параметра метода передается условие фильтрации filter.OR. Метод сообщает о формировании быстрой фильтрации списка по подстроке.

      Если для атрибута доступна фильтрация, но недоступна быстрая фильтрация (например атрибуты типов "Лицензия", "Счетчик времени"), то при передаче для таких атрибутов быстрой фильтрации фильтрация применяется верно, однако в операторе никак не отображается.

      Указанная быстрая фильтрация по подстроке применяется к формируемому списку как быстрая фильтрация по подстроке, а не как ограничение содержимого списка.

    • restrictionFilter — определяет ограничение настроек фильтрации списка. В качестве параметров метода передаются: код атрибута сортировки, код типа ограничения настроек фильтрации и значение фильтрации.

      В качестве кодов критериев фильтрации доступны следующие значения:

      • 'LIST' — соответствует ограничению по содержимому в списке. Указывать значение фильтрации в этом случае не нужно.
      • 'SCRIPT' — соответствует ограничению скриптом. В качестве значения фильтрации в этом случае нужно указать код используемого скрипта.

      В итоговой конструкции билдера на одном уровне не могут одновременно применяться методы AND и OR.

      Необязательный метод, по умолчанию ограничение содержимого списка к списку не применяется.

      Контекстные критерии фильтрации, локали пользователя, часовой пояс и другие параметры, от которых может зависеть фильтрация, определяются в момент построения списка в приложении и не передаются в ссылке.

      Ограничение содержимого списка применяется к объектам из списка; для ограничения содержимого списка доступны все атрибуты класса объектов и атрибуты всех вложенных в него типов.

      Допустима сортировка атрибутов, присутствующих в группе атрибутов (из setAttrGroup) во всех типах, указанных в setCases.

    • equals — фильтрация по равенству.

      Оператор equals реализован исключительно для фильтрации по UUID, при попытке фильтрации оператором equals по любому другому атрибуту — фильтрация будет игнорироваться.

      Для фильтрации по UUID доступны все операторы, которые совместимы с атрибутами типа "Строка".

    Особенности определения фильтров для некоторых типов атрибутов:

    1. Набор типов классов должен передаваться как коллекция ClassFqn:

      filter.OR('setOfCases', 'contains', [api.metainfo.getMetaClass('userclass$UserType').getFqn()])

    2. Значение в фильтрации определяется как DTObject, uuid которого равен AttributeFqn объекта:

      filter.OR('<код атрибута объекта списка>', '<критерий фильтрации>', api.metainfo.getMetaClass('<код класса объекта, с атрибутом которого сравниваем>').getAttribute('<код атрибута>').getAttributeFqn())

      Пример фильтра:

      filter.OR('title', 'containsUserAttribute', api.metainfo.getMetaClass('employee').getAttribute('lastName').getAttributeFqn())

    3. Целые числа должны передаваться как Long (то есть, указывая "L" в конце):

      filter.OR('creationDate', 'lastN', 5L)

    4. Статус счетчика должен передаваться как код: ACTIVE("a"), EXCEED("e"), NOTSTARTED("n"), PAUSED("p"), STOPED("s").

      Пример фильтра для статусов "Активен" и "Кончился запас НВ":

      filter.OR('timeAllowanceTimer', 'timerStatusContains', ['e','a'])

      Для критерия фильтрации backTimerDeadLineContains доступны два варианта: Просрочен: "exceed", Не просрочен: "noExceed":

      //filter.OR('timeAllowanceTimer', 'backTimerDeadLineContains', 'exceed')

      filter.OR('timeAllowanceTimer', 'backTimerDeadLineContains', 'noExceed')

Примеры ссылок на список

Пример 1. Генерация ссылки на список на отдельной странице с полным набором параметров:

Copy
def builder = api.web.defineListLink(false).setTitle("Заголовок списка").setClassCode("userclass").setAttrGroup("system");
def filter = builder.filter();
filter.AND(
filter.OR('title', 'contains', 'other'),
filter.OR('metaClass', 'contains', 'userclass$UserType21')
)
.AND(
filter.OR('creationDate', 'fromTo', [new Date().parse("dd.MM.yyyy HH:mm", "29.03.2019 15:59"), null])
)
.AND(
filter.OR('linktosc', 'notContains', utils.get('serviceCall$6602'))
)
.AND(
filter.OR('state', 'titleNotContains', 'Закрыт')
)
builder.sortDesc('title').sortDesc('metaClass');
builder.setCases(['UserType21','UserType22']);
builder.setPaging('both');
builder.setUsers(['superUser$naumen','employee$6403','employee$6401']);
builder.setDaysToLive(2);
builder.setAttrCodes(['title','creationDate']);
//builder.setTemplate("TestovyiShablon");
//builder.setSimple();
api.web.list(builder);

Результат:

http://localhost:18080/sd/operator/?anchor=list:userclass:system::TOP_AND_BOTTOM:!!encoded_prms=encoded_text$579321

Пример 2. Генерация ссылки на список на карточке объекта с полным набором параметров:

Copy
def builder = api.web.defineListLink(true).setUuid('root$401').setListCode('tab1list2');
def filter = builder.filter();
filter.AND(
filter.OR('title', 'contains', 'код-3'),
filter.OR('metaClass', 'contains', 'serviceCall$ACHsc')
)
.AND(
filter.OR('creationDate', 'fromTo', [new Date().parse("dd.MM.yyyy HH:mm", "19.07.2018 18:50"), new
Date().parse("dd.MM.yyyy HH:mm", "19.02.2019 10:00")])
)
.AND(
filter.OR('massProblem', 'contains', false)
)
.AND(
filter.OR('number', 'contains', 3),
filter.OR('number', 'contains', 2)
)
builder.sortDesc('title').sortDesc('creationDate');
builder.setDaysToLive(2);
//builder.setSimple();
api.web.list(builder);

Пример 3. Пример вызова метода с применением быстрой фильтрации:

Copy
def builder = api.web.defineListLink(false).setTitle("Заголовок списка").setClassCode("UserClass").setAttrGroup("system");
def filter = builder.filter();
filter.fastFilter(
filter.OR('title', 'contains', 'KKK')
);
builder.setPaging('bottom');
api.web.list(builder);

Пример 4. Пример вызова сигнатуры для передачи быстрой фильтрации по подстроке:

Copy
def filter = builder.filter();
filter.fastSubstringFilter(
filter.OR('metaClass', 'titleContains', 'dddddd'),
);

Пример 5. Пример получения ссылки на список на отдельной странице, построенный на базе списка связанных объектов:

Copy
def builder = api.web.defineListLink(false).setTitle("Заголовок списка").setClassCode("ou").setAttrGroup("system").setUuid('root$501').setListType('RelObjectList').setNested(true);
def attrChain = builder.attrChain();
attrChain.attributesChain('root@NboOU','ou@author').nestedHierarchyAttrFqn('root@NboOU').nestedAttrLinkFqn('ou@parent');
api.web.list(builder);

Пример 6. Пример получения ссылки на список на отдельной странице, построенный на базе списка связанных объектов с использованием иерархии:

Copy
def builder = api.web.defineListLink(false).setTitle("Заголовок списка").setClassCode("team").setUuid('ou$4001').setAttrGroup("system").setListType('RelObjectList');
builder.relatedWithNestedParams(['ou@currentObject'], 'ou@parent', ['ou@currentObject', 'ou@head', 'employee@teams']);
api.web.list(builder);

Пример 7. Вызов сигнатуры для передачи ограничения настроек фильтрации:

Copy
//Ограничение по содержимому в списке
def filter = builder.filter();
filter.restrictionFilter(
filter.OR('UserClass@NBO', 'LIST', )
);

//Ограничение скриптом
filter.restrictionFilter(
filter.OR('UserClass@NBO', 'SCRIPT', 'titleScript')
);

Пример 8. Вызов сигнатуры для передачи ограничения настроек фильтрации по атрибуту "Статус":

//Ограничение по содержимому в списке
def builder = api.web.defineListLink(false)
builder.setTitle("Не закрытые задачи на пользователях")
    .setClassCode('serviceCall')
    .setAttrGroup('system')
def filter = builder.filter()
filter.AND(filter.OR('state', 'contains', 'serviceCall:closed'))
return api.web.list(builder)

Пример 9. Вызов сигнатуры для передачи ограничения настроек фильтрации, где атрибут фильтрации определяется через цепочку ссылочных атрибутов:

//Ограничение по содержимому в списке
def builder = api.web.defineListLink(false)
builder.setTitle("Сотрудники с не закрытыми запросами")
   .setClassCode('employee')
   .setAttrGroup('system')
def filter = builder.filter()
filter.AND(filter.OR('serviceCalls.state', 'contains', 'serviceCall:closed'))
return api.web.list(builder)

Пример 10. В результирующем списке будут отображаться все объекты ou, UUID которых равен ou$2021:

def builder = api.web.defineListLink(false)
   .setTitle('Название списка')
   .setClassCode('ou')
   .setAttrGroup('system')
def filter = builder.filter()
filter.AND(filter.OR('UUID', 'equals', 'ou$2021'))
api.web.list(builder)