2015-09-07 33 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 

,但我不喜歡這裏面你需要處理此客戶端。 如果客戶端只會調用保存並且所有都將在偵察服務器和後端處理,那將會更好。

有沒有更好的方法呢?

Marko

回答

1

我不知道你只想如何處理這個服務器端。

如果你需要有一個確認看起來像這樣一些用戶交互:「現有的數據將被覆蓋」(或任何你的業務邏輯是在後端)和「是否確定要保存?「,您需要在應用程序的客戶端部分執行此操作。否則,您無法中斷現有流程,請通知您的用戶並讓表單打開。

如果您不需要任何用戶交互,可以使用解決方案「server + backend only」。

下面是如何存儲方法(客戶端)可能看起來像一個素描:

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可以是通用參數)。

如果你有這種模式很多次,很容易使它對你的所有表單(包括接口和抽象類)具有足夠的通用性。這樣你只能寫這個處理一次(在服務器中的一部分和在客戶端中的一部分)。