【发布时间】:2018-03-08 23:19:16
【问题描述】:
我想检查启用宏的页面中的标签名称及其子标签的名称。这可以使用自定义宏吗?我遵循了本教程: https://developer.atlassian.com/server/framework/atlassian-sdk/create-a-confluence-hello-world-macro/
并查看了其他一些文档,但无法验证。
【问题讨论】:
标签: confluence
我想检查启用宏的页面中的标签名称及其子标签的名称。这可以使用自定义宏吗?我遵循了本教程: https://developer.atlassian.com/server/framework/atlassian-sdk/create-a-confluence-hello-world-macro/
并查看了其他一些文档,但无法验证。
【问题讨论】:
标签: confluence
Page 类允许您访问页面的标签(通过getLabels())和所有页面的子级(通过getChildren(),但请注意否权限检查已完成)。我现在没有 Java 开发环境,但我能够在用户宏中显示当前页面及其子页面的标签(通过 $content 变量):
<h2>Labels</h2>
<code>$content.labels</code>
<h2>Children's Labels</h2>
<ul>
#foreach($child in $content.children)
<li> <code> $child.labels </code> </li>
#end
</ul>
【讨论】:
我能想到两种方法-
1) 自定义插件
我将介绍如何获得所需结果的高级细节。在实际尝试执行此操作时,您可能会遇到一些错误。所以 GOOGLE 是你最好的朋友。
首先,您必须使用 SQL 查询检索所有带有宏的页面
SELECT c.contentid, c.contenttype, c.title, s.spacekey
FROM CONTENT c
JOIN BODYCONTENT bc
ON c.contentid = bc.contentid
JOIN SPACES s
ON c.spaceid = s.spaceid
WHERE c.prevver IS NULL
AND c.contenttype IN ('PAGE', 'BLOGPOST')
AND bc.body LIKE '%ac:name="<macro_name>"%';
然后使用类似这样的标签获取所有页面:
SELECT * FROM CONTENT
WHERE CONTENTID IN (SELECT CONTENTID FROM CONTENT_LABEL
WHERE LABELID IN (SELECT LABELID FROM LABEL
WHERE NAME='<label name>'));
使用内容 ID 将两者的结果合并在一起,或者您也可以进行一次调用以获取已合并的输出。
你有页面。
您可以使用另一个查询来获取他们的孩子,例如
SELECT c.contentid, c.title FROM CONFANCESTORS a JOIN CONTENT c ON a.descendentid = c.contentid WHERE a.ancestorid = '<parent_page_id>'
2) 休息电话
这种方式有点复杂,不推荐,但步骤类似于自定义插件。
【讨论】: