チケットの入力項目下に注意文を表示するカスタマイズの応用について

76 views
Skip to first unread message

Tachibana Yuduki

unread,
Aug 20, 2021, 2:09:08 AMAug 20
to Redmine Users (japanese)
お世話になっております。
新しいチケット起票画面とチケットへのコメント編集画面において、
入力項目の下に注意文を表示するよう、View Customizeプラグインで表示のカスタマイズをしました。
このカスタマイズはfarend sapportで教えて貰ったもので、その際に「プロジェクト、トラッカー、ステータスのいずれかを変更するとメッセージは消えます」という注意を頂いたのですが、それでは困るので、変更することがある「トラッカー」「ステータス」変更時に再表示をするよう、以下のカスタマイズをしました。

これにあたり、以下の問題が発生しています。
①編集画面では再表示がされるようになりましたが、再表示のロード中に一瞬、同じ注意文が3行表示されます。
②新しいチケット起票画面では再表示がされません。

以下が記載しているカスタマイズとなります。
パスは/issues/[0-9]+$と/issues/new$それぞれ別にカスタマイズを追加しています。

長くなってしまって申し訳ありませんが、問題点を解決できる方法が何かあれば
ご教示頂ければ幸いです。
-----------------------------------ここから------------------------------------------------------
$(function() {
  var project_id = ViewCustomize.context.project.identifier;
  var pid = project_id.substring(0,4);
  //プロジェクト名の頭がunyoで始まるもののみ適用
  if (pid == 'unyo'){
    //入力項目注意文の設定
    var setMessage = function() {
   
   
      //トラッカーが「連絡」「相談」「要望」のときとそれ以外でメッセージをかえる
      switch($('#issue_tracker_id option:selected').text()) {
     
        case "連絡":
          $('#issue_assigned_to_id').parent().append(
            '<br/>',
            '<span style="color:red;">※次にチケットを確認して欲しい人に向けてください。</span>'
          );
          break;
         
        case "相談":
          $('#issue_assigned_to_id').parent().append(
            '<br/>',
            '<span style="color:red;">※次にチケットを確認して欲しい人に向けてください。</span>'
          );
          break;
         
        case "要望":
          $('#issue_assigned_to_id').parent().append(
            '<br/>',
            '<span style="color:red;">※次にチケットを確認して欲しい人に向けてください。</span>'
          );
          break;
       
        default:
          $('#issue_assigned_to_id').parent().append(
            '<br/>',
            '<span style="color:red;">※必ず受付担当を選択してください。</span>'
          );
          break;
         
      };
       
    };
   
    //現時点のもので表示
    setMessage();
   
    //トラッカーが変わったタイミングで切替
    $('#all_attributes').on('change', '#issue_tracker_id', function(e) {
      setMessage();
    });
   
    //ステータスが変わったタイミングで切り替え
    $('#all_attributes').on('change', '#issue_status_id', function(e) {
      setMessage();
    });
   
    // ステータス変更時などにDOMが差し替えられるので
    // フォームの内容が書き変わるたびに表示切替
    var _replaceIssueFormWith = replaceIssueFormWith;
   
    replaceIssueFormWith = function(html){
      _replaceIssueFormWith(html);
      setMessage();
     
    };
  };
});
-----------------------------------ここまで------------------------------------------------------
Message has been deleted

onozaty

unread,
Aug 20, 2021, 8:38:23 AMAug 20
to redmine-...@googlegroups.com
onozatyです。

プロジェクト、トラッカー、ステータスを変更すると、入力フォームが再読み込みされるため、消えてしまいます。
昔のバージョンのView customizeでは、これを回避するためにreplaceIssueFormWithで再度実行するといった方法を
よく取っていたのですが、今のバージョンでは挿入位置を「チケット入力欄の下」とすることで回避できます。
「チケット入力欄の下」とすると、入力フォームが再読み込みされるのと同じタイミングで再度実行されるためです。

トラッカーに応じて入力フォームの値を変える下記サンプルが参考になると思いますので、ご確認いただけますでしょうか。


パスのパターンは空欄で大丈夫です。
挿入位置の「チケット入力欄の下」は、新規チケット作成またはチケット更新画面でしか存在しないため
パスで絞り込む必要がありません。

