Es kann hin und wieder vorkommen, dass Makros in Confluence entfernt und durch ein neues Feature ersetzt werden. So zum Beispiel das View PDF Makro, dass mit Confluence 5.9 als veraltet markiert wurde. Aber was tun, um die davon betroffenen Seiten zu finden? Hier hilft PocketQuery for Confluence. Zugegeben ein banales, aber dennoch sehr praktisches Beispiel, welches auch die Nutzung der Templating- und Converter-Mechanismen von PocketQuery, für den Umgang mit komplexeren Datensätzen, veranschaulicht.

Voraussetzungen

  1. PocketQuery for Confluence sollte natürlich installiert sein.
  2. Eine Verbindung zur jeweiligen Datenbank von Confluence sollte eingerichtet sein.

Vorbereitung

Um das Makro auf einer beliebigen Seite finden zu können, muss zunächst das Speicherformat angezeigt werden. Dort ist das Makro in dem gleichen Format hinterlegt, wie es auch in der Datenbank zu finden ist. Zum Beispiel das View PDF Makro:

<ac:structured-macro ac:name="viewpdf">
    <ac:parameter ac:name="name">
      <ri:attachment ri:filename="My_document.pdf"/>
    </ac:parameter>
  </ac:structured-macro>

Interessant ist hierbei eigentlich nur der folgende Teil:

ac:name="viewpdf"

PocketQuery for Confluence einrichten

Wir brauchen dazu:

  1. Eine neue Abfrage (Query)
  2. Einen Converter
  3. Ein Template (optional)

SQL Abfragen

SELECT
    title,
    "content".contentid,
    spaces.spacekey,
    MAX("version"),
    (CHAR_LENGTH(bodycontent.body) - CHAR_LENGTH(REPLACE(bodycontent.body, :searchterm, ''))) / CHAR_LENGTH('ac:name="viewpdf') AS "occurrences"
FROM
    "content"
    JOIN spaces ON spaces.spaceid = "content".spaceid
    JOIN bodycontent ON bodycontent.contentid = "content".contentid
WHERE
    contenttype = 'PAGE'
    AND bodycontent.body LIKE concat('%', :searchterm, '%')
GROUP BY
    content.contentid,
    title,
    spaces.spacekey,
    bodycontent.body
ORDER BY
    spacekey,
    title

Der Parameter wird als Typ ‘String’ angelegt und als Searchterm hinterlegt.

Converter

An sich braucht man den Converter nicht zwingend, es macht den Ablauf aber etwas nutzerfreundlicher um URLs zu erzeugen und klickbar zu machen.

Der Converter basiert auf dem Standard Converter, es werden allerdings ein paar Spalten zusammengesetzt.

function convert(json) { // json is the result as json string
    var baseURL = "'https://confluence.mycompany.com'"

    var result = []; // the array-of-objects we will return
    var parsedJsonObject = JSON.parse(json); // parse json string
    var current, index; // loop variables
    for (index in parsedJsonObject) { // iterate through the result
        // only continue if this property is not inherited
        if (parsedJsonObject.hasOwnProperty(index)) {
            current = parsedJsonObject[index]; // current object
            result.push({ // add a converted object
                'Page Title (Page ID)': '<a href="'+baseURL+'/pages/viewpage.action?pageId='+current.contentid+'" target="_blank">'+current.title + ' ('+ current.contentid+')</a>',
                'Space': '<a href="'+baseURL+'/display/'+current.spacekey+'/" target="_blank">'+current.spacekey+'</a>',
                'Occurrences': current.occurrences
            });
        }
    }
    return result; // return the converted result
}
Wichtig! In Zeile 2 muss die Base URL von Confluence eingetragen werden.

Template

In unserem Beispiel wurde das Standard-Template mit dem Button “Add default template” eingefügt - das ist wie gesagt optional und nur nötig, wenn man das Aussehen anpassen möchte.

Speichern und Makro einfügen

Im Query muss jetzt natürlich noch der Converter und das Template ausgewählt werden.

Auf einer Confluence-Seite kann das Makro dann hinzugefügt und zudem der Such-Term für das Makro aus der Vorbereitung eingefügt werden.

Der Such-Term sollte am besten in Wildcards gepackt werden, da davor und danach natürlich andere Inhalte steht. Zum Beispiel %ac:name=”viewpdf”%

Hilfreich ist, wenn man das dynamische Laden aktiviert.

Ergebnis

Eine Tabelle mit allen Seiten, die das Makro an irgendeiner Stelle eingebaut haben inklusive der Verlinkung zu dieser Seite. Somit kann diese direkt bearbeitet werden.