PR

[OTRS] チケットの削除

こちらでも触れたが、OTRS にはどうやら「削除」というものがないらしい。とはいえ、spam (迷惑メール)も来るだろうし、削除は必要だろう。なにか方法はないものだろうか。

OTRS のマニュアルによるとJunk キューはそういったチケットを入れておくものらしい。けれど、そのキューに移動して放置しても消えない。

OTRS が日本語対応してくれたとはいえ、日本語の情報が少ないのが残念。ということで、わからないながらも実験をしてみる。ターゲットは「OTRS のデフォルトメッセージ」。

キューを移動

既に記述したように、キューを移動しても、デフォルト運用では何も起きなかった。

定期実行処理

「管理」に、定期実行処理というものがあって、これを使いこなすともしかしたら簡単に処理できるのかもしれない。

例えば「キューJunkのステータスを削除にする」という設定にしたらできそうな気もする。

ソースを変更

でも、何となくそれはやる気が出なかったのでさらに情報を探す。すると、同様の質問がいくつか出ていることに気がつく。そこでの解決策はソースコードの修正だ。

ソースコードの修正というと大げさに見えるが、詳しく調べるとどうやらそうでもないらしい。カスタマイズの意味合いが強いらしく、既にコードも用意されているから、適用するだけのようだ。なんとなくハードルが下がったようで一安心。

ターゲットファイルは「/opt/otrs/Kernel/Config/GenericAgent.pm」

スポンサードリンク

デフォルトの状態


# --
# Kernel/Config/GenericAgent.pm - config file of generic agent
# Copyright (C) 2001-2010 OTRS AG, http://otrs.org/
# --
# $Id: GenericAgent.pm.dist,v 1.14 2010/12/03 09:58:00 bes Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
package Kernel::Config::GenericAgent;

use strict;
use warnings;

use vars qw($VERSION @ISA @EXPORT %Jobs);
require Exporter;
@ISA     = qw(Exporter);
@EXPORT  = qw(%Jobs);
$VERSION = qw($Revision: 1.14 $)[1];

# -----------------------------------------------------------------------
# config options
# -----------------------------------------------------------------------
%Jobs = (

 # [name of job] -> send escalation notifications
#   'send escalation notifications' => {
#       Escalation => 1,
#       # new ticket properties
#       New => {
#           Module => 'Kernel::System::GenericAgent::NotifyAgentGroupOfCustomQueue',
#       },
#   },
 # insert your jobs (see Kernel/Config/GenericAgent.pm.examples)

);
# -----------------------------------------------------------------------
# end of config options
# -----------------------------------------------------------------------
1;


上記にもあるように 「insert your jobs (see Kernel/Config/GenericAgent.pm.examples) 」ということだ。また、デフォルトの状態はGenericAgent.pm.dist と同様だと思われる。

ネットで公開されていたコードの適用

ということで、insert your jobs の下に以下を追加する。

'delete' => {
 # get all tickets with this properties
 Queue => 'delete',
 States => ['open','new','closed successful'],
 Locks => ['unlock'],
 # new ticket properties (no option is required, use just the options
 # which should be changed!)
 New => {
 # DELETE!
 Delete => 1,
 },
 },


しかし、うまくいかないように思えた。そこで、素直にGenericAgent.pm.examples を見ると、上記と同様のコードがあったが、少し異なっているようだ。

GenericAgent.pm.examples のコードを適用

# --
 # [name of job] -> close and delete all tickets in queue delete
 # --
 'delete' => {
 # get all tickets with these properties
 Queue => 'delete',
 States => ['new', 'open'],
 Locks => ['unlock'],
 # tickets older then 60 minutes
 TicketCreateTimeOlderMinutes => 60,
 # new ticket properties (no option is required,
 # use just the options which should be changed!)
 New => {
 # DELETE!
 Delete => 1,
 },
 },


で、コードからみると”60Min” ということだから1時間くらい放置したらいいのかな。

・・・しかし、消されなかった。うーむ。

Queue => ‘delete’ となっているから、「delete」というキューが必要なのだろうか。つくってみる。

・・・しかし、消されなかった。

よくよく考えてみると、削除ターゲットのデフォルトメッセージは、リストから消すために「完了(成功)」の処理をしている。ところが、ソースでは States => [‘new’, ‘open’] となっている。ネットで公開されていたコードからわかるように、「完了(成功)」は「’closed successful’」だから、対象にならないのかもしれない。

そこで、適当なメッセージ(ステータスが新規のもの)を、キュー「delete」に移動して放置する。

※ステータスが新規(new)で完了(closed successful)になっていないから一覧には表示されっぱなし

消えた。delete ニューに移動したターゲットのデフォルトメッセージ(ステータス:closed successful)は消えなかったが、適当なメッセージ(ステータス:new)は消えた。

チケット一覧からも消えている。

ということは、(完了の処理をしてしまった)デフォルトのメッセージを消したい場合はコードを「States => [‘open’,’new’,’closed successful’],」にすればよさそう。また、キューを作るのではなく既存のキューに処理を適用するにはdelete の部分を変更すればよさそう。

全くSQL を書かずにできたのは素晴らしい。

ステータス一覧

ここまで読んでいるとステータス(英語)一覧が欲しくなる。手っ取り早くウェブインタフェイスのソースを読むが数値なので参考にならない。マニュアルのP70 あたりを読むと、ステータス管理が記載されている。

管理>チケット設定>状態 で一覧を見ることができるようだ。

  • closed successful     完了(成功)
  • closed unsuccessful     完了(不成功)
  • merged     結合済
  • new     新規
  • open     対応中
  • pending auto close+     保留 (自動)
  • pending auto close-     保留 (自動)
  • pending reminder     保留 (期限付)
  • removed     削除

これを参考にソースを改変すると思い通りの結果が得られる様になりそう。

参考ソース


# --
 # [name of job] -> close and delete all tickets in queue delete
 # --
 'delete' => {
 # get all tickets with these properties
 Queue => 'delete',
 States => ['new', 'open', 'closed successful', 'closed unsuccessful', 'merged'],
 Locks => ['lock', 'unlock'],
 # tickets older then 60 minutes
 TicketCreateTimeOlderMinutes => 60,
 # new ticket properties (no option is required,
 # use just the options which should be changed!)
 New => {
 # DELETE!
 Delete => 1,
 },
 },


※必要かどうか知らないが、コードを変更したあとはOTRS を再起動して経過を見た

# 親子定義がされているものはどうなるのだろうか??→きちんと処理してくれたみたい

参考文献

  • R: [otrs] Ticket Status “Removed”
  • [otrs] Delete ticket

コメント