3
2
1

画面右上にあるクイック検索欄について、カスタムフィールド値での検索を行いたいと思っています。

通常、クイック検索は「要約、説明、コメント」のみが対象になりますが、「お知らせバナーの JavaScriptでカスタマイズ」によって可能になると下記で紹介されていました。

JIRAの小技紹介 クイックサーチのカスタマイズ

しかし、手順通りに設定しても何も起こりません。


コードに記述間違いがあったのか、少し修正するとドロップダウンが表示されるようにはなったのですが、ドロップダウンを選択して検索を行うとデッドリンクに飛ばされてしまいます。

※ドロップダウンを切り替えなければ(通常検索)、通常のクイック検索を行うことは可能です。

<script>
function preSubmit() {
var queryOption = document.getElementById("fieldChangeSearch");
if (queryOption.value == "normal") {
return;
}

document.getElementById("quicksearch").action='/private/test_jira//secure/IssueNavigator.jspa?';
var queryInput = document.getElementById("quickSearchInput");
queryInput.name=queryOption.value;
createHidden("reset", "update2", queryInput.id);
}

function createHidden(name, value, id) {
var hidden=document.createElement("input");
hidden.type='hidden';
hidden.name=name;
hidden.value=value;
if (id != "") {
hidden.id=id;
}
document.getElementById("quicksearch").appendChild(hidden);
}

function addOption(parent, value, name) {
var option=document.createElement("option");
option.value=value;
option.innerHTML=name;
parent.appendChild(option);
}

function addDropDown() {
var dropDown=document.createElement("select");
dropDown.name='fieldChangeSearch';
dropDown.id='fieldChangeSearch';
document.getElementById("quicksearch").appendChild(dropDown);

addOption(dropDown, "normal", "通常検索");
addOption(dropDown, "customfield_10100", "対象機種");
}

var searchForm=document.getElementById("quicksearch");
searchForm.onsubmit=preSubmit;
addDropDown();
</script>


JavaScriptは勉強中であまり詳しくないもので、ご存知の方はどうかご教授いただけないでしょうか?

