2
1
0

Confluenceのページ作成画面で
グループを設定すると、ページ作成時に指定したグループに対して
共有を飛ばせるようなマクロを作りたいと思っているのですが、マクロで可能でしょうか?

    Commentコメントを追加...

    1 回答

    1.  
      1
      0
      -1

      技術的に出来るかできないかでいうと、ユーザーマクロできるかもしれませんね…


      共有を飛ばすのは、「共有」ボタン機能のことかと思いますがその機能は Share Page というアドオンで実現しています。

      外部から操作するJava APIが存在するのですが、Javadocが公開されていないため(たぶん)

      以下などからアドオンの実装からAPIを自分で確認する必要があります。

      基本的には

      com.atlassian.confluence.plugins.sharepage.api.ShareRequest クラスに共有したい情報を設定

      com.atlassian.confluence.plugins.sharepage.api.SharePageService の share メソッドにそのクラスを引数として渡せばできるはず…

      イメージですが以下のような感じですかね。脳内コードなので動作確認すらしてません。

      ## @param group:title=グループ名|type=string|required=true|desc=グループ名を指定してください。
      
      #set($hashsetClass = $content.class.forName('java.util.HashSet'))
      #set($hashset = $hashsetClass.newInstance())
      #set($ret = $hashset.add($paramgroup))
      
      #set($containerManagerClass = $content.class.forName('com.atlassian.spring.container.ContainerManager'))
      #set($getInstanceMethod = $containerManagerClass.getDeclaredMethod('getInstance',null))
      #set($containerManager = $getInstanceMethod.invoke(null,null))
      #set($containerContext = $containerManager.containerContext)
      #set($sharePageService = $containerContext.getComponent('com.atlassian.confluence.plugins.sharepage.api.SharePageService'))
      
      #set($shareRequestBuilderClass = $content.class.forName('com.atlassian.confluence.plugins.sharepage.api.ShareRequestBuilder'))
      #set($shareRequestBuilder = $shareRequestBuilderClass.setEntityId(content.getContentId().asLong()));
      #set($shareRequestBuilder = $shareRequestBuilder.setContextualPageId(content.getContentId().asLong()));
      #set($shareRequestBuilder = $shareRequestBuilder.setEntityTypeValue(content.getContentTypeObject().getType());
      #set($shareRequestBuilder = $shareRequestBuilder.setNote("共有");
      
      #set($shareRequestBuilder = $shareRequestBuilder.setGroups($hashset));
      #set($sharePageService.share($shareRequestBuilder.build()));
      

      ちなみにアドオン的には、そのものの機能はなかった記憶ですが似た機能として…

      グループ名のMentionアドオン(但しページ保存時にグループに所属するメンバーもMentionに展開されるはずです)


      ラベル=グループを指定しておき、そのラベルをページに設定すると自動共有するアドオン

      基本機能としては、ウオッチは ページ または スペースしかなく、スペースに新しいページが作成されたときに通知が行くようにはスペースウオッチしかない。しかし、スペースウオッチだと範囲が広く通知が多くなる懸念がある。そのため、ページツリー(その配下に新しいページが作成されたときにのみ通知する)でのウオッチができるようにするアドオン。


      1. 蒼龍

        Kengo Ohsakiさん
        ありがとうございました。

        結局、上記コードではエラーが出て動きませんでした。
        難易度が相当高そうなので、要望を出してきたユーザーには、技術的に難しい と回答しようとおもいます。

      2. Kengo Ohsaki

        蒼龍-san,

        はい。多分いろいろ間違っているソースコードかと思います。

        そもそも、ユーザーマクロからShare PageプラグインのAPI、クラスにアクセスできない気がしてきましたので、技術的にもできないかもしれません。

        期待させてしまい申し訳ありません。

        アドオンを使えば似たことはできると思いますけどね…どこまで実現したいかにもよりますね。


      Commentコメントを追加...