IBM Lotus - обновление бронирования номеров, имя номера добавляется в LOCATION каждый раз - PullRequest
0 голосов
/ 25 марта 2019

У меня есть специальный XPage java REST api в Lotus для обработки резервирований, пока все идет хорошо.У меня есть одна странная «проблема», хотя, когда я обновляю собрание, имя комнаты (например, Test room/Site) добавляется к LOCATION в строке iCalendar.

Способ обновления встречнайдя запись в календаре пользователя (NotesCalendar.getEntryByUID), затем я вызываю NotesCalendarEntry.read(), чтобы получить строку iCalendar, а затем вручную заменяю значения некоторых полей iCalendar, например DTSTART, на те, которые я хочу обновить (ятолько обновление DTSTART, DTEND и РЕЗЮМЕ).Наконец, я звоню NotesCalendarEntry.update(string), чтобы обновить событие.Это работает хорошо, однако с каждым обновлением поле LOCATION становится все больше и больше, потому что к нему постоянно добавляется имя комнаты, и, наконец, оно выглядит так:

LOCATION: Test Room/Test SiteTest Room/Test SiteTest Room/Test Site

и т. Д.

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

Код:

            NotesCalendar cal = session.getCalendar( session.getDbDirectory( session.getServerName() ).openMailDatabase() );
            NotesCalendarEntry calEntry = cal.getEntryByUNID(apptUNID); // apptUNID is taken from http json payload
            String iCalE = calEntry.read();
            // 20190326T160000Z
            String dStart = DateUtil.formatICalendar(dtStart);
            String dEnd = DateUtil.formatICalendar(dtEnd);

            iCalE = iCalE.replace("\\n", ""); // I added this because same was happening to literal \n (not actual line breaks)
            StringBuilder sb = new StringBuilder(iCalE);

            int StartIndex = iCalE.indexOf("BEGIN:VEVENT"); // DTSTART is also in BEGIN:VTIMEZONE so we need to exclude that
            int tmpIndex = iCalE.indexOf("DTSTART", StartIndex) + 7; // 7 = len of DTSTART
            int LineBreakIndex = iCalE.indexOf('\n', tmpIndex);
            if(iCalE.charAt(LineBreakIndex-1) == '\r')
                LineBreakIndex--;

            sb.delete(tmpIndex, LineBreakIndex);
            sb.insert(tmpIndex, ":" + dStart); // start date
            tmpIndex = sb.indexOf("DTEND", StartIndex) + 5;
            LineBreakIndex = sb.indexOf(Character.toString('\n'), tmpIndex);
            if(sb.charAt(LineBreakIndex-1) == '\r')
                LineBreakIndex--;

            sb.delete(tmpIndex, LineBreakIndex);
            sb.insert(tmpIndex, ":" + dEnd);
            calEntry.update(sb.toString());
            calEntry.recycle();

Кроме того, могу ли я смело предположить, что строки iCalendar всегда заканчиваются на \ r \ n?(они в настоящее время есть, у меня были некоторые проблемы с этим, но я понял это, я не уверен, могу ли я безопасно искать '\ r \ n'). Я не использую ical4j, потому что я буквально только изменяю 2 или 3поля и ничего больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...