2015-02-12 133 views
1

我正在嘗試使用Confluence REST API來更正Confluence站點上頁面的樹結構。我可以手動執行此操作,但是有相當多的頁面,並且我已經在另一個XML文件中擁有樹結構。如何將頁面作爲Confluence中另一頁的子頁面添加 - REST API

目前我能夠使用合流REST API上傳頁面和圖像。定義位於here

我試圖使用/rest/api/content/{id} PUT命令。這要求內容在請求的正文中。附加從先前的GET請求中收到的內容,我發現我必須更新版本計數。

以上所有的作品。然而,似乎並沒有將其添加到祖先列表中。如果我將父頁面添加到祖先列表中,則會返回格式錯誤報告。

如果我手動將頁面附加到另一個頁面並請求其內容,我發現該父項在祖先列表中出現兩次。歷史數量也不會增加。

產生的JSON從該頁面的GET請求返回:

http://someconfluencesite.com/rest/api/content/10031361?expand=ancestors (200) 

{ 
    "id" : "10031361", 
    "type" : "page", 
    "title" : "Automatic Action Usage Updates", 
    "ancestors" : [{ 
      "id" : "10031327", 
      "type" : "page", 
      "title" : "Action Lists" 
     }, { 
      "id" : "10031327", 
      "type" : "page", 
      "title" : "Action Lists" 
     }, { 
      "id" : "10031328", 
      "type" : "page", 
      "title" : "Actions Tab" 
     }, { 
      "id" : "10031327", 
      "type" : "page", 
      "title" : "Action Lists" 
     }, { 
      "id" : "10031327", 
      "type" : "page", 
      "title" : "Action Lists" 
     }, { 
      "id" : "10031328", 
      "type" : "page", 
      "title" : "Actions Tab" 
     } 
    ] 
} 

樹這是如下所示:

  • 空間
    • 動作列表
      • 操作選項卡
        • 自動操作使用更新

這使我相信我使用了錯誤的命令。

我試圖聯繫Confluence支持,但是他們的授權郵件沒有收到我的收件箱。所以我來到這裏:)

所以我的問題是在匯合中創建頁面樹的REST調用是什麼?之後,請求體的格式是什麼?

編輯: 以下PUT請求獲取成功的返回碼。然而,返回的對象並沒有附加祖先(並非不尋常,因爲在所有GET請求中,您必須展開才能獲得它)。版本號不會更新。這兩頁也沒有互相鉤住。

{ 
    "id":"10552520", 
    "type":"page", 
    "title":"Correct Page Title", 
    "ancestor":[ 
    { 
     "id":"10552522", 
     "type":"page" 
    }], 
    "version": 
    { 
      "number":"2" 
    } 
} 

雖然刪除頁面的所有內容,但上面所做的好事。

以下POST調用會導致正在創建的頁面,但沒有祖先。祖先存在與id提供。奇怪的是,這也是在頁面中沒有任何內容的情況下創建的。

{ 
    "type":"page", 
    "title":"Correct Title", 
    "space":{"key":"SpaceKey"}, 
    "ancestor":[{"id":"10553655","type":"page"}], 
    "body":{"storage":{"value":"<p>New Page </p>","representation":"storage"}} 
} 

將上面的代碼放入REST API瀏覽器中也會導致子代未連接到父級。

+1

可能的相關性:https://answers.atlassian.com/questions/5278993/updating-a-confluence-page-with-rest-api-problem-with-ancestors和https:// JIRA。 atlassian.com/browse/CRA-487。我明白你的問題是關於修復現有頁面的層次結構,但在未來,它可能更容易只是[在正確的位置創建它們](http://stackoverflow.com/questions/23523705/how-to-create第一個地方是使用他們的休息-api/23526357#comment36097279_23526357)。 :-) – 2015-02-12 02:30:30

+1

根據Confluence的資料,PUT命令*應該*能夠將頁面移動到另一個父頁面。到底什麼是「格式錯誤」?就我所見,爲了移動頁面,祖先列表應該包含對所需父頁面的pageId的單一引用。 – 2015-02-12 02:40:50

+0

@ScottDudley最初上傳正確的樹結構是最好的。我只是無法理解如何獲得正確的祖先列表。我附加了從已經構建的樹中返回給我的JSON(爲簡潔起見,我已經減少了它)。我看不出它與我擁有的樹有什麼關係。我列出的樹的JSON是什麼? – Jason 2015-02-12 22:44:20

回答

1

所以看來我的問題的答案是在問題本身。

JSON需要具有「祖先」而不是祖先數組作爲祖先數組的名稱。一旦這個被改變,它就可以用於POST請求。

因此,如果您閱讀本文並且遇到類似問題,請確保您傳遞的JSON中的所有元素名稱都是正確的。如果他們不是,他們只是被忽略。

1
{ 
    "id":"10552520", 
    "type":"page", 
    "title":"Correct Page Title", 
    "ancestors":[ 
     { 
      "id":"10552522", 
      "type":"page" 
     } 
    ], 
    "version": 
     { 
      "number":"2" 
     } 
    } 

這是「祖先」,而不是「祖先」。

0

要先移動現有頁面,先獲取它的版本,空間等。 然後用版本+ 1,空間,祖先,標題調用PUT。

pageaschild = { "type":"page", 
     "title":name, 
     "space":{"key":space}, 
     "ancestors":[{"id":ancestorid,"type":"page"}], 
     "version":{"number":version}}; 

$.ajax({type:'PUT', url:baseURL + pageId, contentType:"application/json;charset=utf-8", data:JSON.stringify(pageaschild)}); 
相關問題