よろしくお願いいたします。

    Commentコメントを追加...

    1 回答

    1.  
      3
      2
      1

      なかなか懐かしいJavaScriptですね。

      URLのパスが筆者のシステム依存になっていますので…

      document.getElementById("quicksearch").action='/private/test_jira//secure/IssueNavigator.jspa?';

      のソースコード部分を以下に変更すれば動くかと思います。

      document.getElementById("quicksearch").action= contextPath + '/secure/IssueNavigator.jspa?';



      1. 久次米 美奈

        動きました!ありがとうございます!

        ただ入力文字列が完全一致していないとヒットしないようですね…。


        現在「選択リスト (カスケード)」のカスタムフィールドを使用しているのですが、登録数が500以上はあるので、検索時にリストから探すのが厳しい状態です。

        仕方なく「要約」に上記カスタムフィールドを手入力して運用していますが、誤字・脱字によってクイック検索で出てこないこともあるため、できれば選択リスト(固定値)から選べるようにしたいと思っています。

        あいまい検索「~」が使えたらよかったのですが、フィールド(カスタムフィールド)には対応していないようです…。

        高度な検索 - フィールドのリファレンス


        もう少し調べてみますので、お気づきの点などありましたら情報提供下さいますと幸いです。

      2. Kengo Ohsaki

        久次米 美奈-san,

        ご連絡ありがとうございます。無事動いてよかったです…ですが

        「お知らせバナーの JavaScriptでカスタマイズ 」のJavaScript自体がかなり古い作りでして…

        何とか今のJiraバージョンでも動きますが、もう少し改善することができると思いますが…余裕がなくすみません。

        ただ状況を伺っている限り、今回のカスタマイズが適当ではないようにも考えています。

        確かに 「選択リスト (カスケード)」の選択肢が製品名とかパーツとかになると多くなるケースもあり、リストが多すぎて選ぶの大変ですよね、選択リスト ですので、あいまい検索「~」も対応していませんし。

        ということで

        「要約」に上記カスタムフィールドの値を手入力して運用して

        のを運用を自動的に実現できれば良いかと考えています。

        実現する考え方としては

        「選択リスト (カスケード)」の値を文字列として「テキストフィールド」にコピーするです。


        「テキストフィールド」に値がコピーできれば、あいまい検索「~」が使えますし

        クイック検索欄で検索時は、通常テキスト検索になるので、「テキスト フィールド」のカスタムフィールドが対象になります。

        text ~ "<入力した検索文字>"

        ちなみに正確にはスマートクエリが動かない検索文字列の場合ですけど…クイック検索については以下をご確認ください。

        • https://ja.confluence.atlassian.com/jiracoreserver070/quick-searching-777015987.html
          • 検索文字列が、検索語の指定をしていたり、課題キーやプロジェクト、課題タイプの場合はそのキーワードで絞りこみになります。
          • 上記ドキュメントの「フリーテキスト検索」の説明で単語が次のフィールドのいずれかである場合に限ります、概要、説明、コメントとなっていますが...
            厳密には誤りで JQL としては text ~ "<入力した検索文字列" になるため、こちらの説明が正しいです。


        「選択リスト (カスケード)」の値を文字列として「テキストフィールド」にコピーする方法としては、もちろん標準ではできませんのでアドオンを何かしら導入する必要があります。

        実現できるアドオンの種類も多いのですが、今回は無償アドオンで導入実績も多い 

        Jira Misc Custom Fields を使うことを考えます。

        このアドオンはプログラム(Javaのスクリプト言語)を記述することで、計算した値や任意の文字列をフィールドの値として返却できるアドオンになります。

        アドオンダウンロードの上、環境にインストールしましたら

        Jira管理画面でカスタムフィールドを作成する時に、フィールドタイプを すべて にすると

        Calculated XXX というタイプが増えていると思います。

        Calculated Text Field を選択して、カスタムフィード名を適当につけて(検索用_選択リスト (カスケード)のフィールド名 とかですかね)

        カスタムフィールドの説明に以下スクリプトをコピー&ペーストします。

        (警告) スクリプト内の「選択リスト (カスケード)のフィールド名>」の部分を、検索したい「選択リスト (カスケード)」のフィールド名に読み替えてください。

        <!-- @@Formula:
        import java.util.HashMap;
        import com.atlassian.jira.component.ComponentAccessor;
        import com.atlassian.jira.issue.Issue;
        import com.atlassian.jira.issue.fields.CustomField;
        import com.atlassian.jira.issue.CustomFieldManager;
        import com.atlassian.jira.issue.customfields.impl.CascadingSelectCFType;
        import com.atlassian.jira.issue.customfields.option.Option;
        
        CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
        CustomField customField = customFieldManager.getCustomFieldObjectByName("<選択リスト (カスケード)のフィールド名>");
        if (issueObject != null && customField != null) {
        	HashMap map= (HashMap)issueObject.getCustomFieldValue(customField);
        		if (map != null) {
        		Option parent = (Option)map.get(CascadingSelectCFType.PARENT_KEY);
        		Option child  = (Option)map.get(CascadingSelectCFType.CHILD_KEY);
        		if (parent != null) { 
        			if (child != null) {
        				return parent.getValue() + " " + child.getValue();
        			} else {
        				return parent.getValue();
        			}
        		}
        	}
        }
        return null;
        -->

        (情報) カスタムフィールドの説明にスクリプトを記述するアドオンになります。詳細が知りたい場合は公式ドキュメントをご確認ください→ https://innovalog.atlassian.net/wiki/spaces/JMCF/overview


        作成したカスタムフィールドは画面にはどこにも結び付ける必要はありません。画面に設定しても問題ありませんが、課題作成・編集画面では表示されません。課題表示画面のみに文字列が表示されるだけです。


        最後にJira管理画面でインデックス再構築を実施して頂き、うまく動いてれば、クイック検索欄で選択リストの値を 検索すれば対象の課題が ヒットするかと思います。

        JQLで

        検索用_選択リスト (カスケード)のフィールド名  ~ "<検索文字列>"

        のフィールドを指定したあいまい検索できます。


        課題の編集で、選択リストのフィールドの値を変更した時も

        特に操作必要なく、検索用_選択リスト (カスケード)のフィールド名 の値も変わります。


        長文となってしまいましたが、イメージつかめましたでしょうか?

        もし難しいことがあれば、Atlassianサポートではサポートの範囲が標準と決まっており、実現方法やアドオンを紹介できないので…

        Atlassianの代理店の営業(ご存知であれば)やお問い合わせから相談すれば、実現内容に応じて相談にのってもらえるかと思いますのでご相談頂ければと思います。

        もちろん、もし作業が必要となると有償作業になる場合がありますけど、アドオンの紹介ぐらいならプリセールスでしてくれると思います。

      3. 久次米 美奈

        Kengo Ohsakiさん

        ご連絡が大変遅くなってしまい申し訳ありません。

        対処方法について、ご丁寧に詳細まで記載頂きありがとうございます!

        ただ当方の手順が悪いのか未だ動いておりません…。


        (1)Jira Misc Custom Fieldsアドオンを追加する。

        (2)カスタムフィールドでCalculated Text Fieldを作成する。

        (3)上記を編集で開き、説明欄に記載頂いたスクリプトをコピー&ペーストする。

         ※カスタムフィールドの行は下記のように入力。

        コード修正部分
        CustomField customField = customFieldManager.getCustomFieldObjectByName("<選択リスト (カスケード)のフィールド名>");
        ↓
        CustomField customField = customFieldManager.getCustomFieldObjectByName("customfield_10700");

        (4)値を取得できているか確認するために、上記を画面に設定。

         しかし課題表示画面にそれらしき項目も文字列も表示されない。


        業務が多忙化していることもあり、あまり調査に時間が割けていない状態なのですが、時間を見て色々調べてみようと思っております。

        お忙しい中ご回答頂きありがとうございました。

      4. Kengo Ohsaki

        久次米 美奈-san,

        ご確認ありがとうございます。

        申し訳ございません、customfield_10700 の形式の場合だと以下ですかね。

        CustomField customField = customFieldManager.getCustomFieldObject("customfield_10700");

        ややこしいのですが、フィールド名 または フィールドID で指定する形式によって関数が異なります…


      Commentコメントを追加...