IBM Domino 10 - 通过Domino Data Services API与资源预留集成

问题描述 投票:1回答:1

我们尝试通过REST API与IBM Domino集成,以提取有关特定房间中的预订/事件的信息,并且还能够远程创建新事件/预订。我们已经与其他服务集成,例如Microsoft Exchange,但IBM似乎是最难的。我深入研究了它并阅读了成千上万的文章和堆栈溢出问题,并且相当远,但仍然无法真正使用它。

我目前计划做的是:

  • 从/ api / data / collections / name /($ Reservations)或($ Calendar)中提取有关预订的信息
  • 使用文档api创建事件/预留,POST到/ api / data / documents?form = Reservation,我已经尝试过这样做,我的预订甚至在Domino Admin中显示(虽然不在Notes客户端中),但它有一些错误(可能只是我身边的一些json问题)

虽然它看起来有点清晰和简单,但事实并非如此。我有几个问题:

  1. 如何获得特定房间的预订/日历? ($ Calendar)返回数据库中的所有事件,甚至不包括在哪个房间,获取该信息,我需要另外通过它unid查询每个预留,这可能会杀死整个应用程序
  2. 有什么方法可以过滤/搜索/ api / data / documents只返回form字段的值为Reservation或任何其他值的文档?这样我就可以在不查询每个文档的情况下获取所有预留文档(/ api / data / documents只返回文档中的href而没有任何有趣的数据),我也不需要另外为每个视图启用DAS我想用。
  3. 像jazxswpoi这样的领域在json中返回了什么?如果他们没有任何真名,我怎么知道他们的目的是什么?它们通常包含有趣的数据,例如房间名称。

我也查看了FreeBusy api服务,它非常有趣,我可以轻松地使用它在我想要的房间里寻找预订(/忙碌时间),如果它返回了什么资源/预订导致忙碌时间。它只显示开始和结束时间,没有其他..

我还读到了一个建议,即应该创建一个“主要”用户来处理预订并使用他的日历api(/ api / calendar / events),但是afaik不能这样做。但是我尝试在指定房间的用户日历中创建事件,并且通过在json中添加以下与会者来实现它的工作|(实际上是PHP语法):

$25

但它不会真正显示在房间预订中,与IBM Notes中创建的常规事件不同。它也不能在IBM Notes中编辑或删除,并且在主题前面有“已接受:”,并且它表示“出勤被委派给管理员”。要删除它,我需要通过它的unid直接删除它。 x-lotus-noticetype被设置为A所以我猜它不被视为会议但是作为通知,不知道为什么。

我真的希望得到一些帮助或建议如何让这个工作,有什么其他方法有任何意义吗?

编辑:在经历了很多努力并阅读Dave的回复后,我认为让一个用户通过日历api进行预订将是一个很好的解决方案,因为直接数据api可能无法正常工作。我只能从Rooms数据库($ Calendar)或($ Reservations)视图中提取所有预订的列表,或者制作某种我自己的视图。然而!我无法让日历方法在我的本地IBM Domino服务器上运行。 Dave指出我需要指定组织者的有效电子邮件(互联网地址),因此我将用户的互联网地址设置为'organizer' => [ 'email' => 'admin/[email protected]' ], 'attendees' => [ [ 'role' => 'req-participant', 'userType' => 'room', 'status' => 'accepted', 'rsvp' => true, 'email' => '[email protected]', ], ], (test.test映射到hosts文件中的127.0.0.1)。现在,一旦我尝试使用那样的地址:

[email protected]

我甚至无法创建事件/预留(通过"organizer": { "email": "[email protected]" } ),它返回500内部错误与cserror 1026和Domino日志

/mail/admin.nsf/api/calendar/events

因此发送通知时出现问题,并且根本不创建事件。我认为它可能不适用于localhost,所以我将用户的电子邮件设置为外部邮件服务,我甚至收到了电子邮件,但事件仍然是错误创建的([CS API]> Error | calendarapi.c(379) : There was an error sending out notices to meeting participants. (0x8E4) Error connecting to server test/test: The remote server is not a known TCP/IP host. 正在自动添加并覆盖我发送的任何值作为值) ,它在房间预订数据库中不可见。

这是通过Notes客户端创建的事件的json对象:

x-lotus-noticetype A

如您所见,Notes能够成功地使用 "events": [ { "href":"\/mail\/admin.nsf\/api\/calendar\/events\/2B35FABBC50EA4D0C12583BC002E26FA-Lotus_Notes_Generated", "id":"2B35FABBC50EA4D0C12583BC002E26FA-Lotus_Notes_Generated", "summary":"Notes client meeting", "location":"Test room\/Test site@test", "start": { "date":"2019-03-13", "time":"09:30:00", "tzid":"Central European Standard Time" }, "end": { "date":"2019-03-13", "time":"10:30:00", "tzid":"Central European Standard Time" }, "class":"public", "transparency":"opaque", "sequence":0, "last-modified":"20190313T082436Z", "attendees": [ { "role":"chair", "status":"accepted", "rsvp":false, "displayName":"admin\/test", "email":"[email protected]" }, { "role":"req-participant", "userType":"room", "status":"needs-action", "rsvp":true, "displayName":"Test room\/Test site", "email":"[email protected]" } ], "organizer": { "displayName":"admin\/test", "email":"[email protected]" }, "x-lotus-broadcast": { "data":"FALSE" }, "x-lotus-notesversion": { "data":"2" }, "x-lotus-appttype": { "data":"3" } } ] 创建事件。

