2 回答
- 543
いろいろな条件によって考え直さないといけないかと思いますが...
例えばラジオボタンの値によってセキュリティレベルを変更するスクリプトを
ラジオボタンフィールドの説明欄に挿入してみました。<script> AJS.toInit(function () { function func() { // フィールド ID は置き換える var radioButton = document.querySelectorAll('[name="customfield_11400"]'); var radioButtonField = radioButton[0].parentElement.parentElement; var securityLevel = document.getElementById('security').options; function setLevel(levelName){ for(var i = 0,len = securityLevel.length; i < len; i++){ if(securityLevel[i].textContent.indexOf(levelName) != -1){ securityLevel[i].selected = true; break; } } } radioButtonField.addEventListener('click', function(){ for(var i = 0, len = radioButton.length; i < len; i++){ if(radioButton[i].checked){ // ラジオボタンの値によってセキュリティレベルを変更 switch(radioButton[i].nextElementSibling.textContent){ // ラジオボタンの値が「bbb」の場合 case 'bbb' : // セキュリティレベル「ユーザー」に設定 setLevel('ユーザー'); break; // ラジオボタンの値が「ccc」の場合 case 'ccc' : // セキュリティレベル「管理者のみ」に設定 setLevel('管理者のみ'); break; // その他 default : // セキュリティレベルなし setLevel('なし'); break; } break; } } },false); } func(); JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e, context, reason) { if (reason === JIRA.CONTENT_ADDED_REASON.dialogReady) { func(); } }); }); </script>
汚かったらすみません...
あとはアドオンの Scriptrunner でしょうか...?
- 蒼龍
Shuzaburo Dobaさん
試しにクリックでアラートを出すような形で動作確認をしてみました。この仕組みだと、通常の編集画面では編集できますが、インライン編集だと説明が表示されないから動かないのですね・・・。
これに関してはインライン編集を禁止にするかどうか内部で議論してみます。次は編集で割り込ませるイベントをClickからsubmitとかにして値の評価ができないか確認してみます。
ひとまず途中報告まで・・・
- Kengo Ohsaki
蒼龍-san,
私も 伊藤看寿-san の意見の通り、アドオンなどで課題編集イベントを取得するほうがいいと思います。JavaScriptは見た目上での処理しかできないので…。
カスタムフィールドの値を評価して、評価結果によりセキュリティレベルを操作するような処理を作るとした場合は ScriptRunner for JIRA の https://scriptrunner.adaptavist.com/latest/jira/listeners.html になるかと思います。
- 蒼龍
皆様
色々ありがとうございました。
最終的に Shuzaburo Dobaさんのコードを参照に、以下のような感じのスクリプトを説明欄に埋め込みました。
<script> function func(){ var edit_button = document.getElementById("edit-issue-submit"); edit_button.addEventListener('click', function(){ var radioButton = document.querySelectorAll('[name="customfield_10300"]'); var radiovalue; var number = document.getElementById("customfield_10301").value; for(var i=0;i<radioButton.length;i++){ if(radioButton[i].checked){ radiovalue = radioButton[i].nextElementSibling.textContent; break; } } if(radiovalue == "外部開示" && number != ""){ setLevel("開示"); }else{ setLevel("非開示"); } },false); } function setLevel(levelName){ var securityLevel = document.getElementById('security').options; for(var i = 0,len = securityLevel.length; i < len; i++){ if(securityLevel[i].textContent.indexOf(levelName) != -1){ securityLevel[i].selected = true; break; } } } func(); </script>
伊藤看寿さん、 Kengo Ohsakiさん
リスナー機能の提案ありがとうございました。
Atlassianのドキュメントを読んではみたのですが、リスナー機能の概要がつかめず、どういったことができてどう使う機能なのかが読み取れませんでした。
細かく解説しているサイトも無く、私にリスナー機能を使うのは難しそうです。せっかくオススメとして提案していただいたのに申し訳ないです・・・
- Kengo Ohsaki
蒼龍-san,
いえいえ、結果として目的達成できたということでよかったです
リスナー機能は、課題を編集したらメールが届くかと思いますが
内部的には課題編集というイベントをトリガーにしてメールが送られています。
メール以外にもアドオンを入れる・作ることで課題編集イベントをトリガーにして、任意の課題操作をできるようにするというようなものですね。
ワークフローの事後操作はステータス変更時にしか動かないですが、イベントをトリガーにできるのでご質問のようなケースでは一番良い方法ですが、アドオンのリスナー機能を使うのは確かに少し難しいですね…。
コメントを追加... - 543
リスナーで課題更新イベントを拾って、セキュリティレベルフィールドを更新する方法もあるかもしれません。
- https://ja.confluence.atlassian.com/adminjiraserver/listeners-938846909.html
- https://developer.atlassian.com/server/jira/platform/writing-jira-event-listeners-with-the-atlassian-event-library/
しかし、自作のリスナーをアドオンで実装するのは少々手間がかかるので、ScriptRunner の Listeners や Automation for Jira などのアドオンを使えば、もう少し楽に実現できるかもしれませんね(具体的なコードをすぐに示せずすみません・・・)。
- https://scriptrunner.adaptavist.com/latest/jira/listeners.html
- https://docs.codebarrel.io/automation/
コメントを追加...
JIRAでは、トランジョン時に事後操作でフィールドの値を変更したりできますが、
これを課題編集時に行うことは可能でしょうか?
具体的には、課題編集時にカスタムフィールドの値を評価して、評価結果によりセキュリティレベルを操作するような処理を入れたいと思っています。