ということで、サンプルとして「子チケットの一覧にボタンを追加して、REST API経由で親子関係を外す」ということをやってみました。
REST APIの認証は、APIキーを払い出したものをヘッダにX-Redmine-API-Key
として設定する方法にしています。他にもいろいろ認証方式があるので、用途に応じて使い分けるのが良いかと思います。
View customize の設定内容
Path pattern
チケット画面を対象にします。
/issues/[0-9]+$
Code
Type:JavaScript
として下記を設定します。APIキーは適宜変更してください。
追記@2017-11-12:application/json
で送れていなかったので修正しました。以前の形(デフォルトだとapplication/x-www-form-urlencoded
)だとcustom_fields
のようなネストした構造のデータをうまく送信できませんでした。
$(function() { // REST APIのキー var apiKey = '払い出したAPIキー'; // 子チケット一覧を対象に $('tr.child').each(function() { var target = $(this); // チケットIDを取得 var issueUrl = target.find('td.subject > a').attr('href'); var issueId = issueUrl .substr(issueUrl .lastIndexOf('/') + 1); // ボタンを追加して、ボタン押下時にチケットを更新 var button = $('<input type="button" value="親子関係を外す">'); button.on('click', function() { $.ajax({ type: 'PUT', url: '/issues/' + issueId + '.json', headers: { 'X-Redmine-API-Key': apiKey }, // 更新時はレスポンスのコンテンツが無く // jsonだとエラーとなるのでtextにしておく dataType: 'text', contentType: 'application/json', data: JSON.stringify({ 'issue': { 'parent_issue_id': '' // 親チケットIDをクリア } }) }).done(function(data) { // 成功したらリロード location.reload(); }).fail(function(data) { alert('失敗しました'); }); }); target.append($('<td>').append(button)); }); })
画面イメージ
下記のように子チケット一覧部分にボタンが追加され、ボタン押下で親子が外れます。
REST APIについて
今回はチケットの更新を行いましたが、REST APIでは他にもいろいろできますので、ぜひ下記のドキュメントを参照してみてください。