Хобрук: Ваш путь к мастерству в программировании

DatePicker от и до

В форме у меня есть два поля DatePicker: From и To. В этом случае пользователь не должен иметь возможность выбрать значение для To меньше, чем то, которое он выбрал для поля From.

Я просто хотел знать, есть ли какой-либо собственный способ SAPUI5 для этого сравнения и проверки полей DatePicker? На изображении видно, что From имеет большее значение, чем To, что неверно! В этом случае мне нужно показать ошибку проверки вокруг полей.

введите здесь описание изображения

28.11.2018

  • Для типичных случаев использования для выбора диапазона дат UI5 предоставляет DateRangeSelection. См. stackoverflow.com/a/53524645/5846045. 27.08.2019

Ответы:


1

Предположим, у вас есть следующие 2 объекта DatePicker в файле представления xml:

<m:DatePicker id="__input_validFrom" 
   value="{path: 'ZValidFrom', type : 'sap.ui.model.type.Date'}"
   fieldGroupIds="fieldGroup1" 
   change="handleValidFromChange"/>

<m:DatePicker id="__input_validTo" 
   value="{path: 'ZValidTo', type : 'sap.ui.model.type.Date'}" 
   fieldGroupIds="fieldGroup1" 
   change="handleValidToChange" />

Эти 2 поля показывают дату в подходящем формате, поскольку мы устанавливаем тип sap.ui.model.type.Date.

Теперь нам нужно поиграть с ограничениями sap.ui.model.type.Date в обработчике событий onChange:

handleValidFromChange: function (oEvent) {
    var oDatePicker = oEvent.getSource(),
        sValue = oDatePicker.getValue(),
        sToDatePicker = "__input_validTo",          
        oToDatePicker = this.byId(sToDatePicker);
    oToDatePicker.getBinding("value").setType(new sap.ui.model.type.Date(null, {
        minimum: new Date(sValue)
    }), "string");
},
handleValidToChange: function (oEvent) {
    var oDatePicker = oEvent.getSource(),
        sValue = oDatePicker.getValue(),
        sFromDatePicker = "__input_validFrom",
        oFromDatePicker = this.byId(sFromDatePicker);
    oFromDatePicker.getBinding("value").setType(new sap.ui.model.type.Date(null, {
        maximum: new Date(sValue)
    }), "string");
}

Как только пользователь изменяет значение в одном из полей, мы меняем ограничения в другом поле.

Заметки:

  1. Обратите внимание, что мы не можем напрямую привязать ограничения к модели.
  2. Применяя это решение, вам нужно использовать проверку в средствах выбора даты, чтобы увидеть некоторый текст состояния проверки.
29.11.2018

2

Используя событие change в " из" средства выбора мы можем использовать метод setMinDate() для средства выбора «Кому» на основе выбранной даты, поэтому пользователь может выбирать даты только после выбранной даты.

В нашем XML-представлении мы можем иметь как sap.m.DatePicker:

<DatePicker id="DP1" placeholder="Enter Date ..." change="handleChange"/>
<DatePicker id="DP2" placeholder="Enter Date ..."/>

И в нашем контроллере мы можем применить логику:

handleChange: function(oControlEvent) {
   //get date picked from first picker
   var sDatePicked = oControlEvent.getSource().getDateValue();
   //set minimum date on second picker
   this.getView().byId("DP2").setMinDate(sDatePicked).setValue();
}

Применив этот метод, мы теперь можем получить новое значение из первого sap.m.DatePicker< /a> и примените его к средству выбора даты «Кому», используя setMinDate() и сбросьте его значение, чтобы пользователь мог выбрать новую дату.

28.11.2018

3

Есть ли собственный способ SAPUI5 сделать это?

Да, взгляните на Выбор диапазона дат.

globalThis.onUI5Init = () => sap.ui.require([
  "sap/ui/core/Core",
  "sap/ui/model/odata/v4/ODataModel",
  "sap/ui/core/Fragment",
], async (Core, ODataModel, Fragment) => {
  "use strict";

  const control = await Fragment.load({
    definition: `<DateRangeSelection xmlns="sap.m" xmlns:core="sap.ui.core"
      core:require="{ DateInterval: 'sap/ui/model/type/DateInterval' }"
      placeholder="&lt;From> - &lt;To>"
      width="16rem"
      binding="{/People('russellwhyte')/Trips(0)}"
      value="{
        parts: [ 'StartsAt', 'EndsAt' ],
        type: 'DateInterval'
      }"
    />`,
  });
  
  control.setModel(new ODataModel({
    serviceUrl: "https://services.odata.org/TripPinRESTierService/(S(qmr0hmopno13zauulilcogn3))/",
    synchronizationMode: "None",
    operationMode: "Server",
    groupId: "$direct",
  }));
  
  Core.getMessageManager().registerObject(control.placeAt("content"), true);
});
<script defer id="sap-ui-bootstrap"
  src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.ui.core,sap.m,sap.ui.unified"
  data-sap-ui-oninit="onUI5Init"
  data-sap-ui-theme="sap_fiori_3"
  data-sap-ui-async="true"
  data-sap-ui-compatversion="edge"
  data-sap-ui-excludejquerycompat="true"
  data-sap-ui-xx-waitfortheme="init"
></script>
<body id="content" class="sapUiBody sapUiSizeCompact" style="height: 100%"></body>

Примечание. в приведенном выше примере используется sap.ui.model.odata.v4.ODataModel. Тот же подход можно применить к модели V2, но затем обязательно включите двустороннюю привязку, например. defaultBindingMode: "TwoWay" в настройках модели.

sap.m.DateRangeSelection

Это решает данную проблему:

  • Пользователю необходимо выбрать два значения даты. ✔️
  • Пользователь не должен иметь возможность выбрать To меньше From. ✔️
  • Ищете собственный способ UI5 решить эту проблему. ✔️

Существует даже тип привязки: sap.ui.model.type.Date*Interval, чтобы включить:

  • Двусторонняя привязка данных ✔️
  • Варианты формата ✔️
  • Проверка ввода ✔️

По сравнению со специальной реализацией с двумя DatePickers, DateRangeSelection требует:

  • Меньше кликов для пользователя ✔️
  • Нулевой пользовательский код JS для обработки диапазонов дат ✔️
28.11.2018
Новые материалы

Введение в контекст React
В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

Базовое руководство по переносу концепций обучения в глубокое обучение
Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..