Здравствуйте!
Читаю доки второй день, но так и не смог найти, как собственными силами добавить ссылку на любой из Экранов к обычной кнопке, по аналогии <item screen="User.browse"/>
из файла meny.xml.
Это работает через <groupTable …/>, но мне не нужно, что бы под кнопкой отображалась лишняя таблица, нужно, что бы кнопка просто ссылалась на другой Экран. )
Подскажите пожалуйста, как это делается?
Честно, прочитал три раза, но не понял Откуда надо вызвать любой экран… И причем тут “мне не нужно, что бы под кнопкой отображалась лишняя таблица”…
Вызывать любой экран с кнопки на экране, то используйте ScreenBuilders и открывайте любой нужный экран в любом режиме.
Пытаюсь, к любой button привязать событие, которое ссылается на удобный мне Экран. Подобные кнопки реализованы в файле menu.xml через атрибуты , которые отображаются в side.meny Экрана main-screen. Но атрибуты работают только в файле menu.xml. Пытаясь их добавить в другой файл xml Экрана, возникает ошибка.
Желаемый мне результат можно получить из AddAction, но этот action работает только внутри таблиц и т.п., Вот пример:
<groupTable id="toolsGroupTable" dataContainer="documentsDc" >
<actions>
<action id="addDoc" type="add">
<properties>
<property name="openMode" value="THIS_TAB"/>
<property name="screenClass" value="ru.comp.screen.documents.DocumentsBrowse"/>
</properties>
</action>
</actions>
<buttonsPanel alwaysVisible="true">
<linkButton id="documents1" action="toolsGroupTable.addDoc"
stylename="side-meny-contract-button"
icon="branding/documents.svg"
caption="Документы"/>
</buttonsPanel>
</groupTable>
Но в случае такой реализации, кнопка не только ссылается на нужный мне Экран, но и отображает под собой таблицу. А если я вывожу это action за пределы groupTable, пытаясь просто прицепить это действие к нужной кнопке. Убирая action вверх xml файла Экрана к другим actions, таким как “windowCommitAndClose” и “windowClose”, а саму кнопку вывожу за пределы groupTable. То при нажатии на эту кнопку получаю исключение: IllegalStateException: AddAction target is not set
Вызывать любой экран с кнопки на экране, то используйте ScreenBuilders и открывайте любой нужный экран в любом режиме.
Понял. Спасибо!
Естественно, вы создали Action, связанный с таблицей и пытаетесь его использовать где-то на кнопке, не связанной с этой таблицей.
Просто размещайте кнопку где надо на экране:
<layout spacing="true" expand="editActions">
<form id="form" dataContainer="newEntityDc">
<column width="350px">
<textField id="field1Field" property="field1"/>
<textField id="sumWithDiscount"/>
<button id="userScreenButton"/>
</column>
</form>
......
В контроллере обрабатывайте ее нажатие и открывайте нужный экран:
....
@Subscribe("userScreenButton")
public void onScreenButtonClick(Button.ClickEvent event) {
screenBuilders.screen(this)
.withScreenClass(UserEdit.class)
.withOpenMode(OpenMode.DIALOG)
.build()
.show();
}
.....
Или создайте в контроллере действие для кнопки, которое будет аналогично вызывать screenBuilders
.