2021年8月20日(金) 15:12 Tachibana Yuduki <amayo....@gmail.com>:
使用しているのはMyRedmine(RedMica 1.3.0.stable)です。
また、プラグインは以下のものが設定されています。
新しいチケット画面では、
以前相談させて頂いたようにまた何かのプラグインが邪魔しているのでしょうか。
RedMica S3 plugin
RedMica UI extension
Redmine Farend Control Panel plugin
Redmine Ip Filter
Redmine Issue Templates plugin
Redmine Issues Panel plugin
Redmine message customize plugin
My Page Blocks plugin
View Customize plugin
2021年8月20日金曜日 15:09:08 UTC+9 Tachibana Yuduki:

--
このメールは Google グループのグループ「Redmine Users (japanese)」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには redmine-users-...@googlegroups.com にメールを送信してください。
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/redmine-users-ja/c90661ae-8c40-47c4-bd17-42e4c54b9162n%40googlegroups.com にアクセスしてください。


--
Message has been deleted

Tachibana Yuduki

unread,
Aug 23, 2021, 3:11:50 AMAug 23
to Redmine Users (japanese)

onozaty様

ご回答いただきありがとうございます。

挿入位置を「チケット入力欄の下」に変更、スクリプトを以下のように修正して、
試してみましたが、やはりうまくいきません…

①サンプルのように、if文内がswitch文のみになるよう他の部分を削除
⇒トラッカーやステータスを変更するとメッセージが消え、再表示されません。

②replaceIssueFormWith部分のみ削除
⇒トラッカーやステータスを変更すると、メッセージが2行重複して一瞬だけ表示されたあと、消えてしまいます。
カスタマイズが実行されたあとに、入力フォームが再読み込みされて上書きされてしまっているように感じます…。

View customizeのバージョンが古いのでしょうか…。プラグイン一覧には「2.6.0」と書かれていました。



2021年8月20日金曜日 21:38:23 UTC+9 ono...@gmail.com:

onozaty

unread,
Aug 23, 2021, 7:22:53 AMAug 23
to redmine-...@googlegroups.com
バージョン自体は問題ないと思います。

お手数ですが、
(1) コード全体
(2) パスや挿入位置の設定
をいただけないでしょうか。

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


2021年8月23日(月) 16:11 Tachibana Yuduki <amayo....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/redmine-users-ja/06226b61-9416-4d7f-99d8-1c5c8fe8f6b1n%40googlegroups.com にアクセスしてください。


--

Tachibana Yuduki

unread,
Aug 23, 2021, 8:33:49 PMAug 23
to Redmine Users (japanese)

パスのパターン:/issues/new$、/issues/[0-9]+$
(新規と編集ではメッセージの文言が異なるだけでスクリプト自体はほぼ同じです)
挿入位置:チケット入力欄の下
種別:JavaScript

1◆このスクリプトの場合、トラッカーやステータスを変更するとメッセージが消え、再表示されない


$(function() {
  var project_id = ViewCustomize.context.project.identifier;
  var pid = project_id.substring(0,4);

  //プロジェクト名の頭がunyoで始まるもののみ適用
  if (pid == 'unyo'){

    //トラッカーが「連絡」「相談」「要望」のときとそれ以外で
    //メッセージをかえる


    switch($('#issue_tracker_id option:selected').text()) {
      case "連絡":

        //担当者


        $('#issue_assigned_to_id').parent().append(
        '<br/>',
        '<span style="color:red;">※次にチケットを確認して欲しい人に向けてください。</span>'
        );
        break;
      case "相談":

        //担当者


        $('#issue_assigned_to_id').parent().append(
        '<br/>',
        '<span style="color:red;">次にチケットを確認して欲しい人に向けてください。</span>'
        );
        break;
      case "要望

        //担当者


        $('#issue_assigned_to_id').parent().append(
        '<br/>',
        '<span style="color:red;">次にチケットを確認して欲しい人に向けてください。</span>'
        );
        break;
      default:

        //担当者


        $('#issue_assigned_to_id').parent().append(
        '<br/>',
        '<span style="color:red;">※必ず受付担当を選択してください。</span>'
        );
        break;

    }; //switch

    //担当者氏名
    $('#issue_custom_field_values_1').parent().append(
    '<br/>',
    '<span style="color:red;">※チケット起票者の所属、氏名を入力してください</span>'
    );
  }; //if
});  //function


