如何将OData服务中的日期/时间正确添加到UI? 上下文
我正在创建一个小的演示页面,显示UI5的一些直接功能。本页面由两个主要页面组成:如何将OData服务中的日期/时间正确添加到UI? 上下文,odata,sapui5,Odata,Sapui5,我正在创建一个小的演示页面,显示UI5的一些直接功能。本页面由两个主要页面组成: 在第一页上,有一个可以创建、删除和更新的运营商列表。这些运营商有一个ID(Carrid) 如果单击一家航空公司,它们将被发送到第二个页面,在该页面上,所选航空公司的所有航班都显示在一个表格中(带有一些航班信息) 该表如下所示: <Table id="detailTable" inset="false" class="sapUiResponsiveMargin"> <columns>
- 在第一页上,有一个可以创建、删除和更新的运营商列表。这些运营商有一个ID(
)Carrid
- 如果单击一家航空公司,它们将被发送到第二个页面,在该页面上,所选航空公司的所有航班都显示在一个表格中(带有一些航班信息)
<Table id="detailTable" inset="false" class="sapUiResponsiveMargin">
<columns>
<Column>
<Text text="ID" />
</Column>
<Column>
<Text text="Flightnumber" />
</Column>
<Column>
<Text text="Starts in" />
</Column>
<Column>
<Text text="Departs at" />
</Column>
<Column>
<Text text="Lands in" />
</Column>
<Column>
<Text text="Lands at" />
</Column>
</columns>
</Table>
问题
如果数据可以在不进行任何操作的情况下显示,那么代码就可以正常工作。但是字段{Deptime}
和{Arrtime}
具有我需要首先转换的类型,以便以人类可读的形式显示它。我能够通过这段代码实现这一点(我知道,这不是最有效的方法,但我仍在学习。因此,如果您有任何改进,请随时发布):
pageTable.addEventDelegate({
onAfterRendering:函数(){
var mTable=this.getView(“filterbersimple”).byId(“detailTable”);
var mModel=mTable.getModel();
var aItems=mTable.getItems();
//----时间转换----
var arrayTime=[];
对于(变量iTime=0;iTime
这将生成正确的输出:但我无法再次将这些被操纵的数据正确绑定到表中。我用
OData.read()
函数和其他一些相当粗糙的方法尝试过它,但我从未成功过,而且我一直在解决这个问题
如果有人有任何想法或建议,如果您能告诉我,我将不胜感激。如果您只是想以人类可读的形式显示时间(或日期),则无需使用“黑客方法”或自定义格式化程序。UI5附带概念数据类型,具有以下优点:
- 让UI5格式化, 解析,甚至为您验证该值
- 与格式化程序相比,支持双向数据绑定
- 可以定义其他格式选项或输入约束
类型是sap.ui.model.odata.type.Time
样品
发件人:
注意:关于核心:require
-语法,请参阅从UI51.69开始支持的语法。对于较低版本,请使用以下语法:
type:'sap.ui.model.odata.type.(日期)时间'
后果
有关更多信息,包括如何在DateRangeSelection
中绑定DateTime或DateTimeOffset,请参阅文档主题
TL;博士
检查实体属性在服务$metadata
文档中使用的类型
在属性绑定中使用OData类型之一:
xmlns:core=“sap.ui.core”
core:require=“{RequiredODataType:'sap/ui/model/odata/type/
如果您只是想以人类可读的形式显示时间(或日期),则无需使用“黑客方法”或自定义格式化程序。UI5附带概念数据类型,具有以下优点:
- 让UI5格式化,
解析,甚至为您验证该值
- 与格式化程序相比,支持双向数据绑定
- 可以定义其他格式选项或输入约束
在我们的例子中,显示Edm.Time值的合适的类型是sap.ui.model.odata.type.Time
样品
发件人:
注意:关于核心:require
-语法,请参阅从UI51.69开始支持的语法。对于较低版本,请使用以下语法:
type:'sap.ui.model.odata.type.(日期)时间'
后果
有关更多信息,包括如何在DateRangeSelection
中绑定DateTime或DateTimeOffset,请参阅文档主题
太长,读不下去了
检查实体属性在服务$metadata
文档中使用的类型
在属性绑定中使用OData类型之一:
xmlns:core=“sap.ui.core”
core:require=“{RequiredODataType:'sap/ui/model/odata/type/
我使用的是sap.ui.model.odata.type.Time,但问题是使用默认格式会使此值P00DT00H00M00S而不是此PT0H0M0S,odata服务会出现奇怪的错误:无法读取null的属性“1”
@zygimantus是odata服务版本“2.0”
?还请确保实体属性具有Type=“Edm.Time”
在元数据文档中使用sap.ui.model.odata.type.Time
。我使用的是sap.ui.model.odata.type.Time,但问题是使用默认格式会使此值P00DT00H00M00S而不是此PT0H0M0S,odata服务会给出奇怪的错误:无法读取null的属性“1”
@zygimantusOData服务版本“2.0”
?还请确保实体属性具有
// Get routing data and show only entrys with the matched primary key (Carrid)
_onRouteMatched: function(oEvent) {
// ...
var oArgs = oEvent.getParameter("arguments");
var oFlightTable = oView.byId("detailTable");
oFlightTable.bindAggregation("items", {
path: "/CarrierSet(" + "'" + oArgs.flightPath + "'" + ")/FlightSet",
template: new sap.m.ColumnListItem({
cells: [
new sap.m.Text({
text: "{Carrid}"
}),
new sap.m.Text({
text: "{Connid}"
}),
new sap.m.Text({
text: "{Cityfrom}"
}),
new sap.m.Text({
text: "{Deptime}"
}),
new sap.m.Text({
text: "{Cityto}"
}),
new sap.m.Text({
text: "{Arrtime}"
})
]
})
});
}
pageTable.addEventDelegate({
onAfterRendering: function() {
var mTable = this.getView("FilterBarSimple").byId("detailTable");
var mModel = mTable.getModel();
var aItems = mTable.getItems();
// ----- TIME CONVERSION ----
var arrayTime = [];
for (var iTime = 0; iTime < aItems.length; iTime++) {
var iAdded = mModel.getProperty("Deptime", aItems[iTime].getBindingContext());
arrayTime.push(iAdded);
}
var timeFormat = sap.ui.core.format.DateFormat.getTimeInstance({
pattern: "kk:mm:ss"
});
var tz = new Date(0).getTimezoneOffset() * 60 * 1000;
var arrayTimeClean = [];
$.each(arrayTime, function(ii, ee) {
var timeStr = timeFormat.format(new Date(ee.ms + tz));
arrayTimeClean.push(timeStr);
});
}
});