IBM Domino 10 - Открыть календарь определенного пользователя на Java (для createEntry) - PullRequest
0 голосов
/ 18 марта 2019

Я пишу API интеграции в Java для IBM Domino 10, хочу выполнить резервирование ресурсов (комнаты), получить и обновить их из внешнего источника.До сих пор я успешно создал запись в календаре текущего пользователя (текущий сеанс), и резервирование также прошло успешно, однако я хочу создать резервирование в качестве определенных пользователей (персонификация), поскольку только один пользователь настроен на использование моей базы данных API.Таким образом, основной пользователь привык делать все, но я хотел бы передать ему учетные данные других пользователей, и он должен создать события и бронирования в их календарях.Я могу проверить, существует ли пользователь и правильный ли его пароль, но я не знаю, как я могу открыть его календарь, потому что он основан на сеансе.

Мой текущий код:

        Database mdb = session.getDbDirectory(session.getServerName()).openMailDatabase();
        NotesCalendar cal = session.getCalendar(mdb);
        java.text.SimpleDateFormat datefmt = new java.text.SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
        String dStart = datefmt.format(dtStart);
        String dEnd = datefmt.format(dtEnd);

        Name nnOrganizer = session.createName(session.getEffectiveUserName());

        String iCalEntry = "BEGIN:VCALENDAR\n" +
            "PRODID:-//Test//Reservation API//EN\n" +
            "VERSION:2.0\n" +
            "BEGIN:VEVENT\n" +
            "DTSTART:" + dStart + "\n" +
            "DTEND:" + dEnd + "\n" +

            "SUMMARY:Sample Meeting\n" +
            "DESCRIPTION:TEST\n" +
            "ORGANIZER;CN=admin/O=Corp:mailto:test@test.test\n" +
            "ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;" + nnOrganizer.getCanonical() + ";RSVP=false:mailto:test@test.test\n" +
            "ATTENDEE;CUTYPE=ROOM;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;" + nnResource.getCanonical() + ";RSVP=true:mailto:room@test.test\n" +
            "END:VEVENT\n" +
            "END:VCALENDAR\n";

        NotesCalendarEntry entry = cal.createEntry(iCalEntry);
        System.out.println("calendar uid " + entry.getUID());

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

Кроме того, как я могу программно получить адреса электронной почты организатора и комнаты?На данный момент они жестко закодированы.Я знаю, что могу выполнить поиск в каталоге, но иногда электронная почта (интернет-адрес) не настраивается, и lookupNames ничего не возвращает.Клиент Notes каким-то образом обходит это и создает электронное письмо типа Name_Surname/server@Corp, достаточно ли этого?

Редактировать Я достиг того, чего хотел, используя службу REST (CustomServiceBean) и NotesCalendar для создания / обновления/ удаление бронирований в сочетании с прямым доступом к документу для проверки на конфликты и чтения подробных данных о номерах и бронировании.Пока все работает нормально, резервирование видно как в календаре пользователя, так и в базе данных.Однако, когда я переустановил сервер с нуля и добавил базу данных со службой отдыха, я не смог получить доступ к API с помощью моего администратора по умолчанию (403 запрещено, вам запрещено выполнять эту операцию) журналы сервера: HTTP JVM: CLFAD0229E: Security exception occurred servicing request for: /db.nsf/services.xsp/api - HTTP Code: 403. For more detailed information, please consult error-log-0.xml

Когда я добавил пользователя-администратора в Конфигурация-> Документ текущего сервера-> Безопасность-> Подписать или запустить неограниченные методы и операции, он начинает работать правильно, даже при доступе к API с новыми зарегистрированными пользователями (которые не были назначенылюбые группы, разрешения, вообще ничего, только интернет-пароль и адрес, и они были созданы учетной записью администратора) Будет ли это работать правильно?Мне нужно получить доступ к API из учетных записей обычных пользователей, потому что мне нужно создавать записи в пользовательских календарях.

...