Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

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

...

Блок кода
languagejava
titleContractSearchable
collapsetrue
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 и помещается в результирующий JSONArrayJSONObject под ключом ContractSearchable.TITLES
     * Ключ для названия должен совпадать с ключом в списке возвращаемом методом search()
     *
     * Т.е. если search возвращает {contractTitle:title}, то getTitlesmetadata должен вернуть содержать JSONArray под ключом ContractSearchable.TITLES,
     * в котором список JSONObject {contractTitle:Название договора}
     * @return
     */
    public JSONArrayJSONObject getTitlesmetadata();

    /**
     * Возвращает текстовое описание данного поиска.
     * Например, "Поиск по IP-адресу"
     * @return
     */
    public String getTitle();
}

...

Результирующий список содержит объекты типа JSONObject в котором могут находится любые данные, но для того, чтобы договор мог быть открыт, каждый JSON должен содержать id договора под ключом cid (константа ContractSearchable.CONTRACT_ID).

Метод getTitlesmetadata()

Данный метод возвращает JSONObject с параметрами, которые могут помочь в корректности отображения результатов поиска.


Для каждой записи есть возможность указать цвет, которым будет отображена запись в результирующем списке или таблице.

Так же есть возможность указать читабельное название каждого поля. Для этого необходимо реализовать метод getTitlesmetadata(), пример его реализации показан вышениже.

Исходя из порядка полей в getTitles() titles будет формироваться очередность выстраивания столбцов или списка.

При выстраивании таблицы есть возможность задать ширину для определённого столбца, для этого в getTitles() titles для нужного столбца необходимо указать ширину под ключом "WIDTH"(ContractSearchable.WIDTH). 

Блок кода
languagejava
titleПример реализации метода getTitles
collapsetrue
 @Override
    public JSONArrayJSONObject getTitlesmetadata()
    {
        JSONObject metadata = new JSONObject();

        JSONArray titles = new JSONArray();
        titles.put( getTitleContractId( "ID договора" ) );
        titles.put( getTitleContractTitle( "Название договора" ) );
        titles.put( getTitle( NUMBERSERVICE_LOGIN, "НомерЛогин", 100120 ) );
        titles.put( getTitle( DEVICESERVICE_IDSTATUS, "IDСтатус устройствасервиса", 50 ) );

       titles metadata.put( getTitle( ACCOUNT_STATE, "Состояние устройства", 50 ) );
        return titles;
    }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(справа)