Wenn Sie Ihr eigenes Format in der Ticketnummer nutzen wolen, erstellen Sie Ihr eigenes Ticketnummer-Modul.
Die Module befinden sich unter "Kernel/System/Ticket/Number/*.pm". Schauen Sie in der Konfigurationsdatei unter "Ticket number format" nach für die Standard-Module.
Ein Beispiel eines einfachen Ticketnummer-Moduls, speichern Sie es unter Kernel/System/Ticket/Number/Simple.pm. Sie benötigen nur zwei Funktionen, CreateTicketNr() and GetTNByString():
# --
# Ticket/Number/Simple.pm - a ticket number auto increment generator
# Copyright (C) 2003 Hans Mueller mail@example.com
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
# --
# Note:
# available objects are: ConfigObject, LogObject and DBObject
#
# Generates auto increment ticket numbers like ss.... (e. g. 1010138, 1010139, ...)
# --
package Kernel::System::Ticket::Number::Simple;
use strict;
use vars qw($VERSION);
$VERSION = '$Revision: 1.5 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
sub CreateTicketNr {
my $Self = shift;
my $JumpCounter = shift || 0;
# get needed config options
my $CounterLog = $Self->{ConfigObject}->Get('CounterLog');
my $SystemID = $Self->{ConfigObject}->Get('SystemID');
my $MinSize = 5;
my $Count = 0;
if (-f $CounterLog) {
open (COUNTER, "< $CounterLog") || die "Can't open $CounterLog: $!";
my $Line = <COUNTER>;
($Count) = split(/;/, $Line);
close (COUNTER);
if ($Self->{Debug} > 0) {
$Self->{LogObject}->Log(
Priority => 'debug',
Message => "Read counter from $CounterLog: $Count",
);
}
}
# count auto increment ($Count++)
$Count++;
$Count = $Count + $JumpCounter;
# write new count
if (open (COUNTER, "> $CounterLog")) {
flock (COUNTER, 2) || warn "Can't set file lock ($CounterLog): $!";
print COUNTER $Count . "\n";
close (COUNTER);
if ($Self->{Debug} > 0) {
$Self->{LogObject}->Log(
Priority => 'debug',
Message => "Write counter: $Count",
);
}
}
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Can't write $CounterLog: $!",
);
die "Can't write $CounterLog: $!";
}
# pad ticket number with leading '0' to length $MinSize (config option)
while (length($Count) < $MinSize) {
$Count = "0".$Count;
}
# create new ticket number
my $Tn = $SystemID . $Count;
# Check ticket number. If exists generate new one!
if ($Self->CheckTicketNr(Tn=>$Tn)) {
$Self->{LoopProtectionCounter}++;
if ($Self->{LoopProtectionCounter} >= 1000) {
# loop protection
$Self->{LogObject}->Log(
Priority => 'error',
Message => "CounterLoopProtection is now $Self->{LoopProtectionCounter}!".
" Stoped CreateTicketNr()!",
);
return;
}
# create new ticket number again
$Self->{LogObject}->Log(
Priority => 'notice',
Message => "Tn ($Tn) exists! Creating new one.",
);
$Tn = $Self->CreateTicketNr($Self->{LoopProtectionCounter});
}
return $Tn;
}
# --
sub GetTNByString {
my $Self = shift;
my $String = shift || return;
# get needed config options
my $SystemID = $Self->{ConfigObject}->Get('SystemID');
my $TicketHook = $Self->{ConfigObject}->Get('TicketHook');
my $TicketDivider = $Self->{ConfigObject}->Get('TicketDivider') || ': ';
my $MinSize = 5;
my $MaxSize = $MinSize + 5;
# check ticket number
if ($String =~ /$TicketHook:+.{0,1}($SystemID\d{$MinSize,$MaxSize})\-FW/i) {
return $1;
}
else {
if ($String =~ /$TicketHook:+.{0,1}($SystemID\d{$MinSize,$MaxSize})/i) {
return $1;
}
else {
return;
}
}
}
# --
1; |
$Self->{TicketNumberGenerator} = 'Kernel::System::Ticket::Number::Simple';
|