【问题标题】:Is there a way to access the properties of pages in confluence from inside a custom macro?有没有办法从自定义宏内部访问融合页面的属性?
【发布时间】:2018-03-08 23:19:16
【问题描述】:

我想检查启用宏的页面中的标签名称及其子标签的名称。这可以使用自定义宏吗?我遵循了本教程: https://developer.atlassian.com/server/framework/atlassian-sdk/create-a-confluence-hello-world-macro/

并查看了其他一些文档,但无法验证。

【问题讨论】:

    标签: confluence


    【解决方案1】:

    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>
    

    【讨论】:

      【解决方案2】:

      我能想到两种方法-

      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 = '&lt;parent_page_id&gt;'

      2) 休息电话

      这种方式有点复杂,不推荐,但步骤类似于自定义插件。

      【讨论】:

        猜你喜欢
        • 2020-03-12
        • 1970-01-01
        • 2010-09-07
        • 2013-06-10
        • 2022-08-02
        • 1970-01-01
        • 2012-06-06
        • 2022-09-23
        • 2022-08-23
        相关资源
        最近更新 更多