2015-02-12 134 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)}); 
相关问题