Имеется возможность создания собственных поисков договоров с помощью динамического кода.
Так же существуют предустановленные алгоритмы поиска, которые можно включить в пункте меню: Настройка => Управление договорами, далее на вкладке "Настройка поиска договоров".
(После создания собственных реализаций поиска, необходимо будет точно так же включить их)
Раскрыть | ||
---|---|---|
| ||
После выбора одного или нескольких реализаций поиска, они станут активны на экране "Поиск договора". После начала ввода данных в поле "Номер договора(комментарий)", после каждого введённого символа строка с поисковым запросом вызывает метод проверки (check) у каждой реализации поиска. Данный метод существует для проверки на предмет соответствия вводимых данных с логикой реализации поиска (например, в поле ИНН могут быть только цифры, метод check проверяет это условие и если указанные данные проходят данное условие, то реализация поиска появляется в выпадающем списке под полем для ввода номера договора)
Алгоритм реализации поиска договоров представляет из себя реализацию интерфейса ru.bitel.bgbilling.kernel.contract.search.common.ContractSearchable
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
public interface ContractSearchable
{
//для возможности установки цвета шрифта
String COLOR_RED = "red";
String COLOR_BLUE = "blue";
String COLOR_GREEN = "green";
//наиболее часто используемые ключи
String CONTRACT_ID = "cid";
String CONTRACT_TITLE = "contractTitle";
String CONTRACT_BALANCE = "balance";
String COMMENT = "comment";
String COLOR = "color";
String WIDTH = "width";
/**
* Реализация проверки указанных данных под условия данного поиска.
*
* @param searchData указанные данные для поиска
* @return true - если подходит под условие
*/
public boolean check( String searchData );
/**
* Реализация выгрузки
* @param searchData - поисковой запрос
* @param moduleId - id модуля для которого выбран поиск. 0, если ядро
* @param filters - набор фильтров выбранных в клиенте для поиска
* @param pageHolder - данные для построничного просмотра результатов
*
* @return возвращает список JSON-объектов по которому будет строиться итоговая таблица результата
*/
public List<JSONObject> search( String searchData,
int moduleId,
ContractSearchableFilters filters,
Holder<Page> pageHolder )
throws BGException;
/**
* Возможность указать читабельные названия для полей в результате поиска.
* Каждое поле указывается отдельным JSONObject и помещается в результирующий JSONArray
* Ключ для названия должен совпадать с ключом в списке возвращаемом методом search()
*
* Т.е. если search возвращает {contractTitle:title}, то getTitles должен вернуть {contractTitle:Название договора}
* @return
*/
public JSONArray getTitles();
/**
* Возвращает текстовое описание данного поиска.
* Например, "Поиск по IP-адресу"
* @return
*/
public String getTitle();
}
|
Результирующий список содержит объекты типа JSONObject в котором могут находится любые данные, но для того, чтобы договор мог быть открыт, каждый JSON должен содержать id договора под ключом cid (константа ContractSearchable.CONTRACT_ID).
Для каждой записи есть возможность указать цвет, которым будет отображена запись в результирующем списке или таблице.
Так же есть возможность указать читабельное название каждого поля. Для этого необходимо реализовать метод getTitles(), пример его реализации показан выше.
Исходя из порядка полей в getTitles() будет формироваться очередность выстраивания столбцов или списка.
При выстраивании таблицы есть возможность задать ширину для определённого столбца, для этого в getTitles() для нужного столбца необходимо указать ширину под ключом "WIDTH"(ContractSearchable.WIDTH).
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
@Override
public JSONArray getTitles()
{
JSONArray titles = new JSONArray();
titles.put( getTitleContractId( "ID договора" ) );
titles.put( getTitleContractTitle( "Название договора" ) );
titles.put( getTitle( NUMBER, "Номер", 100 ) );
titles.put( getTitle( DEVICE_ID, "ID устройства" ) );
titles.put( getTitle( ACCOUNT_STATE, "Состояние устройства", 50 ) );
return titles;
} |