У меня есть специальный 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поля и ничего больше.