/**
   * Обработчик события сохранения 'save' В зависимости от состояния выполняет сохранение
   * существующего или создание нового объекта.
   *
   * <p>Метод используется в случае использования стандартного сервиса работы с данными
   * JepStandardService. При реализации в прикладном модуле собственного сервиса необходимо в
   * презентере-наследнике прикладного модуля реализовать перекрывающий метод onSave().
   */
  public void onSave(SaveEvent event) {
    if (fields.isValid()) {
      JepRecord formProperties = fields.getValues();

      logger.debug(this.getClass() + ".onSave(): formProperties = " + formProperties);

      // Для подчинённых объектов добавляется foreignKey.
      if (JepScopeStack.instance.size() > 1 || !JepScopeStack.instance.peek().isMainActive()) {
        JepClientUtil.addForeignKey(formProperties);
      }

      // Для режима редактирования текущую запись
      // необходимо дополнить или переписать значениями с формы.
      if (EDIT.equals(_workstate)) {
        JepRecord updatedRecord = new JepRecord(currentRecord);
        updatedRecord.update(formProperties);
        formProperties = updatedRecord;
      }

      // Если не выполнены первоначальные условия проверки, то выходим из сохранения.
      if (!beforeSave(formProperties)) return;

      eventBus.setSaveButtonEnabled(false);

      if (CREATE.equals(_workstate)) {
        saveOnCreate(formProperties);
      } else if (EDIT.equals(_workstate)) {
        saveOnEdit(formProperties);
      }

    } else {
      messageBox.showError(clientFactory.getTexts().errors_dialog_form_incorrectInputData());
    }
  }
 /**
  * {@inheritDoc}<br>
  * Обрабатываем лишь специфичные для детальной формы состояния.
  */
 @Override
 protected boolean isAcceptableWorkstate(WorkstateEnum workstate) {
   return SEARCH.equals(workstate)
       || CREATE.equals(workstate)
       || VIEW_DETAILS.equals(workstate)
       || EDIT.equals(workstate);
 }
  protected void onChangeWorkstate(WorkstateEnum workstate) {
    fields.changeWorkstate(workstate);

    if (VIEW_DETAILS.equals(workstate)) {
      fields.setValues(currentRecord);
      updateScope(workstate);
    } else if (EDIT.equals(workstate)) {
      fields.setValues(currentRecord);
      updateScope(workstate);
    } else if (CREATE.equals(workstate)) {
      fields.clear();
      resetScope();
    } else if (SEARCH.equals(workstate)) {
      if (searchTemplate != null) {
        // Если есть сохраненные поисковые параметры, то восстановим их.
        fields.setValues(searchTemplate);
      } else {
        // Очистим поля, если сохраненные поисковые параметры отсутствуют.
        fields.clear();
      }

      resetScope();
    }
  }