Имеется возможность создания собственных поисков договоров с помощью динамического кода.
Так же существуют предустановленные алгоритмы поиска, которые можно включить в пункте меню: Сервис => Настройка => Менеджер договоров, далее на вкладке "Настройка поиска договоров".
(После создания собственных реализаций поиска, необходимо будет точно так же включить их)
После выбора одного или нескольких реализаций поиска, они станут активны на экране "Поиск договора". После начала ввода данных в поле "Номер договора(комментарий)", после каждого введённого символа строка с поисковым запросом вызывает метод проверки (check) у каждой реализации поиска.
Алгоритм реализации поиска договоров представляет из себя реализацию интерфейса ru.bitel.bgbilling.kernel.contract.search.common.ContractSearchable
Метод check()
Данный метод существует для проверки на предмет соответствия вводимых данных с логикой реализации поиска (например, в поле ИНН могут быть только цифры, метод check проверяет это условие и если указанные данные проходят данное условие, то реализация поиска появляется в выпадающем списке под полем для ввода номера договора)
Метод search()
Результирующий список содержит объекты типа JSONObject в котором могут находится любые данные, но для того, чтобы договор мог быть открыт, каждый JSON должен содержать id договора под ключом cid (константа ContractSearchable.CONTRACT_ID).
Метод metadata()
Данный метод возвращает JSONObject с параметрами, которые могут помочь в корректности отображения результатов поиска.
Для каждой записи есть возможность указать цвет, которым будет отображена запись в результирующем списке или таблице.
Так же есть возможность указать читабельное название каждого поля. Для этого необходимо реализовать метод metadata(), пример его реализации показан ниже.
Исходя из порядка полей в titles будет формироваться очередность выстраивания столбцов или списка.
При выстраивании таблицы есть возможность задать ширину для определённого столбца, для этого в titles для нужного столбца необходимо указать ширину под ключом "WIDTH"(ContractSearchable.WIDTH).
Форматирование результатов поиска (в режиме список)
Для встроенных режимов поиска форматирование результата поиска можно задать в конфигурации сервера, по умолчанию используется следующий
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(справа)