Hallo,
ich verwende Perl im OTRS-Framework um ein neues Modul "Kostenstellen" zu schreiben.
Ich bin recht neu in Perl und wundere mich nun, warum mein Parameter nicht an meine Subroutinen übergeben werden kann.
Hier der Code des Moduls:
Von "außen" rufe ich die Methode getKostenstelleDropdown auf. Diese ruft anschließend die Methode checkHatFirmaKostenstellen auf und je nach Rückgabe erhalte ich einen anderen HTML-String.
Hier der Code zum Aufruf im externen Modul:
Das Ergebnis ist, dass die Parameterprüfung der Methode checkHatFirmaKostenstellen immer FALSE zurück gibt - so als ob ich den Parameter gar nicht übergeben hätte.
Kommentiere ich die Parameterprüfung dort aus, so erhalte ich die Fehlermeldung
Was mache ich falsch? Warum fällt der Parameter durch die Prüfung?
Ich bin für alle Vorschläge und Denkansätze dankbar!
Gruß
Theo
ich verwende Perl im OTRS-Framework um ein neues Modul "Kostenstellen" zu schreiben.
Ich bin recht neu in Perl und wundere mich nun, warum mein Parameter nicht an meine Subroutinen übergeben werden kann.
Hier der Code des Moduls:
Code:
#!/usr/bin/perl -w package Kostenstellen; use strict; use warnings; use Kernel::System::Cache; use Kernel::System::DB; use Kernel::System::Log; sub new() { #NOCH NICHT GEPRÜFT my $Self=shift; my $ref={}; bless($ref, $Self); #Parameter abrufen my %Param = @_; foreach (keys %Param) { $ref->{$_} = $Param{$_}; } # check needed Objects foreach (qw(ParamObject DBObject ConfigObject MainObject)) { if (!$ref->{$_}) { $ref->{LayoutObject}->FatalError(Message => "Got no $_!"); } } $ref->{Config} = $ref->{ConfigObject}->Get("Ticket::Frontend::$ref->{Action}"); $ref->{DBObject} = Kernel::System::DB->new( LogObject => $Param{LogObject}, ConfigObject => $Param{ConfigObject}, MainObject => $Param{MainObject}, ); # create cache object if ($ref->{CustomerUserMap}->{'CacheTTL'}) { $ref->{CacheObject} = Kernel::System::Cache->new(%Param); } # create new db connect if DSN is given if ($ref->{CustomerUserMap}->{Params}->{DSN}) { $ref->{DBObject} = Kernel::System::DB->new( LogObject => $Param{LogObject}, ConfigObject => $Param{ConfigObject}, MainObject => $Param{MainObject}, DatabaseDSN => $Self->{CustomerUserMap}->{Params}->{DSN}, DatabaseUser => $Self->{CustomerUserMap}->{Params}->{User}, DatabasePw => $Self->{CustomerUserMap}->{Params}->{Password}, Type => $Self->{CustomerUserMap}->{Params}->{Type} || '', ) || die ('Can\'t connect to database!'); # remember that we have the DBObject not from parent call $ref->{NotParentDBObject} = 1; } return $ref; } sub checkHatFirmaKostenstellen { #NOCH NICHT GEPRÜFT my ( $Self, %Param ) = @_; my %Kostenstellen = (); # auf benötigte Parameter prüfen if (!$Param{"CompanyID"}) { #$Self->{LogObject}->Log(Priority => 'error', Message => "Need CompanyID!"); return -1; } #SQL-String vorbereiten my $SQL = "SELECT COUNT(kennung)"; $SQL .= " FROM customer_kostenstellen"; $SQL .= " WHERE customer_id = " . $Param{CompanyID}; # Abfrage starten $Self->{DBObject}->Prepare(SQL => $SQL); while (my @Row = $Self->{DBObject}->FetchrowArray()) { if (!$Kostenstellen{$Row[0]}) { foreach (1..8) { if ($Row[$_]) { $Kostenstellen{$Row[0]} .= $Row[$_].' '; } } $Kostenstellen{$Row[0]} =~ s/^(.*)\s(.+?\@.+?\..+?)(\s|)$/"$1" <$2>/; } } #Prüfung my $Laenge = %Kostenstellen; if ($Laenge > 0) { return 1; } else { return 0; } } sub getKostenstelleDropdown { #NOCH NICHT GEPRÜFT my ( $Self, %Param ) = @_; # auf benötigte Parameter prüfen if (!$Param{CompanyID}) { $Self->{LogObject}->Log(Priority => 'error', Message => "Need CompanyID!"); return "FEHLER: Parameter CompanyID fehlt!"; } my $HTML = "keine Kostenstellen hinterlegt"; my $FirmaID = $Param{CompanyID}; my $KSVorhanden = &checkHatFirmaKostenstellen(CompanyID => $FirmaID); if ($KSVorhanden == 1) { $HTML = "Es gibt welche"; } elsif ($KSVorhanden == -1) { $HTML = "FEHLER"; } else { $HTML = "Es gibt keine"; } return $HTML; } 1;
Hier der Code zum Aufruf im externen Modul:
Code:
$Param{"KostenstellenDD"} = $Self->{KostenstellenObject}->getKostenstelleDropdown(CompanyID => '111175',);
Kommentiere ich die Parameterprüfung dort aus, so erhalte ich die Fehlermeldung
Can't use string ("CompanyID") as a HASH ref while "strict refs" in use at Kostenstellen.pm line 93
Ich bin für alle Vorschläge und Denkansätze dankbar!
Gruß
Theo
Comment