2015-09-07 3 views
0

Есть ли способ, чтобы сообщение (Да/Нет) было представлено внутри скаут-сервера?Scout Eclipse представляет необязательное сообщение на стороне сервера

Причина этого заключается в сохранении предупреждений.

Например, у вас есть некоторая логика для сохранения некоторой сущности и некоторой достоверности для этого объекта в бэкэнд. В некоторых случаях пользователю необходимо сообщить, что сохранение этой записи может привести к некоторым проблемам, поэтому ему необходимо подтвердить сохранение.

Сейчас у меня есть реализация так:

Scout Client ->   Scout Server  ->   Backend     ->   Scout Server   ->  Scout Client  -> Scout Server  -> Scout Backend 
save called  pass parameter to backend  try to save; return excaption   return exception to client   present popUp  sent parameter force  force save 

, но мне не нравится, что внутри клиента вам нужно справиться с этим. Было бы лучше, если бы клиент вызывал только сохранение, и все будет обработано в скаут-сервере и бэкэнд.

Есть ли лучший способ для этого?

Марко

ответ

1

Я не знаю, как вы хотите работать только с этой стороны сервера.

Если вам нужно иметь некоторое взаимодействие пользователя с подтверждением, глядя, как это: «Существующие данные будут перезаписаны» (или что ваша бизнес-логика находится в интерфейсе) и «Вы уверены, что вы хотите сохранить? ", вам нужно сделать это в клиентской части вашего приложения. В противном случае вы не сможете прервать существующий процесс, сообщить своему пользователю и открыть форму.

Если вам не нужно какое-либо взаимодействие с пользователем, возможно решение «сервер + бэкэнд».

Вот набросок того, как метод хранения (на стороне клиента) может выглядеть следующим образом:

protected void execStore() throws ProcessingException { 
    ICompanyService service = SERVICES.getService(ICompanyService.class); 
    CompanyFormData formData = new CompanyFormData(); 
    exportFormData(formData); 

    //first call of the store method: 
    SaveResult result = service.store(formData, SaveState.TRY); 

    //handle result of the first call: 
    if (result.getState() == SaveResultState.SUCCESSFUL) { 
    importFormData(result.getFormData()); 
    } 
    else if (result.getState() == SaveResultState.NEEDS_CONFIRMATION) { 
    int button = MessageBox.showYesNoCancelMessage(null, "Something is needs confirmation in the backend", "Do you want to save?"); 
    switch (button) { 
     case MessageBox.YES_OPTION: { 
     //Recall the store method with an other flag: 
     result = service.store(formData, SaveState.FORCE); 

     //handle result of the second call: 
     if (result.getState() == SaveResultState.SUCCESSFUL) { 
      importFormData(result.getFormData()); 
     } 
     else { 
      throw new ProcessingException("service.store() is not sucessfull"); 
     } 
     break; 
     } 
     case MessageBox.NO_OPTION: { 
     setFormStored(false); 
     break; 
     } 
     case MessageBox.CANCEL_OPTION: 
     default: { 
     throw new VetoException("execStore() was cancelled"); 
     } 
    } 
    } 
} 

С SaveResult нечто подобное:

public class SaveResult { 

    private final AbstractFormData formData; 
    private final SaveResultState state; 

    public SaveResult(AbstractFormData formData, SaveResultState state) { 
    this.formData = formData; 
    this.state = state; 
    } 

    public AbstractFormData getFormData() { 
    return formData; 
    } 

    public SaveResultState getState() { 
    return state; 
    } 
} 

(если это имеет смысл, вы могли бы добавьте объяснение, исходящее из бэкэнд, и FormData может быть общим параметром).

Если у вас есть этот шаблон много раз, легко сделать его общим для всех ваших форм (с интерфейсами и абстрактными классами). Таким образом, вы пишете эту обработку только один раз (с частью на сервере и частью клиента).

 Смежные вопросы

  • Нет связанных вопросов^_^