IBM Lotus — обновление бронирования номера, название номера добавляется к МЕСТОПОЛОЖЕНИЮ каждый раз

#xpages #lotus-domino #icalendar #xpages-extlib

#xpages #lotus-domino #icalendar #xpages-extlib

Вопрос:

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

Я обновляю встречи, находя запись в календаре пользователя ( NotesCalendar.getEntryByUID ), затем я вызываю NotesCalendarEntry.read() , чтобы получить строку iCalendar, затем я вручную заменяю значения определенных полей iCalendar, например DTSTART , на те, которые я хочу обновить (я только обновляю DTSTART, DTEND и SUMMARY). Наконец, я звоню NotesCalendarEntry.update(string) , чтобы обновить событие. Это работает хорошо, однако с каждым обновлением поле МЕСТОПОЛОЖЕНИЯ становится все больше и больше, потому что к нему постоянно добавляется название комнаты, и, наконец, это выглядит как:

 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 поля и ничего больше.

Комментарии:

1. Покажите свой код, пожалуйста.

2. Добавлен код @RichardSchwartz

3. Вы пробовали добавлять необязательные аргументы в NotesCalendarentry. Вызов Update()? Значение 1 (или CS_WRITE_MODIFY_LITERAL) в третьем аргументе (флаги) для перезаписи записи календаря без сохранения предыдущих значений полей? (Я не делаю это ответом, поскольку я не специалист по xpages; Я читаю из документа для классов LotusScript.)

4. @RichardSchwartz к сожалению, это ничего не изменило, насколько я могу видеть, название комнаты всегда добавляется в конце поля местоположения. Когда я задаю МЕСТОПОЛОЖЕНИЕ для некоторого пользовательского текста, оно в конечном итоге устанавливается на Random textnRoom name/Site name

5. Я временно исправил это, просто удалив любой текст после литерала n в поле местоположение, но я бы предпочел какое-нибудь правильное исправление.