我正在编写一个客户端JS应用程序,我在使用Domino服务器的REST接口(带有OSGi扩展的版本8.5.3)时遇到了一些问题,GET部分可以工作,但我遇到POST问题,请参阅下面的代码。这会在我点击它时在Domino / Notes中创建一个文档,我会收到以下消息
注意项目未找到
tmpStartTime_Local:运算符的数据类型不正确或@Function时间/预期日期
然后我尝试填写所有可以创建文档的“tmp”时间字段,但它也不正确。我也尝试使用“通知”而不是再次使用预约表格。
当我在Notes中打开文档时,它说它是一个议程项目,但不是会议,而且它反复出现,但它不是。它出现在“所有文档”中,但不出现在日历或资源预留中。我认为要么是我没有为约会文件设置正确的值,要么我没有给任何想法如何纠正正确的服务?
function postREST()
{
var msg=
{
"Subject":"TEST C3",
"Body":"The date/time variant is basically just a floating-point number with the date as the integer part and the time as the fractional part. It can be freely converted back and forth to a Double, without losing information.",
"$PublicAccess":"1",
"$BusyName":"CN=Administrator/O=acme",
"$BusyPriority":"1",
"$ApprovalList":"CN=Administrator/O=acme",
"$CSFlags":"uw",
"$CSCopyItems":["Room"],
"$Programmatically": "1",
"ExcludeFromView": ["D","S" ],
"MailOptions":"0",
"AllowBusyAccess":"",
"NoticeType" : "I",
"AutoProcessType":"0",
"AutoProcessUserList":"Administrator",
"Room":"Room2\/ZAC Atalante champeaux@acme",
"AppointmentType":"3", // 0 = Appointment 3 Meeting
"Form":"Appointment",
"_ViewIcon":158, // Meeting
"Repeats":"", // doesn't appear to do much
"Chair":"CN=Administrator\/O=acme",
"Principal":"CN=Administrator\/O=acme",
"From":"CN=Administrator\/O=acme",
//"From":"CN=Administrator",
"AltChair":"CN=Administrator\/O=acme",
"SequenceNum":1,
"OrgTable":"C0", // Calendar entry 0 => first Calendar
"Logo":"StdNotesLtr25",
"StartTime":"10:00:00",
"StartDate":"2014-02-17",
"EndTime":"11:00:00",
"EndDate":"2014-02-17",
"CalendarDateTime":"2014-02-17T09:00:00Z",
"StartTimeZone":"Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=68$ZN=Romance",
"EndTimeZone":"Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=68$ZN=Romance",
"WhiteBoardContent":
{
"type":"multipart",
"content": [
{
"contentType":"text\/html; charset=US-ASCII",
"contentDisposition":"inline",
"data":"<html><body>HELLO WORLD<\/body><\/html>\r\n\r\n"
}
]
},
}
try {
var Amsg = JSON.stringify(msg);
}
catch (err) {
log(": Exception:"+ err);
}
var url = "http://99.99.99.99/mail/administ.nsf/api/data/documents?form=Appointment";
var username = "admin";
var password = "pwd";
try{
xhr = new XMLHttpRequest();
xhr.addEventListener("loadstart", function(evt) { //log("loadstart");log(evt);
}, false);
xhr.addEventListener("progress", function(evt)
{ //log("progress");log(evt);
}, false);
xhr.addEventListener("error", function(evt) {
error("xmlhttprequest ERROR");
log("ERROR readyState : " + this.readyState + " status : " + this.status + " " + this.statusText);
log("ERROR responseText : " + this.responseText);
log("ERROR responseXML : " + this.responseXML);
error(evt); }, false);
xhr.addEventListener("abort", function(evt) { error("abort"); error(evt); }, false);
xhr.addEventListener("load", function(evt) { //log("load");log(evt);
}, false);
xhr.addEventListener("loadend", function(evt) {
log("loadend ANSWER : readyState : " + this.readyState + " status : " + this.status);
postReturn(this.responseText);
}, false);
xhr.open("POST", url, true, username, password);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(msg);
}
catch(err) {
log(": Exception:"+ err);
}
}
答案 0 :(得分:1)
对于Domino 8.5.3,数据服务是唯一可用的REST服务。
在Domino 9.0中它变得更好。这使您可以选择使用OpenNTF中的扩展库来安装the Domino calendar service。日历服务更适合您的用例。它不需要深入了解Notes C&amp; S架构,并在您创建,更新和删除事件时自动处理调度工作流程。
此外,日历服务内置于Domino 9.0.1中。所以9.0.1甚至不需要单独的扩展库安装。
但是,假设您受限于8.5.3和数据服务,我知道是什么导致“运算符的数据类型不正确”错误。您的JSON输入将每个数据/时间项定义为纯字符串。您可能会有更好的结果声明数据类型如下:
"CalendarDateTime": {
"data": "2014-02-17T18:00:00Z",
"type": "datetime"
}
因此,您可以尝试明确声明每个日期/时间项的数据类型,但我个人从未尝试使用数据服务创建日历事件。即使你遇到这个错误,我也想知道未来是否会有更多问题。
答案 1 :(得分:0)
您缺少至少两个项目:StartDateTime(Startdate和StartTime的组合)和EndDateTime(猜测...)。
查看Calendaring and Scheduling Schema以查找其他缺失项目。
此外,您可以检查文档中项目的数据类型(Alt - 在日历视图中输入文档),因为它们可能是文本类型。然后按照Dave的建议更改您的代码。