Календарь отключает даты с данными из привязки XSODATA SAPUI5 - PullRequest
0 голосов
/ 21 октября 2018

Я настроил базу данных HANA ddbb со службой XSODATA, и я могу правильно использовать привязку агрегации для отображения данных.

У меня есть таблица с пользователями, отделами и датой посещения.

Я пытаюсь привязать свой календарь внутри view.xml, то есть sap.ui.unified.Calendar и отключить даты, извлекая данные из дат посещения HANA и отключая даты в календаре, которые хранятся, например, в базе данных

;У меня есть таблица посещений с: user1 Department2 2018-08-13;user2 департамент2 2018-09-21;

Я хотел бы отключить эти конкретные даты и соответствующую неделю (часть недели, которую я сделаю позже, после того, как смогу выяснить, как это сделать)

Можно ли получить эти данные, используя odata для отключения дат и манипулирования ими с помощью контроллера?

или есть еще один более простой способ?На данный момент я могу только жестко закодировать его

        ((controller.js))
          disableDate:function(){
            var oModel2 = new JSONModel("DisableDate");
            oModel2.setData({
            minDate: new Date(2018, 0, 1), 
            maxDate: new Date(2050, 11, 31),
            disabled: [{start: new Date(2018, 0, 4), end: new Date(2018, 0, 18)},
                       {start: new Date(2016, 0, 15)}
                       ]
             //change this last part to variables  start and end dates and add info            

        });

this.getView().setModel(oModel2, "DisableDate") ;


                ((in xml.view)
                <u:Calendar
                id="calendar"
                select="handleCalendarSelect"
                minDate="{path: 'DisableDate>/minDate'}"
                maxDate="{path: 'DisableDate>/maxDate'}"
                disabledDates="{path: 'DisableDate>/disabled'}">
                <u:disabledDates>
                    <u:DateRange
                        startDate="{DisableDate>start}"
                        endDate="{DisableDate>end}"/>
                </u:disabledDates>
             </u:Calendar>

Заранее спасибо, я пытался выяснить это в течение нескольких дней

1 Ответ

0 голосов
/ 22 октября 2018

вы идете в правильном направлении, используя привязки для соединения ваших данных (модель) и представления.Вы создаете (локальное) представление JSON вручную.Попробуйте подключить его к модели, поступающей из бэкэнда (xsodata в вашем случае)

  1. , который вам нужен для обслуживания данных.Например, объект Odata Visit, каждая запись выглядит следующим образом:

    Имя: User1 (тип Edm.String) Отдел: dep2 (тип Edm.String) DateOfVisit: 2018-08-13 (тип Edm.DateTime)

  2. предположим, что OData Model VisitModel обслуживается этой службой odata

  3. связать представление следующим образом:

<u:Calendar
     ...
     disabledDates="{VisitModel>/VisitSet}">
     <u:disabledDates>
          <u:DateRange startDate="{VisitModel>DateOfVisit}" />
     </u:disabledDates>
</u:Calendar>

(если у вас есть StartDateOfVisit и EndDateOfVisit на вашей сущности, вы можете использовать startDate и endDate на объекте DateRange)

UPDATE : чтобы отключить полную неделю, используйте

<u:Calendar
     ...
     disabledDates="{VisitModel>/VisitSet}">
     <u:disabledDates>
          <u:DateRange 
              startDate="{path: 'VisitModel>DateOfVisit', formatter: '.formatStartOfWeek'}" 
              endDate="{path: 'VisitModel>DateOfVisit', formatter: '.formatEndOfWeek'}" 
          />
     </u:disabledDates>
</u:Calendar>

и в вашем контроллере

...
formatStartOfWeek: function(oDate) {
    if (oDate && oDate.getTime) {
        // compute Monday
        return new Date(oDate.getTime() - (oDate.getDay()-1)*24*60*60*1000 );
    } else {
        return oDate;
    }
},
formatEndOfWeek: function(oDate) {
    // compute and return Sunday
},
...
...