Page tree
Skip to end of metadata
Go to start of metadata

Имеется возможность создания собственных поисков договоров с помощью динамического кода.

Так же существуют предустановленные алгоритмы поиска, которые можно включить в пункте меню:  Сервис => Настройка => Менеджер договоров, далее на вкладке "Настройка поиска договоров".

(После создания собственных реализаций поиска, необходимо будет точно так же включить их)

 Включение поиска договоров

После выбора одного или нескольких реализаций поиска, они станут активны на экране "Поиск договора". После начала ввода данных в поле "Номер договора(комментарий)", после каждого введённого символа строка с поисковым запросом вызывает метод проверки (check) у каждой реализации поиска.

Алгоритм реализации поиска договоров представляет из себя реализацию интерфейса ru.bitel.bgbilling.kernel.contract.search.common.ContractSearchable

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). 

Пример реализации метода getTitles
 @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(справа)


  • No labels