1.7.2. Контроллер экрана редактирования договора
Перейдите на вкладку Controller и замените ее содержимое на следующий код:
package com.company.bpmdemo.web.contract;
import com.haulmont.cuba.gui.components.AbstractEditor;
import com.company.bpmdemo.entity.Contract;
import com.haulmont.bpm.entity.ProcAttachment;
import com.haulmont.bpm.gui.procactions.ProcActionsFrame;
import com.haulmont.cuba.gui.app.core.file.FileDownloadHelper;
import com.haulmont.cuba.gui.components.Table;
import javax.inject.Inject;
public class ContractEdit extends AbstractEditor<Contract> {
private static final String PROCESS_CODE = "contractApproval";
@Inject
private ProcActionsFrame procActionsFrame;
@Inject
private Table<ProcAttachment> attachmentsTable;
@Override
public void ready() {
FileDownloadHelper.initGeneratedColumn(attachmentsTable, "file");
initProcActionsFrame();
}
private void initProcActionsFrame() {
procActionsFrame.initializer()
.standard()
.init(PROCESS_CODE, getItem());
}
}
Сохраните изменения, нажав кнопку OK.
Рассмотрим код контроллера более подробно.
ProcActionsFrame
- это стандартный фрейм для отображения кнопок доступных в данный момент процессных действий. Во время инициализации фрейма по двум параметрам (код процесса и сущность) ищется связанный экезмпляр ProcInstance
. Если процесс не находится, то создается новый ProcInstance
, и фрейм отображает кнопку запуска процесса. Если связанный с сущностью процесс найден, то проверяется, имеется ли незавершенная процессная задача для текущего пользователя, и если да, то отображаются кнопки завершения данной задачи. Подробнее о ProcActionsFrame см. ProcActionsFrame.
В контроллере редактора договора инициализация фрейма процессных действий происходит в методе initProcActionsFrame()
. Самая важная часть метода - вызов init(PROCESS_CODE, getItem())
. Константа PROCESS_CODE
хранит код процесса (contractApproval
- это значение мы видели при равертывании процесса, см. Развертывание модели процесса). Второй аргумент getItem()
- текущий договор.
Стандартная инициализация фрейма (standard()
) делает следующее:
-
Инициализирует стандартные предикаты для действий запуска процесса и завершения задачи. Предикаты вызывают коммит редактора договора.
-
Инициализирует стандартные слушатели, вызываемые после завершения процессного действия. Данные слушатели отображают уведомления ("Процесс запущен", "Действие выполнено", и т.п.), а также обновляют
procActionsFrame
.