2014-02-14 29 views
0

我正在寫一個客戶端JS應用程序,我在Domino服務器的REST接口(帶有OSGi擴展的版本8.5.3)中遇到了一些問題,GET部分工作但我遇到POST問題,請參閱下面的代碼。這就造成了Domino/Notes的文檔時,我點擊它,我得到後續消息沒有找到Domino REST POST不工作約會 - 注意項目未找到

  • 注意項目

  • 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 [email protected]", 
       "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); 
     } 

}

回答

1

對於Domino 8.5.3,數據服務是唯一可用的REST服務。

它在Domino 9.0中變得更好。這使您可以選擇使用OpenNTF的擴展庫來安裝the Domino calendar service。日曆服務更適合您的使用情況。它不需要深入瞭解備忘錄模式,並在創建,更新和刪除事件時自動處理計劃工作流程。

此外,日曆服務內置到Domino 9.0.1中。所以9.0.1甚至不需要單獨的擴展庫安裝。

但是,假設你被約束到8.5.3和數據服務,我有一個想法是什麼導致「操作符錯誤的數據類型」錯誤。您的JSON輸入將每個數據/時間項定義爲一個純字符串。你可能有申報的數據類型這樣的效果會更好:

"CalendarDateTime": { 
    "data": "2014-02-17T18:00:00Z", 
    "type": "datetime" 
} 

所以,你可以嘗試顯式聲明每個日期/時間項的數據類型,但我個人從來沒有嘗試創建與數據服務的日曆事件。即使你經歷了這個錯誤,我想知道未來是否會有更多的問題。

+0

更改日期格式解決了上述錯誤。我還有兩個問題,一個是當我打開議程項目時,它不會說它是一個會議,而另一個是在Notes中它說它是一個重複項目,有什麼想法? –

+0

我應該如何使用通知或約會來創建新會議? –

+0

您一定要使用約會表單。通知表格僅用於計劃工作流程(例如接受,拒絕,取消通知)。通過將「良好」事件的項目與應用程序創建的事件的項目進行比較,最有可能解決其他問題。正如Torsten所說,C&S架構文檔是一個很好的參考。 –

0

您至少缺少兩項:StartDateTime(Startdate和StartTime的組合)和EndDateTime(guess ...)。

查看Calendaring and Scheduling Schema找出其他缺失的項目。

此外,您可以檢查文檔中項目的數據類型(Alt - 在日曆視圖中的文檔上輸入),因爲它們可能是文本類型。然後按照Dave的建議更改你的代碼。

+0

嗨,我比較和對齊了正確的會議和我使用客戶端JS創建的會議之間的領域,雖然它更好,但仍然存在問題。會議設置爲私人(我設置「$ PublicAccess」=「1」),有一些週期性的問題(我已經設置了Repeats和OrgRepeat爲「」),房間的切換不正確(它增加了房間房間領域,但似乎沒有鏈接到實際的房間!!!)。你知道在JavaScript客戶端有一個示例代碼在Domino 8.5.3中發佈新會議的任何地方嗎? - –

+0

好吧,所以你可能沒有閱讀日曆和schduling模式。要預訂房間,您需要創建另一個通知類型的文檔並將其發送到房間。通知和約會使用名爲ApptUnid的項目相互關聯 - 您忘記了另一項。不幸的是,我不認爲這可以通過休息服務來實現,但有人可能會糾正我,因爲通知對預約的迴應可能無法如此,發送電子郵件也無濟於事。我已經使用lotusScript多次完成此操作。從來沒有用JavaScript ..對不起,我不能幫你進一步 –