在我的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返回。
謝謝你的評論,但是這是不正確的。如果您重讀我的文章,我已經檢查了響應負載 - 那裏沒有填充的ID(關鍵字段)。請自己嘗試一下。 – hagen
@hagen您是否解決了您的問題?我目前面臨同樣的問題。謝謝 – jbm1991
不,我沒有@ jbm1991。我在前端創建了所有ID。我根據時間使它們唯一,並檢查model.create錯誤回調中的重複項。真的很煩人,但沒有解決。 – hagen