Ticket Nummer
Ticket Nummer
Hallo,
ich möchte einen eigenen NumberGenerator machen .... die Wunschzusammenstellung ist folgende: "Ticket " JahrMonatTag"statischer String"Counter (Beispiel Ticket 20110803ABC1)
Ich habe bereits einen Entwurf des ganzen gemacht ... Dabei habe ich aber das Problem, wenn Nachfragen zu einem Ticket ankommen, dass diese nicht zugeorndet werden. Daraufhin habe ich versucht den "Suchalgorithmus" anzupassen, leider ohne Erfolg. Ich bin dann ebenfalls auf das Problem der SystemID gestoßen, welche scheinbar unbedingt mit einfließen muss .. oder?
Ich bedanke im voraus für eure Hilfe.
ich möchte einen eigenen NumberGenerator machen .... die Wunschzusammenstellung ist folgende: "Ticket " JahrMonatTag"statischer String"Counter (Beispiel Ticket 20110803ABC1)
Ich habe bereits einen Entwurf des ganzen gemacht ... Dabei habe ich aber das Problem, wenn Nachfragen zu einem Ticket ankommen, dass diese nicht zugeorndet werden. Daraufhin habe ich versucht den "Suchalgorithmus" anzupassen, leider ohne Erfolg. Ich bin dann ebenfalls auf das Problem der SystemID gestoßen, welche scheinbar unbedingt mit einfließen muss .. oder?
Ich bedanke im voraus für eure Hilfe.
-
- Znuny ninja
- Posts: 1029
- Joined: 13 Apr 2009, 12:26
- Znuny Version: 6.0.13
- Real Name: Wolfgang Fürtbauer
- Company: PBS Logitek GmbH
- Location: Pinsdorf
Re: Ticket Nummer
1) SystemID: das wird helfen 
2) baue in deinen neuen Generator den Suchlogaritmus des bisher verwendeten ein, dann funktioniert das auch

