.. _gsauto_ug_selection: Объект выборки ============== Доступ к главной выборке: .. code-block:: java :caption: Получение главной выборки формы Selection mainSelection = form.mainSelection(); Доступ к детальной выборке: .. code-block:: java :caption: Получение детальной выборки по имени и представлению Selection selection = form.selection("gtk-ru.bitec.app.gs3.qa.composer.collections.Gs3_QACollectionFirst", "List_idReference"); .. seealso:: - API: :java:type:`ru.bitec.gs.automation.client.ui.Selection ` - API: :java:type:`ru.bitec.gs.automation.client.ui.AbstractForm ` - API: :java:meth:`AbstractForm#mainSelection() ` - API: :java:meth:`AbstractForm#selection(String, String) ` - Руководство пользователя: :ref:`gsauto_ug_forms` Операции с выборкой ------------------- В контексте выборки можно выполнять ряд стандартных операций. Выполнение операции: .. code-block:: java :caption: Выполнение операции выборки selection.executeOperation("mm_forms_ReferenceMdiCard"); Выполнение JEXL-скрипта: .. code-block:: java :caption: Выполнение JEXL-скрипта selection.executeJexl("selection.setVar('scaption', 'Название 2')"); .. seealso:: - Руководство пользователя :ref:`gsauto_ug_server_setup` - Конфигурация: :xsd:attr:`Configuration.Client.Automation.operExecution` - Конфигурация: :xsd:attr:`Configuration.Client.Automation.jexlExecution` - Руководство пользователя: :ref:`gsauto_ug_annotations` Выбор записи выборки по заданным критериям: .. code-block:: java :caption: Выбор записи Map propertyMap = new HashMap<>(); propertyMap.put("id", 60); Object locateResult = selection.locate(propertyMap, new Selection.LocateOption[] {Selection.LocateOption.Nearest, Selection.LocateOption.Next}); .. seealso:: - API: :java:meth:`Selection#locate(Map, Selection.LocateOption[])` - API: :java:type:`ru.bitec.gs.automation.client.ui.Selection.LocateOption ` Доступ к элементам выборки -------------------------- В объекте выборки доступны её :java:type:`разметка ` и :java:type:`фрейм `. На фрейме доступны :java:type:`панель инструментов `, :java:type:`панель вкладок` и :java:type:`представление выборки`. .. code-block:: java :caption: Получение элементов выборки Layout layout = selection.layout(); Frame frame = layout.frame(); ToolBar toolBar = frame.toolbar(); TabPanel tabPanel = frame.tabpanel(); AbstractView view = frame.view(); Панель инструментов позволяет взаимодействовать с её кнопками. .. code-block:: java :caption: Нажатие кнопки в панели инструментов ToolBar toolBar = frame.toolbar(); ToolButton closeButton = toolBar.button(StandardOperations.CLOSE_FORM_CANCEL); closeButton.click(); Панель вкладок позволяет переключаться между вкладками формы. .. code-block:: java :caption: Переключение между вкладками TabPanel tabPanel = frame.tabpanel(); tabPanel.itemByCaption("Коллекция первая").click(); tabPanel.itemByCaption("Коллекция вторая").click(); .. note:: Панель вкладок можно получить и через :java:type:`компоновщик` разметки выборки: .. code-block:: java :caption: Получение панели вкладок через компоновщик frame.layout().composer().tabpanel().itemByCaption("Коллекция первая"); .. seealso:: - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.Layout ` - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.composer.Composer ` - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.bar.ToolBar ` - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.tab.TabPanel ` Представление выборки --------------------- Перед использованием :java:type:`представления выборки` нужно привести его к конкретному типу. .. code-block:: java :caption: Получение представления AbstractView view = frame.view(); if ( view != null) { if ( view.is(Grid.class) ) { Grid grid = view.cast(); } else if ( view.is(Card.class) ) { Card card = view.cast(); } } Типы представления :java:type:`Card` и :java:type:`Grid` являются основными типами представления выборки. Общий принцип работы с представлениями: - Получить с представления :java:type:`поле` по его названию. - Получить значение из этого поля или установить новое значение. - Повторить для других полей на представлении. .. seealso:: - Руководство пользователя: :ref:`gsauto_ug_fields` - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.view.card.Card ` - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.view.table.Grid ` Карточное представление (Card) `````````````````````````````` Использование полей на карточном представлении: .. code-block:: java :caption: Работа с полем на карточным представлением Field field = card.field("SCAPTION"); Object originalValue = field.value(); field.setValue("Новый заголовок"); Если редактор в поле является "редактором с кнопками", то нужно кликнуть кнопкой мышки в нужную кнопку редактора. Это вернет соответствующий редактор выбора. С редактором выбора нужно взаимодействовать исходя из его структуры. .. code-block:: java :caption: Открытие редактора по кнопке ComboBox field = card.field("PCOMBOBOX"); List buttons = field.buttons(); // (1) AbstractButtonsInputBox.InboxButton button = buttons.get(0); button.click(); // (2) GridDropDown dropDown = field.waitDropdown(); // (3) Rows rows = dropDown.getRows(); // (4) int lastRowIndex = rows.size() - 1; Row row = dropDown.getRowByIndex(lastRowIndex); // (5) row.click(); // (6) В примере используется "поле с :java:type:`комбобоксом`". Действия: 1. Из поля получается список кнопок 2. Выполняется клик кнопкой мышки в самую первую кнопку редактора (индексация начинается с нуля) 3. Выполняется ожидание появления выпадающего списка комбобокса 4. Из комбобокса получаются все строки списка (используются для вычисления количества строк) 5. Ищется последняя строка по индексу (индексация начинается с нуля) 6. Выполняется клик кнопкой мышки в найденную строку. В результате, в поле вводится выбранное значение. Табличное представление (Grid) `````````````````````````````` В :ref:`табличном представлении` необходимо учитывать положение :java:type:`ячейки `, так как поле связано с конкретной :java:type:`строкой ` и :java:type:`столбцом`: .. code-block:: java :caption: Работа с полем на табличном представлении Cell cell = grid.getCell(42, "SMEMO"); MemoBox memoBox = cell.field(); memoBox.setValue("Новая заметка"); Ссылка на ячейку получается по индексу (начиная с нуля) строки и названию поля, отображаемого в колонке. .. seealso:: - Руководство пользователя: :ref:`gsauto_ug_grid`