2◆このスクリプトの場合、トラッカーやステータスを変更すると、メッセージが2行重複して一瞬だけ表示されたあと消えて、再表示されない


$(function() {
  var project_id = ViewCustomize.context.project.identifier;
  var pid = project_id.substring(0,4);

  //プロジェクト名の頭がunyoで始まるもののみ適用
  if (pid == 'unyo'){

    //入力項目注意文の設定
    var setMessage = function() {   
      //トラッカーが「連絡」「相談」「要望」のときとそれ以外で

      //メッセージをかえる


      switch($('#issue_tracker_id option:selected').text()) {
        case "連絡":

          //担当者


          $('#issue_assigned_to_id').parent().append(
          '<br/>',
          '<span style="color:red;">※次にチケットを確認して欲しい人に向けてください。</span>'
          );
          break;
        case "相談":

          //担当者


          $('#issue_assigned_to_id').parent().append(
          '<br/>',
          '<span style="color:red;">次にチケットを確認して欲しい人に向けてください。</span>'
          );
          break;
        case "要望":

          //担当者


          $('#issue_assigned_to_id').parent().append(
          '<br/>',
          '<span style="color:red;">次にチケットを確認して欲しい人に向けてください。</span>'
          );
          break;
        default:

          //担当者


          $('#issue_assigned_to_id').parent().append(
          '<br/>',
          '<span style="color:red;">※必ず受付担当を選択してください。</span>'
          );
          break;

      }; //switch

      //担当者氏名
      $('#issue_custom_field_values_1').parent().append(
      '<br/>',
      '<span style="color:red;">※チケット起票者の所属、氏名を入力してください</span>'
      );
    };  //var


   
    //現時点のもので表示
    setMessage();
   
    //トラッカーが変わったタイミングで切替
    $('#all_attributes').on('change', '#issue_tracker_id', function(e) {
      setMessage();

    //編集画面ではステータスが変わったタイミングでも切替
    //$('#all_attributes').on('change', '#issue_status_id', function(e) {
    //  setMessage();
    });
  }; //if
});  //function

2021年8月23日月曜日 20:22:53 UTC+9 ono...@gmail.com:

onozaty

unread,
Aug 24, 2021, 11:23:21 AMAug 24
to redmine-...@googlegroups.com
情報ありがとうございます。

1つ目のスクリプトですが、パスパターンを .* として、新規と編集で同じスクリプトに
することはできますでしょうか。
挿入位置:チケット入力欄の下 の場合、トラッカー切り替え時の再読み込み時は
現在表示している画面でのパスと異なるリクエストになるため、今指定の方法だと
切り替え時にスクリプトが読み込まれません。
.* とすることで、すべてのパスに一致することになり、うまく動くようになると
思います。

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

2021年8月24日(火) 9:33 Tachibana Yuduki <amayo....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/redmine-users-ja/7c02ddda-29e4-43f6-b22a-0f0ef6f6108bn%40googlegroups.com にアクセスしてください。


--

Tachibana Yuduki

unread,
Aug 25, 2021, 12:53:22 AMAug 25
to Redmine Users (japanese)



ご回答ありがとうございます。
新規か編集かはステータスでも判別ができるので、ifかcaseで分ければいいとして、パスパターンを.*にしたところ、切り替え時に再表示されるようになりました。
ただ、同じ文章が2行重複して表示されてしまうことがあります。(以下のような感じです)

担当者 受付担当
    ※必ず受付担当を選択してください。
    ※必ず受付担当を選択してください。

何度かトラッカーを変更するなかでちゃんと表示されるときもあるので、これについては何かで防止できるものではないですよね…。

2021年8月25日水曜日 0:23:21 UTC+9 ono...@gmail.com:

onozaty

unread,
Aug 25, 2021, 10:11:45 AMAug 25
to redmine-...@googlegroups.com
onozatyです。

再読み込み後1回しか実行されないスクリプトになっているので、二重で表示される理由が
思いついておりません。
手元で試した限りでは問題を再現させることはできませんでした。

何か別のスクリプトが重複して動いているということは無いでしょうか。
あと、逆にまったく表示されないこともありますでしょうか。