现在这是用我的API创建的事件,但是使用[email protected]作为组织者的电子邮件(因为普通电子邮件不允许我创建事件):

admin/[email protected]

正如您所看到的,组织者和主席的电子邮件由Lotus自动更新为 "events": [ { "href":"\/mail\/admin.nsf\/api\/calendar\/events\/E1D1F752203FC2DFC12583BC002FCB12-Lotus_Auto_Generated", "id":"E1D1F752203FC2DFC12583BC002FCB12-Lotus_Auto_Generated", "summary":"Api reservation test", "location":"Test room\/Test site@test\r\nCN=Test room\/O=Test site", "description":"API Generated event\r\n", "start": { "date":"2019-03-20", "time":"11:00:00", "utc":true }, "end": { "date":"2019-03-20", "time":"15:00:00", "utc":true }, "class":"public", "transparency":"opaque", "sequence":0, "last-modified":"20190313T084201Z", "attendees": [ { "role":"chair", "status":"accepted", "rsvp":false, "displayName":"admin\/test", "email":"[email protected]" }, { "role":"req-participant", "userType":"room", "status":"needs-action", "rsvp":true, "displayName":"Test room\/Test site", "email":"[email protected]" } ], "organizer": { "displayName":"admin\/test", "email":"[email protected]" }, "x-lotus-broadcast": { "data":"FALSE" }, "x-lotus-notesversion": { "data":"2" }, "x-lotus-noticetype": { "data":"A" }, "x-lotus-appttype": { "data":"3" } } ] ,从理论上讲,一切都应该有效,但事实并非如此。在Notes中,我将事件视为“已接受:Api预约测试”,我无法修改房间之类的内容,或者无法从右键菜单中删除它(我可以使用Del键盘按钮将其删除)唯一的区别是[email protected]得到了补充,我甚至不知道为什么

编辑2:我得到它的工作!戴夫指出我可能有一些配置问题,所以我重新安装服务器并重新设置一切(包括邮件服务),我使用x-lotus-noticetype并成功创建会议并添加到房间预订。服务器控制台仅显示消息已传递。然而!我能够创建尽可能多的相同会议,但它们没有被添加到预订数据库中,但它们在我的日历中成功创建(分配给它们的房间)没​​有任何错误(甚至在服务器控制台中也没有),这显然很糟糕。有没有办法检查(外部,通过API)是否成功创建了预订,如果房间在那个时候忙,可以阻止它的创建? Notes客户端在房间忙时会提示错误。我可以使用FreeBusy api,但是在每次预订尝试之前需要另一个HTTP请求,但如果这是唯一的方法,那么我就会接受它。我看到参与者房间的[email protected]字段设置为status,但POST的响应仍然包含declined所以我需要再次做一些延迟请求以检查状态是否已更改为拒绝。

此外,虽然它有效,但我仍然不知道如何获得所选房间的预订清单? “预订”数据库中已存在的视图不提供许多详细信息,并且它们需要专门启用DAS服务才能工作。有没有其他方法可以正常工作?

另一件事是,有什么方法可以让当前用户的电子邮件地址用于预订,或者我只能手动“硬编码”吗?房间的电子邮件也是如此。目前,我需要:

  • 用户名
  • 用户密码
  • 用户邮件数据库(needs-action
  • 用户邮箱
  • 客房邮箱

如果我想直接从Reservations数据库中读取一些数据,那么我还需要拥有该数据库的路径。这不是真正的用户友好,我想尽可能自动化一些事情。否则,可能无法进行整合。

api lotus-notes lotus-domino
1个回答
0
投票

预订数据库旨在(1)直接通过自己的UI管理预订,或(2)通过自动处理来自日历用户的通知间接管理预订。通过使用DAS数据API,您断言您可以通过操作低级文档项来以编程方式管理预留(3)。你可能会让这个工作,但我不认为预订数据库的设计考虑到了这一点。

这就是为什么我认为/mail/admin.nsf/是最好的选择。它利用自动处理(上面的#2),使您免于处理预订文档的内部设计。如果您使用此方法,您应该为DAS日历API提供this answer列表,如下所示:

attendees

换句话说, "attendees":[ { "role":"req-participant", "userType":"room", "status":"needs-action", "rsvp":true, "email":"[email protected]" } ] 必须是status - 而不是"needs-action",如您的原始帖子所示。此外,请确保您为组织者和目标房间使用正确的电子邮件地址。上面的示例显示了房间的Internet样式地址,但管理员并不总是为房间提供Internet地址。

© www.soinside.com 2019 - 2024. All rights reserved.