Lotus notes 使用dominodataservicesrestapi创建房间预订

Lotus notes 使用dominodataservicesrestapi创建房间预订,lotus-notes,lotus-domino,Lotus Notes,Lotus Domino,我一直在尝试使用dominodataservicesrestapi创建房间预订,但我似乎错过了一个技巧 将POST请求发送到文档端点我可以提交并创建一个预订文档,该文档显示在Rooms and resource视图中,但底层的Rooms仍然显示在notes客户端中可用 以下是请求主体的示例: { "@authors": [ "CN=Andrew Jones/O=MyCorp", "" ], "@form": "Reservation", "From": "C

我一直在尝试使用dominodataservicesrestapi创建房间预订,但我似乎错过了一个技巧

将POST请求发送到文档端点我可以提交并创建一个预订文档,该文档显示在Rooms and resource视图中,但底层的Rooms仍然显示在notes客户端中可用

以下是请求主体的示例:

   {
  "@authors": [
    "CN=Andrew Jones/O=MyCorp",
    ""
  ],
  "@form": "Reservation",
  "From": "CN=Andrew Jones/O=MyCorp",
  "Chair": "CN=Andrew Jones/O=MyCorp",
  "AltChair": "CN=Andrew Jones/O=MyCorp",
  "Principal": "CN=Andrew Jones/O=MyCorp",
  "SequenceNum": 1,
  "OrgState": "5",
  "ResourceType": "1",
  "ResourceName": "Room/Office",
  "ROOM": "Room/Office@MyCorp",
  "Capacity": 1,
  "AppointmentType": "3",
  "StartTimeZone": "Z=0$DO=1$DL=3 -1 1 10 -1 1$ZX=47$ZN=GMT",
  "EndTimeZone": "Z=0$DO=1$DL=3 -1 1 10 -1 1$ZX=47$ZN=GMT",
  "TOPIC": "Test",
  "SendTo": "CN=Room/O=Office",
  "SelectedRR": "CN=Room/O=Office",
  "$BusyName":"CN=Room/O=Office",
  "Encrypt": "0",
  "Categories": "",
  "RouteServers": "CN=dominonode/O=MyCorp",
  "DeliveredDate": { "data":"2017-03-09T12:38:34Z","type":"datetime"},
  "StartDate": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "StartTime": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "StartDateTime": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "EndDate": {"data":"2017-03-09T21:00:00Z","type":"datetime"},
  "EndTime": {"data":"2017-09-03T21:00:00Z","type":"datetime"},
  "EndDateTime": {"data":"2017-03-09T21:00:00Z","type":"datetime"},
  "CalendarDateTime": {"data":"2017-03-09T20:00:00Z","type":"datetime"},
  "UpdateSeq": 1,
  "Author": "CN=Andrew Jones/O=MyCorp",
  "ResourceOwner": "",
  "ReservedFor": "CN=Andrew Jones/O=MyCorp",
  "ReservedBy": "CN=Andrew Jones/O=MyCorp",
  "RQStatus": "A",
  "Purpose": "API Test",
  "NoticeType": "A",
  "Step": 3,
  "Site": "Office",
  "ReserveDate": {"data":"2017-03-09T20:00:00Z","type":"datetime"}
}
建议我改为尝试创建日历事件,但我发送的所有内容似乎都被拒绝,请求不正确,包括

我还研究了哪些建议我需要为房间创建一个预约,然后创建一个通知文档,但虽然我可以创建这些文档,但似乎并没有创建预订


是否有人尝试过这个方法并使其发挥作用,或者我只是加入了大象的墓地?

我建议注册一个特殊用户作为预订代理。然后,您可以使用日历API预订任何房间。我认为这种方法比数据API更有效

详情:

注册一个新用户作为预订代理。让我们打电话给用户室代理/MyCorp。用户的邮件文件是mail/ragent.nsf

确保在具有mail/ragent.nsf副本的邮件服务器上启用了日历API

当有人使用您的平板电脑应用程序预订房间时,该应用程序会发送请求,在房间代理的日历POST/mail/ragent.nsf/api/calendar/events上创建一个事件。新活动应将会议室包括在与会者名单中

日历API向资源数据库中的文件室发送邀请。只要房间还没有预订,资源数据库就会接受邀请,并且房间在该时间段内变得繁忙

这使您不必处理数据API和复杂的资源数据库。您的平板电脑应用程序只需要知道邮件服务器主机名、邮件文件名和房间代理的凭据。我还喜欢能够审核来自平板电脑应用程序的所有预订的想法。您可以在客房代理的邮件文件中找到所有接受或拒绝的事件和通知

一个缺点是预订不是即时的,但是资源数据库应该能够在几秒钟内接受邀请

顺便说一下,下面是一些POST请求的JSON输入示例:

{
  "events":[
    {
      "summary":"Calendar API test",
      "location":"test",
      "description":"test",
      "start":{"date":"2018-01-01","time":"13:00:00","utc":true},
      "end":{"date":"2018-01-01","time":"14:00:00","utc":true},
      "organizer":{"email":"ragent@mycorp.com"},
      "attendees":[
        {
          "role":"req-participant",
          "userType":"room",
          "status":"needs-action",
          "rsvp":true,
          "email":"room@mycorp.com"
        }
      ]
    }
  ]
}

为与会者指定userType:room很重要。否则,资源数据库将不接受邀请。

我需要更好地了解您的用例。如果您试图在用户的日历上创建事件,则日历API是有意义的。您可以预订房间作为创建此类事件的副作用,但请求将是POST/{database}/api/calendar/events,其中{database}是用户的邮件文件。我不认为{database}可以是预订数据库本身。当你说所有的请求都被拒绝时,你用的是什么{数据库}?目的是在我们办公室的每个房间外面都有平板电脑设备。平板电脑将显示当天房间的日程安排。如果没有预订房间,用户应该能够立即预订接下来30分钟、1小时等的房间。因此,我希望通过向某个端点发送POST请求来实现这一点。我使用的是resource.nsf,所以我应该使用与文件室邮件文件相对应的数据库?文件室本身没有邮件文件,但我认为我有一个适合您的答案。敬请期待。我马上发布答案。您不能直接创建预订RQStatus:a。您只能创建预订请求RQStatus:T。Rooms and Resource Manager RnRMgr任务负责做出最终决定。当您的文档保存到R&R dB时,Domino将通知RnRMgr查看您的请求。RnRMgr将根据房间设置进行处理,并做出最终决定。如果它决定其余的都很好,房间是免费的,它会将RQStatus更改为A,并确保busytime得到更新。如果没有,它可能会拒绝或通知任何房主做出选择。非常感谢。但是,我得到一个500错误:`code:500,text:Internal Server error,cserror:1026,message:error creating event,type:text,data:com.ibm.domino.calendar.store.StoreException:error creating event\r\n\tat com.ibm.domino.calendar.dbstore.NotesCalendarStore.createE。。。原因:NotesException:发送通知时出错\r\n\tat lotus.domino.local.NotesCalendar.createEntryUnknown Source\r\n\tat com.ibm.domino.calendar.dbstore.NotesCalendarStore.createEventNotesCalendarStore.java:201\r\n\t。。。65更多\r\n}这是请求:{事件:[{摘要:日历API测试,位置:房间5,描述:测试,开始:{日期:2017-03-11,时间:13:00:00,utc:true},结束:{日期:2017-03-11,时间:14:00:00,utc:true},组织者:{电子邮件:房间。display@myCorp.com},与会者:[{
角色:req参与者,用户类型:房间,状态:需要操作,rsvp:true,电子邮件:房间_5@myCorp.com}]}]}REST API正在调用Java方法NotesCalendar.createEntry。该方法正在引发异常,并显示消息“发送通知时出错”。该消息记录在此处:。不幸的是,文档没有多大帮助。您是否尝试过使用iNotes web客户端在room.display的日历上创建类似的会议?那样的话,房间被邀请了吗?听起来不错。这里还有另一种调试POST问题的方法:将CSDEBUGAPI=1添加到服务器notes.ini。然后在POST请求失败后查看服务器日志。日志应该包含有关NotesCalendar.createEntry调用中发生的事情的更多详细信息。我现在提到这一点是因为听起来您可能需要它来帮助您在服务器上编辑notes.ini。祝你好运。当管理员设置房间时,他可以选择为其分配一个internet地址。你能在资源数据库中的文件室文档中看到internet地址吗?如果没有正式的互联网地址,您应该可以使用伦敦5号房间_office@MyCorp在POST请求中。注意,我用下划线替换了空格,并在房间的专有名称中添加了@MyCorp。这大概就是将可分辨名称强制转换为internet地址所需的操作。