Для Confluence существует знакомый нам инструмент SIL на базе БЕСПЛАТНОГО (пока еще (!) ) аддона: Power Scripts for Confluence
На этом языке можно так же делать различные плюшки, получая информацию из вашего Confluence.
Так же этот аддон несет с собой 4 макроса для вывода информации.
Один из таких макросов я буду использовать для следующей задачи:
Мне необходимо определить местоположение страницы, относительно ее родителей, в конкретном спейсе. Например, для получения статистики работы с этой страницей.
На примере структуры моего тестового пространства, рассмотрим детально задачу.
Это Space Test 1
из которого я хочу получать статистику по работе со страницами. Но меня интересует только Дерево 1. Все, что происходит в остальных деревьях - я хочу игнорировать.
Информация нам нужна в виде сводной таблицы, в которой будет видно. Кто изменил, что изменил и когда изменил. (возможно захочется что-то еще, но это опционально)
Таблица будет выглядеть примерно так:
Имя страницы
|
Ссылка
|
Автор изменений
|
Дата изменений
|
---|---|---|---|
В силу того, что данная таблица мне нужна с актуальными данными - нам необходимо сделать так, чтобы она пополнялась по мере каких-либо действий.
А значит, нам потребуется Event Listener. И событие Page Update. Но им мы заморочимся в последнюю очередь. А пока прикинем что нам потребуется.
- Скрипт, который будет коллекционировать эти данные
- Файл csv, в который мы будем складывать полученные данные
- Макрос SIL table, с помощью которого мы выведем информацию из файла на какую-либо страничку
Для файлов я создал вот такую структуру:
Начнем с написания скрипта. Который в последствии будем использовать в Listener.
Т.к. эвент будет слушать все события обновления, всех страниц - мне необходимо ограничить его действие, в первую очередь, конкретным пространством ST1
т.к. в последствии нам будет необходимо перебирать страницы и искать их родителей, чтобы исключить не нужные деревья в спейсе - я сразу объявлю несколько переменных.
Где id и parent это стандартные доступные переменные для SIL Confluence
Сразу определимся, что нам нужно исключить корневую (домашнюю) страницу пространства. Т.к. за ней мы следить не собираемся. Нас интересует только Дерево 1 и все, что происходит внутри него.
Поэтому нам необходимо узнать ID этой домашней страницы.
Переходим на страницу. Выбираем в меню Информация о странице
и получаем ее id 1409027 из адресной строки
Теперь сразу ограничим область действия скрипта, на основе этой страницы
А теперь нам необходимо запустить цикл проверки нужного нам дерева, в котором мы вернем необходимый признак "mark" (который я объявил ранее).
Конечно, более правильно вынести этот цикл проверки в отдельную функцию и пользоваться им в последствии, для других операций. Но в данном примере я не буду заморачиваться и покажу принцип работы.
Теперь нам необходимо принадлежность текущей странице к нашему дереву и ее родителей.
Для этого, получим нужный ID дерева таким же образом, как мы смотрели ID у домашней страницы.
Внимание!!!
Иногда, в больших инстансах, id страницы возвращается значением со степенью. например 1.3678496E7
Для того, чтобы узнать наверняка, что вернется в скрипт - используйте Run Configuration с необходимой страницей и с помощью runnerLog(); выводите значение.
Делать это конечно нужно в отдельном файле. Чтобы случайно что-то не натворить (выполнить) в том скрипте, который вы пишете.
Поэтому,
- Cоздайте отдельный файл
- Определите id интересуемой страницы
- Вбейте ее в Run Configuration
- Пропишите в скрипте вывод требуемых переменных id и parent
Мой ID страницы "Дерево 1" = 1409029
А так я проверю что будет возвращаться в скрипт:
Итак, требуемые id известны. Теперь продолжим цикл, в котором нам надо изменить признак, для выхода из цикла. Чтобы все это к чертям не зависло 😭
Разберем логику того, что я тут накалякал внутри цикла while
Первый if: если наш текущий ID страницы равен Дереву 1 ИЛИ родитель текущей страницы равен Дереву 1 - то мы присвоим признаку выхода из цикла = 1 (и на этом цикл завершится). Значит эта страница или Дерево1, за которым мы следим. Или дочерняя страничка Дерева 1, что тоже нам подходит.
Второй else if: если наш Родитель является Домашней страницей пространства И текущий cpid НЕ равен Дереву 1 - значит присвоим признаку выхода из цикла = 2 (и на этом цикл тоже завершится). Это означает, что это какое-то другое Дерево. НЕ Дерево 1.
и else: т.к. нас ничего не устроило, то по всей видимости, это не Дерево 1 и даже не его ветка, раз мы не смогли определить это в предыдущих условиях. А значит это какая-то вложенность. 2,3 или 4 (итд) страница, внутри дерева. Поэтому, нам надо поменять переменные для проверки.
Мы присвоим cpid (текущему ID) = номер родителя (cppid)
А cppid теперь присвоим уже на основе нового значения cpid: cppid = cpid.parent
Ну и чтобы наверняка проставим mark (признак выхода) = 0. Чтобы наш цикл продолжал крутиться.
Таким образом, как только цикл докрутит до нужного родителя и убедится к кому все же принадлежит наша вложенная страница - он проставит 1 или 2 и выйдет из цикла.
Проверка цикла
Вы можете добавить runnerLog(); внутри цикла или за его пределами, чтобы посмотреть что будет выводить в том или ином случае. Посмотреть и изучить как работает цикл в тех или иных условиях.
После того, как добавите нужный вам runnerLog(); - измените контекст выполнения скрипта на какую-нибудь дочернюю задачу (Run Configuration) и запустите скрипт прямо из консоли.
Всё, теперь мы научились определять, к какому дереву принадлежит родитель. Следующая задача:
Внести данные об изменениях на странице
Прежде, чем мы начнем вносить данные в наш CSV файл - нам необходимо его подготовить. Ранее мы уже создали файл, а теперь определим заголовки столбцов.
Для этого, необходимо перейти в файл и прописать его структуру.
Для этого, прямо в SIL Manager - перейдем в файл csv и пропишем первую строку: title,url,EditBy,dateEdit
Обязательно!
Обязательно, после ввода title,url,EditBy,dateEdit - переведите каретку на следующую строку (нажмите Enter) и сохраните файл. Иначе первая добавленная строка "склеится" с этой строкой
А теперь допишем наш скрипт. Который будет вносить новые строки с данными в наш файл, если страница пренадлежит Дереву 1. (т.е. mark == "1")
Всё уже готово, для того, чтобы подключить SIL Listener для эвента.
Проверка работы Listener
Для проверки работы нашего слушателя - отредактируем любую страницу внутри требуемого дерева и отредактируем внутри НЕ требуемого дерева.
А теперь идем в SIL Manager. Обязательно сделаем Refresh структуры (иначе изменений не увидите) и перейдем в файл CSV, чтобы посмотреть, что там находится.
Как вы можете видеть - там единственная, нужная строчка, с информацией об изменении в отслеживаемом дереве. Апдейт из второго дерева - сюда не попал.
Можно считать, что все у нас работает отлично.
Следующий шаг:
Вывод данных в таблицу из файла
Создаем SIL файл со структурой вывода, если вы это не сделали ранее. У меня это: ST1_outLog_editPage.sil
В котором пропишем структуру данных:
Сохраняем файл. И переходим (создаем) страницу, на которой будем отображать данные
Для этого я выбрал абсолютно другое пространство и создал новую страничку
И добавляем макрос SIL table.
В котором указываем имя нашего скрипта структуры. Оставляем разделитель - запятую (если ваши имена страниц содержат запятые - используйте другой разделитель, в т.ч. в csv файле) и прописываем имена столбцов. Нажав на кнопку обновления предварительного просмотра - можете убедиться в корректности отображения.
Наш макрос готов. Можете опубликовать страницу и посмотреть как это выглядит.
Для теста - я попробую еще изменить страницу внутри дерева 1. А затем обновлю текущую страницу:
Как видите - страница заполняется данными автоматически. Всё готово 😊
Этот же способ можно использовать для создания \ удаления страниц. Но про удаление и особенность этого эвента - я расскажу в другой статье.
Задача для вас
Будет здорово, если кто-то сделает так, чтобы ссылка во втором столбце была URLом. Если у вас получится - пишите в комментарий, как это удалось! Добавлю в статью и буду благодарен 😏
Комментариев нет:
Отправить комментарий