Имеется возможность создания собственных поисков договоров с помощью динамического кода.
Так же существуют предустановленные алгоритмы поиска, которые можно включить в пункте меню: Сервис => Настройка => Менеджер договоров, далее на вкладке "Настройка поиска договоров".
(После создания собственных реализаций поиска, необходимо будет точно так же включить их)
Раскрыть | ||
---|---|---|
| ||
После выбора одного или нескольких реализаций поиска, они станут активны на экране "Поиск договора". После начала ввода данных в поле "Номер договора(комментарий)", после каждого введённого символа строка с поисковым запросом вызывает метод проверки (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 и помещается в результирующий JSONObject под ключом ContractSearchable.TITLES
* Ключ для названия должен совпадать с ключом в списке возвращаемом методом search()
*
* Т.е. если search возвращает {contractTitle:title}, то metadata должен содержать JSONArray под ключом ContractSearchable.TITLES,
* в котором список JSONObject {contractTitle:Название договора}
* @return
*/
public JSONObject metadata();
/**
* Возвращает текстовое описание данного поиска.
* Например, "Поиск по IP-адресу"
* @return
*/
public String getTitle();
}
|
Метод check()
Данный метод существует для проверки на предмет соответствия вводимых данных с логикой реализации поиска (например, в поле ИНН могут быть только цифры, метод check проверяет это условие и если указанные данные проходят данное условие, то реализация поиска появляется в выпадающем списке под полем для ввода номера договора)
Метод search()
Результирующий список содержит объекты типа JSONObject в котором могут находится любые данные, но для того, чтобы договор мог быть открыт, каждый JSON должен содержать id договора под ключом cid (константа ContractSearchable.CONTRACT_ID).
Метод metadata()
Данный метод возвращает JSONObject с параметрами, которые могут помочь в корректности отображения результатов поиска.
Для каждой записи есть возможность указать цвет, которым будет отображена запись в результирующем списке или таблице.
Так же есть возможность указать читабельное название каждого поля. Для этого необходимо реализовать метод metadata(), пример его реализации показан ниже.
Исходя из порядка полей в titles будет формироваться очередность выстраивания столбцов или списка.
При выстраивании таблицы есть возможность задать ширину для определённого столбца, для этого в titles для нужного столбца необходимо указать ширину под ключом "WIDTH"(ContractSearchable.WIDTH).
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
@Override
public JSONObject metadata()
{
JSONObject metadata = new JSONObject();
JSONArray titles = new JSONArray();
titles.put( getTitleContractId( "ID договора" ) );
titles.put( getTitleContractTitle( "Название договора" ) );
titles.put( getTitle( SERVICE_LOGIN, "Логин", 120 ) );
titles.put( getTitle( SERVICE_STATUS, "Статус сервиса", 50 ) );
metadata.put( TITLES, metadata );
return metadata;
} |
Форматирование результатов поиска (в режиме список)
Для встроенных режимов поиска форматирование результата поиска можно задать в конфигурации сервера, по умолчанию используется следующий
Блок кода |
---|
client.gui.contract.search.list.layout=[{text:"${contractTitle}",font:{name:"Monospaced",size:16,style:1},anchor:10,hAlign:0,insets:{l:5,b:2,r:5,t:2}},{text:"${comment}",fill:2,weightx:1.0,fColor:6316128,font:{size:14,style:2},insets:{l:20,b:0,r:20,t:0}},{text:"ID# ${cid}",fColor:10526880,width:100,anchor:17}] |
Для пользовательских реализаций форматирование передается через metadata
Блок кода |
---|
JSONObject cell1Font = new JSONObject();
cell1Font.put( "name", "Monospaced" );
cell1Font.put( "size", 16 );
cell1Font.put( "style", 1 ); // жирный шрифт
JSONObject cell1Insets = new JSONObject();
cell1Insets.put( "l", 5 ); // отступ слева
cell1Insets.put( "b", 2 ); // отступ снизу
cell1Insets.put( "r", 5 ); // отступ справа
cell1Insets.put( "t", 2 ); // отступ сверху
JSONObject cell1 = new JSONObject();
cell1.put( "text", "${contractTitle}" );
cell1.put( "font", cell1Font );
cell1.put( "hAlign", 0 ); // выровлять по левому краю
cell1.put( "anchor", 10 ); //
cell1.put( "insets", cell1Insets );
JSONArray grid = new JSONArray();
grid.put( cell1 );
grid.put( ... );
JSONObject listLayout = new JSONObject();
listLayout.put( "grid", grid );
metadata.put( "listLayout", listLayout ); |
Форматирование задается в виде объектов JLabel размещенных на JPanel с GridBagLayout
для каждого JLabel можно указать
text - выводимый текст, возможны вариант, просто текст, пеле из результатов поиска ${contractTitle} или комбинация текст + поле(я)
font - шрифт с параметрами, name название шрифта или семейства, size размер шрифта, style стиль шрифта (жирный, курсив, обычный или их комбинация)
fColor - цвет текста
hAlign - горизонтальное выравнивание текства в JLabel
width - ширина JLabel
и задать свойства GridBagConstraints задающего размещение JLabel на панели
gridx, gridy - столбец и строка
gridwidth, gridheight - количество ячеек занимаемых по ширине и высоте
weightx, weighty - растяжение по ширине и высоте внутри ячейки
anchor - притяжение JLabel к сторонам ячейки
fill - заполнение ячейки
insets - отступы t(сверху), l(слева), b(снизу), r(справа)