odata サービスを介して日付属性を持つエンティティを作成しようとしています。バックエンドはSAPシステムです。このエンティティには、3 つの主要な属性とその他の多数の属性しかありません。キーの日付が問題の根本原因であることを確認しました。
キー:
- Pernr タイプの文字列、
- begda タイプの日時
- endda タイプの日時。
以下のコード (動作しません) は、問題のトラブルシューティングを試みる際に大幅に簡略化されています。現時点では、エンティティ セットからエンティティを読み取り、すぐにまったく同じデータでエンティティを作成しようとします。
コード:
var oODataModel = new sap.ui.model.odata.ODataModel("/sap/opu/odata/sap/Z_PERSONAL_DATA_SRV/");
//Test entity to be saved
var entity = null;
//Handler for read error
var handleReadE = function (oEvent){
alert("error");
};
//Handler for read success
var handleRead = function (oEvent){
//Get the data read from backend
entity = oEvent.results[0];
//Try to create a new entity with same data
oODataModel.create('/PersDataSet', entity, null, function(){
alert("Create successful");
},function(oError){
alert("Create failed", oError);
});
};
oODataModel.read("/PersDataSet", null, [], true, handleRead, handleReadE);
ゲートウェイ エラー ログに、xml 解析エラーが表示されます。このログでは、リクエスト データを確認でき、日付が文字列型で転送されていることがわかります。これらの日付はサービスで DateTimes として定義されているため、リクエストは拒否されます。例:
<m:properties>
<d:Pernr m:type="Edm.String">00000001</d:Pernr>
<d:Endda m:type="Edm.String">9999-12-31T00:00:00</d:Endda>
<d:Begda m:type="Edm.String">1979-05-23T00:00:00</d:Begda>
エンティティが読み取られるとき、バックエンドはタイプ情報を送信しません。次の例のように送信します。
<m:properties>
<d:Pernr>72010459</d:Pernr>
<d:Endda>9999-12-31T00:00:00</d:Endda>
<d:Begda>1876-07-21T00:00:00</d:Begda>
実際、type=".." なしで同じ情報を保存しようとすると、うまくいきます。したがって、問題は ODataModel.create が xml に追加する不適切な型です。
私の質問は: ODataModel.create にこの型情報を追加しないように指示できますか? 型を推測するのはうまくいきません。
odata を使用して日付を読み書きする例を誰かが共有できますか?
事前にどうもありがとうございました。