Есть задача, как отфильтровать результаты в контроле «Ссылки», используемом в Web клиенте Docsvision. Контрол располагается в карточке документа, который имеет множество ссылок и все они отображаются, но требовалось отобразить только те, что имеют определенный тип. Я был удивлен, когда узнал, что в настройках контрола через конструктор разметок нет возможности настроить фильтр по типу ссылки, хотя такая возможность была в настройках контрола для Windows клиента. Начал искать пути решения и такое было найдено: реализовать собственное расширение. Ниже приведу пример, который позволяет выполнить задуманное. Не являюсь разработчиком, возможно у вас будет более правильный и элегантный вариант кода:
import { layoutManager } from "@docsvision/webclient/System/LayoutManager";
export function filterLinksByTypeLink(sender, e) {
var cotrolLinks = layoutManager.cardLayout.controls.links;
var linksType = ["8e40f327-9517-4a43-998d-bf2bd619588d", "7db9044e-91b7-447d-8caa-5e5a4967b8d4"];
cotrolLinks.params.linksFilter = function (item) {
if (linksType.includes(item.data.linkTypeId)) {
return true;
};
};
}
Согласно этому коду, мы находим наш контрол, с названием, в данном случае link. Далее в массив linksType передаем идентификаторы тех типов, что необходимо отображать, в данном случае сравнение происходит с свойством linkTypeId.
Кроме этого, возможно выполнить сравнение по:
- cardId — идентификатор карточки;
- cardKindId — идентификатору вида карточки, например, показывать только карточки вида «Входящий»;
- cardTypeId — по типу карточки, например, только типа «Документ» или «Задание»;
- creationDate — по дате создания;
- displayName — по отображаемому имени;
- linkId — по типу ссылки;
- linkTypeName — по названию типа ссылки, например, показывать только с типом ссылки «В ответ на»;
Таким образом, в контроле links будут выведены только те ссылки, что пройдут фильтр, согласно заданным условиям.
Добавить комментарий