2015-04-06 58 views
2

在我的UI5應用程序中,我有一個項目列表。我通過彈出菜單創建一個新項目(輸入一些細節並單擊確定)。用我的新實體的JSON數據,然後在我的oData模型上調用'create'。 oData實體(在我的xsodata服務中定義)使用存儲的proc來創建db記錄,並使用一個序列來生成下一個ID。到目前爲止,一切都很好。記錄被創建,並且我的成功回調被執行。然而,我現在需要的是在我的響應有效載荷中擁有新記錄的ID,但我無法設法得到它。以下是運行create,成功/錯誤回調的JS代碼:HANA oData創建過程 - 我的新ID在哪裏?

// Update the model and add our new forecast 
    this.getView().getModel().create('/Forecasts', oData, { 
     success : jQuery.proxy(function(mResponse) { 
      // nav to newly created Forecast 
      this.getRouter().navTo("forecast", { 
       forecastId: mResponse.ID, // EMPTY! 
       tab: "data" 
      }, false); 
     }, this), 
     error : jQuery.proxy(function(mResponse) { 
      this.showErrorAlert("Problem creating new forecast"); 
     }, this) 
    }); 

mResponse.ID始終爲空。我認爲,這不應該是。 ID被定義爲實體預測中的關鍵。

@Catalog.tableType: #ROW 
entity forecast { 
    key ID: IdType; 
    NAME: NameType; 
    CREATED: UTCDateTime; 
    USER: UsernameType; 
    EFFECTIVE: LocalDate; 
    DAYS: Integer; 
}; 

而且xsodata服務(schema和命名空間引用刪除):

service { 

    // Forecasts 
    "<namesapce>.data::models.forecast" as "Forecasts" 
    create using "<namesapce>.procedures::createForecast"; 
} 

這裏是存儲過程,執行插入:

PROCEDURE "<schema>"."<namespace>.procedures::createForecast" ( 
    IN intab "<schema>"."<namespace>.data::models.procedures.forecast", 
    OUT outtab "<schema>"."<namespace>.data::models.procedures.errors" 
) 
LANGUAGE SQLSCRIPT 
SQL SECURITY INVOKER 
AS 
-- DEFAULT SCHEMA <schema> 
-- READS SQL DATA AS 
BEGIN 
    DECLARE lv_name string; 
    DECLARE lv_days integer; 

    SELECT NAME, DAYS INTO lv_name, lv_days FROM :intab; 

    -- Now validate and insert 
    IF :lv_name = '' THEN 
     outtab = SELECT 500 AS http_status_code, 
        'Empty Forecast name' AS error_message, 
        'The Forecast name cannot be empty' AS detail FROM dummy; 
    ELSEIF :lv_days = 0 THEN 
     outtab = SELECT 500 AS http_status_code, 
        'Empty Forecast days' AS error_message, 
        'The Forecast days cannot be empty' AS detail FROM dummy; 
    ELSE 
     -- Perform the INSERT 
     INSERT INTO "<namespace>.data::models.forecast" 
     VALUES ("<namespace>.data::forecast".NEXTVAL, 
       lv_name, 
       CURRENT_TIMESTAMP, 
       CURRENT_USER, 
       CURRENT_DATE, 
       lv_days); 
    END IF; 
END; 

如何獲取NEXTVAL值(現在是CURRVAL)放入我的響應負載中,因此可以在模型創建函數的成功回調中訪問它?我已經嘗試了多個表,但遇到不斷的問題。當然有一個簡單的方法來做到這一點?插入記錄的關鍵是至關重要的。我不想在客戶端創建ID,因爲它不準確 - 我需要它從INSERT返回。

回答

1

對HANA Odata服務的POST請求將在響應中返回已創建的對象數據,狀態爲201(如果成功)。所以從響應中,您可以獲取新插入數據的ID。

+1

謝謝你的評論,但是這是不正確的。如果您重讀我的文章,我已經檢查了響應負載 - 那裏沒有填充的ID(關鍵字段)。請自己嘗試一下。 – hagen

+0

@hagen您是否解決了您的問題?我目前面臨同樣的問題。謝謝 – jbm1991

+1

不,我沒有@ jbm1991。我在前端創建了所有ID。我根據時間使它們唯一,並檢查model.create錯誤回調中的重複項。真的很煩人,但沒有解決。 – hagen

相關問題