2021年8月25日(水) 13:53 Tachibana Yuduki <amayo....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/redmine-users-ja/c3332074-c7e3-48cc-b13f-7026a41f09cdn%40googlegroups.com にアクセスしてください。


--

Tachibana Yuduki

unread,
Aug 26, 2021, 1:47:58 AMAug 26
to Redmine Users (japanese)

onozaty様

他に設定してあるスクリプトを一度全て無効にして試してみましたが、
それでもやはり二重で表示されるときがあります…。
また、逆にまったく表示されないということはなく、表示は必ずされております。

普段ブラウザはInternetExplorerを使用しているので、ブラウザをMicrosoftEdgeに変えて確認してみましたが、
それでも同じような動きをしてしまいます。

実際のスクリプトはもう少しcaseの数が多かったり
case内にもif文を書いていたりといくつもネストしているので、
検証用に、条件分岐のない簡易的なもので試してみましたが、それでもダメでした…。

二重で表示されるタイミングに決まりもなさそうなので、
原因を特定するのは厳しいかもしれません。

実運用までにはまだ時間があるので、もう少し検討してみようと思います。
ここまで色々とありがとうございました。

2021年8月25日水曜日 23:11:45 UTC+9 ono...@gmail.com:

onozaty

unread,
Aug 26, 2021, 9:18:18 AMAug 26
to redmine-...@googlegroups.com
onozatyです。

2重に実行される理由がわかりませんが、下記のようにすることで、2重に表示されるのを回避できるかもしれません。

$('#issue_assigned_to_id').siblings('span').remove();
$('#issue_assigned_to_id').parent().append(
    '<span style="color:red;"><br>※次にチケットを確認して欲しい人に向けてください。</span>');

追加する際に既にメッセージがあったら消してから追加します。
一つの要素にしたかったので、brもspanの中に入れています。

お試しいただけますでしょうか。

2021年8月26日(木) 14:48 Tachibana Yuduki <amayo....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/redmine-users-ja/64b8a84c-823c-45e0-b3a0-3ce9db56ba77n%40googlegroups.com にアクセスしてください。


--
Message has been deleted
Message has been deleted

Tachibana Yuduki

unread,
Aug 27, 2021, 1:46:38 AMAug 27
to Redmine Users (japanese)

onozaty様

ありがとうございます。
教えて頂いたように修正したところ、2重に表示されるのを回避することはできました。
しかし今度は、メッセージは表示されているのに入力欄が消えてしまう現象が起こりました…。

手入力形式の入力項目は入力欄がちゃんと表示されているのですが、
セレクトボックス形式の入力項目は入力欄も消されてしまうようです。
(「担当者」という項目名ラベルは表示されています)

前に別件で、RedMica UI extension のプラグインでセレクトボックスをカスタマイズしていると
教えて頂きましたが、今回のremoveにもこのプラグインが関係してしまっているのでしょうか…。

2021年8月26日木曜日 22:18:18 UTC+9 ono...@gmail.com:

onozaty

unread,
Aug 27, 2021, 9:04:16 PMAug 27
to redmine-...@googlegroups.com
UI Extensionが影響していました。
二重に表示される件もUI Extensionの組み合わせによるものでした。

下記のような形で、削除するものからUI Extensionで生成したものを除外することで回避できましたので、お試しいただけますでしょうか。

$('#issue_assigned_to_id').siblings('span:not(.select2)').remove();

$('#issue_assigned_to_id').parent().append(
    '<span style="color:red;"><br>※次にチケットを確認して欲しい人に向けてください。</span>');


2021年8月27日(金) 14:46 Tachibana Yuduki <amayo....@gmail.com>:
このディスカッションをウェブ上で閲覧するには https://groups.google.com/d/msgid/redmine-users-ja/cb220189-32da-489b-abb7-e7a16bbc6dd9n%40googlegroups.com にアクセスしてください。


--

Tachibana Yuduki

unread,
Aug 29, 2021, 10:57:24 PMAug 29
to Redmine Users (japanese)


onozaty様

ご回答ありがとうございます。
教えて頂いたとおりに修正したところ、入力欄は表示されメッセージの二重表示はされていない、
理想通りの動きをするようになりました。
とても助かりました。本当にありがとうございました。
2021年8月28日土曜日 10:04:16 UTC+9 ono...@gmail.com:
Reply all
Reply to author
Forward
0 new messages