2) baue in deinen neuen Generator den Suchlogaritmus des bisher verwendeten ein, dann funktioniert das auch
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
Re: Ticket Nummer
Hallo und danke für die schnelle Antwort.Wolfgangf wrote:1) SystemID: das wird helfen
Der Wunsch ist auf die SystemID komplett zu verzichten. Leider werden auch keinen Buchstaben als SystemID zugelassen, sonst hätte ich den statischen String als SystemID verwendet.
Eine weitere Idee (die mir auch ausreichen würde und wahrscheinlich einfacher umzusetzen ist) wäre, die Länge des Tickets nur zu verkleinern .. zur Zeit ist der Aufbau "normal" (Ticket#2011080310000486)
wenn wir hier die auffühlenden "0"'len bei Bedarf weglassen könnten wäre das auch okay. -> Ticket#2011080310486
-
- Znuny ninja
- Posts: 1029
- Joined: 13 Apr 2009, 12:26
- Znuny Version: 6.0.13
- Real Name: Wolfgang Fürtbauer
- Company: PBS Logitek GmbH
- Location: Pinsdorf
Re: Ticket Nummer
gehen wir doch nochmal einen Schritt zurück:
post mal Deinen neuen Numbergenerator
post mal Deinen neuen Numbergenerator
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
Re: Ticket Nummer
Hallo,
ich habe mir als Vorlage einen bestehenden Generator genommen und nur den Teil zur Erstellung der Ticketnummer geändert.
ich habe mir als Vorlage einen bestehenden Generator genommen und nur den Teil zur Erstellung der Ticketnummer geändert.
Code: Select all
# --
# Ticket/Number/Date.pm - a date ticket number generator
# Copyright (C) 2001-2009 xxx, http://otrs.org/
# --
# $Id: Date.pm,v 1.31 2009/05/15 10:12:02 martin 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.
# --
# Note:
# available objects are: ConfigObject, LogObject and DBObject
#
# Generates ticket numbers like yyyymmddss.... (e. g. 200206231010138)
# --
package Kernel::System::Ticket::Number::ABC;
use strict;
use warnings;
use vars qw($VERSION);
$VERSION = qw($Revision: 1.31 $) [1];
sub TicketCreateNumber {
my ( $Self, $JumpCounter ) = @_;
if ( !$JumpCounter ) {
$JumpCounter = 0;
}
# get needed config options
my $CounterLog = $Self->{ConfigObject}->Get('Ticket::CounterLog');
my $SystemID = $Self->{ConfigObject}->Get('SystemID');
# get current time
my ( $Sec, $Min, $Hour, $Day, $Month, $Year ) = $Self->{TimeObject}->SystemTime2Date(
SystemTime => $Self->{TimeObject}->SystemTime(),
);
# read count
my $Count = 0;
if ( -f $CounterLog ) {
my $ContentSCALARRef = $Self->{MainObject}->FileRead(
Location => $CounterLog,
);
if ( $ContentSCALARRef && ${$ContentSCALARRef} ) {
($Count) = split( /;/, ${$ContentSCALARRef} );
# just debug
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
my $Write = $Self->{MainObject}->FileWrite(
Location => $CounterLog,
Content => \$Count,
);
if ($Write) {
if ( $Self->{Debug} > 0 ) {
$Self->{LogObject}->Log(
Priority => 'debug',
Message => "Write counter: $Count",
);
}
}
# create new ticket number
$Count = sprintf ('%04d', $Count);
my $Tn = $Year . $Month . $Day . "ABC" . $Count;
# Check ticket number. If exists generate new one!
if ( $Self->TicketCheckNumber( Tn => $Tn ) ) {
$Self->{LoopProtectionCounter}++;
if ( $Self->{LoopProtectionCounter} >= 16000 ) {
# loop protection
$Self->{LogObject}->Log(
Priority => 'error',
Message => "CounterLoopProtection is now $Self->{LoopProtectionCounter}!"
. " Stopped TicketCreateNumber()!",
);
return;
}
# create new ticket number again
$Self->{LogObject}->Log(
Priority => 'notice',
Message => "Tn ($Tn) exists! Creating a new one.",
);
$Tn = $Self->TicketCreateNumber( $Self->{LoopProtectionCounter} );
}
return $Tn;
}
sub GetTNByString {
my ( $Self, $String ) = @_;
if ( !$String ) {
return;
}
# get needed config options
my $CheckSystemID = $Self->{ConfigObject}->Get('Ticket::NumberGenerator::CheckSystemID');
my $SystemID = '';
if ($CheckSystemID) {
$SystemID = $Self->{ConfigObject}->Get('SystemID');
}
my $TicketHook = $Self->{ConfigObject}->Get('Ticket::Hook');
my $TicketHookDivider = $Self->{ConfigObject}->Get('Ticket::HookDivider');
# check current setting
if ( $String =~ /\Q$TicketHook$TicketHookDivider\E(\d{4,10}$SystemID\d{1,40})/i ) {
return $1;
}
# check default setting
if ( $String =~ /\Q$TicketHook\E:\s{0,2}(\d{4,10}$SystemID\d{1,40})/i ) {
return $1;
}
return;
}
1;
-
- Znuny ninja
- Posts: 1029
- Joined: 13 Apr 2009, 12:26
- Znuny Version: 6.0.13
- Real Name: Wolfgang Fürtbauer
- Company: PBS Logitek GmbH
- Location: Pinsdorf
Re: Ticket Nummer
also soweit ich das verstehe ...
mit der Funktion 'sub TicketCreateNumber' möchtest Du eine Ticketnummer im Format my $Tn = $Year . $Month . $Day . "ABC" . $Count; erstellen
Nun muss Du auch in der Funktion sub GetTNByString sicherstellen, dass das gleiche Format verwendet wird ,sprich die Regex im untenstehenden Absatz anpassen
- und die sieht jetzt noch anders aus: der such noch im Format
Dein Wunschformat ist "Ticket JJJJMMTTABCnnnn" - also
1) Ticket::Hook anpassen (Sysconfig) auf "Ticket" statt "Ticket#"
2) regexp im obigen codeschnippsel ändern
ungetesteterweise könne die folgende Regexp helfen
mit der Funktion 'sub TicketCreateNumber' möchtest Du eine Ticketnummer im Format my $Tn = $Year . $Month . $Day . "ABC" . $Count; erstellen
Nun muss Du auch in der Funktion sub GetTNByString sicherstellen, dass das gleiche Format verwendet wird ,sprich die Regex im untenstehenden Absatz anpassen
Code: Select all
# check current setting
if ( $String =~ /\Q$TicketHook$TicketHookDivider\E(\d{4,10}$SystemID\d{1,40})/i ) {
return $1;
}
# check default setting
if ( $String =~ /\Q$TicketHook\E:\s{0,2}(\d{4,10}$SystemID\d{1,40})/i ) {
return $1;
}
Code: Select all
"Ticket# SystemidZähler" Beispiel: Ticket# 100000001
1) Ticket::Hook anpassen (Sysconfig) auf "Ticket" statt "Ticket#"
2) regexp im obigen codeschnippsel ändern
ungetesteterweise könne die folgende Regexp helfen
Code: Select all
$String =~ /\Q$TicketHook$TicketHookDivider\E(\d{8}ABC\d{4})/i
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
Re: Ticket Nummer
Hallo,
danke für die schnelle Antwort.
Ich hatte an der Stelle schon mit Änderungen herum gespielt, Daher habe ich den Originalcode gepostet.
Ich werde die Änderung mal probieren .....
EIne Frage noch ... kann ich den TicketHook bei der zweiten regex weglassen, da die bestehenden Tickets noch den "alten" TicketHook haben?
danke für die schnelle Antwort.
Ich hatte an der Stelle schon mit Änderungen herum gespielt, Daher habe ich den Originalcode gepostet.
Ich werde die Änderung mal probieren .....
EIne Frage noch ... kann ich den TicketHook bei der zweiten regex weglassen, da die bestehenden Tickets noch den "alten" TicketHook haben?
-
- Znuny ninja
- Posts: 1029
- Joined: 13 Apr 2009, 12:26
- Znuny Version: 6.0.13
- Real Name: Wolfgang Fürtbauer
- Company: PBS Logitek GmbH
- Location: Pinsdorf
Re: Ticket Nummer
weglassen wird nicht das gewünschte Ergebnis bringen - du musst meiner Meinung nach den zweiten Regexp so aufbauen wie die alte Ticketnummer aussiehtvTv4d3r wrote:EIne Frage noch ... kann ich den TicketHook bei der zweiten regex weglassen, da die bestehenden Tickets noch den "alten" TicketHook haben?
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
Re: Ticket Nummer
okay, mit weglassen habe ich mich falsch ausgedrückt. Ich müsste die Variable von Tickethook durch den statischen String "TIcket#" ersetzten?
-
- Znuny ninja
- Posts: 1029
- Joined: 13 Apr 2009, 12:26
- Znuny Version: 6.0.13
- Real Name: Wolfgang Fürtbauer
- Company: PBS Logitek GmbH
- Location: Pinsdorf
Re: Ticket Nummer
einfach die Konstante statt der Variablen $TicketHook reinschreiben
Produktiv:
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting
OTRS 6.0.13/ ITSM 6.0.13
OS: SUSE Linux (SLES 12, Leap), MySql 5.5.x, 5.6.x
Windows 2012 AD Integration (agents and customers), Nagios integration (incidents, CMDB), Survey, TimeAccounting