в документе метаданных, чтобы использовать

кст

Я создаю небольшую демонстрационную страницу, которая отображает некоторые прямые функции UI5. Эта страница состоит из двух основных страниц:

На первой странице есть список операторов, которые можно создавать, удалять и обновлять. Эти перевозчики имеют идентификатор (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>

Данные привязаны к столбцам с этим кодом:

// 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}"
                })
            ]
        })
    });
}
проблема

Код работает нормально, если данные можно отобразить, не манипулируя им в первую очередь. Но поля{Deptime} а также{Arrtime} иметь типEdm.Time который мне нужно сначала преобразовать, чтобы отобразить в удобочитаемой форме.
Я смог добиться этого с помощью этого кода (я знаю, что это не самый эффективный способ, но я все еще учусь. Поэтому, если у вас есть какие-либо улучшения, не стесняйтесь их публиковать):

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);
        });
    }
});

Это генерирует этот вывод, который является правильным:

Но я не могу правильно связать эти манипулированные данные в таблицу снова. Я попробовал это сOData.read() функции и некоторые другие довольно хакерские подходы, но я никогда не был успешным, и я застрял с этой проблемой в течение достаточно долгого времени.

Если у кого-то есть идея или предложение, я буду более чем благодарен, если вы дадите мне знать.

Ответы на вопрос(1)

Решение Вопроса

х форматирования, если вы просто хотите отобразить время (или дату) в удобочитаемой форме. UI5 поставляется с концепциейтипы данныхдоктор который имеет следующие преимущества:

Пусть UI5разбор, формат, и дажеутверждать ценность для вас.опорыдвусторонний привязка данных в отличие отformatter.Дополнительные параметры формата или ограничения ввода могут быть определены.

В нашем случае подходящий тип для отображения значенияOData примитивный тип "Edm.Time" являетсяsap.ui.model<strong>.odata</strong>.type.TimeAPI, Мы можем использовать его в нашемtext привязка информационного объекта:

<Table items="{carrierFlights}">
  <columns>
    <!-- ... --> 
  </columns>
  <ColumnListItem>
    <!-- ... -->
    <Text text="{
      path: 'departureTime',
      type: 'sap.ui.model.odata.type.Time',
      formatOptions: {
        style: 'long'
      }
    <!-- ... -->
    }"/>
  </ColumnListItem>
</Table>

Приведенный выше код является выдержкой из этого примера:https://embed.plnkr.co/F3t6gI8TPUZwCOnA, Пример имитирует сервисRMTSAMPLEFLIGHT (проверять, выписыватьсяэта почта чтобы получить доступ) с макетом сервера.

Для получения дополнительной информации, в том числе, как связатьDateTime или жеDateTimeOffset вDateRangeSelectionвзгляните на тему документацииЭлементы управления, связанные с датой и временем: привязка данных.

TL; DR

Используйте один из типов OData в привязке свойств.

value="{
  path: '...',
  type: 'sap.ui.model.odata.type.*'
}"

Полный список доступных типов OData см. В разделеСправочник по API:sap.ui.model.odata.type.
Проверьте, какой тип свойства используется вmetadata.xml.

избежать с помощьюsap.ui.model.<strong>type.*</strong> или обычайformatter для значений, поступающих от службы OData.
 zygimantus30 янв. 2019 г., 21:07
Я использую sap.ui.model.odata.type.Time, но проблема для меня заключается в том, что использование форматирования по умолчанию делает это значение P00DT00H00M00S вместо этого PT0H0M0S, а служба OData выдает странную ошибку:Cannot read property '1' of null
 Boghyon Hoffmann16 февр. 2019 г., 01:17
@zygimantus - версия сервиса OData"2.0"? Также, пожалуйста, убедитесь, что свойство объекта имеетType="Edm.Time" в документе метаданных, чтобы использоватьsap.ui.model.odata.type.Time.

Ваш ответ на вопрос